192 SUBROUTINE zhemm(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
200 COMPLEX*16 alpha,beta
201 INTEGER lda,ldb,ldc,m,n
205 COMPLEX*16 a(lda,*),b(ldb,*),c(ldc,*)
218 INTRINSIC dble,dconjg,max
221 COMPLEX*16 temp1,temp2
222 INTEGER i,info,j,k,nrowa
227 parameter(one= (1.0d+0,0.0d+0))
229 parameter(zero= (0.0d+0,0.0d+0))
234 IF (
lsame(side,
'L'))
THEN
239 upper =
lsame(uplo,
'U')
244 IF ((.NOT.
lsame(side,
'L')) .AND. (.NOT.
lsame(side,
'R')))
THEN
246 ELSE IF ((.NOT.upper) .AND. (.NOT.
lsame(uplo,
'L')))
THEN
248 ELSE IF (m.LT.0)
THEN
250 ELSE IF (n.LT.0)
THEN
252 ELSE IF (lda.LT.max(1,nrowa))
THEN
254 ELSE IF (ldb.LT.max(1,m))
THEN
256 ELSE IF (ldc.LT.max(1,m))
THEN
260 CALL
xerbla(
'ZHEMM ',info)
266 IF ((m.EQ.0) .OR. (n.EQ.0) .OR.
267 + ((alpha.EQ.zero).AND. (beta.EQ.one))) return
271 IF (alpha.EQ.zero)
THEN
272 IF (beta.EQ.zero)
THEN
290 IF (
lsame(side,
'L'))
THEN
300 c(k,j) = c(k,j) + temp1*a(k,i)
301 temp2 = temp2 + b(k,j)*dconjg(a(k,i))
303 IF (beta.EQ.zero)
THEN
304 c(i,j) = temp1*dble(a(i,i)) + alpha*temp2
306 c(i,j) = beta*c(i,j) + temp1*dble(a(i,i)) +
317 c(k,j) = c(k,j) + temp1*a(k,i)
318 temp2 = temp2 + b(k,j)*dconjg(a(k,i))
320 IF (beta.EQ.zero)
THEN
321 c(i,j) = temp1*dble(a(i,i)) + alpha*temp2
323 c(i,j) = beta*c(i,j) + temp1*dble(a(i,i)) +
334 temp1 = alpha*dble(a(j,j))
335 IF (beta.EQ.zero)
THEN
337 c(i,j) = temp1*b(i,j)
341 c(i,j) = beta*c(i,j) + temp1*b(i,j)
348 temp1 = alpha*dconjg(a(j,k))
351 c(i,j) = c(i,j) + temp1*b(i,k)
356 temp1 = alpha*dconjg(a(j,k))
361 c(i,j) = c(i,j) + temp1*b(i,k)