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 dscal(N, DA, DX, INCX)
DSCAL
subroutine dpbt01(UPLO, N, KD, A, LDA, AFAC, LDAFAC, RWORK, RESID)
DPBT01
subroutine dtrmv(UPLO, TRANS, DIAG, N, A, LDA, X, INCX)
DTRMV