147 SUBROUTINE ztpt02( UPLO, TRANS, DIAG, N, NRHS, AP, X, LDX, B, LDB,
148 $ WORK, RWORK, RESID )
155 CHARACTER DIAG, TRANS, UPLO
156 INTEGER LDB, LDX, N, NRHS
157 DOUBLE PRECISION RESID
160 DOUBLE PRECISION RWORK( * )
161 COMPLEX*16 AP( * ), B( LDB, * ), WORK( * ), X( LDX, * )
167 DOUBLE PRECISION ZERO, ONE
168 parameter( zero = 0.0d+0, one = 1.0d+0 )
172 DOUBLE PRECISION ANORM, BNORM, EPS, XNORM
176 DOUBLE PRECISION DLAMCH, DZASUM, ZLANTP
177 EXTERNAL lsame, dlamch, dzasum, zlantp
183 INTRINSIC dcmplx, max
189 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
196 IF( lsame( trans,
'N' ) )
THEN
197 anorm = zlantp(
'1', uplo, diag, n, ap, rwork )
199 anorm = zlantp(
'I', uplo, diag, n, ap, rwork )
204 eps = dlamch(
'Epsilon' )
205 IF( anorm.LE.zero )
THEN
215 CALL zcopy( n, x( 1, j ), 1, work, 1 )
216 CALL ztpmv( uplo, trans, diag, n, ap, work, 1 )
217 CALL zaxpy( n, dcmplx( -one ), b( 1, j ), 1, work, 1 )
218 bnorm = dzasum( n, work, 1 )
219 xnorm = dzasum( n, x( 1, j ), 1 )
220 IF( xnorm.LE.zero )
THEN
223 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 ztpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
ZTPMV
subroutine ztpt02(UPLO, TRANS, DIAG, N, NRHS, AP, X, LDX, B, LDB, WORK, RWORK, RESID)
ZTPT02