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 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 xerbla(SRNAME, INFO)
XERBLA
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