1 DOUBLE PRECISION FUNCTION ZLA_GERCOND_C( TRANS, N, A, LDA, AF,
2 $ LDAF, IPIV, C, CAPPLY, INFO, WORK,
5 * -- LAPACK routine (version 3.2) --
6 * -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
7 * -- Jason Riedy of Univ. of California Berkeley. --
10 * -- LAPACK is a software package provided by Univ. of Tennessee, --
11 * -- Univ. of California Berkeley and NAG Ltd. --
15 * .. Scalar Aguments ..
18 INTEGER N, LDA, LDAF, INFO
20 * .. Array Arguments ..
22 COMPLEX*16 A( LDA, * ), AF( LDAF, * ), WORK( * )
23 DOUBLE PRECISION C( * ), RWORK( * )
25 * ZLA_GERCOND_C computes the infinity norm condition number of
26 * op(A) * inv(diag(C)) where C is a DOUBLE PRECISION vector.
27 * WORK is a COMPLEX*16 workspace of size 2*N, and
28 * RWORK is a DOUBLE PRECISION workspace of size 3*N.
33 DOUBLE PRECISION AINVNM, ANORM, TMP
39 * .. External Functions ..
43 * .. External Subroutines ..
44 EXTERNAL ZLACN2, ZGETRS, XERBLA
46 * .. Intrinsic Functions ..
47 INTRINSIC ABS, MAX, REAL, DIMAG
49 * .. Statement Functions ..
50 DOUBLE PRECISION CABS1
52 * .. Statement Function Definitions ..
53 CABS1( ZDUM ) = ABS( DBLE( ZDUM ) ) + ABS( DIMAG( ZDUM ) )
55 * .. Executable Statements ..
56 ZLA_GERCOND_C = 0.0D+0
59 NOTRANS = LSAME( TRANS, 'N' )
60 IF ( .NOT. NOTRANS .AND. .NOT. LSAME( TRANS, 'T' ) .AND. .NOT.
61 $ LSAME( TRANS, 'C' ) ) THEN
62 ELSE IF( N.LT.0 ) THEN
66 CALL XERBLA( 'ZLA_GERCOND_C', -INFO )
70 * Compute norm of op(A)*op2(C).
78 TMP = TMP + CABS1( A( I, J ) ) / C( J )
82 TMP = TMP + CABS1( A( I, J ) )
86 ANORM = MAX( ANORM, TMP )
93 TMP = TMP + CABS1( A( J, I ) ) / C( J )
97 TMP = TMP + CABS1( A( J, I ) )
101 ANORM = MAX( ANORM, TMP )
105 * Quick return if possible.
108 ZLA_GERCOND_C = 1.0D+0
110 ELSE IF( ANORM .EQ. 0.0D+0 ) THEN
114 * Estimate the norm of inv(op(A)).
120 CALL ZLACN2( N, WORK( N+1 ), WORK, AINVNM, KASE, ISAVE )
127 WORK( I ) = WORK( I ) * RWORK( 2*N+I )
131 CALL ZGETRS( 'No transpose', N, 1, AF, LDAF, IPIV,
134 CALL ZGETRS( 'Conjugate transpose', N, 1, AF, LDAF, IPIV,
138 * Multiply by inv(C).
142 WORK( I ) = WORK( I ) * C( I )
147 * Multiply by inv(C').
151 WORK( I ) = WORK( I ) * C( I )
156 CALL ZGETRS( 'Conjugate transpose', N, 1, AF, LDAF, IPIV,
159 CALL ZGETRS( 'No transpose', N, 1, AF, LDAF, IPIV,
166 WORK( I ) = WORK( I ) * RWORK( 2*N+I )
172 * Compute the estimate of the reciprocal condition number.
174 IF( AINVNM .NE. 0.0D+0 )
175 $ ZLA_GERCOND_C = 1.0D+0 / AINVNM