105 SUBROUTINE zgetrf( M, N, A, LDA, IPIV, INFO )
112 INTEGER INFO, LDA, M, N
116 COMPLEX*16 A( LDA, * )
123 parameter( one = ( 1.0d+0, 0.0d+0 ) )
126 INTEGER I, IINFO, J, JB, NB
146 ELSE IF( n.LT.0 )
THEN
148 ELSE IF( lda.LT.max( 1, m ) )
THEN
152 CALL xerbla(
'ZGETRF', -info )
158 IF( m.EQ.0 .OR. n.EQ.0 )
163 nb = ilaenv( 1,
'ZGETRF',
' ', m, n, -1, -1 )
164 IF( nb.LE.1 .OR. nb.GE.min( m, n ) )
THEN
168 CALL zgetrf2( m, n, a, lda, ipiv, info )
173 DO 20 j = 1, min( m, n ), nb
174 jb = min( min( m, n )-j+1, nb )
179 CALL zgetrf2( m-j+1, jb, a( j, j ), lda, ipiv( j ),
184 IF( info.EQ.0 .AND. iinfo.GT.0 )
185 $ info = iinfo + j - 1
186 DO 10 i = j, min( m, j+jb-1 )
187 ipiv( i ) = j - 1 + ipiv( i )
192 CALL zlaswp( j-1, a, lda, j, j+jb-1, ipiv, 1 )
198 CALL zlaswp( n-j-jb+1, a( 1, j+jb ), lda, j, j+jb-1,
203 CALL ztrsm(
'Left',
'Lower',
'No transpose',
'Unit',
205 $ n-j-jb+1, one, a( j, j ), lda, a( j, j+jb ),
211 CALL zgemm(
'No transpose',
'No transpose',
213 $ n-j-jb+1, jb, -one, a( j+jb, j ), lda,
214 $ a( j, j+jb ), lda, one, a( j+jb, j+jb ),
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM
subroutine zlaswp(n, a, lda, k1, k2, ipiv, incx)
ZLASWP performs a series of row interchanges on a general rectangular matrix.
subroutine ztrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
ZTRSM