159 SUBROUTINE ztbt02( UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, X,
160 $ LDX, B, LDB, WORK, RWORK, RESID )
167 CHARACTER DIAG, TRANS, UPLO
168 INTEGER KD, LDAB, LDB, LDX, N, NRHS
169 DOUBLE PRECISION RESID
172 DOUBLE PRECISION RWORK( * )
173 COMPLEX*16 AB( LDAB, * ), B( LDB, * ), WORK( * ),
180 DOUBLE PRECISION ZERO, ONE
181 parameter( zero = 0.0d+0, one = 1.0d+0 )
185 DOUBLE PRECISION ANORM, BNORM, EPS, XNORM
189 DOUBLE PRECISION DLAMCH, DZASUM, ZLANTB
190 EXTERNAL lsame, dlamch, dzasum, zlantb
196 INTRINSIC dcmplx, max
202 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
209 IF( lsame( trans,
'N' ) )
THEN
210 anorm = zlantb(
'1', uplo, diag, n, kd, ab, ldab, rwork )
212 anorm = zlantb(
'I', uplo, diag, n, kd, ab, ldab, rwork )
217 eps = dlamch(
'Epsilon' )
218 IF( anorm.LE.zero )
THEN
228 CALL zcopy( n, x( 1, j ), 1, work, 1 )
229 CALL ztbmv( uplo, trans, diag, n, kd, ab, ldab, work, 1 )
230 CALL zaxpy( n, dcmplx( -one ), b( 1, j ), 1, work, 1 )
231 bnorm = dzasum( n, work, 1 )
232 xnorm = dzasum( n, x( 1, j ), 1 )
233 IF( xnorm.LE.zero )
THEN
236 resid = max( resid, ( ( bnorm / anorm ) / xnorm ) / eps )
subroutine zaxpy(N, ZA, ZX, INCX, ZY, INCY)
ZAXPY
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine ztbmv(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
ZTBMV
subroutine ztbt02(UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, X, LDX, B, LDB, WORK, RWORK, RESID)
ZTBT02