133 SUBROUTINE ztrcon( NORM, UPLO, DIAG, N, A, LDA, RCOND, WORK,
141 CHARACTER DIAG, NORM, UPLO
143 DOUBLE PRECISION RCOND
146 DOUBLE PRECISION RWORK( * )
147 COMPLEX*16 A( LDA, * ), WORK( * )
153 DOUBLE PRECISION ONE, ZERO
154 parameter( one = 1.0d+0, zero = 0.0d+0 )
157 LOGICAL NOUNIT, ONENRM, UPPER
159 INTEGER IX, KASE, KASE1
160 DOUBLE PRECISION AINVNM, ANORM, SCALE, SMLNUM, XNORM
169 DOUBLE PRECISION DLAMCH, ZLANTR
170 EXTERNAL lsame, izamax, dlamch, zlantr
176 INTRINSIC abs, dble, dimag, max
179 DOUBLE PRECISION CABS1
182 cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
189 upper = lsame( uplo,
'U' )
190 onenrm = norm.EQ.
'1' .OR. lsame( norm,
'O' )
191 nounit = lsame( diag,
'N' )
193 IF( .NOT.onenrm .AND. .NOT.lsame( norm,
'I' ) )
THEN
195 ELSE IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
197 ELSE IF( .NOT.nounit .AND. .NOT.lsame( diag,
'U' ) )
THEN
199 ELSE IF( n.LT.0 )
THEN
201 ELSE IF( lda.LT.max( 1, n ) )
THEN
205 CALL xerbla(
'ZTRCON', -info )
217 smlnum = dlamch(
'Safe minimum' )*dble( max( 1, n ) )
221 anorm = zlantr( norm, uplo, diag, n, n, a, lda, rwork )
225 IF( anorm.GT.zero )
THEN
238 CALL zlacn2( n, work( n+1 ), work, ainvnm, kase, isave )
240 IF( kase.EQ.kase1 )
THEN
244 CALL zlatrs( uplo,
'No transpose', diag, normin, n, a,
245 $ lda, work, scale, rwork, info )
250 CALL zlatrs( uplo,
'Conjugate transpose', diag,
252 $ n, a, lda, work, scale, rwork, info )
258 IF( scale.NE.one )
THEN
259 ix = izamax( n, work, 1 )
260 xnorm = cabs1( work( ix ) )
261 IF( scale.LT.xnorm*smlnum .OR. scale.EQ.zero )
263 CALL zdrscl( n, scale, work, 1 )
271 $ rcond = ( one / anorm ) / ainvnm
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.
subroutine ztrcon(norm, uplo, diag, n, a, lda, rcond, work, rwork, info)
ZTRCON