LAPACK  3.10.0 LAPACK: Linear Algebra PACKage

## ◆ 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.

Purpose:
``` Compute the splitting points with threshold SPLTOL.
DLARRA sets any "small" 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```
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 134 of file dlarra.f.

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