153 SUBROUTINE dtbt02( UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, X,
154 $ LDX, B, LDB, WORK, RESID )
161 CHARACTER DIAG, TRANS, UPLO
162 INTEGER KD, LDAB, LDB, LDX, N, NRHS
163 DOUBLE PRECISION RESID
166 DOUBLE PRECISION AB( LDAB, * ), B( LDB, * ), WORK( * ),
173 DOUBLE PRECISION ZERO, ONE
174 parameter( zero = 0.0d+0, one = 1.0d+0 )
178 DOUBLE PRECISION ANORM, BNORM, EPS, XNORM
182 DOUBLE PRECISION DASUM, DLAMCH, DLANTB
183 EXTERNAL lsame, dasum, dlamch, dlantb
195 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
202 IF( lsame( trans,
'N' ) )
THEN
203 anorm = dlantb(
'1', uplo, diag, n, kd, ab, ldab, work )
205 anorm = dlantb(
'I', uplo, diag, n, kd, ab, ldab, work )
210 eps = dlamch(
'Epsilon' )
211 IF( anorm.LE.zero )
THEN
221 CALL dcopy( n, x( 1, j ), 1, work, 1 )
222 CALL dtbmv( uplo, trans, diag, n, kd, ab, ldab, work, 1 )
223 CALL daxpy( n, -one, b( 1, j ), 1, work, 1 )
224 bnorm = dasum( n, work, 1 )
225 xnorm = dasum( n, x( 1, j ), 1 )
226 IF( xnorm.LE.zero )
THEN
229 resid = max( resid, ( ( bnorm / anorm ) / xnorm ) / eps )
subroutine dcopy(N, DX, INCX, DY, INCY)
DCOPY
subroutine daxpy(N, DA, DX, INCX, DY, INCY)
DAXPY
subroutine dtbmv(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
DTBMV
subroutine dtbt02(UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, X, LDX, B, LDB, WORK, RESID)
DTBT02