109 SUBROUTINE dtpt01( UPLO, DIAG, N, AP, AINVP, RCOND, WORK, RESID )
119 DOUBLE PRECISION RCOND, RESID
122 DOUBLE PRECISION AINVP( * ), AP( * ), WORK( * )
128 DOUBLE PRECISION ZERO, ONE
129 parameter ( zero = 0.0d+0, one = 1.0d+0 )
134 DOUBLE PRECISION AINVNM, ANORM, EPS
138 DOUBLE PRECISION DLAMCH, DLANTP
139 EXTERNAL lsame, dlamch, dlantp
159 eps = dlamch(
'Epsilon' )
160 anorm = dlantp(
'1', uplo, diag, n, ap, work )
161 ainvnm = dlantp(
'1', uplo, diag, n, ainvp, work )
162 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
167 rcond = ( one / anorm ) / ainvnm
171 unitd = lsame( diag,
'U' )
172 IF( lsame( uplo,
'U' ) )
THEN
176 $ ainvp( jc+j-1 ) = one
180 CALL dtpmv(
'Upper',
'No transpose', diag, j, ap,
185 ainvp( jc+j-1 ) = ainvp( jc+j-1 ) - one
196 CALL dtpmv(
'Lower',
'No transpose', diag, n-j+1, ap( jc ),
201 ainvp( jc ) = ainvp( jc ) - one
208 resid = dlantp(
'1', uplo,
'Non-unit', n, ainvp, work )
210 resid = ( ( resid*rcond ) / dble( n ) ) / eps
subroutine dtpt01(UPLO, DIAG, N, AP, AINVP, RCOND, WORK, RESID)
DTPT01
subroutine dtpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
DTPMV