174 SUBROUTINE zherk(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
182 DOUBLE PRECISION alpha,beta
187 COMPLEX*16 a(lda,*),c(ldc,*)
200 INTRINSIC dble,dcmplx,dconjg,max
204 DOUBLE PRECISION rtemp
205 INTEGER i,info,j,l,nrowa
209 DOUBLE PRECISION one,zero
210 parameter(one=1.0d+0,zero=0.0d+0)
215 IF (
lsame(trans,
'N'))
THEN
220 upper =
lsame(uplo,
'U')
223 IF ((.NOT.upper) .AND. (.NOT.
lsame(uplo,
'L')))
THEN
225 ELSE IF ((.NOT.
lsame(trans,
'N')) .AND.
226 + (.NOT.
lsame(trans,
'C')))
THEN
228 ELSE IF (n.LT.0)
THEN
230 ELSE IF (k.LT.0)
THEN
232 ELSE IF (lda.LT.max(1,nrowa))
THEN
234 ELSE IF (ldc.LT.max(1,n))
THEN
238 CALL
xerbla(
'ZHERK ',info)
244 IF ((n.EQ.0) .OR. (((alpha.EQ.zero).OR.
245 + (k.EQ.0)).AND. (beta.EQ.one))) return
249 IF (alpha.EQ.zero)
THEN
251 IF (beta.EQ.zero)
THEN
262 c(j,j) = beta*dble(c(j,j))
266 IF (beta.EQ.zero)
THEN
274 c(j,j) = beta*dble(c(j,j))
286 IF (
lsame(trans,
'N'))
THEN
292 IF (beta.EQ.zero)
THEN
296 ELSE IF (beta.NE.one)
THEN
300 c(j,j) = beta*dble(c(j,j))
302 c(j,j) = dble(c(j,j))
305 IF (a(j,l).NE.dcmplx(zero))
THEN
306 temp = alpha*dconjg(a(j,l))
308 c(i,j) = c(i,j) + temp*a(i,l)
310 c(j,j) = dble(c(j,j)) + dble(temp*a(i,l))
316 IF (beta.EQ.zero)
THEN
320 ELSE IF (beta.NE.one)
THEN
321 c(j,j) = beta*dble(c(j,j))
326 c(j,j) = dble(c(j,j))
329 IF (a(j,l).NE.dcmplx(zero))
THEN
330 temp = alpha*dconjg(a(j,l))
331 c(j,j) = dble(c(j,j)) + dble(temp*a(j,l))
333 c(i,j) = c(i,j) + temp*a(i,l)
348 temp = temp + dconjg(a(l,i))*a(l,j)
350 IF (beta.EQ.zero)
THEN
353 c(i,j) = alpha*temp + beta*c(i,j)
358 rtemp = rtemp + dconjg(a(l,j))*a(l,j)
360 IF (beta.EQ.zero)
THEN
363 c(j,j) = alpha*rtemp + beta*dble(c(j,j))
370 rtemp = rtemp + dconjg(a(l,j))*a(l,j)
372 IF (beta.EQ.zero)
THEN
375 c(j,j) = alpha*rtemp + beta*dble(c(j,j))
380 temp = temp + dconjg(a(l,i))*a(l,j)
382 IF (beta.EQ.zero)
THEN
385 c(i,j) = alpha*temp + beta*c(i,j)