109 SUBROUTINE sgetrf( M, N, A, LDA, IPIV, INFO )
117 INTEGER INFO, LDA, M, N
128 parameter ( one = 1.0e+0 )
131 INTEGER I, IINFO, J, JB, NB
150 ELSE IF( n.LT.0 )
THEN
152 ELSE IF( lda.LT.max( 1, m ) )
THEN
156 CALL xerbla(
'SGETRF', -info )
162 IF( m.EQ.0 .OR. n.EQ.0 )
167 nb = ilaenv( 1,
'SGETRF',
' ', m, n, -1, -1 )
168 IF( nb.LE.1 .OR. nb.GE.min( m, n ) )
THEN
172 CALL sgetrf2( m, n, a, lda, ipiv, info )
177 DO 20 j = 1, min( m, n ), nb
178 jb = min( min( m, n )-j+1, nb )
183 CALL sgetrf2( m-j+1, jb, a( j, j ), lda, ipiv( j ), iinfo )
187 IF( info.EQ.0 .AND. iinfo.GT.0 )
188 $ info = iinfo + j - 1
189 DO 10 i = j, min( m, j+jb-1 )
190 ipiv( i ) = j - 1 + ipiv( i )
195 CALL slaswp( j-1, a, lda, j, j+jb-1, ipiv, 1 )
201 CALL slaswp( n-j-jb+1, a( 1, j+jb ), lda, j, j+jb-1,
206 CALL strsm(
'Left',
'Lower',
'No transpose',
'Unit', jb,
207 $ n-j-jb+1, one, a( j, j ), lda, a( j, j+jb ),
213 CALL sgemm(
'No transpose',
'No transpose', m-j-jb+1,
214 $ n-j-jb+1, jb, -one, a( j+jb, j ), lda,
215 $ a( j, j+jb ), lda, one, a( j+jb, j+jb ),
subroutine strsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
STRSM
subroutine slaswp(N, A, LDA, K1, K2, IPIV, INCX)
SLASWP performs a series of row interchanges on a general rectangular matrix.
subroutine sgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
SGEMM
subroutine sgetrf(M, N, A, LDA, IPIV, INFO)
SGETRF
recursive subroutine sgetrf2(M, N, A, LDA, IPIV, INFO)
SGETRF2
subroutine xerbla(SRNAME, INFO)
XERBLA