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( * )
29 * ZLA_GERCOND_C computes the infinity norm condition number of
30 * op(A) * inv(diag(C)) where C is a DOUBLE PRECISION vector.
35 * C DOUBLE PRECISION vector.
37 * WORK COMPLEX*16 workspace of size 2*N.
39 * RWORK DOUBLE PRECISION workspace of size 3*N.
41 * =====================================================================
46 DOUBLE PRECISION AINVNM, ANORM, TMP
52 * .. External Functions ..
56 * .. External Subroutines ..
57 EXTERNAL ZLACN2, ZGETRS, XERBLA
59 * .. Intrinsic Functions ..
60 INTRINSIC ABS, MAX, REAL, DIMAG
62 * .. Statement Functions ..
63 DOUBLE PRECISION CABS1
65 * .. Statement Function Definitions ..
66 CABS1( ZDUM ) = ABS( DBLE( ZDUM ) ) + ABS( DIMAG( ZDUM ) )
68 * .. Executable Statements ..
69 ZLA_GERCOND_C = 0.0D+0
72 NOTRANS = LSAME( TRANS, 'N' )
73 IF ( .NOT. NOTRANS .AND. .NOT. LSAME( TRANS, 'T' ) .AND. .NOT.
74 $ LSAME( TRANS, 'C' ) ) THEN
75 ELSE IF( N.LT.0 ) THEN
79 CALL XERBLA( 'ZLA_GERCOND_C', -INFO )
83 * Compute norm of op(A)*op2(C).
91 TMP = TMP + CABS1( A( I, J ) ) / C( J )
95 TMP = TMP + CABS1( A( I, J ) )
99 ANORM = MAX( ANORM, TMP )
106 TMP = TMP + CABS1( A( J, I ) ) / C( J )
110 TMP = TMP + CABS1( A( J, I ) )
114 ANORM = MAX( ANORM, TMP )
118 * Quick return if possible.
121 ZLA_GERCOND_C = 1.0D+0
123 ELSE IF( ANORM .EQ. 0.0D+0 ) THEN
127 * Estimate the norm of inv(op(A)).
133 CALL ZLACN2( N, WORK( N+1 ), WORK, AINVNM, KASE, ISAVE )
140 WORK( I ) = WORK( I ) * RWORK( 2*N+I )
144 CALL ZGETRS( 'No transpose', N, 1, AF, LDAF, IPIV,
147 CALL ZGETRS( 'Conjugate transpose', N, 1, AF, LDAF, IPIV,
151 * Multiply by inv(C).
155 WORK( I ) = WORK( I ) * C( I )
160 * Multiply by inv(C').
164 WORK( I ) = WORK( I ) * C( I )
169 CALL ZGETRS( 'Conjugate transpose', N, 1, AF, LDAF, IPIV,
172 CALL ZGETRS( 'No transpose', N, 1, AF, LDAF, IPIV,
179 WORK( I ) = WORK( I ) * RWORK( 2*N+I )
185 * Compute the estimate of the reciprocal condition number.
187 IF( AINVNM .NE. 0.0D+0 )
188 $ ZLA_GERCOND_C = 1.0D+0 / AINVNM