2
3
4
5
6
7
8
9 CHARACTER*1 UPLO
10 INTEGER INCX, INCY, LDA, N
11 COMPLEX ALPHA
12
13
14 COMPLEX A( LDA, * ), X( * ), Y( * )
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 COMPLEX ZERO
88 parameter( zero = ( 0.0e+0, 0.0e+0 ) )
89
90
91 INTEGER I, INFO, IX, IY, J, JX, JY, KX, KY
92 COMPLEX TEMP1, TEMP2
93
94
95 LOGICAL LSAME
97
98
99 EXTERNAL xerbla
100
101
103
104
105
106
107
108 info = 0
109 IF ( .NOT.
lsame( uplo,
'U' ).AND.
110 $ .NOT.
lsame( uplo,
'L' ) )
THEN
111 info = 1
112 ELSE IF( n.LT.0 )THEN
113 info = 2
114 ELSE IF( incx.EQ.0 )THEN
115 info = 5
116 ELSE IF( incy.EQ.0 )THEN
117 info = 7
118 ELSE IF( lda.LT.
max( 1, n ) )
THEN
119 info = 9
120 END IF
121 IF( info.NE.0 )THEN
122 CALL xerbla( 'CSYR2', info )
123 RETURN
124 END IF
125
126
127
128 IF( ( n.EQ.0 ).OR.( alpha.EQ.zero ) )
129 $ RETURN
130
131
132
133
134 kx = 1
135 ky = 1
136 jx = 1
137 jy = 1
138 IF( ( incx.NE.1 ).OR.( incy.NE.1 ) )THEN
139 IF( incx.GT.0 )THEN
140 kx = 1
141 ELSE
142 kx = 1 - ( n - 1 )*incx
143 END IF
144 IF( incy.GT.0 )THEN
145 ky = 1
146 ELSE
147 ky = 1 - ( n - 1 )*incy
148 END IF
149 jx = kx
150 jy = ky
151 END IF
152
153
154
155
156
157 IF(
lsame( uplo,
'U' ) )
THEN
158
159
160
161 IF( ( incx.EQ.1 ).AND.( incy.EQ.1 ) )THEN
162 DO 20, j = 1, n
163 IF( ( x( j ).NE.zero ).OR.( y( j ).NE.zero ) )THEN
164 temp1 = alpha*y( j )
165 temp2 = alpha*x( j )
166 DO 10, i = 1, j
167 a( i, j ) = a( i, j ) + x( i )*temp1 + y( i )*temp2
168 10 CONTINUE
169 END IF
170 20 CONTINUE
171 ELSE
172 DO 40, j = 1, n
173 IF( ( x( jx ).NE.zero ).OR.( y( jy ).NE.zero ) )THEN
174 temp1 = alpha*y( jy )
175 temp2 = alpha*x( jx )
176 ix = kx
177 iy = ky
178 DO 30, i = 1, j
179 a( i, j ) = a( i, j ) + x( ix )*temp1
180 $ + y( iy )*temp2
181 ix = ix + incx
182 iy = iy + incy
183 30 CONTINUE
184 END IF
185 jx = jx + incx
186 jy = jy + incy
187 40 CONTINUE
188 END IF
189 ELSE
190
191
192
193 IF( ( incx.EQ.1 ).AND.( incy.EQ.1 ) )THEN
194 DO 60, j = 1, n
195 IF( ( x( j ).NE.zero ).OR.( y( j ).NE.zero ) )THEN
196 temp1 = alpha*y( j )
197 temp2 = alpha*x( j )
198 DO 50, i = j, n
199 a( i, j ) = a( i, j ) + x( i )*temp1 + y( i )*temp2
200 50 CONTINUE
201 END IF
202 60 CONTINUE
203 ELSE
204 DO 80, j = 1, n
205 IF( ( x( jx ).NE.zero ).OR.( y( jy ).NE.zero ) )THEN
206 temp1 = alpha*y( jy )
207 temp2 = alpha*x( jx )
208 ix = jx
209 iy = jy
210 DO 70, i = j, n
211 a( i, j ) = a( i, j ) + x( ix )*temp1
212 $ + y( iy )*temp2
213 ix = ix + incx
214 iy = iy + incy
215 70 CONTINUE
216 END IF
217 jx = jx + incx
218 jy = jy + incy
219 80 CONTINUE
220 END IF
221 END IF
222
223 RETURN
224
225
226