3
4
5
6
7
8
9
10 CHARACTER*1 UPLO
11 INTEGER INCX, INCY, LDA, N
12 REAL ALPHA, BETA
13
14
15 REAL Y( * )
16 COMPLEX 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 REAL ONE, ZERO
91 parameter( one = 1.0e+0, zero = 0.0e+0 )
92
93
94 INTEGER I, INFO, IX, IY, J, JX, JY, KX, KY
95 REAL TALPHA, TEMP0, TEMP1, TEMP2
96 COMPLEX ZDUM
97
98
99 LOGICAL LSAME
101
102
103 EXTERNAL xerbla
104
105
106 INTRINSIC abs, aimag,
max, real
107
108
109 REAL CABS1
110 cabs1( zdum ) = abs( real( zdum ) ) + abs( aimag( 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( 'CASYMV', 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