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