LAPACK
3.9.0
LAPACK: Linear Algebra PACKage
zlaqsb.f
Go to the documentation of this file.
1
*> \brief \b ZLAQSB scales a symmetric/Hermitian band matrix, using scaling factors computed by spbequ.
2
*
3
* =========== DOCUMENTATION ===========
4
*
5
* Online html documentation available at
6
* http://www.netlib.org/lapack/explore-html/
7
*
8
*> \htmlonly
9
*> Download ZLAQSB + dependencies
10
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlaqsb.f">
11
*> [TGZ]</a>
12
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlaqsb.f">
13
*> [ZIP]</a>
14
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlaqsb.f">
15
*> [TXT]</a>
16
*> \endhtmlonly
17
*
18
* Definition:
19
* ===========
20
*
21
* SUBROUTINE ZLAQSB( UPLO, N, KD, AB, LDAB, S, SCOND, AMAX, EQUED )
22
*
23
* .. Scalar Arguments ..
24
* CHARACTER EQUED, UPLO
25
* INTEGER KD, LDAB, N
26
* DOUBLE PRECISION AMAX, SCOND
27
* ..
28
* .. Array Arguments ..
29
* DOUBLE PRECISION S( * )
30
* COMPLEX*16 AB( LDAB, * )
31
* ..
32
*
33
*
34
*> \par Purpose:
35
* =============
36
*>
37
*> \verbatim
38
*>
39
*> ZLAQSB equilibrates a symmetric band matrix A using the scaling
40
*> factors in the vector S.
41
*> \endverbatim
42
*
43
* Arguments:
44
* ==========
45
*
46
*> \param[in] UPLO
47
*> \verbatim
48
*> UPLO is CHARACTER*1
49
*> Specifies whether the upper or lower triangular part of the
50
*> symmetric matrix A is stored.
51
*> = 'U': Upper triangular
52
*> = 'L': Lower triangular
53
*> \endverbatim
54
*>
55
*> \param[in] N
56
*> \verbatim
57
*> N is INTEGER
58
*> The order of the matrix A. N >= 0.
59
*> \endverbatim
60
*>
61
*> \param[in] KD
62
*> \verbatim
63
*> KD is INTEGER
64
*> The number of super-diagonals of the matrix A if UPLO = 'U',
65
*> or the number of sub-diagonals if UPLO = 'L'. KD >= 0.
66
*> \endverbatim
67
*>
68
*> \param[in,out] AB
69
*> \verbatim
70
*> AB is COMPLEX*16 array, dimension (LDAB,N)
71
*> On entry, the upper or lower triangle of the symmetric band
72
*> matrix A, stored in the first KD+1 rows of the array. The
73
*> j-th column of A is stored in the j-th column of the array AB
74
*> as follows:
75
*> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
76
*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd).
77
*>
78
*> On exit, if INFO = 0, the triangular factor U or L from the
79
*> Cholesky factorization A = U**H *U or A = L*L**H of the band
80
*> matrix A, in the same storage format as A.
81
*> \endverbatim
82
*>
83
*> \param[in] LDAB
84
*> \verbatim
85
*> LDAB is INTEGER
86
*> The leading dimension of the array AB. LDAB >= KD+1.
87
*> \endverbatim
88
*>
89
*> \param[in] S
90
*> \verbatim
91
*> S is DOUBLE PRECISION array, dimension (N)
92
*> The scale factors for A.
93
*> \endverbatim
94
*>
95
*> \param[in] SCOND
96
*> \verbatim
97
*> SCOND is DOUBLE PRECISION
98
*> Ratio of the smallest S(i) to the largest S(i).
99
*> \endverbatim
100
*>
101
*> \param[in] AMAX
102
*> \verbatim
103
*> AMAX is DOUBLE PRECISION
104
*> Absolute value of largest matrix entry.
105
*> \endverbatim
106
*>
107
*> \param[out] EQUED
108
*> \verbatim
109
*> EQUED is CHARACTER*1
110
*> Specifies whether or not equilibration was done.
111
*> = 'N': No equilibration.
112
*> = 'Y': Equilibration was done, i.e., A has been replaced by
113
*> diag(S) * A * diag(S).
114
*> \endverbatim
115
*
116
*> \par Internal Parameters:
117
* =========================
118
*>
119
*> \verbatim
120
*> THRESH is a threshold value used to decide if scaling should be done
121
*> based on the ratio of the scaling factors. If SCOND < THRESH,
122
*> scaling is done.
123
*>
124
*> LARGE and SMALL are threshold values used to decide if scaling should
125
*> be done based on the absolute size of the largest matrix element.
126
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
127
*> \endverbatim
128
*
129
* Authors:
130
* ========
131
*
132
*> \author Univ. of Tennessee
133
*> \author Univ. of California Berkeley
134
*> \author Univ. of Colorado Denver
135
*> \author NAG Ltd.
136
*
137
*> \date December 2016
138
*
139
*> \ingroup complex16OTHERauxiliary
140
*
141
* =====================================================================
142
SUBROUTINE
zlaqsb
( UPLO, N, KD, AB, LDAB, S, SCOND, AMAX, EQUED )
143
*
144
* -- LAPACK auxiliary routine (version 3.7.0) --
145
* -- LAPACK is a software package provided by Univ. of Tennessee, --
146
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
147
* December 2016
148
*
149
* .. Scalar Arguments ..
150
CHARACTER
EQUED, UPLO
151
INTEGER
KD, LDAB, N
152
DOUBLE PRECISION
AMAX, SCOND
153
* ..
154
* .. Array Arguments ..
155
DOUBLE PRECISION
S( * )
156
COMPLEX*16
AB( LDAB, * )
157
* ..
158
*
159
* =====================================================================
160
*
161
* .. Parameters ..
162
DOUBLE PRECISION
ONE, THRESH
163
parameter( one = 1.0d+0, thresh = 0.1d+0 )
164
* ..
165
* .. Local Scalars ..
166
INTEGER
I, J
167
DOUBLE PRECISION
CJ, LARGE, SMALL
168
* ..
169
* .. External Functions ..
170
LOGICAL
LSAME
171
DOUBLE PRECISION
DLAMCH
172
EXTERNAL
lsame, dlamch
173
* ..
174
* .. Intrinsic Functions ..
175
INTRINSIC
max, min
176
* ..
177
* .. Executable Statements ..
178
*
179
* Quick return if possible
180
*
181
IF
( n.LE.0 )
THEN
182
equed =
'N'
183
RETURN
184
END IF
185
*
186
* Initialize LARGE and SMALL.
187
*
188
small = dlamch(
'Safe minimum'
) / dlamch(
'Precision'
)
189
large = one / small
190
*
191
IF
( scond.GE.thresh .AND. amax.GE.small .AND. amax.LE.large )
THEN
192
*
193
* No equilibration
194
*
195
equed =
'N'
196
ELSE
197
*
198
* Replace A by diag(S) * A * diag(S).
199
*
200
IF
( lsame( uplo,
'U'
) )
THEN
201
*
202
* Upper triangle of A is stored in band format.
203
*
204
DO
20 j = 1, n
205
cj = s( j )
206
DO
10 i = max( 1, j-kd ), j
207
ab( kd+1+i-j, j ) = cj*s( i )*ab( kd+1+i-j, j )
208
10
CONTINUE
209
20
CONTINUE
210
ELSE
211
*
212
* Lower triangle of A is stored.
213
*
214
DO
40 j = 1, n
215
cj = s( j )
216
DO
30 i = j, min( n, j+kd )
217
ab( 1+i-j, j ) = cj*s( i )*ab( 1+i-j, j )
218
30
CONTINUE
219
40
CONTINUE
220
END IF
221
equed =
'Y'
222
END IF
223
*
224
RETURN
225
*
226
* End of ZLAQSB
227
*
228
END
zlaqsb
subroutine zlaqsb(UPLO, N, KD, AB, LDAB, S, SCOND, AMAX, EQUED)
ZLAQSB scales a symmetric/Hermitian band matrix, using scaling factors computed by spbequ.
Definition:
zlaqsb.f:143
SRC
zlaqsb.f
Generated on Wed May 5 2021 15:10:43 for LAPACK by
1.8.16