130 SUBROUTINE zgecon( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
140 DOUBLE PRECISION ANORM, RCOND
143 DOUBLE PRECISION RWORK( * )
144 COMPLEX*16 A( LDA, * ), WORK( * )
150 DOUBLE PRECISION ONE, ZERO
151 parameter( one = 1.0d+0, zero = 0.0d+0 )
156 INTEGER IX, KASE, KASE1
157 DOUBLE PRECISION AINVNM, SCALE, SL, SMLNUM, SU, HUGEVAL
164 LOGICAL LSAME, DISNAN
166 DOUBLE PRECISION DLAMCH
167 EXTERNAL lsame, izamax, dlamch, disnan
173 INTRINSIC abs, dble, dimag, max
176 DOUBLE PRECISION CABS1
179 cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
183 hugeval = dlamch(
'Overflow' )
188 onenrm = norm.EQ.
'1' .OR. lsame( norm,
'O' )
189 IF( .NOT.onenrm .AND. .NOT.lsame( norm,
'I' ) )
THEN
191 ELSE IF( n.LT.0 )
THEN
193 ELSE IF( lda.LT.max( 1, n ) )
THEN
195 ELSE IF( anorm.LT.zero )
THEN
199 CALL xerbla(
'ZGECON', -info )
209 ELSE IF( anorm.EQ.zero )
THEN
211 ELSE IF( disnan( anorm ) )
THEN
215 ELSE IF( anorm.GT.hugeval )
THEN
220 smlnum = dlamch(
'Safe minimum' )
233 CALL zlacn2( n, work( n+1 ), work, ainvnm, kase, isave )
235 IF( kase.EQ.kase1 )
THEN
239 CALL zlatrs(
'Lower',
'No transpose',
'Unit', normin, n, a,
240 $ lda, work, sl, rwork, info )
244 CALL zlatrs(
'Upper',
'No transpose',
'Non-unit', normin, n,
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', normin,
257 $ n, a, lda, work, sl, rwork, info )
264 IF( scale.NE.one )
THEN
265 ix = izamax( n, work, 1 )
266 IF( scale.LT.cabs1( work( ix ) )*smlnum .OR. scale.EQ.zero )
268 CALL zdrscl( n, scale, work, 1 )
275 IF( ainvnm.NE.zero )
THEN
276 rcond = ( one / ainvnm ) / anorm
284 IF( disnan( rcond ) .OR. rcond.GT.hugeval )
subroutine xerbla(srname, info)
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.