172 SUBROUTINE dtbt03( UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB,
173 $ SCALE, CNORM, TSCAL, X, LDX, B, LDB, WORK,
181 CHARACTER DIAG, TRANS, UPLO
182 INTEGER KD, LDAB, LDB, LDX, N, NRHS
183 DOUBLE PRECISION RESID, SCALE, TSCAL
186 DOUBLE PRECISION AB( LDAB, * ), B( LDB, * ), CNORM( * ),
187 $ WORK( * ), X( LDX, * )
193 DOUBLE PRECISION ONE, ZERO
194 PARAMETER ( ONE = 1.0d+0, zero = 0.0d+0 )
198 DOUBLE PRECISION BIGNUM, EPS, ERR, SMLNUM, TNORM, XNORM, XSCAL
203 DOUBLE PRECISION DLAMCH
204 EXTERNAL lsame, idamax, dlamch
210 INTRINSIC abs, dble, max
216 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
220 eps = dlamch(
'Epsilon' )
221 smlnum = dlamch(
'Safe minimum' )
222 bignum = one / smlnum
223 CALL dlabad( smlnum, bignum )
229 IF( lsame( diag,
'N' ) )
THEN
230 IF( lsame( uplo,
'U' ) )
THEN
232 tnorm = max( tnorm, tscal*abs( ab( kd+1, j ) )+
237 tnorm = max( tnorm, tscal*abs( ab( 1, j ) )+cnorm( j ) )
242 tnorm = max( tnorm, tscal+cnorm( j ) )
251 CALL dcopy( n, x( 1, j ), 1, work, 1 )
252 ix = idamax( n, work, 1 )
253 xnorm = max( one, abs( x( ix, j ) ) )
254 xscal = ( one / xnorm ) / dble( kd+1 )
255 CALL dscal( n, xscal, work, 1 )
256 CALL dtbmv( uplo, trans, diag, n, kd, ab, ldab, work, 1 )
257 CALL daxpy( n, -scale*xscal, b( 1, j ), 1, work, 1 )
258 ix = idamax( n, work, 1 )
259 err = tscal*abs( work( ix ) )
260 ix = idamax( n, x( 1, j ), 1 )
261 xnorm = abs( x( ix, j ) )
262 IF( err*smlnum.LE.xnorm )
THEN
269 IF( err*smlnum.LE.tnorm )
THEN
276 resid = max( resid, err )
subroutine dlabad(SMALL, LARGE)
DLABAD
subroutine dcopy(N, DX, INCX, DY, INCY)
DCOPY
subroutine dscal(N, DA, DX, INCX)
DSCAL
subroutine daxpy(N, DA, DX, INCX, DY, INCY)
DAXPY
subroutine dtbmv(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
DTBMV
subroutine dtbt03(UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, SCALE, CNORM, TSCAL, X, LDX, B, LDB, WORK, RESID)
DTBT03