139 SUBROUTINE dtpt02( UPLO, TRANS, DIAG, N, NRHS, AP, X, LDX, B, LDB,
147 CHARACTER DIAG, TRANS, UPLO
148 INTEGER LDB, LDX, N, NRHS
149 DOUBLE PRECISION RESID
152 DOUBLE PRECISION AP( * ), B( LDB, * ), WORK( * ), X( LDX, * )
158 DOUBLE PRECISION ZERO, ONE
159 parameter( zero = 0.0d+0, one = 1.0d+0 )
163 DOUBLE PRECISION ANORM, BNORM, EPS, XNORM
167 DOUBLE PRECISION DASUM, DLAMCH, DLANTP
168 EXTERNAL lsame, dasum, dlamch, dlantp
180 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
187 IF( lsame( trans,
'N' ) )
THEN
188 anorm = dlantp(
'1', uplo, diag, n, ap, work )
190 anorm = dlantp(
'I', uplo, diag, n, ap, work )
195 eps = dlamch(
'Epsilon' )
196 IF( anorm.LE.zero )
THEN
206 CALL dcopy( n, x( 1, j ), 1, work, 1 )
207 CALL dtpmv( uplo, trans, diag, n, ap, work, 1 )
208 CALL daxpy( n, -one, b( 1, j ), 1, work, 1 )
209 bnorm = dasum( n, work, 1 )
210 xnorm = dasum( n, x( 1, j ), 1 )
211 IF( xnorm.LE.zero )
THEN
214 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 dtpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
DTPMV
subroutine dtpt02(UPLO, TRANS, DIAG, N, NRHS, AP, X, LDX, B, LDB, WORK, RESID)
DTPT02