147 SUBROUTINE ctpt02( 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
161 COMPLEX AP( * ), B( LDB, * ), WORK( * ), X( LDX, * )
168 parameter( zero = 0.0e+0, one = 1.0e+0 )
172 REAL ANORM, BNORM, EPS, XNORM
176 REAL CLANTP, SCASUM, SLAMCH
177 EXTERNAL lsame, clantp, scasum, slamch
189 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
196 IF( lsame( trans,
'N' ) )
THEN
197 anorm = clantp(
'1', uplo, diag, n, ap, rwork )
199 anorm = clantp(
'I', uplo, diag, n, ap, rwork )
204 eps = slamch(
'Epsilon' )
205 IF( anorm.LE.zero )
THEN
215 CALL ccopy( n, x( 1, j ), 1, work, 1 )
216 CALL ctpmv( uplo, trans, diag, n, ap, work, 1 )
217 CALL caxpy( n, cmplx( -one ), b( 1, j ), 1, work, 1 )
218 bnorm = scasum( n, work, 1 )
219 xnorm = scasum( n, x( 1, j ), 1 )
220 IF( xnorm.LE.zero )
THEN
223 resid = max( resid, ( ( bnorm / anorm ) / xnorm ) / eps )
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
subroutine caxpy(N, CA, CX, INCX, CY, INCY)
CAXPY
subroutine ctpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
CTPMV
subroutine ctpt02(UPLO, TRANS, DIAG, N, NRHS, AP, X, LDX, B, LDB, WORK, RWORK, RESID)
CTPT02