132 SUBROUTINE dpbcon( UPLO, N, KD, AB, LDAB, ANORM, RCOND, WORK,
142 INTEGER INFO, KD, LDAB, N
143 DOUBLE PRECISION ANORM, RCOND
147 DOUBLE PRECISION AB( ldab, * ), WORK( * )
153 DOUBLE PRECISION ONE, ZERO
154 parameter ( one = 1.0d+0, zero = 0.0d+0 )
160 DOUBLE PRECISION AINVNM, SCALE, SCALEL, SCALEU, SMLNUM
168 DOUBLE PRECISION DLAMCH
169 EXTERNAL lsame, idamax, dlamch
182 upper = lsame( uplo,
'U' )
183 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
185 ELSE IF( n.LT.0 )
THEN
187 ELSE IF( kd.LT.0 )
THEN
189 ELSE IF( ldab.LT.kd+1 )
THEN
191 ELSE IF( anorm.LT.zero )
THEN
195 CALL xerbla(
'DPBCON', -info )
205 ELSE IF( anorm.EQ.zero )
THEN
209 smlnum = dlamch(
'Safe minimum' )
216 CALL dlacn2( n, work( n+1 ), work, iwork, ainvnm, kase, isave )
222 CALL dlatbs(
'Upper',
'Transpose',
'Non-unit', normin, n,
223 $ kd, ab, ldab, work, scalel, work( 2*n+1 ),
229 CALL dlatbs(
'Upper',
'No transpose',
'Non-unit', normin, n,
230 $ kd, ab, ldab, work, scaleu, work( 2*n+1 ),
236 CALL dlatbs(
'Lower',
'No transpose',
'Non-unit', normin, n,
237 $ kd, ab, ldab, work, scalel, work( 2*n+1 ),
243 CALL dlatbs(
'Lower',
'Transpose',
'Non-unit', normin, n,
244 $ kd, ab, ldab, work, scaleu, work( 2*n+1 ),
250 scale = scalel*scaleu
251 IF( scale.NE.one )
THEN
252 ix = idamax( n, work, 1 )
253 IF( scale.LT.abs( work( ix ) )*smlnum .OR. scale.EQ.zero )
255 CALL drscl( n, scale, work, 1 )
263 $ rcond = ( one / ainvnm ) / anorm
subroutine dlacn2(N, V, X, ISGN, EST, KASE, ISAVE)
DLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dpbcon(UPLO, N, KD, AB, LDAB, ANORM, RCOND, WORK, IWORK, INFO)
DPBCON
subroutine dlatbs(UPLO, TRANS, DIAG, NORMIN, N, KD, AB, LDAB, X, SCALE, CNORM, INFO)
DLATBS solves a triangular banded system of equations.
subroutine drscl(N, SA, SX, INCX)
DRSCL multiplies a vector by the reciprocal of a real scalar.