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