MoDeNa
1.0
Software framework facilitating sequential multi-scale modelling
dlarra.f
1
*> \brief \b DLARRA
2
*
3
* =========== DOCUMENTATION ===========
4
*
5
* Online html documentation available at
6
* http://www.netlib.org/lapack/explore-html/
7
*
8
*> \htmlonly
9
*> Download DLARRA + dependencies
10
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlarra.f">
11
*> [TGZ]</a>
12
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlarra.f">
13
*> [ZIP]</a>
14
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarra.f">
15
*> [TXT]</a>
16
*> \endhtmlonly
17
*
18
* Definition:
19
* ===========
20
*
21
* SUBROUTINE DLARRA( N, D, E, E2, SPLTOL, TNRM,
22
* NSPLIT, ISPLIT, INFO )
23
*
24
* .. Scalar Arguments ..
25
* INTEGER INFO, N, NSPLIT
26
* DOUBLE PRECISION SPLTOL, TNRM
27
* ..
28
* .. Array Arguments ..
29
* INTEGER ISPLIT( * )
30
* DOUBLE PRECISION D( * ), E( * ), E2( * )
31
* ..
32
*
33
*
34
*> \par Purpose:
35
* =============
36
*>
37
*> \verbatim
38
*>
39
*> Compute the splitting points with threshold SPLTOL.
40
*> DLARRA sets any "small" off-diagonal elements to zero.
41
*> \endverbatim
42
*
43
* Arguments:
44
* ==========
45
*
46
*> \param[in] N
47
*> \verbatim
48
*> N is INTEGER
49
*> The order of the matrix. N > 0.
50
*> \endverbatim
51
*>
52
*> \param[in] D
53
*> \verbatim
54
*> D is DOUBLE PRECISION array, dimension (N)
55
*> On entry, the N diagonal elements of the tridiagonal
56
*> matrix T.
57
*> \endverbatim
58
*>
59
*> \param[in,out] E
60
*> \verbatim
61
*> E is DOUBLE PRECISION array, dimension (N)
62
*> On entry, the first (N-1) entries contain the subdiagonal
63
*> elements of the tridiagonal matrix T; E(N) need not be set.
64
*> On exit, the entries E( ISPLIT( I ) ), 1 <= I <= NSPLIT,
65
*> are set to zero, the other entries of E are untouched.
66
*> \endverbatim
67
*>
68
*> \param[in,out] E2
69
*> \verbatim
70
*> E2 is DOUBLE PRECISION array, dimension (N)
71
*> On entry, the first (N-1) entries contain the SQUARES of the
72
*> subdiagonal elements of the tridiagonal matrix T;
73
*> E2(N) need not be set.
74
*> On exit, the entries E2( ISPLIT( I ) ),
75
*> 1 <= I <= NSPLIT, have been set to zero
76
*> \endverbatim
77
*>
78
*> \param[in] SPLTOL
79
*> \verbatim
80
*> SPLTOL is DOUBLE PRECISION
81
*> The threshold for splitting. Two criteria can be used:
82
*> SPLTOL<0 : criterion based on absolute off-diagonal value
83
*> SPLTOL>0 : criterion that preserves relative accuracy
84
*> \endverbatim
85
*>
86
*> \param[in] TNRM
87
*> \verbatim
88
*> TNRM is DOUBLE PRECISION
89
*> The norm of the matrix.
90
*> \endverbatim
91
*>
92
*> \param[out] NSPLIT
93
*> \verbatim
94
*> NSPLIT is INTEGER
95
*> The number of blocks T splits into. 1 <= NSPLIT <= N.
96
*> \endverbatim
97
*>
98
*> \param[out] ISPLIT
99
*> \verbatim
100
*> ISPLIT is INTEGER array, dimension (N)
101
*> The splitting points, at which T breaks up into blocks.
102
*> The first block consists of rows/columns 1 to ISPLIT(1),
103
*> the second of rows/columns ISPLIT(1)+1 through ISPLIT(2),
104
*> etc., and the NSPLIT-th consists of rows/columns
105
*> ISPLIT(NSPLIT-1)+1 through ISPLIT(NSPLIT)=N.
106
*> \endverbatim
107
*>
108
*> \param[out] INFO
109
*> \verbatim
110
*> INFO is INTEGER
111
*> = 0: successful exit
112
*> \endverbatim
113
*
114
* Authors:
115
* ========
116
*
117
*> \author Univ. of Tennessee
118
*> \author Univ. of California Berkeley
119
*> \author Univ. of Colorado Denver
120
*> \author NAG Ltd.
121
*
122
*> \date November 2011
123
*
124
*> \ingroup auxOTHERauxiliary
125
*
126
*> \par Contributors:
127
* ==================
128
*>
129
*> Beresford Parlett, University of California, Berkeley, USA \n
130
*> Jim Demmel, University of California, Berkeley, USA \n
131
*> Inderjit Dhillon, University of Texas, Austin, USA \n
132
*> Osni Marques, LBNL/NERSC, USA \n
133
*> Christof Voemel, University of California, Berkeley, USA
134
*
135
* =====================================================================
136
SUBROUTINE
dlarra( N, D, E, E2, SPLTOL, TNRM,
137
$ NSPLIT, ISPLIT, INFO )
138
*
139
* -- LAPACK auxiliary routine (version 3.4.0) --
140
* -- LAPACK is a software package provided by Univ. of Tennessee, --
141
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
142
* November 2011
143
*
144
* .. Scalar Arguments ..
145
INTEGER
info, n, nsplit
146
DOUBLE PRECISION
spltol, tnrm
147
* ..
148
* .. Array Arguments ..
149
INTEGER
isplit( * )
150
DOUBLE PRECISION
d( * ), e( * ), e2( * )
151
* ..
152
*
153
* =====================================================================
154
*
155
* .. Parameters ..
156
DOUBLE PRECISION
zero
157
parameter( zero = 0.0d0 )
158
* ..
159
* .. Local Scalars ..
160
INTEGER
i
161
DOUBLE PRECISION
eabs, tmp1
162
163
* ..
164
* .. Intrinsic Functions ..
165
INTRINSIC
abs
166
* ..
167
* .. Executable Statements ..
168
*
169
info = 0
170
171
* Compute splitting points
172
nsplit = 1
173
IF
(spltol.LT.zero)
THEN
174
* Criterion based on absolute off-diagonal value
175
tmp1 = abs(spltol)* tnrm
176
DO
9 i = 1, n-1
177
eabs = abs( e(i) )
178
IF
( eabs .LE. tmp1)
THEN
179
e(i) = zero
180
e2(i) = zero
181
isplit( nsplit ) = i
182
nsplit = nsplit + 1
183
END IF
184
9
CONTINUE
185
ELSE
186
* Criterion that guarantees relative accuracy
187
DO
10 i = 1, n-1
188
eabs = abs( e(i) )
189
IF
( eabs .LE. spltol * sqrt(abs(d(i)))*sqrt(abs(d(i+1))) )
190
$
THEN
191
e(i) = zero
192
e2(i) = zero
193
isplit( nsplit ) = i
194
nsplit = nsplit + 1
195
END IF
196
10
CONTINUE
197
ENDIF
198
isplit( nsplit ) = n
199
200
RETURN
201
*
202
* End of DLARRA
203
*
204
END
applications
PUfoam
MoDeNaModels
CFD_tool_3D
src
eigen
src
dlarra.f
Generated on Fri Jan 13 2017 16:47:18 for MoDeNa by
1.8.13