LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages

◆ dlarra()

subroutine dlarra ( integer n,
double precision, dimension( * ) d,
double precision, dimension( * ) e,
double precision, dimension( * ) e2,
double precision spltol,
double precision tnrm,
integer nsplit,
integer, dimension( * ) isplit,
integer info )

DLARRA computes the splitting points with the specified threshold.

Download DLARRA + dependencies [TGZ] [ZIP] [TXT]

Purpose:
!> !> Compute the splitting points with threshold SPLTOL. !> DLARRA sets any off-diagonal elements to zero. !>
Parameters
[in]N
!> N is INTEGER !> The order of the matrix. N > 0. !>
[in]D
!> D is DOUBLE PRECISION array, dimension (N) !> On entry, the N diagonal elements of the tridiagonal !> matrix T. !>
[in,out]E
!> E is DOUBLE PRECISION array, dimension (N) !> On entry, the first (N-1) entries contain the subdiagonal !> elements of the tridiagonal matrix T; E(N) need not be set. !> On exit, the entries E( ISPLIT( I ) ), 1 <= I <= NSPLIT, !> are set to zero, the other entries of E are untouched. !>
[in,out]E2
!> E2 is DOUBLE PRECISION array, dimension (N) !> On entry, the first (N-1) entries contain the SQUARES of the !> subdiagonal elements of the tridiagonal matrix T; !> E2(N) need not be set. !> On exit, the entries E2( ISPLIT( I ) ), !> 1 <= I <= NSPLIT, have been set to zero !>
[in]SPLTOL
!> SPLTOL is DOUBLE PRECISION !> The threshold for splitting. Two criteria can be used: !> SPLTOL<0 : criterion based on absolute off-diagonal value !> SPLTOL>0 : criterion that preserves relative accuracy !>
[in]TNRM
!> TNRM is DOUBLE PRECISION !> The norm of the matrix. !>
[out]NSPLIT
!> NSPLIT is INTEGER !> The number of blocks T splits into. 1 <= NSPLIT <= N. !>
[out]ISPLIT
!> ISPLIT is INTEGER array, dimension (N) !> The splitting points, at which T breaks up into blocks. !> The first block consists of rows/columns 1 to ISPLIT(1), !> the second of rows/columns ISPLIT(1)+1 through ISPLIT(2), !> etc., and the NSPLIT-th consists of rows/columns !> ISPLIT(NSPLIT-1)+1 through ISPLIT(NSPLIT)=N. !>
[out]INFO
!> INFO is INTEGER !> = 0: successful exit !>
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Contributors:
Beresford Parlett, University of California, Berkeley, USA
Jim Demmel, University of California, Berkeley, USA
Inderjit Dhillon, University of Texas, Austin, USA
Osni Marques, LBNL/NERSC, USA
Christof Voemel, University of California, Berkeley, USA

Definition at line 132 of file dlarra.f.

134*
135* -- LAPACK auxiliary routine --
136* -- LAPACK is a software package provided by Univ. of Tennessee, --
137* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
138*
139* .. Scalar Arguments ..
140 INTEGER INFO, N, NSPLIT
141 DOUBLE PRECISION SPLTOL, TNRM
142* ..
143* .. Array Arguments ..
144 INTEGER ISPLIT( * )
145 DOUBLE PRECISION D( * ), E( * ), E2( * )
146* ..
147*
148* =====================================================================
149*
150* .. Parameters ..
151 DOUBLE PRECISION ZERO
152 parameter( zero = 0.0d0 )
153* ..
154* .. Local Scalars ..
155 INTEGER I
156 DOUBLE PRECISION EABS, TMP1
157
158* ..
159* .. Intrinsic Functions ..
160 INTRINSIC abs
161* ..
162* .. Executable Statements ..
163*
164 info = 0
165 nsplit = 1
166*
167* Quick return if possible
168*
169 IF( n.LE.0 ) THEN
170 RETURN
171 END IF
172*
173* Compute splitting points
174 IF(spltol.LT.zero) THEN
175* Criterion based on absolute off-diagonal value
176 tmp1 = abs(spltol)* tnrm
177 DO 9 i = 1, n-1
178 eabs = abs( e(i) )
179 IF( eabs .LE. tmp1) THEN
180 e(i) = zero
181 e2(i) = zero
182 isplit( nsplit ) = i
183 nsplit = nsplit + 1
184 END IF
185 9 CONTINUE
186 ELSE
187* Criterion that guarantees relative accuracy
188 DO 10 i = 1, n-1
189 eabs = abs( e(i) )
190 IF( eabs .LE. spltol * sqrt(abs(d(i)))*sqrt(abs(d(i+1))) )
191 $ THEN
192 e(i) = zero
193 e2(i) = zero
194 isplit( nsplit ) = i
195 nsplit = nsplit + 1
196 END IF
197 10 CONTINUE
198 ENDIF
199 isplit( nsplit ) = n
200
201 RETURN
202*
203* End of DLARRA
204*
Here is the caller graph for this function: