141 SUBROUTINE stbcon( NORM, UPLO, DIAG, N, KD, AB, LDAB, RCOND, WORK,
149 CHARACTER DIAG, NORM, UPLO
150 INTEGER INFO, KD, LDAB, N
155 REAL AB( ldab, * ), WORK( * )
162 parameter( one = 1.0e+0, zero = 0.0e+0 )
165 LOGICAL NOUNIT, ONENRM, UPPER
167 INTEGER IX, KASE, KASE1
168 REAL AINVNM, ANORM, SCALE, SMLNUM, XNORM
177 EXTERNAL lsame, isamax, slamch, slantb
183 INTRINSIC abs, max, real
190 upper = lsame( uplo,
'U' )
191 onenrm = norm.EQ.
'1' .OR. lsame( norm,
'O' )
192 nounit = lsame( diag,
'N' )
194 IF( .NOT.onenrm .AND. .NOT.lsame( norm,
'I' ) )
THEN 196 ELSE IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN 198 ELSE IF( .NOT.nounit .AND. .NOT.lsame( diag,
'U' ) )
THEN 200 ELSE IF( n.LT.0 )
THEN 202 ELSE IF( kd.LT.0 )
THEN 204 ELSE IF( ldab.LT.kd+1 )
THEN 208 CALL xerbla(
'STBCON', -info )
220 smlnum = slamch(
'Safe minimum' )*
REAL( MAX( 1, N ) )
224 anorm = slantb( norm, uplo, diag, n, kd, ab, ldab, work )
228 IF( anorm.GT.zero )
THEN 241 CALL slacn2( n, work( n+1 ), work, iwork, ainvnm, kase, isave )
243 IF( kase.EQ.kase1 )
THEN 247 CALL slatbs( uplo,
'No transpose', diag, normin, n, kd,
248 $ ab, ldab, work, scale, work( 2*n+1 ), info )
253 CALL slatbs( uplo,
'Transpose', diag, normin, n, kd, ab,
254 $ ldab, work, scale, work( 2*n+1 ), info )
260 IF( scale.NE.one )
THEN 261 ix = isamax( n, work, 1 )
262 xnorm = abs( work( ix ) )
263 IF( scale.LT.xnorm*smlnum .OR. scale.EQ.zero )
265 CALL srscl( n, scale, work, 1 )
273 $ rcond = ( one / anorm ) / ainvnm
subroutine stbcon(NORM, UPLO, DIAG, N, KD, AB, LDAB, RCOND, WORK, IWORK, INFO)
STBCON
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine slatbs(UPLO, TRANS, DIAG, NORMIN, N, KD, AB, LDAB, X, SCALE, CNORM, INFO)
SLATBS solves a triangular banded system of equations.
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.