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 )
subroutine xerbla(SRNAME, INFO)
XERBLA
logical function lsame(CA, CB)
LSAME
subroutine strmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
STRMM
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
set ue cd $ADTTMP cat<< EOF > tmp f Program LinearEquations Implicit none Real j
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
subroutine strsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
STRSM