108 SUBROUTINE ztrtri( UPLO, DIAG, N, A, LDA, INFO )
119 COMPLEX*16 A( LDA, * )
126 parameter( one = ( 1.0d+0, 0.0d+0 ),
127 $ zero = ( 0.0d+0, 0.0d+0 ) )
130 LOGICAL NOUNIT, UPPER
131 INTEGER J, JB, NB, NN
136 EXTERNAL lsame, ilaenv
149 upper = lsame( uplo,
'U' )
150 nounit = lsame( diag,
'N' )
151 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
153 ELSE IF( .NOT.nounit .AND. .NOT.lsame( diag,
'U' ) )
THEN
155 ELSE IF( n.LT.0 )
THEN
157 ELSE IF( lda.LT.max( 1, n ) )
THEN
161 CALL xerbla(
'ZTRTRI', -info )
174 IF( a( info, info ).EQ.zero )
182 nb = ilaenv( 1,
'ZTRTRI', uplo // diag, n, -1, -1, -1 )
183 IF( nb.LE.1 .OR. nb.GE.n )
THEN
187 CALL ztrti2( uplo, diag, n, a, lda, info )
197 jb = min( nb, n-j+1 )
201 CALL ztrmm(
'Left',
'Upper',
'No transpose', diag, j-1,
202 $ jb, one, a, lda, a( 1, j ), lda )
203 CALL ztrsm(
'Right',
'Upper',
'No transpose', diag, j-1,
204 $ jb, -one, a( j, j ), lda, a( 1, j ), lda )
208 CALL ztrti2(
'Upper', diag, jb, a( j, j ), lda, info )
214 nn = ( ( n-1 ) / nb )*nb + 1
216 jb = min( nb, n-j+1 )
221 CALL ztrmm(
'Left',
'Lower',
'No transpose', diag,
222 $ n-j-jb+1, jb, one, a( j+jb, j+jb ), lda,
223 $ a( j+jb, j ), lda )
224 CALL ztrsm(
'Right',
'Lower',
'No transpose', diag,
225 $ n-j-jb+1, jb, -one, a( j, j ), lda,
226 $ a( j+jb, j ), lda )
231 CALL ztrti2(
'Lower', diag, jb, a( j, j ), lda, info )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ztrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
ZTRSM
subroutine ztrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
ZTRMM
subroutine ztrti2(UPLO, DIAG, N, A, LDA, INFO)
ZTRTI2 computes the inverse of a triangular matrix (unblocked algorithm).
subroutine ztrtri(UPLO, DIAG, N, A, LDA, INFO)
ZTRTRI