Purpose
=======
LA_STEVR computes selected eigenvalues and, optionally, the
corresponding eigenvectors of a real symmetric tridiagonal matrix A.
Eigenvalues and eigenvectors can be selected by specifying either a
range of values or a range of indices for the desired eigenvalues.
LA_STEVR uses a relatively robust representation (RRR) algorithm.
It is usually the fastest algorithm of all and uses the least
workspace.
=========
SUBROUTINE LA_STEVR ( D, E, W, Z=z, VL=vl, VU=vu, &
IL=il, IU=iu, M=m, ISUPPZ=isuppz, &
ABSTOL=abstol, INFO=info )
REAL(), INTENT(INOUT) :: D(:), E(:)
REAL(), INTENT(OUT) :: W(:)
REAL(), INTENT(OUT), OPTIONAL :: Z(:,:)
INTEGER, INTENT(OUT), OPTIONAL :: ISUPPZ(:)
REAL(), INTENT(IN), OPTIONAL :: VL, VU
INTEGER, INTENT(IN), OPTIONAL :: IL, IU
INTEGER, INTENT(OUT), OPTIONAL :: M
REAL(), INTENT(IN), OPTIONAL :: ABSTOL
INTEGER, INTENT(OUT), OPTIONAL :: INFO
where
::= KIND(1.0) | KIND(1.0D0)
Arguments
=========
D (input/output) REAL array, shape (:) with size(D) = n, where n
is the order of A.
On entry, the diagonal elements of the matrix A.
On exit, the original contents of D possibly multiplied by a
constant factor to avoid over/underflow in computing the
eigenvalues.
E (input/output) REAL array, shape (:) with size(E) = n.
On entry, the n-1 subdiagonal elements of A in E(1) to E(n-1) .
E(n) need not be set.
On exit, the original contents of E possibly multiplied by a
constant factor to avoid over/underflow in computing the
eigenvalues.
W (output) REAL array with size(W) = n.
The first M elements contain the selected eigenvalues in
ascending order.
Z Optional (output) REAL or COMPLEX array, shape (:,:) with
size(Z,1) = n and size(Z,2) = M.
The first M columns of Z contain the orthonormal eigenvectors of
A corresponding to the selected eigenvalues, with the i-th column
of Z containing the eigenvector associated with the eigenvalue in
W(i).
Note: The user must ensure that at least M columns are supplied
in the array Z. When the exact value of M is not known in advance,
an upper bound must be used. In all cases M <= n.
VL,VU Optional (input) REAL.
The lower and upper bounds of the interval to be searched for
eigenvalues. VL < VU.
Default values: VL = -HUGE() and VU = HUGE(), where
::= KIND(1.0) | KIND(1.0D0).
Note: Neither VL nor VU may be present if IL and/or IU is
present.
IL,IU Optional (input) INTEGER.
The indices of the smallest and largest eigenvalues to be
returned. The IL-th through IU-th eigenvalues will be found.
1 <= IL <= IU <= n.
Default values: IL = 1 and IU = n.
Note: Neither IL nor IU may be present if VL and/or VU is
present.
Note: All eigenvalues are calculated if none of the arguments
VL, VU, IL and IU are present.
M Optional (output) INTEGER.
The total number of eigenvalues found. 0 <= M <= n.
Note: If IL and IU are present then M = IU - IL + 1.
ISUPPZ Optional (output) INTEGER array, shape (:) with
size(ISUPPZ) = 2*max(1,M).
The support of the eigenvectors in A, i.e., the indices
indicating the nonzero elements. The i-th eigenvector is nonzero
only in elements ISUPPZ(2*i-1) through ISUPPZ(2*i).
ABSTOL Optional (input) REAL.
The absolute error tolerance for the eigenvalues. An approximate
eigenvalue is accepted as converged when it is determined to lie
in an interval [a, b] of width less than or equal to
ABSTOL + EPSILON(1.0_) * max(| a |, | b |),
where is the working precision. If ABSTOL <= 0, then
EPSILON(1.0_)*||A||1 will be used in its place. Eigenvalues
will be computed most accurately if ABSTOL is set to
LA_LAMCH( 1.0_, 'Safe minimum'), not zero.
Default value: 0.0_.
INFO Optional (output) INTEGER
= 0: successful exit.
< 0: if INFO = -i, the i-th argument had an illegal value.
> 0: an internal error occurred.
If INFO is not present and an error occurs, then the program is
terminated with an error message.