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