LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
zhecon_rook.f
Go to the documentation of this file.
1*> \brief <b> ZHECON_ROOK estimates the reciprocal of the condition number fort HE matrices using factorization obtained with one of the bounded diagonal pivoting methods (max 2 interchanges) </b>
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8*> \htmlonly
9*> Download ZHECON_ROOK + dependencies
10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zhecon_rook.f">
11*> [TGZ]</a>
12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zhecon_rook.f">
13*> [ZIP]</a>
14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhecon_rook.f">
15*> [TXT]</a>
16*> \endhtmlonly
17*
18* Definition:
19* ===========
20*
21* SUBROUTINE ZHECON_ROOK( UPLO, N, A, LDA, IPIV, ANORM, RCOND, WORK,
22* INFO )
23*
24* .. Scalar Arguments ..
25* CHARACTER UPLO
26* INTEGER INFO, LDA, N
27* DOUBLE PRECISION ANORM, RCOND
28* ..
29* .. Array Arguments ..
30* INTEGER IPIV( * )
31* COMPLEX*16 A( LDA, * ), WORK( * )
32* ..
33*
34*
35*> \par Purpose:
36* =============
37*>
38*> \verbatim
39*>
40*> ZHECON_ROOK estimates the reciprocal of the condition number of a complex
41*> Hermitian matrix A using the factorization A = U*D*U**H or
42*> A = L*D*L**H computed by CHETRF_ROOK.
43*>
44*> An estimate is obtained for norm(inv(A)), and the reciprocal of the
45*> condition number is computed as RCOND = 1 / (ANORM * norm(inv(A))).
46*> \endverbatim
47*
48* Arguments:
49* ==========
50*
51*> \param[in] UPLO
52*> \verbatim
53*> UPLO is CHARACTER*1
54*> Specifies whether the details of the factorization are stored
55*> as an upper or lower triangular matrix.
56*> = 'U': Upper triangular, form is A = U*D*U**H;
57*> = 'L': Lower triangular, form is A = L*D*L**H.
58*> \endverbatim
59*>
60*> \param[in] N
61*> \verbatim
62*> N is INTEGER
63*> The order of the matrix A. N >= 0.
64*> \endverbatim
65*>
66*> \param[in] A
67*> \verbatim
68*> A is COMPLEX*16 array, dimension (LDA,N)
69*> The block diagonal matrix D and the multipliers used to
70*> obtain the factor U or L as computed by CHETRF_ROOK.
71*> \endverbatim
72*>
73*> \param[in] LDA
74*> \verbatim
75*> LDA is INTEGER
76*> The leading dimension of the array A. LDA >= max(1,N).
77*> \endverbatim
78*>
79*> \param[in] IPIV
80*> \verbatim
81*> IPIV is INTEGER array, dimension (N)
82*> Details of the interchanges and the block structure of D
83*> as determined by CHETRF_ROOK.
84*> \endverbatim
85*>
86*> \param[in] ANORM
87*> \verbatim
88*> ANORM is DOUBLE PRECISION
89*> The 1-norm of the original matrix A.
90*> \endverbatim
91*>
92*> \param[out] RCOND
93*> \verbatim
94*> RCOND is DOUBLE PRECISION
95*> The reciprocal of the condition number of the matrix A,
96*> computed as RCOND = 1/(ANORM * AINVNM), where AINVNM is an
97*> estimate of the 1-norm of inv(A) computed in this routine.
98*> \endverbatim
99*>
100*> \param[out] WORK
101*> \verbatim
102*> WORK is COMPLEX*16 array, dimension (2*N)
103*> \endverbatim
104*>
105*> \param[out] INFO
106*> \verbatim
107*> INFO is INTEGER
108*> = 0: successful exit
109*> < 0: if INFO = -i, the i-th argument had an illegal value
110*> \endverbatim
111*
112* Authors:
113* ========
114*
115*> \author Univ. of Tennessee
116*> \author Univ. of California Berkeley
117*> \author Univ. of Colorado Denver
118*> \author NAG Ltd.
119*
120*> \ingroup hecon_rook
121*
122*> \par Contributors:
123* ==================
124*> \verbatim
125*>
126*> June 2017, Igor Kozachenko,
127*> Computer Science Division,
128*> University of California, Berkeley
129*>
130*> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas,
131*> School of Mathematics,
132*> University of Manchester
133*>
134*> \endverbatim
135*
136* =====================================================================
137 SUBROUTINE zhecon_rook( UPLO, N, A, LDA, IPIV, ANORM, RCOND, WORK,
138 $ INFO )
139*
140* -- LAPACK computational routine --
141* -- LAPACK is a software package provided by Univ. of Tennessee, --
142* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
143*
144* .. Scalar Arguments ..
145 CHARACTER UPLO
146 INTEGER INFO, LDA, N
147 DOUBLE PRECISION ANORM, RCOND
148* ..
149* .. Array Arguments ..
150 INTEGER IPIV( * )
151 COMPLEX*16 A( LDA, * ), WORK( * )
152* ..
153*
154* =====================================================================
155*
156* .. Parameters ..
157 DOUBLE PRECISION ONE, ZERO
158 parameter( one = 1.0d+0, zero = 0.0d+0 )
159* ..
160* .. Local Scalars ..
161 LOGICAL UPPER
162 INTEGER I, KASE
163 DOUBLE PRECISION AINVNM
164* ..
165* .. Local Arrays ..
166 INTEGER ISAVE( 3 )
167* ..
168* .. External Functions ..
169 LOGICAL LSAME
170 EXTERNAL lsame
171* ..
172* .. External Subroutines ..
173 EXTERNAL zhetrs_rook, zlacn2, xerbla
174* ..
175* .. Intrinsic Functions ..
176 INTRINSIC max
177* ..
178* .. Executable Statements ..
179*
180* Test the input parameters.
181*
182 info = 0
183 upper = lsame( uplo, 'U' )
184 IF( .NOT.upper .AND. .NOT.lsame( uplo, 'L' ) ) THEN
185 info = -1
186 ELSE IF( n.LT.0 ) THEN
187 info = -2
188 ELSE IF( lda.LT.max( 1, n ) ) THEN
189 info = -4
190 ELSE IF( anorm.LT.zero ) THEN
191 info = -6
192 END IF
193 IF( info.NE.0 ) THEN
194 CALL xerbla( 'ZHECON_ROOK', -info )
195 RETURN
196 END IF
197*
198* Quick return if possible
199*
200 rcond = zero
201 IF( n.EQ.0 ) THEN
202 rcond = one
203 RETURN
204 ELSE IF( anorm.LE.zero ) THEN
205 RETURN
206 END IF
207*
208* Check that the diagonal matrix D is nonsingular.
209*
210 IF( upper ) THEN
211*
212* Upper triangular storage: examine D from bottom to top
213*
214 DO 10 i = n, 1, -1
215 IF( ipiv( i ).GT.0 .AND. a( i, i ).EQ.zero )
216 $ RETURN
217 10 CONTINUE
218 ELSE
219*
220* Lower triangular storage: examine D from top to bottom.
221*
222 DO 20 i = 1, n
223 IF( ipiv( i ).GT.0 .AND. a( i, i ).EQ.zero )
224 $ RETURN
225 20 CONTINUE
226 END IF
227*
228* Estimate the 1-norm of the inverse.
229*
230 kase = 0
231 30 CONTINUE
232 CALL zlacn2( n, work( n+1 ), work, ainvnm, kase, isave )
233 IF( kase.NE.0 ) THEN
234*
235* Multiply by inv(L*D*L**H) or inv(U*D*U**H).
236*
237 CALL zhetrs_rook( uplo, n, 1, a, lda, ipiv, work, n, info )
238 GO TO 30
239 END IF
240*
241* Compute the estimate of the reciprocal condition number.
242*
243 IF( ainvnm.NE.zero )
244 $ rcond = ( one / ainvnm ) / anorm
245*
246 RETURN
247*
248* End of ZHECON_ROOK
249*
250 END
subroutine xerbla(srname, info)
Definition cblat2.f:3285
subroutine zhecon_rook(uplo, n, a, lda, ipiv, anorm, rcond, work, info)
ZHECON_ROOK estimates the reciprocal of the condition number fort HE matrices using factorization obt...
subroutine zhetrs_rook(uplo, n, nrhs, a, lda, ipiv, b, ldb, info)
ZHETRS_ROOK computes the solution to a system of linear equations A * X = B for HE matrices using fac...
subroutine zlacn2(n, v, x, est, kase, isave)
ZLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
Definition zlacn2.f:133