 LAPACK  3.8.0 LAPACK: Linear Algebra PACKage

◆ slarra()

 subroutine slarra ( integer N, real, dimension( * ) D, real, dimension( * ) E, real, dimension( * ) E2, real SPLTOL, real TNRM, integer NSPLIT, integer, dimension( * ) ISPLIT, integer INFO )

SLARRA computes the splitting points with the specified threshold.

Purpose:
``` Compute the splitting points with threshold SPLTOL.
SLARRA 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 REAL array, dimension (N) On entry, the N diagonal elements of the tridiagonal matrix T.``` [in,out] E ``` E is REAL 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 REAL 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 REAL 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 REAL 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```
Date
June 2017
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 138 of file slarra.f.

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