119 SUBROUTINE dpbt01( UPLO, N, KD, A, LDA, AFAC, LDAFAC, RWORK,
129 INTEGER KD, LDA, LDAFAC, N
130 DOUBLE PRECISION RESID
133 DOUBLE PRECISION A( lda, * ), AFAC( ldafac, * ), RWORK( * )
140 DOUBLE PRECISION ZERO, ONE
141 parameter ( zero = 0.0d+0, one = 1.0d+0 )
144 INTEGER I, J, K, KC, KLEN, ML, MU
145 DOUBLE PRECISION ANORM, EPS, T
149 DOUBLE PRECISION DDOT, DLAMCH, DLANSB
150 EXTERNAL lsame, ddot, dlamch, dlansb
156 INTRINSIC dble, max, min
169 eps = dlamch(
'Epsilon' )
170 anorm = dlansb(
'1', uplo, n, kd, a, lda, rwork )
171 IF( anorm.LE.zero )
THEN
178 IF( lsame( uplo,
'U' ) )
THEN
180 kc = max( 1, kd+2-k )
185 t = ddot( klen+1, afac( kc, k ), 1, afac( kc, k ), 1 )
191 $
CALL dtrmv(
'Upper',
'Transpose',
'Non-unit', klen,
192 $ afac( kd+1, k-klen ), ldafac-1,
201 klen = min( kd, n-k )
207 $
CALL dsyr(
'Lower', klen, one, afac( 2, k ), 1,
208 $ afac( 1, k+1 ), ldafac-1 )
213 CALL dscal( klen+1, t, afac( 1, k ), 1 )
220 IF( lsame( uplo,
'U' ) )
THEN
222 mu = max( 1, kd+2-j )
224 afac( i, j ) = afac( i, j ) - a( i, j )
229 ml = min( kd+1, n-j+1 )
231 afac( i, j ) = afac( i, j ) - a( i, j )
238 resid = dlansb(
'I', uplo, n, kd, afac, ldafac, rwork )
240 resid = ( ( resid / dble( n ) ) / anorm ) / eps
subroutine dsyr(UPLO, N, ALPHA, X, INCX, A, LDA)
DSYR
subroutine dpbt01(UPLO, N, KD, A, LDA, AFAC, LDAFAC, RWORK, RESID)
DPBT01
subroutine dscal(N, DA, DX, INCX)
DSCAL
subroutine dtrmv(UPLO, TRANS, DIAG, N, A, LDA, X, INCX)
DTRMV