LAPACK 3.12.1
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  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 101 of file sla_porpvgrw.f.

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