123 SUBROUTINE cgecon( NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK,
137 COMPLEX A( lda, * ), WORK( * )
144 parameter( one = 1.0e+0, zero = 0.0e+0 )
149 INTEGER IX, KASE, KASE1
150 REAL AINVNM, SCALE, SL, SMLNUM, SU
157 LOGICAL LSAME, SISNAN
160 EXTERNAL lsame, icamax, slamch, sisnan
166 INTRINSIC abs, aimag, max, real
172 cabs1( zdum ) = abs(
REAL( ZDUM ) ) + abs( AIMAG( 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. sisnan( anorm ) )
THEN 190 CALL xerbla(
'CGECON', -info )
200 ELSE IF( anorm.EQ.zero )
THEN 204 smlnum = slamch(
'Safe minimum' )
217 CALL clacn2( n, work( n+1 ), work, ainvnm, kase, isave )
219 IF( kase.EQ.kase1 )
THEN 223 CALL clatrs(
'Lower',
'No transpose',
'Unit', normin, n, a,
224 $ lda, work, sl, rwork, info )
228 CALL clatrs(
'Upper',
'No transpose',
'Non-unit', normin, n,
229 $ a, lda, work, su, rwork( n+1 ), info )
234 CALL clatrs(
'Upper',
'Conjugate transpose',
'Non-unit',
235 $ normin, n, a, lda, work, su, rwork( n+1 ),
240 CALL clatrs(
'Lower',
'Conjugate transpose',
'Unit', normin,
241 $ n, a, lda, work, sl, rwork, info )
248 IF( scale.NE.one )
THEN 249 ix = icamax( n, work, 1 )
250 IF( scale.LT.cabs1( work( ix ) )*smlnum .OR. scale.EQ.zero )
252 CALL csrscl( n, scale, work, 1 )
260 $ rcond = ( one / ainvnm ) / anorm
subroutine cgecon(NORM, N, A, LDA, ANORM, RCOND, WORK, RWORK, INFO)
CGECON
subroutine csrscl(N, SA, SX, INCX)
CSRSCL multiplies a vector by the reciprocal of a real scalar.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine clatrs(UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE, CNORM, INFO)
CLATRS solves a triangular system of equations with the scale factor set to prevent overflow...
subroutine clacn2(N, V, X, EST, KASE, ISAVE)
CLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...