STYLE: Remove trailing whitespace in Fortran files
[platform/upstream/lapack.git] / SRC / zla_gbrpvgrw.f
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