01:       SUBROUTINE ZDROT( N, CX, INCX, CY, INCY, C, S )
02: *
03: *     .. Scalar Arguments ..
04:       INTEGER            INCX, INCY, N
05:       DOUBLE PRECISION   C, S
06: *     ..
07: *     .. Array Arguments ..
08:       COMPLEX*16         CX( * ), CY( * )
09: *     ..
10: *
11: *  Purpose
12: *  =======
13: *
14: *  Applies a plane rotation, where the cos and sin (c and s) are real
15: *  and the vectors cx and cy are complex.
16: *  jack dongarra, linpack, 3/11/78.
17: *
18: *  Arguments
19: *  ==========
20: *
21: *  N        (input) INTEGER
22: *           On entry, N specifies the order of the vectors cx and cy.
23: *           N must be at least zero.
24: *           Unchanged on exit.
25: *
26: *  CX       (input) COMPLEX*16 array, dimension at least
27: *           ( 1 + ( N - 1 )*abs( INCX ) ).
28: *           Before entry, the incremented array CX must contain the n
29: *           element vector cx. On exit, CX is overwritten by the updated
30: *           vector cx.
31: *
32: *  INCX     (input) INTEGER
33: *           On entry, INCX specifies the increment for the elements of
34: *           CX. INCX must not be zero.
35: *           Unchanged on exit.
36: *
37: *  CY       (input) COMPLEX*16 array, dimension at least
38: *           ( 1 + ( N - 1 )*abs( INCY ) ).
39: *           Before entry, the incremented array CY must contain the n
40: *           element vector cy. On exit, CY is overwritten by the updated
41: *           vector cy.
42: *
43: *  INCY     (input) INTEGER
44: *           On entry, INCY specifies the increment for the elements of
45: *           CY. INCY must not be zero.
46: *           Unchanged on exit.
47: *
48: *  C        (input) DOUBLE PRECISION
49: *           On entry, C specifies the cosine, cos.
50: *           Unchanged on exit.
51: *
52: *  S        (input) DOUBLE PRECISION
53: *           On entry, S specifies the sine, sin.
54: *           Unchanged on exit.
55: *
56: * =====================================================================
57: *
58: *     .. Local Scalars ..
59:       INTEGER            I, IX, IY
60:       COMPLEX*16         CTEMP
61: *     ..
62: *     .. Executable Statements ..
63: *
64:       IF( N.LE.0 )
65:      $   RETURN
66:       IF( INCX.EQ.1 .AND. INCY.EQ.1 )
67:      $   GO TO 20
68: *
69: *        code for unequal increments or equal increments not equal
70: *          to 1
71: *
72:       IX = 1
73:       IY = 1
74:       IF( INCX.LT.0 )
75:      $   IX = ( -N+1 )*INCX + 1
76:       IF( INCY.LT.0 )
77:      $   IY = ( -N+1 )*INCY + 1
78:       DO 10 I = 1, N
79:          CTEMP = C*CX( IX ) + S*CY( IY )
80:          CY( IY ) = C*CY( IY ) - S*CX( IX )
81:          CX( IX ) = CTEMP
82:          IX = IX + INCX
83:          IY = IY + INCY
84:    10 CONTINUE
85:       RETURN
86: *
87: *        code for both increments equal to 1
88: *
89:    20 CONTINUE
90:       DO 30 I = 1, N
91:          CTEMP = C*CX( I ) + S*CY( I )
92:          CY( I ) = C*CY( I ) - S*CX( I )
93:          CX( I ) = CTEMP
94:    30 CONTINUE
95:       RETURN
96:       END
97: