110 SUBROUTINE zppt03( UPLO, N, A, AINV, WORK, LDWORK, RWORK, RCOND,
121 DOUBLE PRECISION RCOND, RESID
124 DOUBLE PRECISION RWORK( * )
125 COMPLEX*16 A( * ), AINV( * ), WORK( ldwork, * )
131 DOUBLE PRECISION ZERO, ONE
132 parameter ( zero = 0.0d+0, one = 1.0d+0 )
133 COMPLEX*16 CZERO, CONE
134 parameter ( czero = ( 0.0d+0, 0.0d+0 ),
135 $ cone = ( 1.0d+0, 0.0d+0 ) )
139 DOUBLE PRECISION AINVNM, ANORM, EPS
143 DOUBLE PRECISION DLAMCH, ZLANGE, ZLANHP
144 EXTERNAL lsame, dlamch, zlange, zlanhp
147 INTRINSIC dble, dconjg
164 eps = dlamch(
'Epsilon' )
165 anorm = zlanhp(
'1', uplo, n, a, rwork )
166 ainvnm = zlanhp(
'1', uplo, n, ainv, rwork )
167 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
172 rcond = ( one / anorm ) / ainvnm
179 IF( lsame( uplo,
'U' ) )
THEN
185 CALL zcopy( j, ainv( jj ), 1, work( 1, j+1 ), 1 )
187 work( j, i+1 ) = dconjg( ainv( jj+i-1 ) )
191 jj = ( ( n-1 )*n ) / 2 + 1
193 work( n, i+1 ) = dconjg( ainv( jj+i-1 ) )
199 CALL zhpmv(
'Upper', n, -cone, a, work( 1, j+1 ), 1, czero,
202 CALL zhpmv(
'Upper', n, -cone, a, ainv( jj ), 1, czero,
214 work( 1, i ) = dconjg( ainv( i+1 ) )
218 CALL zcopy( n-j+1, ainv( jj ), 1, work( j, j-1 ), 1 )
220 work( j, j+i-1 ) = dconjg( ainv( jj+i ) )
228 CALL zhpmv(
'Lower', n, -cone, a, work( 1, j-1 ), 1, czero,
231 CALL zhpmv(
'Lower', n, -cone, a, ainv( 1 ), 1, czero,
239 work( i, i ) = work( i, i ) + cone
244 resid = zlange(
'1', n, n, work, ldwork, rwork )
246 resid = ( ( resid*rcond ) / eps ) / dble( n )
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zppt03(UPLO, N, A, AINV, WORK, LDWORK, RWORK, RCOND, RESID)
ZPPT03
subroutine zhpmv(UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY)
ZHPMV