LAPACK  3.5.0
LAPACK: Linear Algebra PACKage
 All Classes Files Functions Variables Typedefs Macros
zdrot.f
Go to the documentation of this file.
1 *> \brief \b ZDROT
2 *
3 * =========== DOCUMENTATION ===========
4 *
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
7 *
8 * Definition:
9 * ===========
10 *
11 * SUBROUTINE ZDROT( N, CX, INCX, CY, INCY, C, S )
12 *
13 * .. Scalar Arguments ..
14 * INTEGER INCX, INCY, N
15 * DOUBLE PRECISION C, S
16 * ..
17 * .. Array Arguments ..
18 * COMPLEX*16 CX( * ), CY( * )
19 * ..
20 *
21 *
22 *> \par Purpose:
23 * =============
24 *>
25 *> \verbatim
26 *>
27 *> Applies a plane rotation, where the cos and sin (c and s) are real
28 *> and the vectors cx and cy are complex.
29 *> jack dongarra, linpack, 3/11/78.
30 *> \endverbatim
31 *
32 * Arguments:
33 * ==========
34 *
35 *> \param[in] N
36 *> \verbatim
37 *> N is INTEGER
38 *> On entry, N specifies the order of the vectors cx and cy.
39 *> N must be at least zero.
40 *> \endverbatim
41 *>
42 *> \param[in,out] CX
43 *> \verbatim
44 *> CX is COMPLEX*16 array, dimension at least
45 *> ( 1 + ( N - 1 )*abs( INCX ) ).
46 *> Before entry, the incremented array CX must contain the n
47 *> element vector cx. On exit, CX is overwritten by the updated
48 *> vector cx.
49 *> \endverbatim
50 *>
51 *> \param[in] INCX
52 *> \verbatim
53 *> INCX is INTEGER
54 *> On entry, INCX specifies the increment for the elements of
55 *> CX. INCX must not be zero.
56 *> \endverbatim
57 *>
58 *> \param[in,out] CY
59 *> \verbatim
60 *> CY is COMPLEX*16 array, dimension at least
61 *> ( 1 + ( N - 1 )*abs( INCY ) ).
62 *> Before entry, the incremented array CY must contain the n
63 *> element vector cy. On exit, CY is overwritten by the updated
64 *> vector cy.
65 *> \endverbatim
66 *>
67 *> \param[in] INCY
68 *> \verbatim
69 *> INCY is INTEGER
70 *> On entry, INCY specifies the increment for the elements of
71 *> CY. INCY must not be zero.
72 *> \endverbatim
73 *>
74 *> \param[in] C
75 *> \verbatim
76 *> C is DOUBLE PRECISION
77 *> On entry, C specifies the cosine, cos.
78 *> \endverbatim
79 *>
80 *> \param[in] S
81 *> \verbatim
82 *> S is DOUBLE PRECISION
83 *> On entry, S specifies the sine, sin.
84 *> \endverbatim
85 *
86 * Authors:
87 * ========
88 *
89 *> \author Univ. of Tennessee
90 *> \author Univ. of California Berkeley
91 *> \author Univ. of Colorado Denver
92 *> \author NAG Ltd.
93 *
94 *> \date November 2011
95 *
96 *> \ingroup complex16_blas_level1
97 *
98 * =====================================================================
99  SUBROUTINE zdrot( N, CX, INCX, CY, INCY, C, S )
100 *
101 * -- Reference BLAS level1 routine (version 3.4.0) --
102 * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
103 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
104 * November 2011
105 *
106 * .. Scalar Arguments ..
107  INTEGER incx, incy, n
108  DOUBLE PRECISION c, s
109 * ..
110 * .. Array Arguments ..
111  COMPLEX*16 cx( * ), cy( * )
112 * ..
113 *
114 * =====================================================================
115 *
116 * .. Local Scalars ..
117  INTEGER i, ix, iy
118  COMPLEX*16 ctemp
119 * ..
120 * .. Executable Statements ..
121 *
122  IF( n.LE.0 )
123  $ RETURN
124  IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
125 *
126 * code for both increments equal to 1
127 *
128  DO i = 1, n
129  ctemp = c*cx( i ) + s*cy( i )
130  cy( i ) = c*cy( i ) - s*cx( i )
131  cx( i ) = ctemp
132  END DO
133  ELSE
134 *
135 * code for unequal increments or equal increments not equal
136 * to 1
137 *
138  ix = 1
139  iy = 1
140  IF( incx.LT.0 )
141  $ ix = ( -n+1 )*incx + 1
142  IF( incy.LT.0 )
143  $ iy = ( -n+1 )*incy + 1
144  DO i = 1, n
145  ctemp = c*cx( ix ) + s*cy( iy )
146  cy( iy ) = c*cy( iy ) - s*cx( ix )
147  cx( ix ) = ctemp
148  ix = ix + incx
149  iy = iy + incy
150  END DO
151  END IF
152  RETURN
153  END