LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ 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 submatrix,
136* so we restrict the growth search to that submatrix and use only
137* the first 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*
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...
logical function lsame(ca, cb)
LSAME
Definition lsame.f:48
Here is the call graph for this function:
Here is the caller graph for this function: