178 SUBROUTINE ctrmm(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
188 CHARACTER diag,side,transa,uplo
191 COMPLEX a(lda,*),b(ldb,*)
208 INTEGER i,info,j,k,nrowa
209 LOGICAL lside,noconj,nounit,upper
213 parameter(one= (1.0e+0,0.0e+0))
215 parameter(zero= (0.0e+0,0.0e+0))
220 lside =
lsame(side,
'L')
226 noconj =
lsame(transa,
'T')
227 nounit =
lsame(diag,
'N')
228 upper =
lsame(uplo,
'U')
231 IF ((.NOT.lside) .AND. (.NOT.
lsame(side,
'R')))
THEN
233 ELSE IF ((.NOT.upper) .AND. (.NOT.
lsame(uplo,
'L')))
THEN
235 ELSE IF ((.NOT.
lsame(transa,
'N')) .AND.
236 + (.NOT.
lsame(transa,
'T')) .AND.
237 + (.NOT.
lsame(transa,
'C')))
THEN
239 ELSE IF ((.NOT.
lsame(diag,
'U')) .AND. (.NOT.
lsame(diag,
'N')))
THEN
241 ELSE IF (m.LT.0)
THEN
243 ELSE IF (n.LT.0)
THEN
245 ELSE IF (lda.LT.max(1,nrowa))
THEN
247 ELSE IF (ldb.LT.max(1,m))
THEN
251 CALL
xerbla(
'CTRMM ',info)
257 IF (m.EQ.0 .OR. n.EQ.0) return
261 IF (alpha.EQ.zero)
THEN
273 IF (
lsame(transa,
'N'))
THEN
280 IF (b(k,j).NE.zero)
THEN
283 b(i,j) = b(i,j) + temp*a(i,k)
285 IF (nounit) temp = temp*a(k,k)
293 IF (b(k,j).NE.zero)
THEN
296 IF (nounit) b(k,j) = b(k,j)*a(k,k)
298 b(i,j) = b(i,j) + temp*a(i,k)
313 IF (nounit) temp = temp*a(i,i)
315 temp = temp + a(k,i)*b(k,j)
318 IF (nounit) temp = temp*conjg(a(i,i))
320 temp = temp + conjg(a(k,i))*b(k,j)
331 IF (nounit) temp = temp*a(i,i)
333 temp = temp + a(k,i)*b(k,j)
336 IF (nounit) temp = temp*conjg(a(i,i))
338 temp = temp + conjg(a(k,i))*b(k,j)
347 IF (
lsame(transa,
'N'))
THEN
354 IF (nounit) temp = temp*a(j,j)
359 IF (a(k,j).NE.zero)
THEN
362 b(i,j) = b(i,j) + temp*b(i,k)
370 IF (nounit) temp = temp*a(j,j)
375 IF (a(k,j).NE.zero)
THEN
378 b(i,j) = b(i,j) + temp*b(i,k)
391 IF (a(j,k).NE.zero)
THEN
395 temp = alpha*conjg(a(j,k))
398 b(i,j) = b(i,j) + temp*b(i,k)
407 temp = temp*conjg(a(k,k))
410 IF (temp.NE.one)
THEN
419 IF (a(j,k).NE.zero)
THEN
423 temp = alpha*conjg(a(j,k))
426 b(i,j) = b(i,j) + temp*b(i,k)
435 temp = temp*conjg(a(k,k))
438 IF (temp.NE.one)
THEN