107 SUBROUTINE sgetrf( M, N, A, LDA, IPIV, INFO )
114 INTEGER INFO, LDA, M, N
125 parameter( one = 1.0e+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(
'SGETRF', -info )
159 IF( m.EQ.0 .OR. n.EQ.0 )
164 nb = ilaenv( 1,
'SGETRF',
' ', m, n, -1, -1 )
165 IF( nb.LE.1 .OR. nb.GE.min( m, n ) )
THEN 169 CALL sgetrf2( 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 sgetrf2( 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 slaswp( j-1, a, lda, j, j+jb-1, ipiv, 1 )
198 CALL slaswp( n-j-jb+1, a( 1, j+jb ), lda, j, j+jb-1,
203 CALL strsm(
'Left',
'Lower',
'No transpose',
'Unit', jb,
204 $ n-j-jb+1, one, a( j, j ), lda, a( j, j+jb ),
210 CALL sgemm(
'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 strsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
STRSM
recursive subroutine sgetrf2(M, N, A, LDA, IPIV, INFO)
SGETRF2
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sgetrf(M, N, A, LDA, IPIV, INFO)
SGETRF
subroutine sgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
SGEMM
subroutine slaswp(N, A, LDA, K1, K2, IPIV, INCX)
SLASWP performs a series of row interchanges on a general rectangular matrix.