1 SUBROUTINE ZDROT( N, CX, INCX, CY, INCY, C, S )
2 *
3 * .. Scalar Arguments ..
4 INTEGER INCX, INCY, N
5 DOUBLE PRECISION C, S
6 * ..
7 * .. Array Arguments ..
8 COMPLEX*16 CX( * ), CY( * )
9 * ..
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 ) THEN
67 *
68 * code for both increments equal to 1
69 *
70 DO I = 1, N
71 CTEMP = C*CX( I ) + S*CY( I )
72 CY( I ) = C*CY( I ) - S*CX( I )
73 CX( I ) = CTEMP
74 END DO
75 ELSE
76 *
77 * code for unequal increments or equal increments not equal
78 * to 1
79 *
80 IX = 1
81 IY = 1
82 IF( INCX.LT.0 )
83 $ IX = ( -N+1 )*INCX + 1
84 IF( INCY.LT.0 )
85 $ IY = ( -N+1 )*INCY + 1
86 DO I = 1, N
87 CTEMP = C*CX( IX ) + S*CY( IY )
88 CY( IY ) = C*CY( IY ) - S*CX( IX )
89 CX( IX ) = CTEMP
90 IX = IX + INCX
91 IY = IY + INCY
92 END DO
93 END IF
94 RETURN
95 END
2 *
3 * .. Scalar Arguments ..
4 INTEGER INCX, INCY, N
5 DOUBLE PRECISION C, S
6 * ..
7 * .. Array Arguments ..
8 COMPLEX*16 CX( * ), CY( * )
9 * ..
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 ) THEN
67 *
68 * code for both increments equal to 1
69 *
70 DO I = 1, N
71 CTEMP = C*CX( I ) + S*CY( I )
72 CY( I ) = C*CY( I ) - S*CX( I )
73 CX( I ) = CTEMP
74 END DO
75 ELSE
76 *
77 * code for unequal increments or equal increments not equal
78 * to 1
79 *
80 IX = 1
81 IY = 1
82 IF( INCX.LT.0 )
83 $ IX = ( -N+1 )*INCX + 1
84 IF( INCY.LT.0 )
85 $ IY = ( -N+1 )*INCY + 1
86 DO I = 1, N
87 CTEMP = C*CX( IX ) + S*CY( IY )
88 CY( IY ) = C*CY( IY ) - S*CX( IX )
89 CX( IX ) = CTEMP
90 IX = IX + INCX
91 IY = IY + INCY
92 END DO
93 END IF
94 RETURN
95 END