2
3
4
5
6
7
8
9 CHARACTER*1 UPLO
10 INTEGER INCX, INCY, LDA, N
11 COMPLEX ALPHA, BETA
12
13
14 COMPLEX 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 ONE, ZERO
86 parameter( one = ( 1.0e+0, 0.0e+0 ),
87 $ zero = ( 0.0e+0, 0.0e+0 ) )
88
89
90 INTEGER I, INFO, IX, IY, J, JX, JY, KX, KY
91 COMPLEX 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( 'CSYMV ', 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