187 SUBROUTINE dpbrfs( UPLO, N, KD, NRHS, AB, LDAB, AFB, LDAFB, B,
188 $ LDB, X, LDX, FERR, BERR, WORK, IWORK, INFO )
196 INTEGER INFO, KD, LDAB, LDAFB, LDB, LDX, N, NRHS
200 DOUBLE PRECISION AB( LDAB, * ), AFB( LDAFB, * ), B( LDB, * ),
201 $ berr( * ), ferr( * ), work( * ), x( ldx, * )
208 parameter( itmax = 5 )
209 DOUBLE PRECISION ZERO
210 parameter( zero = 0.0d+0 )
212 parameter( one = 1.0d+0 )
214 parameter( two = 2.0d+0 )
215 DOUBLE PRECISION THREE
216 parameter( three = 3.0d+0 )
220 INTEGER COUNT, I, J, K, KASE, L, NZ
221 DOUBLE PRECISION EPS, LSTRES, S, SAFE1, SAFE2, SAFMIN, XK
234 DOUBLE PRECISION DLAMCH
235 EXTERNAL lsame, dlamch
242 upper = lsame( uplo, 'u
' )
243.NOT..AND..NOT.
IF( UPPER LSAME( UPLO, 'l
' ) ) THEN
245.LT.
ELSE IF( N0 ) THEN
247.LT.
ELSE IF( KD0 ) THEN
249.LT.
ELSE IF( NRHS0 ) THEN
251.LT.
ELSE IF( LDABKD+1 ) THEN
253.LT.
ELSE IF( LDAFBKD+1 ) THEN
255.LT.
ELSE IF( LDBMAX( 1, N ) ) THEN
257.LT.
ELSE IF( LDXMAX( 1, N ) ) THEN
261 CALL XERBLA( 'dpbrfs', -INFO )
267.EQ..OR..EQ.
IF( N0 NRHS0 ) THEN
277 NZ = MIN( N+1, 2*KD+2 )
278 EPS = DLAMCH( 'epsilon
' )
279 SAFMIN = DLAMCH( 'safe minimum
' )
295 CALL DCOPY( N, B( 1, J ), 1, WORK( N+1 ), 1 )
296 CALL DSBMV( UPLO, N, KD, -ONE, AB, LDAB, X( 1, J ), 1, ONE,
309 WORK( I ) = ABS( B( I, J ) )
317 XK = ABS( X( K, J ) )
319 DO 40 I = MAX( 1, K-KD ), K - 1
320 WORK( I ) = WORK( I ) + ABS( AB( L+I, K ) )*XK
321 S = S + ABS( AB( L+I, K ) )*ABS( X( I, J ) )
323 WORK( K ) = WORK( K ) + ABS( AB( KD+1, K ) )*XK + S
328 XK = ABS( X( K, J ) )
329 WORK( K ) = WORK( K ) + ABS( AB( 1, K ) )*XK
331 DO 60 I = K + 1, MIN( N, K+KD )
332 WORK( I ) = WORK( I ) + ABS( AB( L+I, K ) )*XK
333 S = S + ABS( AB( L+I, K ) )*ABS( X( I, J ) )
335 WORK( K ) = WORK( K ) + S
340.GT.
IF( WORK( I )SAFE2 ) THEN
341 S = MAX( S, ABS( WORK( N+I ) ) / WORK( I ) )
343 S = MAX( S, ( ABS( WORK( N+I ) )+SAFE1 ) /
344 $ ( WORK( I )+SAFE1 ) )
355.GT..AND..LE..AND.
IF( BERR( J )EPS TWO*BERR( J )LSTRES
356.LE.
$ COUNTITMAX ) THEN
360 CALL DPBTRS( UPLO, N, KD, 1, AFB, LDAFB, WORK( N+1 ), N,
362 CALL DAXPY( N, ONE, WORK( N+1 ), 1, X( 1, J ), 1 )
391.GT.
IF( WORK( I )SAFE2 ) THEN
392 WORK( I ) = ABS( WORK( N+I ) ) + NZ*EPS*WORK( I )
394 WORK( I ) = ABS( WORK( N+I ) ) + NZ*EPS*WORK( I ) + SAFE1
400 CALL DLACN2( N, WORK( 2*N+1 ), WORK( N+1 ), IWORK, FERR( J ),
407 CALL DPBTRS( UPLO, N, KD, 1, AFB, LDAFB, WORK( N+1 ), N,
410 WORK( N+I ) = WORK( N+I )*WORK( I )
412.EQ.
ELSE IF( KASE2 ) THEN
417 WORK( N+I ) = WORK( N+I )*WORK( I )
419 CALL DPBTRS( UPLO, N, KD, 1, AFB, LDAFB, WORK( N+1 ), N,
429 LSTRES = MAX( LSTRES, ABS( X( I, J ) ) )
432 $ FERR( J ) = FERR( J ) / LSTRES
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 dpbtrs(uplo, n, kd, nrhs, ab, ldab, b, ldb, info)
DPBTRS
subroutine dpbrfs(uplo, n, kd, nrhs, ab, ldab, afb, ldafb, b, ldb, x, ldx, ferr, berr, work, iwork, info)
DPBRFS
subroutine dsbmv(uplo, n, k, alpha, a, lda, x, incx, beta, y, incy)
DSBMV