LAPACK  3.9.1
LAPACK: Linear Algebra PACKage

◆ zla_porpvgrw()

double precision function zla_porpvgrw ( character*1  UPLO,
integer  NCOLS,
complex*16, dimension( lda, * )  A,
integer  LDA,
complex*16, dimension( ldaf, * )  AF,
integer  LDAF,
double precision, dimension( * )  WORK 
)

ZLA_PORPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a symmetric or Hermitian positive-definite matrix.

Download ZLA_PORPVGRW + dependencies [TGZ] [ZIP] [TXT]

Purpose:
 ZLA_PORPVGRW computes the reciprocal pivot growth factor
 norm(A)/norm(U). The "max absolute element" norm is used. If this is
 much less than 1, the stability of the LU factorization of the
 (equilibrated) matrix A could be poor. This also means that the
 solution X, estimated condition numbers, and error bounds could be
 unreliable.
Parameters
[in]UPLO
          UPLO is CHARACTER*1
       = 'U':  Upper triangle of A is stored;
       = 'L':  Lower triangle of A is stored.
[in]NCOLS
          NCOLS is INTEGER
     The number of columns of the matrix A. NCOLS >= 0.
[in]A
          A is COMPLEX*16 array, dimension (LDA,N)
     On entry, the N-by-N matrix A.
[in]LDA
          LDA is INTEGER
     The leading dimension of the array A.  LDA >= max(1,N).
[in]AF
          AF is COMPLEX*16 array, dimension (LDAF,N)
     The triangular factor U or L from the Cholesky factorization
     A = U**T*U or A = L*L**T, as computed by ZPOTRF.
[in]LDAF
          LDAF is INTEGER
     The leading dimension of the array AF.  LDAF >= max(1,N).
[out]WORK
          WORK is DOUBLE PRECISION array, dimension (2*N)
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.

Definition at line 105 of file zla_porpvgrw.f.

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
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
Here is the call graph for this function:
Here is the caller graph for this function: