101 SUBROUTINE zgetrf ( M, N, A, LDA, IPIV, INFO)
108 INTEGER INFO, LDA, M, N
112 COMPLEX*16 A( LDA, * )
119 parameter( one = ( 1.0d+0, 0.0d+0 ) )
122 INTEGER I, IINFO, J, JB, NB
141 ELSE IF( n.LT.0 )
THEN
143 ELSE IF( lda.LT.max( 1, m ) )
THEN
147 CALL xerbla(
'ZGETRF', -info )
153 IF( m.EQ.0 .OR. n.EQ.0 )
158 nb = ilaenv( 1,
'ZGETRF',
' ', m, n, -1, -1 )
159 IF( nb.LE.1 .OR. nb.GE.min( m, n ) )
THEN
163 CALL zgetf2( m, n, a, lda, ipiv, info )
168 DO 20 j = 1, min( m, n ), nb
169 jb = min( min( m, n )-j+1, nb )
173 CALL zgemm(
'No transpose',
'No transpose',
174 $ m-j+1, jb, j-1, -one,
175 $ a( j, 1 ), lda, a( 1, j ), lda, one,
182 CALL zgetf2( m-j+1, jb, a( j, j ), lda, ipiv( j ), iinfo )
186 IF( info.EQ.0 .AND. iinfo.GT.0 )
187 $ info = iinfo + j - 1
188 DO 10 i = j, min( m, j+jb-1 )
189 ipiv( i ) = j - 1 + ipiv( i )
194 CALL zlaswp( j-1, a, lda, j, j+jb-1, ipiv, 1 )
196 IF ( j+jb.LE.n )
THEN
200 CALL zlaswp( n-j-jb+1, a( 1, j+jb ), lda, j, j+jb-1,
203 CALL zgemm(
'No transpose',
'No transpose',
204 $ jb, n-j-jb+1, j-1, -one,
205 $ a( j, 1 ), lda, a( 1, j+jb ), lda, one,
206 $ a( j, j+jb ), lda )
210 CALL ztrsm(
'Left',
'Lower',
'No transpose',
'Unit',
211 $ jb, n-j-jb+1, one, a( j, j ), lda,
212 $ a( j, j+jb ), lda )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
ZGEMM
subroutine ztrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
ZTRSM
subroutine zgetf2(M, N, A, LDA, IPIV, INFO)
ZGETF2 computes the LU factorization of a general m-by-n matrix using partial pivoting with row inter...
subroutine zlaswp(N, A, LDA, K1, K2, IPIV, INCX)
ZLASWP performs a series of row interchanges on a general rectangular matrix.
subroutine zgetrf(M, N, A, LDA, IPIV, INFO)
ZGETRF VARIANT: Crout Level 3 BLAS version of the algorithm.