3
4
5
6
7
8
9
10 CHARACTER*1 UPLO
11 INTEGER INCX, INCY, LDA, N
12 DOUBLE PRECISION ALPHA, BETA
13
14
15 DOUBLE PRECISION Y( * )
16 COMPLEX*16 A( LDA, * ), X( * )
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
88
89
90 DOUBLE PRECISION ONE, ZERO
91 parameter( one = 1.0d+0, zero = 0.0d+0 )
92
93
94 INTEGER I, INFO, IX, IY, J, JX, JY, KX, KY
95 DOUBLE PRECISION TALPHA, TEMP0, TEMP1, TEMP2
96 COMPLEX*16 ZDUM
97
98
99 LOGICAL LSAME
101
102
103 EXTERNAL xerbla
104
105
106 INTRINSIC abs, dble, dimag,
max
107
108
109 DOUBLE PRECISION CABS1
110 cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
111
112
113
114
115
116 info = 0
117 IF ( .NOT.
lsame( uplo,
'U' ).AND.
118 $ .NOT.
lsame( uplo,
'L' ) )
THEN
119 info = 1
120 ELSE IF( n.LT.0 )THEN
121 info = 2
122 ELSE IF( lda.LT.
max( 1, n ) )
THEN
123 info = 5
124 ELSE IF( incx.EQ.0 )THEN
125 info = 7
126 ELSE IF( incy.EQ.0 )THEN
127 info = 10
128 END IF
129 IF( info.NE.0 )THEN
130 CALL xerbla( 'ZASYMV', info )
131 RETURN
132 END IF
133
134
135
136 IF( ( n.EQ.0 ).OR.( ( alpha.EQ.zero ).AND.( beta.EQ.one ) ) )
137 $ RETURN
138
139
140
141 IF( incx.GT.0 ) THEN
142 kx = 1
143 ELSE
144 kx = 1 - ( n - 1 ) * incx
145 END IF
146 IF( incy.GT.0 )THEN
147 ky = 1
148 ELSE
149 ky = 1 - ( n - 1 ) * incy
150 END IF
151
152
153
154
155
156
157
158 IF( beta.NE.one ) THEN
159 IF( incy.EQ.1 ) THEN
160 IF( beta.EQ.zero ) THEN
161 DO 10, i = 1, n
162 y( i ) = zero
163 10 CONTINUE
164 ELSE
165 DO 20, i = 1, n
166 y( i ) = abs( beta * y( i ) )
167 20 CONTINUE
168 END IF
169 ELSE
170 iy = ky
171 IF( beta.EQ.zero ) THEN
172 DO 30, i = 1, n
173 y( iy ) = zero
174 iy = iy + incy
175 30 CONTINUE
176 ELSE
177 DO 40, i = 1, n
178 y( iy ) = abs( beta * y( iy ) )
179 iy = iy + incy
180 40 CONTINUE
181 END IF
182 END IF
183 END IF
184
185 IF( alpha.EQ.zero )
186 $ RETURN
187
188 talpha = abs( alpha )
189
190 IF(
lsame( uplo,
'U' ) )
THEN
191
192
193
194 IF( ( incx.EQ.1 ).AND.( incy.EQ.1 ) ) THEN
195 DO 60, j = 1, n
196 temp1 = talpha * cabs1( x( j ) )
197 temp2 = zero
198 DO 50, i = 1, j - 1
199 temp0 = cabs1( a( i, j ) )
200 y( i ) = y( i ) + temp1 * temp0
201 temp2 = temp2 + temp0 * cabs1( x( i ) )
202 50 CONTINUE
203 y( j ) = y( j ) + temp1 * cabs1( a( j, j ) ) +
204 $ alpha * temp2
205
206 60 CONTINUE
207
208 ELSE
209
210 jx = kx
211 jy = ky
212
213 DO 80, j = 1, n
214 temp1 = talpha * cabs1( x( jx ) )
215 temp2 = zero
216 ix = kx
217 iy = ky
218
219 DO 70, i = 1, j - 1
220 temp0 = cabs1( a( i, j ) )
221 y( iy ) = y( iy ) + temp1 * temp0
222 temp2 = temp2 + temp0 * cabs1( x( ix ) )
223 ix = ix + incx
224 iy = iy + incy
225 70 CONTINUE
226 y( jy ) = y( jy ) + temp1 * cabs1( a( j, j ) ) +
227 $ alpha * temp2
228 jx = jx + incx
229 jy = jy + incy
230
231 80 CONTINUE
232
233 END IF
234
235 ELSE
236
237
238
239 IF( ( incx.EQ.1 ).AND.( incy.EQ.1 ) ) THEN
240
241 DO 100, j = 1, n
242
243 temp1 = talpha * cabs1( x( j ) )
244 temp2 = zero
245 y( j ) = y( j ) + temp1 * cabs1( a( j, j ) )
246
247 DO 90, i = j + 1, n
248 temp0 = cabs1( a( i, j ) )
249 y( i ) = y( i ) + temp1 * temp0
250 temp2 = temp2 + temp0 * cabs1( x( i ) )
251
252 90 CONTINUE
253
254 y( j ) = y( j ) + alpha * temp2
255
256 100 CONTINUE
257
258 ELSE
259
260 jx = kx
261 jy = ky
262
263 DO 120, j = 1, n
264 temp1 = talpha * cabs1( x( jx ) )
265 temp2 = zero
266 y( jy ) = y( jy ) + temp1 * cabs1( a( j, j ) )
267 ix = jx
268 iy = jy
269
270 DO 110, i = j + 1, n
271
272 ix = ix + incx
273 iy = iy + incy
274 temp0 = cabs1( a( i, j ) )
275 y( iy ) = y( iy ) + temp1 * temp0
276 temp2 = temp2 + temp0 * cabs1( x( ix ) )
277
278 110 CONTINUE
279
280 y( jy ) = y( jy ) + alpha * temp2
281 jx = jx + incx
282 jy = jy + incy
283
284 120 CONTINUE
285
286 END IF
287
288 END IF
289
290 RETURN
291
292
293