public interface laebz
LAEBZ contains the iteration loops which compute and use the
function N(w), which is the count of eigenvalues of a symmetric
tridiagonal matrix T less than or equal to its argument w. It
performs a choice of two types of loops:
IJOB=1, followed by
IJOB=2: It takes as input a list of intervals and returns a list of
sufficiently small intervals whose union contains the same
eigenvalues as the union of the original intervals.
The input intervals are (AB(j,1),AB(j,2)], j=1,...,MINP.
The output interval (AB(j,1),AB(j,2)] will contain
eigenvalues NAB(j,1)+1,...,NAB(j,2), where 1 <= j <= MOUT.
IJOB=3: It performs a binary search in each input interval
(AB(j,1),AB(j,2)] for a point w(j) such that
N(w(j))=NVAL(j), and uses C(j) as the starting point of
the search. If such a w(j) is found, then on output
AB(j,1)=AB(j,2)=w. If no such w(j) is found, then on output
(AB(j,1),AB(j,2)] will be a small interval containing the
point where N(w) jumps through NVAL(j), unless that point
lies outside the initial interval.
Note that the intervals are in all cases half-open intervals,
i.e., of the form (a,b] , which includes b but not a .
To avoid underflow, the matrix should be scaled so that its largest
element is no greater than overflow(1/2) * underflow(1/4)
in absolute value. To assure the most accurate computation
of small eigenvalues, the matrix should be scaled to be
not much smaller than that, either.
See W. Kahan "Accurate Eigenvalues of a Symmetric Tridiagonal
Matrix", Report CS41, Computer Science Dept., Stanford
University, July 21, 1966
Note: the arguments are, in general, not checked for unreasonable
values.
Subroutines
Arguments
| Type |
Intent | Optional | Attributes |
|
Name |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ijob |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
nitmax |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
n |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
mmax |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
minp |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
nbmin |
|
|
real(kind=dp),
|
intent(in) |
|
|
:: |
abstol |
|
|
real(kind=dp),
|
intent(in) |
|
|
:: |
reltol |
|
|
real(kind=dp),
|
intent(in) |
|
|
:: |
pivmin |
|
|
real(kind=dp),
|
intent(in) |
|
|
:: |
d(*) |
|
|
real(kind=dp),
|
intent(in) |
|
|
:: |
e(*) |
|
|
real(kind=dp),
|
intent(in) |
|
|
:: |
e2(*) |
|
|
integer(kind=ilp),
|
intent(inout) |
|
|
:: |
nval(*) |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
ab(mmax,*) |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
c(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
mout |
|
|
integer(kind=ilp),
|
intent(inout) |
|
|
:: |
nab(mmax,*) |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
work(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
iwork(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
info |
|
Arguments
| Type |
Intent | Optional | Attributes |
|
Name |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ijob |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
nitmax |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
n |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
mmax |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
minp |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
nbmin |
|
|
real(kind=sp),
|
intent(in) |
|
|
:: |
abstol |
|
|
real(kind=sp),
|
intent(in) |
|
|
:: |
reltol |
|
|
real(kind=sp),
|
intent(in) |
|
|
:: |
pivmin |
|
|
real(kind=sp),
|
intent(in) |
|
|
:: |
d(*) |
|
|
real(kind=sp),
|
intent(in) |
|
|
:: |
e(*) |
|
|
real(kind=sp),
|
intent(in) |
|
|
:: |
e2(*) |
|
|
integer(kind=ilp),
|
intent(inout) |
|
|
:: |
nval(*) |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
ab(mmax,*) |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
c(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
mout |
|
|
integer(kind=ilp),
|
intent(inout) |
|
|
:: |
nab(mmax,*) |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
work(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
iwork(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
info |
|
Module Procedures