115 SUBROUTINE zgetri( N, A, LDA, IPIV, WORK, LWORK, INFO )
123 INTEGER INFO, LDA, LWORK, N
127 COMPLEX*16 A( lda, * ), WORK( * )
134 parameter ( zero = ( 0.0d+0, 0.0d+0 ),
135 $ one = ( 1.0d+0, 0.0d+0 ) )
139 INTEGER I, IWS, J, JB, JJ, JP, LDWORK, LWKOPT, NB,
157 nb = ilaenv( 1,
'ZGETRI',
' ', n, -1, -1, -1 )
160 lquery = ( lwork.EQ.-1 )
163 ELSE IF( lda.LT.max( 1, n ) )
THEN
165 ELSE IF( lwork.LT.max( 1, n ) .AND. .NOT.lquery )
THEN
169 CALL xerbla(
'ZGETRI', -info )
171 ELSE IF( lquery )
THEN
183 CALL ztrtri(
'Upper',
'Non-unit', n, a, lda, info )
189 IF( nb.GT.1 .AND. nb.LT.n )
THEN
190 iws = max( ldwork*nb, 1 )
191 IF( lwork.LT.iws )
THEN
193 nbmin = max( 2, ilaenv( 2,
'ZGETRI',
' ', n, -1, -1, -1 ) )
201 IF( nb.LT.nbmin .OR. nb.GE.n )
THEN
210 work( i ) = a( i, j )
217 $
CALL zgemv(
'No transpose', n, n-j, -one, a( 1, j+1 ),
218 $ lda, work( j+1 ), 1, one, a( 1, j ), 1 )
224 nn = ( ( n-1 ) / nb )*nb + 1
226 jb = min( nb, n-j+1 )
231 DO 40 jj = j, j + jb - 1
233 work( i+( jj-j )*ldwork ) = a( i, jj )
241 $
CALL zgemm(
'No transpose',
'No transpose', n, jb,
242 $ n-j-jb+1, -one, a( 1, j+jb ), lda,
243 $ work( j+jb ), ldwork, one, a( 1, j ), lda )
244 CALL ztrsm(
'Right',
'Lower',
'No transpose',
'Unit', n, jb,
245 $ one, work( j ), ldwork, a( 1, j ), lda )
251 DO 60 j = n - 1, 1, -1
254 $
CALL zswap( n, a( 1, j ), 1, a( 1, jp ), 1 )
subroutine zgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
ZGEMV
subroutine zswap(N, ZX, INCX, ZY, INCY)
ZSWAP
subroutine zgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
ZGEMM
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zgetri(N, A, LDA, IPIV, WORK, LWORK, INFO)
ZGETRI
subroutine ztrtri(UPLO, DIAG, N, A, LDA, INFO)
ZTRTRI
subroutine ztrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
ZTRSM