101 SUBROUTINE cgetrf ( M, N, A, LDA, IPIV, INFO)
108 INTEGER INFO, LDA, M, N
119 parameter( one = ( 1.0e+0, 0.0e+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(
'CGETRF', -info )
153 IF( m.EQ.0 .OR. n.EQ.0 )
158 nb = ilaenv( 1,
'CGETRF',
' ', m, n, -1, -1 )
159 IF( nb.LE.1 .OR. nb.GE.min( m, n ) )
THEN
163 CALL cgetf2( 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 cgemm(
'No transpose',
'No transpose',
174 $ m-j+1, jb, j-1, -one,
175 $ a( j, 1 ), lda, a( 1, j ), lda, one,
182 CALL cgetf2( 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 claswp( j-1, a, lda, j, j+jb-1, ipiv, 1 )
196 IF ( j+jb.LE.n )
THEN
200 CALL claswp( n-j-jb+1, a( 1, j+jb ), lda, j, j+jb-1,
203 CALL cgemm(
'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 ctrsm(
'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 cgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CGEMM
subroutine ctrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CTRSM
subroutine cgetf2(M, N, A, LDA, IPIV, INFO)
CGETF2 computes the LU factorization of a general m-by-n matrix using partial pivoting with row inter...
subroutine cgetrf(M, N, A, LDA, IPIV, INFO)
CGETRF
subroutine claswp(N, A, LDA, K1, K2, IPIV, INCX)
CLASWP performs a series of row interchanges on a general rectangular matrix.