00001 SUBROUTINE CSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
00002
00003 COMPLEX ALPHA,BETA
00004 INTEGER K,LDA,LDC,N
00005 CHARACTER TRANS,UPLO
00006
00007
00008 COMPLEX A(LDA,*),C(LDC,*)
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121 LOGICAL LSAME
00122 EXTERNAL LSAME
00123
00124
00125 EXTERNAL XERBLA
00126
00127
00128 INTRINSIC MAX
00129
00130
00131 COMPLEX TEMP
00132 INTEGER I,INFO,J,L,NROWA
00133 LOGICAL UPPER
00134
00135
00136 COMPLEX ONE
00137 PARAMETER (ONE= (1.0E+0,0.0E+0))
00138 COMPLEX ZERO
00139 PARAMETER (ZERO= (0.0E+0,0.0E+0))
00140
00141
00142
00143
00144 IF (LSAME(TRANS,'N')) THEN
00145 NROWA = N
00146 ELSE
00147 NROWA = K
00148 END IF
00149 UPPER = LSAME(UPLO,'U')
00150
00151 INFO = 0
00152 IF ((.NOT.UPPER) .AND. (.NOT.LSAME(UPLO,'L'))) THEN
00153 INFO = 1
00154 ELSE IF ((.NOT.LSAME(TRANS,'N')) .AND.
00155 + (.NOT.LSAME(TRANS,'T'))) THEN
00156 INFO = 2
00157 ELSE IF (N.LT.0) THEN
00158 INFO = 3
00159 ELSE IF (K.LT.0) THEN
00160 INFO = 4
00161 ELSE IF (LDA.LT.MAX(1,NROWA)) THEN
00162 INFO = 7
00163 ELSE IF (LDC.LT.MAX(1,N)) THEN
00164 INFO = 10
00165 END IF
00166 IF (INFO.NE.0) THEN
00167 CALL XERBLA('CSYRK ',INFO)
00168 RETURN
00169 END IF
00170
00171
00172
00173 IF ((N.EQ.0) .OR. (((ALPHA.EQ.ZERO).OR.
00174 + (K.EQ.0)).AND. (BETA.EQ.ONE))) RETURN
00175
00176
00177
00178 IF (ALPHA.EQ.ZERO) THEN
00179 IF (UPPER) THEN
00180 IF (BETA.EQ.ZERO) THEN
00181 DO 20 J = 1,N
00182 DO 10 I = 1,J
00183 C(I,J) = ZERO
00184 10 CONTINUE
00185 20 CONTINUE
00186 ELSE
00187 DO 40 J = 1,N
00188 DO 30 I = 1,J
00189 C(I,J) = BETA*C(I,J)
00190 30 CONTINUE
00191 40 CONTINUE
00192 END IF
00193 ELSE
00194 IF (BETA.EQ.ZERO) THEN
00195 DO 60 J = 1,N
00196 DO 50 I = J,N
00197 C(I,J) = ZERO
00198 50 CONTINUE
00199 60 CONTINUE
00200 ELSE
00201 DO 80 J = 1,N
00202 DO 70 I = J,N
00203 C(I,J) = BETA*C(I,J)
00204 70 CONTINUE
00205 80 CONTINUE
00206 END IF
00207 END IF
00208 RETURN
00209 END IF
00210
00211
00212
00213 IF (LSAME(TRANS,'N')) THEN
00214
00215
00216
00217 IF (UPPER) THEN
00218 DO 130 J = 1,N
00219 IF (BETA.EQ.ZERO) THEN
00220 DO 90 I = 1,J
00221 C(I,J) = ZERO
00222 90 CONTINUE
00223 ELSE IF (BETA.NE.ONE) THEN
00224 DO 100 I = 1,J
00225 C(I,J) = BETA*C(I,J)
00226 100 CONTINUE
00227 END IF
00228 DO 120 L = 1,K
00229 IF (A(J,L).NE.ZERO) THEN
00230 TEMP = ALPHA*A(J,L)
00231 DO 110 I = 1,J
00232 C(I,J) = C(I,J) + TEMP*A(I,L)
00233 110 CONTINUE
00234 END IF
00235 120 CONTINUE
00236 130 CONTINUE
00237 ELSE
00238 DO 180 J = 1,N
00239 IF (BETA.EQ.ZERO) THEN
00240 DO 140 I = J,N
00241 C(I,J) = ZERO
00242 140 CONTINUE
00243 ELSE IF (BETA.NE.ONE) THEN
00244 DO 150 I = J,N
00245 C(I,J) = BETA*C(I,J)
00246 150 CONTINUE
00247 END IF
00248 DO 170 L = 1,K
00249 IF (A(J,L).NE.ZERO) THEN
00250 TEMP = ALPHA*A(J,L)
00251 DO 160 I = J,N
00252 C(I,J) = C(I,J) + TEMP*A(I,L)
00253 160 CONTINUE
00254 END IF
00255 170 CONTINUE
00256 180 CONTINUE
00257 END IF
00258 ELSE
00259
00260
00261
00262 IF (UPPER) THEN
00263 DO 210 J = 1,N
00264 DO 200 I = 1,J
00265 TEMP = ZERO
00266 DO 190 L = 1,K
00267 TEMP = TEMP + A(L,I)*A(L,J)
00268 190 CONTINUE
00269 IF (BETA.EQ.ZERO) THEN
00270 C(I,J) = ALPHA*TEMP
00271 ELSE
00272 C(I,J) = ALPHA*TEMP + BETA*C(I,J)
00273 END IF
00274 200 CONTINUE
00275 210 CONTINUE
00276 ELSE
00277 DO 240 J = 1,N
00278 DO 230 I = J,N
00279 TEMP = ZERO
00280 DO 220 L = 1,K
00281 TEMP = TEMP + A(L,I)*A(L,J)
00282 220 CONTINUE
00283 IF (BETA.EQ.ZERO) THEN
00284 C(I,J) = ALPHA*TEMP
00285 ELSE
00286 C(I,J) = ALPHA*TEMP + BETA*C(I,J)
00287 END IF
00288 230 CONTINUE
00289 240 CONTINUE
00290 END IF
00291 END IF
00292
00293 RETURN
00294
00295
00296
00297 END