107 SUBROUTINE dgetrf( M, N, A, LDA, IPIV, INFO )
114 INTEGER INFO, LDA, M, N
118 DOUBLE PRECISION A( LDA, * )
125 parameter( one = 1.0d+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(
'DGETRF', -info )
159 IF( m.EQ.0 .OR. n.EQ.0 )
164 nb = ilaenv( 1,
'DGETRF',
' ', m, n, -1, -1 )
165 IF( nb.LE.1 .OR. nb.GE.min( m, n ) )
THEN
169 CALL dgetrf2( 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 dgetrf2( 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 dlaswp( j-1, a, lda, j, j+jb-1, ipiv, 1 )
198 CALL dlaswp( n-j-jb+1, a( 1, j+jb ), lda, j, j+jb-1,
203 CALL dtrsm(
'Left',
'Lower',
'No transpose',
'Unit', jb,
204 $ n-j-jb+1, one, a( j, j ), lda, a( j, j+jb ),
210 CALL dgemm(
'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)
subroutine dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
DGEMM
recursive subroutine dgetrf2(m, n, a, lda, ipiv, info)
DGETRF2
subroutine dgetrf(m, n, a, lda, ipiv, info)
DGETRF
subroutine dlaswp(n, a, lda, k1, k2, ipiv, incx)
DLASWP performs a series of row interchanges on a general rectangular matrix.
subroutine dtrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
DTRSM