1 SUBROUTINE zpot01( UPLO, N, A, LDA, AFAC, LDAFAC, RWORK, RESID )
10 DOUBLE PRECISION resid
13 DOUBLE PRECISION rwork( * )
14 COMPLEX*16 a( lda, * ), afac( ldafac, * )
63 DOUBLE PRECISION zero, one
64 parameter( zero = 0.0d+0, one = 1.0d+0 )
68 DOUBLE PRECISION anorm, eps, tr
73 DOUBLE PRECISION dlamch,
zlanhe
75 EXTERNAL lsame, dlamch,
zlanhe, zdotc
78 EXTERNAL zher, zscal, ztrmv
94 eps = dlamch(
'Epsilon' )
96 IF( anorm.LE.zero )
THEN
105 IF( dimag( afac( j, j ) ).NE.zero )
THEN
113 IF( lsame(
uplo,
'U' ) )
THEN
118 tr = zdotc( k, afac( 1, k ), 1, afac( 1, k ), 1 )
123 CALL ztrmv(
'Upper',
'Conjugate',
'Non-unit', k-1, afac,
124 $ ldafac, afac( 1, k ), 1 )
137 $ CALL zher(
'Lower', n-k, one, afac( k+1, k ), 1,
138 $ afac( k+1, k+1 ), ldafac )
143 CALL zscal( n-k+1, tc, afac( k, k ), 1 )
150 IF( lsame(
uplo,
'U' ) )
THEN
153 afac( i, j ) = afac( i, j ) - a( i, j )
155 afac( j, j ) = afac( j, j ) - dble( a( j, j ) )
159 afac( j, j ) = afac( j, j ) - dble( a( j, j ) )
161 afac( i, j ) = afac( i, j ) - a( i, j )
168 resid =
zlanhe(
'1',
uplo, n, afac, ldafac, rwork )
170 resid = ( ( resid / dble( n ) ) / anorm ) / eps