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