123 SUBROUTINE zgecon( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
133 DOUBLE PRECISION ANORM, RCOND
136 DOUBLE PRECISION RWORK( * )
137 COMPLEX*16 A( lda, * ), WORK( * )
143 DOUBLE PRECISION ONE, ZERO
144 parameter( one = 1.0d+0, zero = 0.0d+0 )
149 INTEGER IX, KASE, KASE1
150 DOUBLE PRECISION AINVNM, SCALE, SL, SMLNUM, SU
157 LOGICAL LSAME, DISNAN
159 DOUBLE PRECISION DLAMCH
160 EXTERNAL lsame, izamax, dlamch, disnan
166 INTRINSIC abs, dble, dimag, max
169 DOUBLE PRECISION CABS1
172 cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
179 onenrm = norm.EQ.
'1' .OR. lsame( norm,
'O' )
180 IF( .NOT.onenrm .AND. .NOT.lsame( norm,
'I' ) )
THEN 182 ELSE IF( n.LT.0 )
THEN 184 ELSE IF( lda.LT.max( 1, n ) )
THEN 186 ELSE IF( anorm.LT.zero .OR. disnan( anorm ) )
THEN 190 CALL xerbla(
'ZGECON', -info )
200 ELSE IF( anorm.EQ.zero )
THEN 204 smlnum = dlamch(
'Safe minimum' )
217 CALL zlacn2( n, work( n+1 ), work, ainvnm, kase, isave )
219 IF( kase.EQ.kase1 )
THEN 223 CALL zlatrs(
'Lower',
'No transpose',
'Unit', normin, n, a,
224 $ lda, work, sl, rwork, info )
228 CALL zlatrs(
'Upper',
'No transpose',
'Non-unit', normin, n,
229 $ a, lda, work, su, rwork( n+1 ), info )
234 CALL zlatrs(
'Upper',
'Conjugate transpose',
'Non-unit',
235 $ normin, n, a, lda, work, su, rwork( n+1 ),
240 CALL zlatrs(
'Lower',
'Conjugate transpose',
'Unit', normin,
241 $ n, a, lda, work, sl, rwork, info )
248 IF( scale.NE.one )
THEN 249 ix = izamax( n, work, 1 )
250 IF( scale.LT.cabs1( work( ix ) )*smlnum .OR. scale.EQ.zero )
252 CALL zdrscl( n, scale, work, 1 )
260 $ rcond = ( one / ainvnm ) / anorm
subroutine zgecon(NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK, INFO)
ZGECON
subroutine xerbla(SRNAME, INFO)
XERBLA
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 zlacn2(N, V, X, EST, KASE, ISAVE)
ZLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
subroutine zdrscl(N, SA, SX, INCX)
ZDRSCL multiplies a vector by the reciprocal of a real scalar.