180 SUBROUTINE strsm(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
189 CHARACTER DIAG,SIDE,TRANSA,UPLO
192 REAL A(LDA,*),B(LDB,*)
209 INTEGER I,INFO,J,K,NROWA
210 LOGICAL LSIDE,NOUNIT,UPPER
214 parameter(one=1.0e+0,zero=0.0e+0)
219 lside = lsame(side,
'L')
225 nounit = lsame(diag,
'N')
226 upper = lsame(uplo,
'U')
229 IF ((.NOT.lside) .AND. (.NOT.lsame(side,
'R')))
THEN
231 ELSE IF ((.NOT.upper) .AND. (.NOT.lsame(uplo,
'L')))
THEN
233 ELSE IF ((.NOT.lsame(transa,
'N')) .AND.
234 + (.NOT.lsame(transa,
'T')) .AND.
235 + (.NOT.lsame(transa,
'C')))
THEN
237 ELSE IF ((.NOT.lsame(diag,
'U')) .AND.
238 + (.NOT.lsame(diag,
'N')))
THEN
240 ELSE IF (m.LT.0)
THEN
242 ELSE IF (n.LT.0)
THEN
244 ELSE IF (lda.LT.max(1,nrowa))
THEN
246 ELSE IF (ldb.LT.max(1,m))
THEN
250 CALL xerbla(
'STRSM ',info)
256 IF (m.EQ.0 .OR. n.EQ.0)
RETURN
260 IF (alpha.EQ.zero)
THEN
272 IF (lsame(transa,
'N'))
THEN
278 IF (alpha.NE.one)
THEN
280 b(i,j) = alpha*b(i,j)
284 IF (b(k,j).NE.zero)
THEN
285 IF (nounit) b(k,j) = b(k,j)/a(k,k)
287 b(i,j) = b(i,j) - b(k,j)*a(i,k)
294 IF (alpha.NE.one)
THEN
296 b(i,j) = alpha*b(i,j)
300 IF (b(k,j).NE.zero)
THEN
301 IF (nounit) b(k,j) = b(k,j)/a(k,k)
303 b(i,j) = b(i,j) - b(k,j)*a(i,k)
318 temp = temp - a(k,i)*b(k,j)
320 IF (nounit) temp = temp/a(i,i)
329 temp = temp - a(k,i)*b(k,j)
331 IF (nounit) temp = temp/a(i,i)
338 IF (lsame(transa,
'N'))
THEN
344 IF (alpha.NE.one)
THEN
346 b(i,j) = alpha*b(i,j)
350 IF (a(k,j).NE.zero)
THEN
352 b(i,j) = b(i,j) - a(k,j)*b(i,k)
365 IF (alpha.NE.one)
THEN
367 b(i,j) = alpha*b(i,j)
371 IF (a(k,j).NE.zero)
THEN
373 b(i,j) = b(i,j) - a(k,j)*b(i,k)
398 IF (a(j,k).NE.zero)
THEN
401 b(i,j) = b(i,j) - temp*b(i,k)
405 IF (alpha.NE.one)
THEN
407 b(i,k) = alpha*b(i,k)
420 IF (a(j,k).NE.zero)
THEN
423 b(i,j) = b(i,j) - temp*b(i,k)
427 IF (alpha.NE.one)
THEN
429 b(i,k) = alpha*b(i,k)
subroutine xerbla(srname, info)
subroutine strsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRSM