1SSTEGR(1) LAPACK computational routine (version 3.1) SSTEGR(1)
2
3
4
6 SSTEGR - selected eigenvalues and, optionally, eigenvectors of a real
7 symmetric tridiagonal matrix T
8
10 SUBROUTINE SSTEGR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU, ABSTOL, M, W,
11 Z, LDZ, ISUPPZ, WORK, LWORK, IWORK, LIWORK, INFO )
12
13 IMPLICIT NONE
14
15 CHARACTER JOBZ, RANGE
16
17 INTEGER IL, INFO, IU, LDZ, LIWORK, LWORK, M, N
18
19 REAL ABSTOL, VL, VU
20
21 INTEGER ISUPPZ( * ), IWORK( * )
22
23 REAL D( * ), E( * ), W( * ), WORK( * )
24
25 REAL Z( LDZ, * )
26
28 SSTEGR computes selected eigenvalues and, optionally, eigenvectors of a
29 real symmetric tridiagonal matrix T. Any such unreduced matrix has a
30 well defined set of pairwise different real eigenvalues, the corre‐
31 sponding real eigenvectors are pairwise orthogonal.
32
33 The spectrum may be computed either completely or partially by specify‐
34 ing either an interval (VL,VU] or a range of indices IL:IU for the
35 desired eigenvalues.
36
37 SSTEGR is a compatability wrapper around the improved SSTEMR routine.
38 See SSTEMR for further details.
39
40 One important change is that the ABSTOL parameter no longer provides
41 any benefit and hence is no longer used.
42
43 Note : SSTEGR and SSTEMR work only on machines which follow IEEE-754
44 floating-point standard in their handling of infinities and NaNs. Nor‐
45 mal execution may create these exceptiona values and hence may abort
46 due to a floating point exception in environments which do not conform
47 to the IEEE-754 standard.
48
49
51 JOBZ (input) CHARACTER*1
52 = 'N': Compute eigenvalues only;
53 = 'V': Compute eigenvalues and eigenvectors.
54
55 RANGE (input) CHARACTER*1
56 = 'A': all eigenvalues will be found.
57 = 'V': all eigenvalues in the half-open interval (VL,VU] will
58 be found. = 'I': the IL-th through IU-th eigenvalues will be
59 found.
60
61 N (input) INTEGER
62 The order of the matrix. N >= 0.
63
64 D (input/output) REAL array, dimension (N)
65 On entry, the N diagonal elements of the tridiagonal matrix T.
66 On exit, D is overwritten.
67
68 E (input/output) REAL array, dimension (N)
69 On entry, the (N-1) subdiagonal elements of the tridiagonal
70 matrix T in elements 1 to N-1 of E. E(N) need not be set on
71 input, but is used internally as workspace. On exit, E is
72 overwritten.
73
74 VL (input) REAL
75 VU (input) REAL If RANGE='V', the lower and upper bounds
76 of the interval to be searched for eigenvalues. VL < VU. Not
77 referenced if RANGE = 'A' or 'I'.
78
79 IL (input) INTEGER
80 IU (input) INTEGER If RANGE='I', the indices (in ascending
81 order) of the smallest and largest eigenvalues to be returned.
82 1 <= IL <= IU <= N, if N > 0. Not referenced if RANGE = 'A' or
83 'V'.
84
85 ABSTOL (input) REAL
86 Unused. Was the absolute error tolerance for the eigenval‐
87 ues/eigenvectors in previous versions.
88
89 M (output) INTEGER
90 The total number of eigenvalues found. 0 <= M <= N. If RANGE
91 = 'A', M = N, and if RANGE = 'I', M = IU-IL+1.
92
93 W (output) REAL array, dimension (N)
94 The first M elements contain the selected eigenvalues in
95 ascending order.
96
97 Z (output) REAL array, dimension (LDZ, max(1,M) )
98 If JOBZ = 'V', and if INFO = 0, then the first M columns of Z
99 contain the orthonormal eigenvectors of the matrix T corre‐
100 sponding to the selected eigenvalues, with the i-th column of Z
101 holding the eigenvector associated with W(i). If JOBZ = 'N',
102 then Z is not referenced. Note: the user must ensure that at
103 least max(1,M) columns are supplied in the array Z; if RANGE =
104 'V', the exact value of M is not known in advance and an upper
105 bound must be used. Supplying N columns is always safe.
106
107 LDZ (input) INTEGER
108 The leading dimension of the array Z. LDZ >= 1, and if JOBZ =
109 'V', then LDZ >= max(1,N).
110
111 ISUPPZ (output) INTEGER ARRAY, dimension ( 2*max(1,M) )
112 The support of the eigenvectors in Z, i.e., the indices indi‐
113 cating the nonzero elements in Z. The i-th computed eigenvector
114 is nonzero only in elements ISUPPZ( 2*i-1 ) through ISUPPZ( 2*i
115 ). This is relevant in the case when the matrix is split.
116 ISUPPZ is only accessed when JOBZ is 'V' and N > 0.
117
118 WORK (workspace/output) REAL array, dimension (LWORK)
119 On exit, if INFO = 0, WORK(1) returns the optimal (and minimal)
120 LWORK.
121
122 LWORK (input) INTEGER
123 The dimension of the array WORK. LWORK >= max(1,18*N) if JOBZ =
124 'V', and LWORK >= max(1,12*N) if JOBZ = 'N'. If LWORK = -1,
125 then a workspace query is assumed; the routine only calculates
126 the optimal size of the WORK array, returns this value as the
127 first entry of the WORK array, and no error message related to
128 LWORK is issued by XERBLA.
129
130 IWORK (workspace/output) INTEGER array, dimension (LIWORK)
131 On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK.
132
133 LIWORK (input) INTEGER
134 The dimension of the array IWORK. LIWORK >= max(1,10*N) if the
135 eigenvectors are desired, and LIWORK >= max(1,8*N) if only the
136 eigenvalues are to be computed. If LIWORK = -1, then a
137 workspace query is assumed; the routine only calculates the
138 optimal size of the IWORK array, returns this value as the
139 first entry of the IWORK array, and no error message related to
140 LIWORK is issued by XERBLA.
141
142 INFO (output) INTEGER
143 On exit, INFO = 0: successful exit
144 < 0: if INFO = -i, the i-th argument had an illegal value
145 > 0: if INFO = 1X, internal error in SLARRE, if INFO = 2X,
146 internal error in SLARRV. Here, the digit X = ABS( IINFO ) <
147 10, where IINFO is the nonzero error code returned by SLARRE or
148 SLARRV, respectively.
149
151 Based on contributions by
152 Inderjit Dhillon, IBM Almaden, USA
153 Osni Marques, LBNL/NERSC, USA
154 Christof Voemel, LBNL/NERSC, USA
155
156
157
158
159 LAPACK computational routine (verNsoivoenmb3e.r1)2006 SSTEGR(1)