1SLARRD(1)           LAPACK auxiliary routine (version 3.2)           SLARRD(1)
2
3
4

NAME

6       SLARRD  -  computes the eigenvalues of a symmetric tridiagonal matrix T
7       to suitable accuracy
8

SYNOPSIS

10       SUBROUTINE SLARRD( RANGE, ORDER, N, VL, VU, IL, IU, GERS, RELTOL, D, E,
11                          E2,  PIVMIN,  NSPLIT,  ISPLIT,  M,  W, WERR, WL, WU,
12                          IBLOCK, INDEXW, WORK, IWORK, INFO )
13
14           CHARACTER      ORDER, RANGE
15
16           INTEGER        IL, INFO, IU, M, N, NSPLIT
17
18           REAL           PIVMIN, RELTOL, VL, VU, WL, WU
19
20           INTEGER        IBLOCK( * ), INDEXW( * ), ISPLIT( * ), IWORK( * )
21
22           REAL           D( * ), E( * ), E2( * ), GERS( * ), W( * ), WERR(  *
23                          ), WORK( * )
24

PURPOSE

26       SLARRD  computes the eigenvalues of a symmetric tridiagonal matrix T to
27       suitable accuracy. This is an auxiliary code to be called from SSTEMR.
28       The user may ask for all eigenvalues, all eigenvalues
29       in the half-open interval (VL, VU], or the IL-th through  IU-th  eigen‐
30       values.
31       To avoid overflow, the matrix must be scaled so that its
32       largest element is no greater than overflow**(1/2) *
33       underflow**(1/4) in absolute value, and for greatest
34       accuracy, it should not be much smaller than that.
35       See  W. Kahan "Accurate Eigenvalues of a Symmetric Tridiagonal Matrix",
36       Report CS41, Computer Science Dept., Stanford
37       University, July 21, 1966.
38

ARGUMENTS

