128 SUBROUTINE zgecon( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
138 DOUBLE PRECISION ANORM, RCOND
141 DOUBLE PRECISION RWORK( * )
142 COMPLEX*16 A( LDA, * ), WORK( * )
148 DOUBLE PRECISION ONE, ZERO
149 parameter( one = 1.0d+0, zero = 0.0d+0 )
154 INTEGER IX, KASE, KASE1
155 DOUBLE PRECISION AINVNM, SCALE, SL, SMLNUM, SU, HUGEVAL
162 LOGICAL LSAME, DISNAN
164 DOUBLE PRECISION DLAMCH
165 EXTERNAL lsame, izamax, dlamch, disnan
171 INTRINSIC abs, dble, dimag, max
174 DOUBLE PRECISION CABS1
177 cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
181 hugeval = dlamch(
'Overflow' )
186 onenrm = norm.EQ.
'1' .OR. lsame( norm,
'O' )
187 IF( .NOT.onenrm .AND. .NOT.lsame( norm,
'I' ) )
THEN
189 ELSE IF( n.LT.0 )
THEN
191 ELSE IF( lda.LT.max( 1, n ) )
THEN
193 ELSE IF( anorm.LT.zero )
THEN
197 CALL xerbla(
'ZGECON', -info )
207 ELSE IF( anorm.EQ.zero )
THEN
209 ELSE IF( disnan( anorm ) )
THEN
213 ELSE IF( anorm.GT.hugeval )
THEN
218 smlnum = dlamch(
'Safe minimum' )
231 CALL zlacn2( n, work( n+1 ), work, ainvnm, kase, isave )
233 IF( kase.EQ.kase1 )
THEN
237 CALL zlatrs(
'Lower',
'No transpose',
'Unit', normin, n,
239 $ lda, work, sl, rwork, info )
243 CALL zlatrs(
'Upper',
'No transpose',
'Non-unit', normin,
245 $ a, lda, work, su, rwork( n+1 ), info )
250 CALL zlatrs(
'Upper',
'Conjugate transpose',
'Non-unit',
251 $ normin, n, a, lda, work, su, rwork( n+1 ),
256 CALL zlatrs(
'Lower',
'Conjugate transpose',
'Unit',
258 $ n, a, lda, work, sl, rwork, info )
265 IF( scale.NE.one )
THEN
266 ix = izamax( n, work, 1 )
267 IF( scale.LT.cabs1( work( ix ) )*smlnum .OR. scale.EQ.zero )
269 CALL zdrscl( n, scale, work, 1 )
276 IF( ainvnm.NE.zero )
THEN
277 rcond = ( one / ainvnm ) / anorm
285 IF( disnan( rcond ) .OR. rcond.GT.hugeval )
subroutine zgecon(norm, n, a, lda, anorm, rcond, work, rwork, info)
ZGECON
subroutine zlacn2(n, v, x, est, kase, isave)
ZLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
subroutine zlatrs(uplo, trans, diag, normin, n, a, lda, x, scale, cnorm, info)
ZLATRS solves a triangular system of equations with the scale factor set to prevent overflow.
subroutine zdrscl(n, sa, sx, incx)
ZDRSCL multiplies a vector by the reciprocal of a real scalar.