1 SUBROUTINE zget01( M, N, A, LDA, AFAC, LDAFAC, IPIV, RWORK,
9 INTEGER lda, ldafac, m, n
10 DOUBLE PRECISION resid
14 DOUBLE PRECISION rwork( * )
15 COMPLEX*16 a( lda, * ), afac( ldafac, * )
61 DOUBLE PRECISION zero, one
62 parameter( zero = 0.0d+0, one = 1.0d+0 )
64 parameter( cone = ( 1.0d+0, 0.0d+0 ) )
68 DOUBLE PRECISION anorm, eps
72 DOUBLE PRECISION dlamch, zlange
74 EXTERNAL dlamch, zlange, zdotu
77 EXTERNAL zgemv, zlaswp, zscal, ztrmv
86 IF( m.LE.0 .OR. n.LE.0 )
THEN
93 eps = dlamch(
'Epsilon' )
94 anorm = zlange(
'1', m, n, a, lda, rwork )
102 CALL ztrmv(
'Lower',
'No transpose',
'Unit', m, afac,
103 $ ldafac, afac( 1, k ), 1 )
110 CALL zscal( m-k, t, afac( k+1, k ), 1 )
111 CALL zgemv(
'No transpose', m-k, k-1, cone,
112 $ afac( k+1, 1 ), ldafac, afac( 1, k ), 1,
113 $ cone, afac( k+1, k ), 1 )
118 afac( k, k ) = t + zdotu( k-1, afac( k, 1 ), ldafac,
123 CALL ztrmv(
'Lower',
'No transpose',
'Unit', k-1, afac,
124 $ ldafac, afac( 1, k ), 1 )
127 CALL zlaswp( n, afac, ldafac, 1,
min( m, n ), ipiv, -1 )
133 afac( i, j ) = afac( i, j ) - a( i, j )
139 resid = zlange(
'1', m, n, afac, ldafac, rwork )
141 IF( anorm.LE.zero )
THEN
145 resid = ( ( resid / dble( n ) ) / anorm ) / eps