146 SUBROUTINE sgbcon( NORM, N, KL, KU, AB, LDAB, IPIV, ANORM, RCOND,
147 $ WORK, IWORK, INFO )
156 INTEGER INFO, KL, KU, LDAB, N
160 INTEGER IPIV( * ), IWORK( * )
161 REAL AB( ldab, * ), WORK( * )
168 parameter( one = 1.0e+0, zero = 0.0e+0 )
171 LOGICAL LNOTI, ONENRM
173 INTEGER IX, J, JP, KASE, KASE1, KD, LM
174 REAL AINVNM, SCALE, SMLNUM, T
183 EXTERNAL lsame, isamax, sdot, slamch
196 onenrm = norm.EQ.
'1' .OR. lsame( norm,
'O' )
197 IF( .NOT.onenrm .AND. .NOT.lsame( norm,
'I' ) )
THEN 199 ELSE IF( n.LT.0 )
THEN 201 ELSE IF( kl.LT.0 )
THEN 203 ELSE IF( ku.LT.0 )
THEN 205 ELSE IF( ldab.LT.2*kl+ku+1 )
THEN 207 ELSE IF( anorm.LT.zero )
THEN 211 CALL xerbla(
'SGBCON', -info )
221 ELSE IF( anorm.EQ.zero )
THEN 225 smlnum = slamch(
'Safe minimum' )
240 CALL slacn2( n, work( n+1 ), work, iwork, ainvnm, kase, isave )
242 IF( kase.EQ.kase1 )
THEN 252 work( jp ) = work( j )
255 CALL saxpy( lm, -t, ab( kd+1, j ), 1, work( j+1 ), 1 )
261 CALL slatbs(
'Upper',
'No transpose',
'Non-unit', normin, n,
262 $ kl+ku, ab, ldab, work, scale, work( 2*n+1 ),
268 CALL slatbs(
'Upper',
'Transpose',
'Non-unit', normin, n,
269 $ kl+ku, ab, ldab, work, scale, work( 2*n+1 ),
275 DO 30 j = n - 1, 1, -1
277 work( j ) = work( j ) - sdot( lm, ab( kd+1, j ), 1,
282 work( jp ) = work( j )
292 IF( scale.NE.one )
THEN 293 ix = isamax( n, work, 1 )
294 IF( scale.LT.abs( work( ix ) )*smlnum .OR. scale.EQ.zero )
296 CALL srscl( n, scale, work, 1 )
304 $ rcond = ( one / ainvnm ) / anorm
subroutine srscl(N, SA, SX, INCX)
SRSCL multiplies a vector by the reciprocal of a real scalar.
subroutine slatbs(UPLO, TRANS, DIAG, NORMIN, N, KD, AB, LDAB, X, SCALE, CNORM, INFO)
SLATBS solves a triangular banded system of equations.
subroutine sgbcon(NORM, N, KL, KU, AB, LDAB, IPIV, ANORM, RCOND, WORK, IWORK, INFO)
SGBCON
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine saxpy(N, SA, SX, INCX, SY, INCY)
SAXPY
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...