40       RANGE   (input) CHARACTER
41               = 'A': ("All")   all eigenvalues will be found.
42               = 'V': ("Value") all eigenvalues in the half-open interval (VL,
43               VU]  will  be  found.  = 'I': ("Index") the IL-th through IU-th
44               eigenvalues (of the entire matrix) will be found.
45
46       ORDER   (input) CHARACTER
47               = 'B': ("By Block") the eigenvalues will be grouped  by  split-
48               off  block  (see  IBLOCK,  ISPLIT) and ordered from smallest to
49               largest within the block.  = 'E': ("Entire matrix") the  eigen‐
50               values  for  the entire matrix will be ordered from smallest to
51               largest.
52
53       N       (input) INTEGER
54               The order of the tridiagonal matrix T.  N >= 0.
55
56       VL      (input) REAL
57               VU      (input) REAL If RANGE='V', the lower and  upper  bounds
58               of  the  interval  to be searched for eigenvalues.  Eigenvalues
59               less than or equal to VL, or  greater  than  VU,  will  not  be
60               returned.  VL < VU.  Not referenced if RANGE = 'A' or 'I'.
61
62       IL      (input) INTEGER
63               IU      (input) INTEGER If RANGE='I', the indices (in ascending
64               order) of the smallest and largest eigenvalues to be  returned.
65               1  <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0.  Not
66               referenced if RANGE = 'A' or 'V'.
67
68       GERS    (input) REAL             array, dimension (2*N)
69               The N Gerschgorin intervals (the i-th Gerschgorin  interval  is
70               (GERS(2*i-1), GERS(2*i)).
71
72       RELTOL  (input) REAL
73               The minimum relative width of an interval.  When an interval is
74               narrower than RELTOL times the larger (in magnitude)  endpoint,
75               then  it  is  considered  to  be sufficiently small, i.e., con‐
76               verged.  Note: this should always  be  at  least  radix*machine
77               epsilon.
78
79       D       (input) REAL             array, dimension (N)
80               The n diagonal elements of the tridiagonal matrix T.
81
82       E       (input) REAL             array, dimension (N-1)
83               The (n-1) off-diagonal elements of the tridiagonal matrix T.
84
85       E2      (input) REAL             array, dimension (N-1)
86               The  (n-1)  squared  off-diagonal  elements  of the tridiagonal
87               matrix T.
88
89       PIVMIN  (input) REAL
90               The minimum pivot allowed in the Sturm sequence for T.
91
92       NSPLIT  (input) INTEGER
93               The number of diagonal blocks in the matrix T.  1 <= NSPLIT  <=
94               N.
95
96       ISPLIT  (input) INTEGER array, dimension (N)
97               The  splitting  points,  at which T breaks up into submatrices.
98               The first submatrix consists of rows/columns  1  to  ISPLIT(1),
99               the second of rows/columns ISPLIT(1)+1 through ISPLIT(2), etc.,
100               and the NSPLIT-th consists of  rows/columns  ISPLIT(NSPLIT-1)+1
101               through ISPLIT(NSPLIT)=N.  (Only the first NSPLIT elements will
102               actually be used, but since the user cannot know a priori  what
103               value NSPLIT will have, N words must be reserved for ISPLIT.)
104
105       M       (output) INTEGER
106               The actual number of eigenvalues found. 0 <= M <= N.  (See also
107               the description of INFO=2,3.)
108
109       W       (output) REAL             array, dimension (N)
110               On exit, the first M elements of W will contain the  eigenvalue
111               approximations.  SLARRD  computes  an interval I_j = (a_j, b_j]
112               that includes eigenvalue j.  The  eigenvalue  approximation  is
113               given as the interval midpoint W(j)= ( a_j + b_j)/2. The corre‐
114               sponding error is bounded by WERR(j) = abs( a_j - b_j)/2
115
116       WERR    (output) REAL             array, dimension (N)
117               The error bound on the corresponding  eigenvalue  approximation
118               in W.
119
120       WL      (output) REAL
121               WU       (output)  REAL  The interval (WL, WU] contains all the
122               wanted eigenvalues.  If RANGE='V', then WL=VL  and  WU=VU.   If
123               RANGE='A',  then WL and WU are the global Gerschgorin bounds on
124               the spectrum.  If RANGE='I', then WL and  WU  are  computed  by
125               SLAEBZ from the index range specified.
126
127       IBLOCK  (output) INTEGER array, dimension (N)
128               At  each row/column j where E(j) is zero or small, the matrix T
129               is considered to split into a block diagonal matrix.  On  exit,
130               if  INFO = 0, IBLOCK(i) specifies to which block (from 1 to the
131               number of blocks) the eigenvalue W(i) belongs.  (SLARRD may use
132               the remaining N-M elements as workspace.)
133
134       INDEXW  (output) INTEGER array, dimension (N)
135               The  indices  of the eigenvalues within each block (submatrix);
136               for example, INDEXW(i)= j and IBLOCK(i)=k imply that  the  i-th
137               eigenvalue W(i) is the j-th eigenvalue in block k.
138
139       WORK    (workspace) REAL             array, dimension (4*N)
140
141       IWORK   (workspace) INTEGER array, dimension (3*N)
142
143       INFO    (output) INTEGER
144               = 0:  successful exit
145               < 0:  if INFO = -i, the i-th argument had an illegal value
146               > 0:  some or all of the eigenvalues failed to converge or
147               were not computed:
148               =1  or  3:  Bisection  failed to converge for some eigenvalues;
149               these eigenvalues are flagged by a negative block number.   The
150               effect  is  that  the eigenvalues may not be as accurate as the
151               absolute and relative tolerances.  This is generally caused  by
152               unexpectedly  inaccurate  arithmetic.  =2 or 3: RANGE='I' only:
153               Not all of the eigenvalues
154               IL:IU were found.
155               Effect: M < IU+1-IL
156               Cause:  non-monotonic arithmetic, causing the Sturm sequence to
157               be  non-monotonic.   Cure:    recalculate, using RANGE='A', and
158               pick
159               out eigenvalues IL:IU.  In some cases, increasing the PARAMETER
160               "FUDGE"  may make things work.  = 4:    RANGE='I', and the Ger‐
161               shgorin interval initially used was too small.  No  eigenvalues
162               were  computed.  Probable cause: your machine has sloppy float‐
163               ing-point arithmetic.  Cure: Increase  the  PARAMETER  "FUDGE",
164               recompile, and try again.
165

PARAMETERS

167       FUDGE   REAL            , default = 2
168               A "fudge factor" to widen the Gershgorin intervals.  Ideally, a
169               value of 1 should work, but on machines with sloppy arithmetic,
170               this  needs  to  be  larger.  The default for publicly released
171               versions should be large enough to  handle  the  worst  machine
172               around.   Note that this has no effect on accuracy of the solu‐
173               tion.  Based on contributions by W. Kahan, University of  Cali‐
174               fornia, Berkeley, USA Beresford Parlett, University of Califor‐
175               nia, Berkeley, USA Jim Demmel, University of California, Berke‐
176               ley,  USA  Inderjit  Dhillon,  University of Texas, Austin, USA
177               Osni Marques, LBNL/NERSC, USA Christof  Voemel,  University  of
178               California, Berkeley, USA
179
180
181
182 LAPACK auxiliary routine (versionNo3v.e2m)ber 2008                       SLARRD(1)
Impressum