public interface larre
To find the desired eigenvalues of a given real symmetric
tridiagonal matrix T, LARRE: sets any "small" off-diagonal
elements to zero, and for each unreduced block T_i, it finds
(a) a suitable shift at one end of the block's spectrum,
(b) the base representation, T_i - sigma_i I = L_i D_i L_i^T, and
(c) eigenvalues of each L_i D_i L_i^T.
The representations and eigenvalues found are then used by
DSTEMR to compute the eigenvectors of T.
The accuracy varies depending on whether bisection is used to
find a few eigenvalues or the dqds algorithm (subroutine DLASQ2) to
conpute all and then discard any unwanted one.
As an added benefit, LARRE also outputs the n
Gerschgorin intervals for the matrices L_i D_i L_i^T.
Subroutines
Arguments
| Type |
Intent | Optional | Attributes |
|
Name |
|
|
character(len=1),
|
intent(in) |
|
|
:: |
range |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
n |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
vl |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
vu |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
il |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
iu |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
d(*) |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
e(*) |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
e2(*) |
|
|
real(kind=dp),
|
intent(in) |
|
|
:: |
rtol1 |
|
|
real(kind=dp),
|
intent(in) |
|
|
:: |
rtol2 |
|
|
real(kind=dp),
|
intent(in) |
|
|
:: |
spltol |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
nsplit |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
isplit(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
m |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
w(*) |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
werr(*) |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
wgap(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
iblock(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
indexw(*) |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
gers(*) |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
pivmin |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
work(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
iwork(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
info |
|
Arguments
| Type |
Intent | Optional | Attributes |
|
Name |
|
|
character(len=1),
|
intent(in) |
|
|
:: |
range |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
n |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
vl |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
vu |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
il |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
iu |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
d(*) |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
e(*) |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
e2(*) |
|
|
real(kind=sp),
|
intent(in) |
|
|
:: |
rtol1 |
|
|
real(kind=sp),
|
intent(in) |
|
|
:: |
rtol2 |
|
|
real(kind=sp),
|
intent(in) |
|
|
:: |
spltol |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
nsplit |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
isplit(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
m |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
w(*) |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
werr(*) |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
wgap(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
iblock(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
indexw(*) |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
gers(*) |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
pivmin |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
work(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
iwork(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
info |
|
Module Procedures