1*> \brief \b SLA_GBRPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a general banded matrix.
2*
3*  =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6*            http://www.netlib.org/lapack/explore-html/
7*
8*> \htmlonly
9*> Download SLA_GBRPVGRW + dependencies
10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/sla_gbrpvgrw.f">
11*> [TGZ]</a>
12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/sla_gbrpvgrw.f">
13*> [ZIP]</a>
14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sla_gbrpvgrw.f">
15*> [TXT]</a>
16*> \endhtmlonly
17*
18*  Definition:
19*  ===========
20*
21*       REAL FUNCTION SLA_GBRPVGRW( N, KL, KU, NCOLS, AB, LDAB, AFB,
22*                                   LDAFB )
23*
24*       .. Scalar Arguments ..
25*       INTEGER            N, KL, KU, NCOLS, LDAB, LDAFB
26*       ..
27*       .. Array Arguments ..
28*       REAL               AB( LDAB, * ), AFB( LDAFB, * )
29*       ..
30*
31*
32*> \par Purpose:
33*  =============
34*>
35*> \verbatim
36*>
37*> SLA_GBRPVGRW computes the reciprocal pivot growth factor
38*> norm(A)/norm(U). The "max absolute element" norm is used. If this is
39*> much less than 1, the stability of the LU factorization of the
40*> (equilibrated) matrix A could be poor. This also means that the
41*> solution X, estimated condition numbers, and error bounds could be
42*> unreliable.
43*> \endverbatim
44*
45*  Arguments:
46*  ==========
47*
48*> \param[in] N
49*> \verbatim
50*>          N is INTEGER
51*>     The number of linear equations, i.e., the order of the
52*>     matrix A.  N >= 0.
53*> \endverbatim
54*>
55*> \param[in] KL
56*> \verbatim
57*>          KL is INTEGER
58*>     The number of subdiagonals within the band of A.  KL >= 0.
59*> \endverbatim
60*>
61*> \param[in] KU
62*> \verbatim
63*>          KU is INTEGER
64*>     The number of superdiagonals within the band of A.  KU >= 0.
65*> \endverbatim
66*>
67*> \param[in] NCOLS
68*> \verbatim
69*>          NCOLS is INTEGER
70*>     The number of columns of the matrix A.  NCOLS >= 0.
71*> \endverbatim
72*>
73*> \param[in] AB
74*> \verbatim
75*>          AB is REAL array, dimension (LDAB,N)
76*>     On entry, the matrix A in band storage, in rows 1 to KL+KU+1.
77*>     The j-th column of A is stored in the j-th column of the
78*>     array AB as follows:
79*>     AB(KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+kl)
80*> \endverbatim
81*>
82*> \param[in] LDAB
83*> \verbatim
84*>          LDAB is INTEGER
85*>     The leading dimension of the array AB.  LDAB >= KL+KU+1.
86*> \endverbatim
87*>
88*> \param[in] AFB
89*> \verbatim
90*>          AFB is REAL array, dimension (LDAFB,N)
91*>     Details of the LU factorization of the band matrix A, as
92*>     computed by SGBTRF.  U is stored as an upper triangular
93*>     band matrix with KL+KU superdiagonals in rows 1 to KL+KU+1,
94*>     and the multipliers used during the factorization are stored
95*>     in rows KL+KU+2 to 2*KL+KU+1.
96*> \endverbatim
97*>
98*> \param[in] LDAFB
99*> \verbatim
100*>          LDAFB is INTEGER
101*>     The leading dimension of the array AFB.  LDAFB >= 2*KL+KU+1.
102*> \endverbatim
103*
104*  Authors:
105*  ========
106*
107*> \author Univ. of Tennessee
108*> \author Univ. of California Berkeley
109*> \author Univ. of Colorado Denver
110*> \author NAG Ltd.
111*
112*> \ingroup realGBcomputational
113*
114*  =====================================================================
115      REAL FUNCTION SLA_GBRPVGRW( N, KL, KU, NCOLS, AB, LDAB, AFB,
116     $                            LDAFB )
117*
118*  -- LAPACK computational routine --
119*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
120*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
121*
122*     .. Scalar Arguments ..
123      INTEGER            N, KL, KU, NCOLS, LDAB, LDAFB
124*     ..
125*     .. Array Arguments ..
126      REAL               AB( LDAB, * ), AFB( LDAFB, * )
127*     ..
128*
129*  =====================================================================
130*
131*     .. Local Scalars ..
132      INTEGER            I, J, KD
133      REAL               AMAX, UMAX, RPVGRW
134*     ..
135*     .. Intrinsic Functions ..
136      INTRINSIC          ABS, MAX, MIN
137*     ..
138*     .. Executable Statements ..
139*
140      RPVGRW = 1.0
141
142      KD = KU + 1
143      DO J = 1, NCOLS
144         AMAX = 0.0
145         UMAX = 0.0
146         DO I = MAX( J-KU, 1 ), MIN( J+KL, N )
147            AMAX = MAX( ABS( AB( KD+I-J, J)), AMAX )
148         END DO
149         DO I = MAX( J-KU, 1 ), J
150            UMAX = MAX( ABS( AFB( KD+I-J, J ) ), UMAX )
151         END DO
152         IF ( UMAX /= 0.0 ) THEN
153            RPVGRW = MIN( AMAX / UMAX, RPVGRW )
154         END IF
155      END DO
156      SLA_GBRPVGRW = RPVGRW
157*
158*     End of SLA_GBRPVGRW
159*
160      END
161