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, , K, 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 )
169 DO 20 j = 1,
min( m, n ), nb
170 jb =
min(
min( m, n )-j+1, nb )
175 DO 30 k = 1, j-nb, nb
179 CALL claswp( jb, a(1, j), lda, k, k+nb-1, ipiv, 1 )
183 CALL ctrsm(
'Left',
'Lower',
'No transpose''Unit',
184 $ nb, jb, one, a( k, k ), lda,
189 CALL cgemm(
'No transpose',
'No transpose',
190 $ m-k-nb+1, jb, nb, -one,
191 $ a( k+nb, k ), lda, a( k, j ), lda, one,
192 $ a( k+nb, j ), lda )
198 CALL cgetf2( m-j+1, jb, a( j, j ), lda, ipiv( j ), iinfo )
202 IF( info.EQ.0 .AND. iinfo.GT.0 )
203 $ info = iinfo + j - 1
204 DO 10 i = j,
min( m, j+jb-1 )
205 ipiv( i ) = j - 1 + ipiv( i )
213 DO 40 k = 1,
min( m, n ), nb
214 CALL claswp( k-1, a( 1, 1 ), lda, k,
215 $
min(k+nb-1,
min( m, n )), ipiv, 1 )
222 CALL claswp( n-m, a(1, m+1), lda, 1, m, ipiv, 1 )
226 jb =
min( m-k+1, nb )
228 CALL ctrsm(
'Left', 'lower
', 'no transpose
', 'unit
',
229 $ JB, N-M, ONE, A( K, K ), LDA,
233.LE.
IF ( K+NBM ) THEN
234 CALL CGEMM( 'no transpose
', 'no transpose
',
235 $ M-K-NB+1, N-M, NB, -ONE,
236 $ A( K+NB, K ), LDA, A( K, M+1 ), LDA, ONE,
237 $ A( K+NB, M+1 ), LDA )
subroutine xerbla(srname, info)
XERBLA
subroutine cgetrf(m, n, a, lda, ipiv, info)
CGETRF
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 claswp(n, a, lda, k1, k2, ipiv, incx)
CLASWP performs a series of row interchanges on a general rectangular matrix.
subroutine ctrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
CTRSM
subroutine cgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
CGEMM