1 SUBROUTINE dgetrf( M, N, A, LDA, IPIV, INFO )
9 INTEGER INFO, LDA, M, N
13 DOUBLE PRECISION A( LDA, * )
63 parameter( one = 1.0d+0 )
66 INTEGER I, IINFO, J, JB, NB
85 ELSE IF( n.LT.0 )
THEN
87 ELSE IF( lda.LT.max( 1, m ) )
THEN
91 CALL xerbla(
'DGETRF', -info )
97 IF( m.EQ.0 .OR. n.EQ.0 )
102 nb = ilaenv( 1,
'DGETRF',
' ', m, n, -1, -1 )
103 IF( nb.LE.1 .OR. nb.GE.min( m, n ) )
THEN
107 CALL dgetf2( m, n, a, lda, ipiv, info )
112 DO 20 j = 1, min( m, n ), nb
113 jb = min( min( m, n )-j+1, nb )
118 CALL dgetf2( m-j+1, jb, a( j, j ), lda, ipiv( j ), iinfo )
122 IF( info.EQ.0 .AND. iinfo.GT.0 )
123 $ info = iinfo + j - 1
124 DO 10 i = j, min( m, j+jb-1 )
125 ipiv( i ) = j - 1 + ipiv( i )
130 CALL dlaswp( j-1, a, lda, j, j+jb-1, ipiv, 1 )
136 CALL dlaswp( n-j-jb+1, a( 1, j+jb ), lda, j, j+jb-1,
141 CALL dtrsm(
'Left',
'Lower',
'No transpose',
'Unit', jb,
142 $ n-j-jb+1, one, a( j, j ), lda, a( j, j+jb ),
148 CALL dgemm(
'No transpose',
'No transpose', m-j-jb+1,
149 $ n-j-jb+1, jb, -one, a( j+jb, j ), lda,
150 $ a( j, j+jb ), lda, one, a( j+jb, j+jb ),
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
subroutine dgetf2(M, N, A, LDA, IPIV, INFO)
subroutine dgetrf(M, N, A, LDA, IPIV, INFO)
subroutine dlaswp(N, A, LDA, K1, K2, IPIV, INCX)
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
subroutine xerbla(SRNAME, INFO)