101 SUBROUTINE dgetrf ( M, N, A, LDA, IPIV, INFO)
108 INTEGER INFO, LDA, M, N
112 DOUBLE PRECISION A( LDA, * )
119 parameter( one = 1.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(
'DGETRF', -info )
153 IF( m.EQ.0 .OR. n.EQ.0 )
158 nb = ilaenv( 1,
'DGETRF',
' ', m, n, -1, -1 )
159 IF( nb.LE.1 .OR. nb.GE.min( m, n ) )
THEN
163 CALL dgetf2( 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 dgemm(
'No transpose',
'No transpose',
174 $ m-j+1, jb, j-1, -one,
175 $ a( j, 1 ), lda, a( 1, j ), lda, one,
182 CALL dgetf2( 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 dlaswp( j-1, a, lda, j, j+jb-1, ipiv, 1 )
196 IF ( j+jb.LE.n )
THEN
200 CALL dlaswp( n-j-jb+1, a( 1, j+jb ), lda, j, j+jb-1,
203 CALL dgemm(
'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 dtrsm(
'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 dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRSM
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DGEMM
subroutine dgetrf(M, N, A, LDA, IPIV, INFO)
DGETRF
subroutine dgetf2(M, N, A, LDA, IPIV, INFO)
DGETF2 computes the LU factorization of a general m-by-n matrix using partial pivoting with row inter...
subroutine dlaswp(N, A, LDA, K1, K2, IPIV, INCX)
DLASWP performs a series of row interchanges on a general rectangular matrix.