117 SUBROUTINE dpbt01( UPLO, N, KD, A, LDA, AFAC, LDAFAC, RWORK,
126 INTEGER KD, LDA, LDAFAC, N
127 DOUBLE PRECISION RESID
130 DOUBLE PRECISION A( LDA, * ), AFAC( LDAFAC, * ), RWORK( * )
137 DOUBLE PRECISION ZERO, ONE
138 parameter( zero = 0.0d+0, one = 1.0d+0 )
141 INTEGER I, J, K, KC, KLEN, ML, MU
142 DOUBLE PRECISION ANORM, EPS, T
146 DOUBLE PRECISION DDOT, DLAMCH, DLANSB
147 EXTERNAL lsame, ddot, dlamch, dlansb
153 INTRINSIC dble, max, min
166 eps = dlamch(
'Epsilon' )
167 anorm = dlansb(
'1', uplo, n, kd, a, lda, rwork )
168 IF( anorm.LE.zero )
THEN
175 IF( lsame( uplo,
'U' ) )
THEN
177 kc = max( 1, kd+2-k )
182 t = ddot( klen+1, afac( kc, k ), 1, afac( kc, k ), 1 )
188 $
CALL dtrmv(
'Upper',
'Transpose',
'Non-unit', klen,
189 $ afac( kd+1, k-klen ), ldafac-1,
198 klen = min( kd, n-k )
204 $
CALL dsyr(
'Lower', klen, one, afac( 2, k ), 1,
205 $ afac( 1, k+1 ), ldafac-1 )
210 CALL dscal( klen+1, t, afac( 1, k ), 1 )
217 IF( lsame( uplo,
'U' ) )
THEN
219 mu = max( 1, kd+2-j )
221 afac( i, j ) = afac( i, j ) - a( i, j )
226 ml = min( kd+1, n-j+1 )
228 afac( i, j ) = afac( i, j ) - a( i, j )
235 resid = dlansb(
'I', uplo, n, kd, afac, ldafac, rwork )
237 resid = ( ( resid / dble( n ) ) / anorm ) / eps
subroutine dpbt01(uplo, n, kd, a, lda, afac, ldafac, rwork, resid)
DPBT01
subroutine dsyr(uplo, n, alpha, x, incx, a, lda)
DSYR
subroutine dscal(n, da, dx, incx)
DSCAL
subroutine dtrmv(uplo, trans, diag, n, a, lda, x, incx)
DTRMV