110 SUBROUTINE strtri( UPLO, DIAG, N, A, LDA, INFO )
129 parameter( one = 1.0e+0, zero = 0.0e+0 )
132 LOGICAL nounit, upper
133 INTEGER j, jb, nb, nn
151 upper =
lsame( uplo,
'U' )
152 nounit =
lsame( diag,
'N' )
153 IF( .NOT.upper .AND. .NOT.
lsame( uplo,
'L' ) )
THEN
155 ELSE IF( .NOT.nounit .AND. .NOT.
lsame( diag,
'U' ) )
THEN
157 ELSE IF( n.LT.0 )
THEN
159 ELSE IF( lda.LT.max( 1, n ) )
THEN
163 CALL
xerbla(
'STRTRI', -info )
176 IF( a( info, info ).EQ.zero )
184 nb =
ilaenv( 1,
'STRTRI', uplo // diag, n, -1, -1, -1 )
185 IF( nb.LE.1 .OR. nb.GE.n )
THEN
189 CALL
strti2( uplo, diag, n, a, lda, info )
199 jb = min( nb, n-
j+1 )
203 CALL
strmm(
'Left',
'Upper',
'No transpose', diag,
j-1,
204 $ jb, one, a, lda, a( 1,
j ), lda )
205 CALL
strsm(
'Right',
'Upper',
'No transpose', diag,
j-1,
206 $ jb, -one, a(
j,
j ), lda, a( 1,
j ), lda )
210 CALL
strti2(
'Upper', diag, jb, a(
j,
j ), lda, info )
216 nn = ( ( n-1 ) / nb )*nb + 1
218 jb = min( nb, n-
j+1 )
223 CALL
strmm(
'Left',
'Lower',
'No transpose', diag,
224 $ n-
j-jb+1, jb, one, a(
j+jb,
j+jb ), lda,
225 $ a(
j+jb,
j ), lda )
226 CALL
strsm(
'Right',
'Lower',
'No transpose', diag,
227 $ n-
j-jb+1, jb, -one, a(
j,
j ), lda,
228 $ a(
j+jb,
j ), lda )
233 CALL
strti2(
'Lower', diag, jb, a(
j,
j ), lda, info )