LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
zla_porpvgrw.f
Go to the documentation of this file.
1*> \brief \b ZLA_PORPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a symmetric or Hermitian positive-definite matrix.
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8*> \htmlonly
9*> Download ZLA_PORPVGRW + dependencies
10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zla_porpvgrw.f">
11*> [TGZ]</a>
12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zla_porpvgrw.f">
13*> [ZIP]</a>
14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zla_porpvgrw.f">
15*> [TXT]</a>
16*> \endhtmlonly
17*
18* Definition:
19* ===========
20*
21* DOUBLE PRECISION FUNCTION ZLA_PORPVGRW( UPLO, NCOLS, A, LDA, AF,
22* LDAF, WORK )
23*
24* .. Scalar Arguments ..
25* CHARACTER*1 UPLO
26* INTEGER NCOLS, LDA, LDAF
27* ..
28* .. Array Arguments ..
29* COMPLEX*16 A( LDA, * ), AF( LDAF, * )
30* DOUBLE PRECISION WORK( * )
31* ..
32*
33*
34*> \par Purpose:
35* =============
36*>
37*> \verbatim
38*>
39*>
40*> ZLA_PORPVGRW computes the reciprocal pivot growth factor
41*> norm(A)/norm(U). The "max absolute element" norm is used. If this is
42*> much less than 1, the stability of the LU factorization of the
43*> (equilibrated) matrix A could be poor. This also means that the
44*> solution X, estimated condition numbers, and error bounds could be
45*> unreliable.
46*> \endverbatim
47*
48* Arguments:
49* ==========
50*
51*> \param[in] UPLO
52*> \verbatim
53*> UPLO is CHARACTER*1
54*> = 'U': Upper triangle of A is stored;
55*> = 'L': Lower triangle of A is stored.
56*> \endverbatim
57*>
58*> \param[in] NCOLS
59*> \verbatim
60*> NCOLS is INTEGER
61*> The number of columns of the matrix A. NCOLS >= 0.
62*> \endverbatim
63*>
64*> \param[in] A
65*> \verbatim
66*> A is COMPLEX*16 array, dimension (LDA,N)
67*> On entry, the N-by-N matrix A.
68*> \endverbatim
69*>
70*> \param[in] LDA
71*> \verbatim
72*> LDA is INTEGER
73*> The leading dimension of the array A. LDA >= max(1,N).
74*> \endverbatim
75*>
76*> \param[in] AF
77*> \verbatim
78*> AF is COMPLEX*16 array, dimension (LDAF,N)
79*> The triangular factor U or L from the Cholesky factorization
80*> A = U**T*U or A = L*L**T, as computed by ZPOTRF.
81*> \endverbatim
82*>
83*> \param[in] LDAF
84*> \verbatim
85*> LDAF is INTEGER
86*> The leading dimension of the array AF. LDAF >= max(1,N).
87*> \endverbatim
88*>
89*> \param[out] WORK
90*> \verbatim
91*> WORK is DOUBLE PRECISION array, dimension (2*N)
92*> \endverbatim
93*
94* Authors:
95* ========
96*
97*> \author Univ. of Tennessee
98*> \author Univ. of California Berkeley
99*> \author Univ. of Colorado Denver
100*> \author NAG Ltd.
101*
102*> \ingroup la_porpvgrw
103*
104* =====================================================================
105 DOUBLE PRECISION FUNCTION zla_porpvgrw( UPLO, NCOLS, A, LDA, AF,
106 $ LDAF, WORK )
107*
108* -- LAPACK computational routine --
109* -- LAPACK is a software package provided by Univ. of Tennessee, --
110* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
111*
112* .. Scalar Arguments ..
113 CHARACTER*1 uplo
114 INTEGER ncols, lda, ldaf
115* ..
116* .. Array Arguments ..
117 COMPLEX*16 a( lda, * ), af( ldaf, * )
118 DOUBLE PRECISION work( * )
119* ..
120*
121* =====================================================================
122*
123* .. Local Scalars ..
124 INTEGER i, j
125 DOUBLE PRECISION amax, umax, rpvgrw
126 LOGICAL upper
127 COMPLEX*16 zdum
128* ..
129* .. External Functions ..
130 EXTERNAL lsame
131 LOGICAL lsame
132* ..
133* .. Intrinsic Functions ..
134 INTRINSIC abs, max, min, real, dimag
135* ..
136* .. Statement Functions ..
137 DOUBLE PRECISION cabs1
138* ..
139* .. Statement Function Definitions ..
140 cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
141* ..
142* .. Executable Statements ..
143 upper = lsame( 'Upper', uplo )
144*
145* DPOTRF will have factored only the NCOLSxNCOLS leading submatrix,
146* so we restrict the growth search to that submatrix and use only
147* the first 2*NCOLS workspace entries.
148*
149 rpvgrw = 1.0d+0
150 DO i = 1, 2*ncols
151 work( i ) = 0.0d+0
152 END DO
153*
154* Find the max magnitude entry of each column.
155*
156 IF ( upper ) THEN
157 DO j = 1, ncols
158 DO i = 1, j
159 work( ncols+j ) =
160 $ max( cabs1( a( i, j ) ), work( ncols+j ) )
161 END DO
162 END DO
163 ELSE
164 DO j = 1, ncols
165 DO i = j, ncols
166 work( ncols+j ) =
167 $ max( cabs1( a( i, j ) ), work( ncols+j ) )
168 END DO
169 END DO
170 END IF
171*
172* Now find the max magnitude entry of each column of the factor in
173* AF. No pivoting, so no permutations.
174*
175 IF ( lsame( 'Upper', uplo ) ) THEN
176 DO j = 1, ncols
177 DO i = 1, j
178 work( j ) = max( cabs1( af( i, j ) ), work( j ) )
179 END DO
180 END DO
181 ELSE
182 DO j = 1, ncols
183 DO i = j, ncols
184 work( j ) = max( cabs1( af( i, j ) ), work( j ) )
185 END DO
186 END DO
187 END IF
188*
189* Compute the *inverse* of the max element growth factor. Dividing
190* by zero would imply the largest entry of the factor's column is
191* zero. Than can happen when either the column of A is zero or
192* massive pivots made the factor underflow to zero. Neither counts
193* as growth in itself, so simply ignore terms with zero
194* denominators.
195*
196 IF ( lsame( 'Upper', uplo ) ) THEN
197 DO i = 1, ncols
198 umax = work( i )
199 amax = work( ncols+i )
200 IF ( umax /= 0.0d+0 ) THEN
201 rpvgrw = min( amax / umax, rpvgrw )
202 END IF
203 END DO
204 ELSE
205 DO i = 1, ncols
206 umax = work( i )
207 amax = work( ncols+i )
208 IF ( umax /= 0.0d+0 ) THEN
209 rpvgrw = min( amax / umax, rpvgrw )
210 END IF
211 END DO
212 END IF
213
214 zla_porpvgrw = rpvgrw
215*
216* End of ZLA_PORPVGRW
217*
218 END
double precision function zla_porpvgrw(uplo, ncols, a, lda, af, ldaf, work)
ZLA_PORPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a symmetric or Hermitian...
logical function lsame(ca, cb)
LSAME
Definition lsame.f:48