LAPACK  3.9.1
LAPACK: Linear Algebra PACKage
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 complex16POcomputational
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 minor, so
146 * we restrict the growth search to that minor and use only the first
147 * 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  END
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:53
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...
Definition: zla_porpvgrw.f:107