LAPACK  3.10.1
LAPACK: Linear Algebra PACKage

◆ sla_porpvgrw()

real function sla_porpvgrw ( character*1  UPLO,
integer  NCOLS,
real, dimension( lda, * )  A,
integer  LDA,
real, dimension( ldaf, * )  AF,
integer  LDAF,
real, dimension( * )  WORK 
)

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

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

Purpose:
 SLA_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 REAL 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 REAL 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 SPOTRF.
[in]LDAF
          LDAF is INTEGER
     The leading dimension of the array AF.  LDAF >= max(1,N).
[out]WORK
          WORK is REAL array, dimension (2*N)
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.

Definition at line 103 of file sla_porpvgrw.f.

104 *
105 * -- LAPACK computational routine --
106 * -- LAPACK is a software package provided by Univ. of Tennessee, --
107 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
108 *
109 * .. Scalar Arguments ..
110  CHARACTER*1 UPLO
111  INTEGER NCOLS, LDA, LDAF
112 * ..
113 * .. Array Arguments ..
114  REAL A( LDA, * ), AF( LDAF, * ), WORK( * )
115 * ..
116 *
117 * =====================================================================
118 *
119 * .. Local Scalars ..
120  INTEGER I, J
121  REAL AMAX, UMAX, RPVGRW
122  LOGICAL UPPER
123 * ..
124 * .. Intrinsic Functions ..
125  INTRINSIC abs, max, min
126 * ..
127 * .. External Functions ..
128  EXTERNAL lsame
129  LOGICAL LSAME
130 * ..
131 * .. Executable Statements ..
132 *
133  upper = lsame( 'Upper', uplo )
134 *
135 * SPOTRF will have factored only the NCOLSxNCOLS leading minor, so
136 * we restrict the growth search to that minor and use only the first
137 * 2*NCOLS workspace entries.
138 *
139  rpvgrw = 1.0
140  DO i = 1, 2*ncols
141  work( i ) = 0.0
142  END DO
143 *
144 * Find the max magnitude entry of each column.
145 *
146  IF ( upper ) THEN
147  DO j = 1, ncols
148  DO i = 1, j
149  work( ncols+j ) =
150  $ max( abs( a( i, j ) ), work( ncols+j ) )
151  END DO
152  END DO
153  ELSE
154  DO j = 1, ncols
155  DO i = j, ncols
156  work( ncols+j ) =
157  $ max( abs( a( i, j ) ), work( ncols+j ) )
158  END DO
159  END DO
160  END IF
161 *
162 * Now find the max magnitude entry of each column of the factor in
163 * AF. No pivoting, so no permutations.
164 *
165  IF ( lsame( 'Upper', uplo ) ) THEN
166  DO j = 1, ncols
167  DO i = 1, j
168  work( j ) = max( abs( af( i, j ) ), work( j ) )
169  END DO
170  END DO
171  ELSE
172  DO j = 1, ncols
173  DO i = j, ncols
174  work( j ) = max( abs( af( i, j ) ), work( j ) )
175  END DO
176  END DO
177  END IF
178 *
179 * Compute the *inverse* of the max element growth factor. Dividing
180 * by zero would imply the largest entry of the factor's column is
181 * zero. Than can happen when either the column of A is zero or
182 * massive pivots made the factor underflow to zero. Neither counts
183 * as growth in itself, so simply ignore terms with zero
184 * denominators.
185 *
186  IF ( lsame( 'Upper', uplo ) ) THEN
187  DO i = 1, ncols
188  umax = work( i )
189  amax = work( ncols+i )
190  IF ( umax /= 0.0 ) THEN
191  rpvgrw = min( amax / umax, rpvgrw )
192  END IF
193  END DO
194  ELSE
195  DO i = 1, ncols
196  umax = work( i )
197  amax = work( ncols+i )
198  IF ( umax /= 0.0 ) THEN
199  rpvgrw = min( amax / umax, rpvgrw )
200  END IF
201  END DO
202  END IF
203 
204  sla_porpvgrw = rpvgrw
205 *
206 * End of SLA_PORPVGRW
207 *
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:53
real function sla_porpvgrw(UPLO, NCOLS, A, LDA, AF, LDAF, WORK)
SLA_PORPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a symmetric or Hermitian...
Definition: sla_porpvgrw.f:104
Here is the call graph for this function:
Here is the caller graph for this function: