149 SUBROUTINE dtrt02( UPLO, TRANS, DIAG, N, NRHS, A, LDA, X, LDX, B,
157 CHARACTER DIAG, TRANS, UPLO
158 INTEGER LDA, LDB, LDX, N, NRHS
159 DOUBLE PRECISION RESID
162 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), WORK( * ),
169 DOUBLE PRECISION ZERO, ONE
170 parameter( zero = 0.0d+0, one = 1.0d+0 )
174 DOUBLE PRECISION ANORM, BNORM, EPS, XNORM
178 DOUBLE PRECISION DASUM, DLAMCH, DLANTR
179 EXTERNAL lsame, dasum, dlamch, dlantr
191 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
198 IF( lsame( trans,
'N' ) )
THEN
199 anorm = dlantr(
'1', uplo, diag, n, n, a, lda, work )
201 anorm = dlantr(
'I', uplo, diag, n, n, a, lda, work )
206 eps = dlamch(
'Epsilon' )
207 IF( anorm.LE.zero )
THEN
217 CALL dcopy( n, x( 1, j ), 1, work, 1 )
218 CALL dtrmv( uplo, trans, diag, n, a, lda, work, 1 )
219 CALL daxpy( n, -one, b( 1, j ), 1, work, 1 )
220 bnorm = dasum( n, work, 1 )
221 xnorm = dasum( n, x( 1, j ), 1 )
222 IF( xnorm.LE.zero )
THEN
225 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 dtrmv(UPLO, TRANS, DIAG, N, A, LDA, X, INCX)
DTRMV
subroutine dtrt02(UPLO, TRANS, DIAG, N, NRHS, A, LDA, X, LDX, B, LDB, WORK, RESID)
DTRT02