167 SUBROUTINE dtrt03( UPLO, TRANS, DIAG, N, NRHS, A, LDA, SCALE,
168 $ CNORM, TSCAL, X, LDX, B, LDB, WORK, RESID )
175 CHARACTER DIAG, TRANS, UPLO
176 INTEGER LDA, LDB, LDX, N, NRHS
177 DOUBLE PRECISION RESID, SCALE, TSCAL
180 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), CNORM( * ),
181 $ work( * ), x( ldx, * )
187 DOUBLE PRECISION ONE, ZERO
188 parameter( one = 1.0d+0, zero = 0.0d+0 )
192 DOUBLE PRECISION BIGNUM, EPS, ERR, SMLNUM, TNORM, XNORM, XSCAL
197 DOUBLE PRECISION DLAMCH
198 EXTERNAL lsame, idamax, dlamch
204 INTRINSIC abs, dble, max
210 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
214 eps = dlamch(
'Epsilon' )
215 smlnum = dlamch(
'Safe minimum' )
216 bignum = one / smlnum
222 IF( lsame( diag,
'N' ) )
THEN
224 tnorm = max( tnorm, tscal*abs( a( j, j ) )+cnorm( j ) )
228 tnorm = max( tnorm, tscal+cnorm( j ) )
237 CALL dcopy( n, x( 1, j ), 1, work, 1 )
238 ix = idamax( n, work, 1 )
239 xnorm = max( one, abs( x( ix, j ) ) )
240 xscal = ( one / xnorm ) / dble( n )
241 CALL dscal( n, xscal, work, 1 )
242 CALL dtrmv( uplo, trans, diag, n, a, lda, work, 1 )
243 CALL daxpy( n, -scale*xscal, b( 1, j ), 1, work, 1 )
244 ix = idamax( n, work, 1 )
245 err = tscal*abs( work( ix ) )
246 ix = idamax( n, x( 1, j ), 1 )
247 xnorm = abs( x( ix, j ) )
248 IF( err*smlnum.LE.xnorm )
THEN
255 IF( err*smlnum.LE.tnorm )
THEN
262 resid = max( resid, err )
subroutine dtrt03(uplo, trans, diag, n, nrhs, a, lda, scale, cnorm, tscal, x, ldx, b, ldb, work, resid)
DTRT03
subroutine daxpy(n, da, dx, incx, dy, incy)
DAXPY
subroutine dcopy(n, dx, incx, dy, incy)
DCOPY
subroutine dscal(n, da, dx, incx)
DSCAL
subroutine dtrmv(uplo, trans, diag, n, a, lda, x, incx)
DTRMV