LAPACK  3.4.2
LAPACK: Linear Algebra PACKage
 All Files Functions Groups
zla_gbrpvgrw.f
Go to the documentation of this file.
1 *> \brief \b ZLA_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 ZLA_GBRPVGRW + dependencies
10 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zla_gbrpvgrw.f">
11 *> [TGZ]</a>
12 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zla_gbrpvgrw.f">
13 *> [ZIP]</a>
14 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zla_gbrpvgrw.f">
15 *> [TXT]</a>
16 *> \endhtmlonly
17 *
18 * Definition:
19 * ===========
20 *
21 * DOUBLE PRECISION FUNCTION ZLA_GBRPVGRW( N, KL, KU, NCOLS, AB,
22 * LDAB, AFB, LDAFB )
23 *
24 * .. Scalar Arguments ..
25 * INTEGER N, KL, KU, NCOLS, LDAB, LDAFB
26 * ..
27 * .. Array Arguments ..
28 * COMPLEX*16 AB( LDAB, * ), AFB( LDAFB, * )
29 * ..
30 *
31 *
32 *> \par Purpose:
33 * =============
34 *>
35 *> \verbatim
36 *>
37 *> ZLA_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 COMPLEX*16 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 COMPLEX*16 array, dimension (LDAFB,N)
91 *> Details of the LU factorization of the band matrix A, as
92 *> computed by ZGBTRF. 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 *> \date September 2012
113 *
114 *> \ingroup complex16GBcomputational
115 *
116 * =====================================================================
117  DOUBLE PRECISION FUNCTION zla_gbrpvgrw( N, KL, KU, NCOLS, AB,
118  $ ldab, afb, ldafb )
119 *
120 * -- LAPACK computational routine (version 3.4.2) --
121 * -- LAPACK is a software package provided by Univ. of Tennessee, --
122 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
123 * September 2012
124 *
125 * .. Scalar Arguments ..
126  INTEGER n, kl, ku, ncols, ldab, ldafb
127 * ..
128 * .. Array Arguments ..
129  COMPLEX*16 ab( ldab, * ), afb( ldafb, * )
130 * ..
131 *
132 * =====================================================================
133 *
134 * .. Local Scalars ..
135  INTEGER i, j, kd
136  DOUBLE PRECISION amax, umax, rpvgrw
137  COMPLEX*16 zdum
138 * ..
139 * .. Intrinsic Functions ..
140  INTRINSIC abs, max, min, REAL, dimag
141 * ..
142 * .. Statement Functions ..
143  DOUBLE PRECISION cabs1
144 * ..
145 * .. Statement Function Definitions ..
146  cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
147 * ..
148 * .. Executable Statements ..
149 *
150  rpvgrw = 1.0d+0
151 
152  kd = ku + 1
153  DO j = 1, ncols
154  amax = 0.0d+0
155  umax = 0.0d+0
156  DO i = max( j-ku, 1 ), min( j+kl, n )
157  amax = max( cabs1( ab( kd+i-j, j ) ), amax )
158  END DO
159  DO i = max( j-ku, 1 ), j
160  umax = max( cabs1( afb( kd+i-j, j ) ), umax )
161  END DO
162  IF ( umax /= 0.0d+0 ) THEN
163  rpvgrw = min( amax / umax, rpvgrw )
164  END IF
165  END DO
166  zla_gbrpvgrw = rpvgrw
167  END