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, * ), ( * ), 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, , TEMP2
95
96
97 LOGICAL LSAME
99
100
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
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 ) ) +
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 ) ) +
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
subroutine xerbla(srname, info)
XERBLA
logical function lsame(ca, cb)
LSAME