LAPACK
3.5.0
LAPACK: Linear Algebra PACKage
Main Page
Data Types List
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Macros
claqhe.f
Go to the documentation of this file.
1
*> \brief \b CLAQHE scales a Hermitian matrix.
2
*
3
* =========== DOCUMENTATION ===========
4
*
5
* Online html documentation available at
6
* http://www.netlib.org/lapack/explore-html/
7
*
8
*> \htmlonly
9
*> Download CLAQHE + dependencies
10
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/claqhe.f">
11
*> [TGZ]</a>
12
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/claqhe.f">
13
*> [ZIP]</a>
14
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqhe.f">
15
*> [TXT]</a>
16
*> \endhtmlonly
17
*
18
* Definition:
19
* ===========
20
*
21
* SUBROUTINE CLAQHE( UPLO, N, A, LDA, S, SCOND, AMAX, EQUED )
22
*
23
* .. Scalar Arguments ..
24
* CHARACTER EQUED, UPLO
25
* INTEGER LDA, N
26
* REAL AMAX, SCOND
27
* ..
28
* .. Array Arguments ..
29
* REAL S( * )
30
* COMPLEX A( LDA, * )
31
* ..
32
*
33
*
34
*> \par Purpose:
35
* =============
36
*>
37
*> \verbatim
38
*>
39
*> CLAQHE equilibrates a Hermitian matrix A using the scaling factors
40
*> 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
*> Hermitian 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,out] A
62
*> \verbatim
63
*> A is COMPLEX array, dimension (LDA,N)
64
*> On entry, the Hermitian matrix A. If UPLO = 'U', the leading
65
*> n by n upper triangular part of A contains the upper
66
*> triangular part of the matrix A, and the strictly lower
67
*> triangular part of A is not referenced. If UPLO = 'L', the
68
*> leading n by n lower triangular part of A contains the lower
69
*> triangular part of the matrix A, and the strictly upper
70
*> triangular part of A is not referenced.
71
*>
72
*> On exit, if EQUED = 'Y', the equilibrated matrix:
73
*> diag(S) * A * diag(S).
74
*> \endverbatim
75
*>
76
*> \param[in] LDA
77
*> \verbatim
78
*> LDA is INTEGER
79
*> The leading dimension of the array A. LDA >= max(N,1).
80
*> \endverbatim
81
*>
82
*> \param[in] S
83
*> \verbatim
84
*> S is REAL array, dimension (N)
85
*> The scale factors for A.
86
*> \endverbatim
87
*>
88
*> \param[in] SCOND
89
*> \verbatim
90
*> SCOND is REAL
91
*> Ratio of the smallest S(i) to the largest S(i).
92
*> \endverbatim
93
*>
94
*> \param[in] AMAX
95
*> \verbatim
96
*> AMAX is REAL
97
*> Absolute value of largest matrix entry.
98
*> \endverbatim
99
*>
100
*> \param[out] EQUED
101
*> \verbatim
102
*> EQUED is CHARACTER*1
103
*> Specifies whether or not equilibration was done.
104
*> = 'N': No equilibration.
105
*> = 'Y': Equilibration was done, i.e., A has been replaced by
106
*> diag(S) * A * diag(S).
107
*> \endverbatim
108
*
109
*> \par Internal Parameters:
110
* =========================
111
*>
112
*> \verbatim
113
*> THRESH is a threshold value used to decide if scaling should be done
114
*> based on the ratio of the scaling factors. If SCOND < THRESH,
115
*> scaling is done.
116
*>
117
*> LARGE and SMALL are threshold values used to decide if scaling should
118
*> be done based on the absolute size of the largest matrix element.
119
*> If AMAX > LARGE or AMAX < SMALL, scaling is done.
120
*> \endverbatim
121
*
122
* Authors:
123
* ========
124
*
125
*> \author Univ. of Tennessee
126
*> \author Univ. of California Berkeley
127
*> \author Univ. of Colorado Denver
128
*> \author NAG Ltd.
129
*
130
*> \date September 2012
131
*
132
*> \ingroup complexHEauxiliary
133
*
134
* =====================================================================
135
SUBROUTINE
claqhe
( UPLO, N, A, LDA, S, SCOND, AMAX, EQUED )
136
*
137
* -- LAPACK auxiliary routine (version 3.4.2) --
138
* -- LAPACK is a software package provided by Univ. of Tennessee, --
139
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
140
* September 2012
141
*
142
* .. Scalar Arguments ..
143
CHARACTER
equed, uplo
144
INTEGER
lda, n
145
REAL
amax, scond
146
* ..
147
* .. Array Arguments ..
148
REAL
s( * )
149
COMPLEX
a( lda, * )
150
* ..
151
*
152
* =====================================================================
153
*
154
* .. Parameters ..
155
REAL
one, thresh
156
parameter( one = 1.0e+0, thresh = 0.1e+0 )
157
* ..
158
* .. Local Scalars ..
159
INTEGER
i,
j
160
REAL
cj, large, small
161
* ..
162
* .. External Functions ..
163
LOGICAL
lsame
164
REAL
slamch
165
EXTERNAL
lsame
,
slamch
166
* ..
167
* .. Intrinsic Functions ..
168
INTRINSIC
real
169
* ..
170
* .. Executable Statements ..
171
*
172
* Quick return if possible
173
*
174
IF
( n.LE.0 )
THEN
175
equed =
'N'
176
RETURN
177
END IF
178
*
179
* Initialize LARGE and SMALL.
180
*
181
small =
slamch
(
'Safe minimum'
) /
slamch
(
'Precision'
)
182
large = one / small
183
*
184
IF
( scond.GE.thresh .AND. amax.GE.small .AND. amax.LE.large )
THEN
185
*
186
* No equilibration
187
*
188
equed =
'N'
189
ELSE
190
*
191
* Replace A by diag(S) * A * diag(S).
192
*
193
IF
(
lsame
( uplo,
'U'
) )
THEN
194
*
195
* Upper triangle of A is stored.
196
*
197
DO
20
j
= 1, n
198
cj = s(
j
)
199
DO
10 i = 1,
j
- 1
200
a( i,
j
) = cj*s( i )*a( i,
j
)
201
10
CONTINUE
202
a(
j
,
j
) = cj*cj*
REAL( A( J, J )
)
203
20
CONTINUE
204
ELSE
205
*
206
* Lower triangle of A is stored.
207
*
208
DO
40
j
= 1, n
209
cj = s(
j
)
210
a(
j
,
j
) = cj*cj*
REAL( A( J, J )
)
211
DO
30 i =
j
+ 1, n
212
a( i,
j
) = cj*s( i )*a( i,
j
)
213
30
CONTINUE
214
40
CONTINUE
215
END IF
216
equed =
'Y'
217
END IF
218
*
219
RETURN
220
*
221
* End of CLAQHE
222
*
223
END
src
claqhe.f
Generated on Mon Dec 30 2013 16:09:39 for LAPACK by
1.8.1.2