110 SUBROUTINE zget03( N, A, LDA, AINV, LDAINV, WORK, LDWORK, RWORK,
119 INTEGER lda, ldainv, ldwork, n
120 DOUBLE PRECISION rcond, resid
123 DOUBLE PRECISION rwork( * )
124 COMPLEX*16 a( lda, * ), ainv( ldainv, * ),
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
164 anorm =
zlange(
'1', n, n, a, lda, rwork )
165 ainvnm =
zlange(
'1', n, n, ainv, ldainv, rwork )
166 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
171 rcond = ( one / anorm ) / ainvnm
175 CALL
zgemm(
'No transpose',
'No transpose', n, n, n, -cone, ainv,
176 $ ldainv, a, lda, czero, work, ldwork )
178 work( i, i ) = cone + work( i, i )
183 resid =
zlange(
'1', n, n, work, ldwork, rwork )
185 resid = ( ( resid*rcond ) / eps ) / dble( n )
DOUBLE PRECISION function zlange(NORM, M, N, A, LDA, WORK)
ZLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
subroutine zgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
ZGEMM
DOUBLE PRECISION function dlamch(CMACH)
DLAMCH
subroutine zget03(N, A, LDA, AINV, LDAINV, WORK, LDWORK, RWORK, RCOND, RESID)
ZGET03