114 RECURSIVE SUBROUTINE sgetrf2( M, N, A, LDA, IPIV, INFO )
122 INTEGER INFO, LDA, M, N
133 parameter ( one = 1.0e+0, zero = 0.0e+0 )
137 INTEGER I, IINFO, n1, n2
142 EXTERNAL slamch, isamax
157 ELSE IF( n.LT.0 )
THEN
159 ELSE IF( lda.LT.max( 1, m ) )
THEN
163 CALL xerbla(
'SGETRF2', -info )
169 IF( m.EQ.0 .OR. n.EQ.0 )
178 IF ( a(1,1).EQ.zero )
181 ELSE IF( n.EQ.1 )
THEN
192 i = isamax( m, a( 1, 1 ), 1 )
194 IF( a( i, 1 ).NE.zero )
THEN
200 a( 1, 1 ) = a( i, 1 )
206 IF( abs(a( 1, 1 )) .GE. sfmin )
THEN
207 CALL sscal( m-1, one / a( 1, 1 ), a( 2, 1 ), 1 )
210 a( 1+i, 1 ) = a( 1+i, 1 ) / a( 1, 1 )
229 CALL sgetrf2( m, n1, a, lda, ipiv, iinfo )
231 IF ( info.EQ.0 .AND. iinfo.GT.0 )
238 CALL slaswp( n2, a( 1, n1+1 ), lda, 1, n1, ipiv, 1 )
242 CALL strsm(
'L',
'L',
'N',
'U', n1, n2, one, a, lda,
243 $ a( 1, n1+1 ), lda )
247 CALL sgemm(
'N',
'N', m-n1, n2, n1, -one, a( n1+1, 1 ), lda,
248 $ a( 1, n1+1 ), lda, one, a( n1+1, n1+1 ), lda )
252 CALL sgetrf2( m-n1, n2, a( n1+1, n1+1 ), lda, ipiv( n1+1 ),
257 IF ( info.EQ.0 .AND. iinfo.GT.0 )
259 DO 20 i = n1+1, min( m, n )
260 ipiv( i ) = ipiv( i ) + n1
265 CALL slaswp( n1, a( 1, 1 ), lda, n1+1, min( m, n), ipiv, 1 )
subroutine strsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
STRSM
subroutine sgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
SGEMM
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine slaswp(N, A, LDA, K1, K2, IPIV, INCX)
SLASWP performs a series of row interchanges on a general rectangular matrix.
recursive subroutine sgetrf2(M, N, A, LDA, IPIV, INFO)
SGETRF2
subroutine sscal(N, SA, SX, INCX)
SSCAL