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
228 IF( lsame( diag,
'N' ) )
THEN
229 IF( lsame( uplo,
'U' ) )
THEN
231 tnorm = max( tnorm, tscal*abs( ab( kd+1, j ) )+
236 tnorm = max( tnorm, tscal*abs( ab( 1, j ) )+cnorm( j ) )
241 tnorm = max( tnorm, tscal+cnorm( j ) )
250 CALL dcopy( n, x( 1, j ), 1, work, 1 )
251 ix = idamax( n, work, 1 )
252 xnorm = max( one, abs( x( ix, j ) ) )
253 xscal = ( one / xnorm ) / dble( kd+1 )
254 CALL dscal( n, xscal, work, 1 )
255 CALL dtbmv( uplo, trans, diag, n, kd, ab, ldab, work, 1 )
256 CALL daxpy( n, -scale*xscal, b( 1, j ), 1, work, 1 )
257 ix = idamax( n, work, 1 )
258 err = tscal*abs( work( ix ) )
259 ix = idamax( n, x( 1, j ), 1 )
260 xnorm = abs( x( ix, j ) )
261 IF( err*smlnum.LE.xnorm )
THEN
268 IF( err*smlnum.LE.tnorm )
THEN
275 resid = max( resid, err )
subroutine dtbt03(uplo, trans, diag, n, kd, nrhs, ab, ldab, scale, cnorm, tscal, x, ldx, b, ldb, work, resid)
DTBT03
subroutine daxpy(n, da, dx, incx, dy, incy)
DAXPY
subroutine dcopy(n, dx, incx, dy, incy)
DCOPY
subroutine dscal(n, da, dx, incx)
DSCAL
subroutine dtbmv(uplo, trans, diag, n, k, a, lda, x, incx)
DTBMV