159 SUBROUTINE stpt03( UPLO, TRANS, DIAG, N, NRHS, AP, SCALE, CNORM,
160 $ TSCAL, X, LDX, B, LDB, WORK, RESID )
167 CHARACTER DIAG, TRANS, UPLO
168 INTEGER LDB, LDX, N, NRHS
169 REAL RESID, SCALE, TSCAL
172 REAL AP( * ), B( LDB, * ), CNORM( * ), WORK( * ),
180 parameter( one = 1.0e+0, zero = 0.0e+0 )
184 REAL BIGNUM, EPS, ERR, SMLNUM, TNORM, XNORM, XSCAL
190 EXTERNAL lsame, isamax, slamch
196 INTRINSIC abs, max, real
202 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
206 eps = slamch(
'Epsilon' )
207 smlnum = slamch(
'Safe minimum' )
208 bignum = one / smlnum
209 CALL slabad( smlnum, bignum )
215 IF( lsame( diag,
'N' ) )
THEN
216 IF( lsame( uplo,
'U' ) )
THEN
219 tnorm = max( tnorm, tscal*abs( ap( jj ) )+cnorm( j ) )
225 tnorm = max( tnorm, tscal*abs( ap( jj ) )+cnorm( j ) )
231 tnorm = max( tnorm, tscal+cnorm( j ) )
240 CALL scopy( n, x( 1, j ), 1, work, 1 )
241 ix = isamax( n, work, 1 )
242 xnorm = max( one, abs( x( ix, j ) ) )
243 xscal = ( one / xnorm ) / real( n )
244 CALL sscal( n, xscal, work, 1 )
245 CALL stpmv( uplo, trans, diag, n, ap, work, 1 )
246 CALL saxpy( n, -scale*xscal, b( 1, j ), 1, work, 1 )
247 ix = isamax( n, work, 1 )
248 err = tscal*abs( work( ix ) )
249 ix = isamax( n, x( 1, j ), 1 )
250 xnorm = abs( x( ix, j ) )
251 IF( err*smlnum.LE.xnorm )
THEN
258 IF( err*smlnum.LE.tnorm )
THEN
265 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 stpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
STPMV
subroutine stpt03(UPLO, TRANS, DIAG, N, NRHS, AP, SCALE, CNORM, TSCAL, X, LDX, B, LDB, WORK, RESID)
STPT03