172 SUBROUTINE stbt03( UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB,
173 $ SCALE, CNORM, TSCAL, X, LDX, B, LDB, WORK,
181 CHARACTER DIAG, TRANS, UPLO
182 INTEGER KD, LDAB, LDB, LDX, N, NRHS
183 REAL RESID, SCALE, TSCAL
186 REAL AB( LDAB, * ), B( LDB, * ), CNORM( * ),
187 $ WORK( * ), X( LDX, * )
194 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
198 REAL BIGNUM, EPS, ERR, SMLNUM, TNORM, XNORM, XSCAL
204 EXTERNAL lsame, isamax, slamch
210 INTRINSIC abs, max, real
216 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
220 eps = slamch(
'Epsilon' )
221 smlnum = slamch(
'Safe minimum' )
222 bignum = one / smlnum
223 CALL slabad( smlnum, bignum )
229 IF( lsame( diag,
'N' ) )
THEN
230 IF( lsame( uplo,
'U' ) )
THEN
232 tnorm = max( tnorm, tscal*abs( ab( kd+1, j ) )+
237 tnorm = max( tnorm, tscal*abs( ab( 1, j ) )+cnorm( j ) )
242 tnorm = max( tnorm, tscal+cnorm( j ) )
251 CALL scopy( n, x( 1, j ), 1, work, 1 )
252 ix = isamax( n, work, 1 )
253 xnorm = max( one, abs( x( ix, j ) ) )
254 xscal = ( one / xnorm ) / real( kd+1 )
255 CALL sscal( n, xscal, work, 1 )
256 CALL stbmv( uplo, trans, diag, n, kd, ab, ldab, work, 1 )
257 CALL saxpy( n, -scale*xscal, b( 1, j ), 1, work, 1 )
258 ix = isamax( n, work, 1 )
259 err = tscal*abs( work( ix ) )
260 ix = isamax( n, x( 1, j ), 1 )
261 xnorm = abs( x( ix, j ) )
262 IF( err*smlnum.LE.xnorm )
THEN
269 IF( err*smlnum.LE.tnorm )
THEN
276 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 stbmv(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
STBMV
subroutine stbt03(UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, SCALE, CNORM, TSCAL, X, LDX, B, LDB, WORK, RESID)
STBT03