107 SUBROUTINE cgetrf( M, N, A, LDA, IPIV, INFO )
114 INTEGER INFO, LDA, M, N
125 parameter( one = ( 1.0e+0, 0.0e+0 ) )
128 INTEGER I, IINFO, J, JB, NB
147 ELSE IF( n.LT.0 )
THEN 149 ELSE IF( lda.LT.max( 1, m ) )
THEN 153 CALL xerbla(
'CGETRF', -info )
159 IF( m.EQ.0 .OR. n.EQ.0 )
164 nb = ilaenv( 1,
'CGETRF',
' ', m, n, -1, -1 )
165 IF( nb.LE.1 .OR. nb.GE.min( m, n ) )
THEN 169 CALL cgetrf2( m, n, a, lda, ipiv, info )
174 DO 20 j = 1, min( m, n ), nb
175 jb = min( min( m, n )-j+1, nb )
180 CALL cgetrf2( m-j+1, jb, a( j, j ), lda, ipiv( j ), iinfo )
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 claswp( j-1, a, lda, j, j+jb-1, ipiv, 1 )
198 CALL claswp( n-j-jb+1, a( 1, j+jb ), lda, j, j+jb-1,
203 CALL ctrsm(
'Left',
'Lower',
'No transpose',
'Unit', jb,
204 $ n-j-jb+1, one, a( j, j ), lda, a( j, j+jb ),
210 CALL cgemm(
'No transpose',
'No transpose', m-j-jb+1,
211 $ n-j-jb+1, jb, -one, a( j+jb, j ), lda,
212 $ a( j, j+jb ), lda, one, a( j+jb, j+jb ),
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ctrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CTRSM
subroutine cgetrf(M, N, A, LDA, IPIV, INFO)
CGETRF
subroutine cgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CGEMM
recursive subroutine cgetrf2(M, N, A, LDA, IPIV, INFO)
CGETRF2
subroutine claswp(N, A, LDA, K1, K2, IPIV, INCX)
CLASWP performs a series of row interchanges on a general rectangular matrix.