167 SUBROUTINE strt03( 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 REAL RESID, SCALE, TSCAL
180 REAL A( LDA, * ), B( LDB, * ), CNORM( * ),
181 $ work( * ), x( ldx, * )
188 parameter( one = 1.0e+0, zero = 0.0e+0 )
192 REAL BIGNUM, EPS, ERR, SMLNUM, TNORM, XNORM, XSCAL
198 EXTERNAL lsame, isamax, slamch
204 INTRINSIC abs, max, real
210 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
214 eps = slamch(
'Epsilon' )
215 smlnum = slamch(
'Safe minimum' )
216 bignum = one / smlnum
217 CALL slabad( smlnum, bignum )
223 IF( lsame( diag,
'N' ) )
THEN
225 tnorm = max( tnorm, tscal*abs( a( j, j ) )+cnorm( j ) )
229 tnorm = max( tnorm, tscal+cnorm( j ) )
238 CALL scopy( n, x( 1, j ), 1, work, 1 )
239 ix = isamax( n, work, 1 )
240 xnorm = max( one, abs( x( ix, j ) ) )
241 xscal = ( one / xnorm ) / real( n )
242 CALL sscal( n, xscal, work, 1 )
243 CALL strmv( uplo, trans, diag, n, a, lda, work, 1 )
244 CALL saxpy( n, -scale*xscal, b( 1, j ), 1, work, 1 )
245 ix = isamax( n, work, 1 )
246 err = tscal*abs( work( ix ) )
247 ix = isamax( n, x( 1, j ), 1 )
248 xnorm = abs( x( ix, j ) )
249 IF( err*smlnum.LE.xnorm )
THEN
256 IF( err*smlnum.LE.tnorm )
THEN
263 resid = max( resid, err )
subroutine slabad(SMALL, LARGE)
SLABAD
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
subroutine sscal(N, SA, SX, INCX)
SSCAL
subroutine saxpy(N, SA, SX, INCX, SY, INCY)
SAXPY
subroutine strmv(UPLO, TRANS, DIAG, N, A, LDA, X, INCX)
STRMV
subroutine strt03(UPLO, TRANS, DIAG, N, NRHS, A, LDA, SCALE, CNORM, TSCAL, X, LDX, B, LDB, WORK, RESID)
STRT03