123 SUBROUTINE sgecon( NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK,
137 REAL A( lda, * ), WORK( * )
144 parameter( one = 1.0e+0, zero = 0.0e+0 )
149 INTEGER IX, KASE, KASE1
150 REAL AINVNM, SCALE, SL, SMLNUM, SU
156 LOGICAL LSAME, SISNAN
159 EXTERNAL lsame, isamax, slamch, sisnan
172 onenrm = norm.EQ.
'1' .OR. lsame( norm,
'O' )
173 IF( .NOT.onenrm .AND. .NOT.lsame( norm,
'I' ) )
THEN 175 ELSE IF( n.LT.0 )
THEN 177 ELSE IF( lda.LT.max( 1, n ) )
THEN 179 ELSE IF( anorm.LT.zero .OR. sisnan( anorm ) )
THEN 183 CALL xerbla(
'SGECON', -info )
193 ELSE IF( anorm.EQ.zero )
THEN 197 smlnum = slamch(
'Safe minimum' )
210 CALL slacn2( n, work( n+1 ), work, iwork, ainvnm, kase, isave )
212 IF( kase.EQ.kase1 )
THEN 216 CALL slatrs(
'Lower',
'No transpose',
'Unit', normin, n, a,
217 $ lda, work, sl, work( 2*n+1 ), info )
221 CALL slatrs(
'Upper',
'No transpose',
'Non-unit', normin, n,
222 $ a, lda, work, su, work( 3*n+1 ), info )
227 CALL slatrs(
'Upper',
'Transpose',
'Non-unit', normin, n, a,
228 $ lda, work, su, work( 3*n+1 ), info )
232 CALL slatrs(
'Lower',
'Transpose',
'Unit', normin, n, a,
233 $ lda, work, sl, work( 2*n+1 ), info )
240 IF( scale.NE.one )
THEN 241 ix = isamax( n, work, 1 )
242 IF( scale.LT.abs( work( ix ) )*smlnum .OR. scale.EQ.zero )
244 CALL srscl( n, scale, work, 1 )
252 $ rcond = ( one / ainvnm ) / anorm
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine slatrs(UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE, CNORM, INFO)
SLATRS solves a triangular system of equations with the scale factor set to prevent overflow...
subroutine sgecon(NORM, N, A, LDA, ANORM, RCOND, WORK, IWORK, INFO)
SGECON
subroutine slacn2(N, V, X, ISGN, EST, KASE, ISAVE)
SLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
subroutine srscl(N, SA, SX, INCX)
SRSCL multiplies a vector by the reciprocal of a real scalar.