108 SUBROUTINE strtri( UPLO, DIAG, N, A, LDA, INFO )
126 parameter( one = 1.0e+0, zero = 0.0e+0 )
129 LOGICAL NOUNIT, UPPER
130 INTEGER J, JB, NB, NN
135 EXTERNAL lsame, ilaenv
148 upper = lsame( uplo,
'U' )
149 nounit = lsame( diag,
'N' )
150 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
152 ELSE IF( .NOT.nounit .AND. .NOT.lsame( diag,
'U' ) )
THEN
154 ELSE IF( n.LT.0 )
THEN
156 ELSE IF( lda.LT.max( 1, n ) )
THEN
160 CALL xerbla(
'STRTRI', -info )
173 IF( a( info, info ).EQ.zero )
181 nb = ilaenv( 1,
'STRTRI', uplo // diag, n, -1, -1, -1 )
182 IF( nb.LE.1 .OR. nb.GE.n )
THEN
186 CALL strti2( uplo, diag, n, a, lda, info )
196 jb = min( nb, n-j+1 )
200 CALL strmm(
'Left',
'Upper',
'No transpose', diag, j-1,
201 $ jb, one, a, lda, a( 1, j ), lda )
202 CALL strsm(
'Right',
'Upper',
'No transpose', diag, j-1,
203 $ jb, -one, a( j, j ), lda, a( 1, j ), lda )
207 CALL strti2(
'Upper', diag, jb, a( j, j ), lda, info )
213 nn = ( ( n-1 ) / nb )*nb + 1
215 jb = min( nb, n-j+1 )
220 CALL strmm(
'Left',
'Lower',
'No transpose', diag,
221 $ n-j-jb+1, jb, one, a( j+jb, j+jb ), lda,
222 $ a( j+jb, j ), lda )
223 CALL strsm(
'Right',
'Lower',
'No transpose', diag,
224 $ n-j-jb+1, jb, -one, a( j, j ), lda,
225 $ a( j+jb, j ), lda )
230 CALL strti2(
'Lower', diag, jb, a( j, j ), lda, info )
subroutine xerbla(srname, info)
subroutine strmm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRMM
subroutine strsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRSM
subroutine strti2(uplo, diag, n, a, lda, info)
STRTI2 computes the inverse of a triangular matrix (unblocked algorithm).
subroutine strtri(uplo, diag, n, a, lda, info)
STRTRI