1       SUBROUTINE ZROTG(CA,CB,C,S)
 2 *     .. Scalar Arguments ..
 3       DOUBLE COMPLEX CA,CB,S
 4       DOUBLE PRECISION C
 5 *     ..
 6 *
 7 *  Purpose
 8 *  =======
 9 *
10 *     ZROTG determines a double complex Givens rotation.
11 *
12 *  =====================================================================
13 *
14 *     .. Local Scalars ..
15       DOUBLE COMPLEX ALPHA
16       DOUBLE PRECISION NORM,SCALE
17 *     ..
18 *     .. Intrinsic Functions ..
19       INTRINSIC CDABS,DCMPLX,DCONJG,DSQRT
20 *     ..
21       IF (CDABS(CA).EQ.0.0d0THEN
22          C = 0.0d0
23          S = (1.0d0,0.0d0)
24          CA = CB
25       ELSE
26          SCALE = CDABS(CA) + CDABS(CB)
27          NORM = SCALE*DSQRT((CDABS(CA/DCMPLX(SCALE,0.0d0)))**2+
28      $       (CDABS(CB/DCMPLX(SCALE,0.0d0)))**2)
29          ALPHA = CA/CDABS(CA)
30          C = CDABS(CA)/NORM
31          S = ALPHA*DCONJG(CB)/NORM
32          CA = ALPHA*NORM
33       END IF
34       RETURN
35       END