107 SUBROUTINE dtpt01( UPLO, DIAG, N, AP, AINVP, RCOND, WORK, RESID )
116 DOUBLE PRECISION RCOND, RESID
119 DOUBLE PRECISION AINVP( * ), AP( * ), WORK( * )
125 DOUBLE PRECISION ZERO, ONE
126 parameter( zero = 0.0d+0, one = 1.0d+0 )
131 DOUBLE PRECISION AINVNM, ANORM, EPS
135 DOUBLE PRECISION DLAMCH, DLANTP
136 EXTERNAL lsame, dlamch, dlantp
156 eps = dlamch(
'Epsilon' )
157 anorm = dlantp(
'1', uplo, diag, n, ap, work )
158 ainvnm = dlantp(
'1', uplo, diag, n, ainvp, work )
159 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
164 rcond = ( one / anorm ) / ainvnm
168 unitd = lsame( diag,
'U' )
169 IF( lsame( uplo,
'U' ) )
THEN
173 $ ainvp( jc+j-1 ) = one
177 CALL dtpmv( 'upper
', 'no transpose
', DIAG, J, AP,
182 AINVP( JC+J-1 ) = AINVP( JC+J-1 ) - ONE
193 CALL DTPMV( 'lower
', 'no transpose
', DIAG, N-J+1, AP( JC ),
198 AINVP( JC ) = AINVP( JC ) - ONE
205 RESID = DLANTP( '1
', UPLO, 'non-unit
', N, AINVP, WORK )
207 RESID = ( ( RESID*RCOND ) / DBLE( N ) ) / EPS
subroutine dtpmv(uplo, trans, diag, n, ap, x, incx)
DTPMV
subroutine dtpt01(uplo, diag, n, ap, ainvp, rcond, work, resid)
DTPT01