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