laebz#
Functions
-
void slaebz(const INT ijob, const INT nitmax, const INT n, const INT mmax, const INT minp, const INT nbmin, const f32 abstol, const f32 reltol, const f32 pivmin, const f32 *restrict D, const f32 *restrict E, const f32 *restrict E2, INT *restrict nval, f32 *restrict AB, f32 *restrict C, INT *mout, INT *restrict NAB, f32 *restrict work, INT *restrict iwork, INT *info)#
SLAEBZ 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=0,…,MINP-1. The output interval (AB(j,1),AB(j,2)] will contain eigenvalues NAB(j,1)+1,…,NAB(j,2), where 0 <= 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.
Parameters
inijobSpecifies what is to be done: = 1: Compute NAB for the initial intervals. = 2: Perform bisection iteration to find eigenvalues. = 3: Perform bisection iteration to invert N(w). Other values will cause SLAEBZ to return with info=-1.
innitmaxThe maximum number of “levels” of bisection to be performed.
innThe dimension of the tridiagonal matrix T. n >= 1.
inmmaxThe maximum number of intervals.
inminpThe initial number of intervals.
innbminThe smallest number of intervals that should be processed using a vector loop. If zero, then only the scalar loop will be used.
inabstolThe minimum (absolute) width of an interval.
inreltolThe minimum relative width of an interval.
inpivminThe minimum absolute value of a “pivot” in the Sturm sequence loop.
inDDouble precision array, dimension (n). The diagonal elements of the tridiagonal matrix T.
inEDouble precision array, dimension (n). The offdiagonal elements of T in positions 0..n-2.
inE2Double precision array, dimension (n). The squares of the offdiagonal elements of T.
inoutnvalInteger array, dimension (minp). If ijob=1 or 2, not referenced. If ijob=3, the desired values of N(w).
inoutABDouble precision array, dimension (mmax, 2), column-major. The endpoints of the intervals.
inoutCDouble precision array, dimension (mmax). If ijob=1, ignored. If ijob=2, workspace. If ijob=3, the starting search points.
outmoutIf ijob=1, the number of eigenvalues in the intervals. If ijob=2 or 3, the number of intervals output.
inoutNABInteger array, dimension (mmax, 2), column-major. The eigenvalue counts at the interval endpoints.
outworkDouble precision workspace, dimension (mmax).
outiworkInteger workspace, dimension (mmax).
outinfo= 0: All intervals converged.
= 1..MMAX: The last info intervals did not converge.
= MMAX+1: More than MMAX intervals were generated.
void slaebz(
const INT ijob,
const INT nitmax,
const INT n,
const INT mmax,
const INT minp,
const INT nbmin,
const f32 abstol,
const f32 reltol,
const f32 pivmin,
const f32* restrict D,
const f32* restrict E,
const f32* restrict E2,
INT* restrict nval,
f32* restrict AB,
f32* restrict C,
INT* mout,
INT* restrict NAB,
f32* restrict work,
INT* restrict iwork,
INT* info
);
Functions
-
void dlaebz(const INT ijob, const INT nitmax, const INT n, const INT mmax, const INT minp, const INT nbmin, const f64 abstol, const f64 reltol, const f64 pivmin, const f64 *restrict D, const f64 *restrict E, const f64 *restrict E2, INT *restrict nval, f64 *restrict AB, f64 *restrict C, INT *mout, INT *restrict NAB, f64 *restrict work, INT *restrict iwork, INT *info)#
DLAEBZ 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=0,…,MINP-1. The output interval (AB(j,1),AB(j,2)] will contain eigenvalues NAB(j,1)+1,…,NAB(j,2), where 0 <= 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.
Parameters
inijobSpecifies what is to be done: = 1: Compute NAB for the initial intervals. = 2: Perform bisection iteration to find eigenvalues. = 3: Perform bisection iteration to invert N(w). Other values will cause DLAEBZ to return with info=-1.
innitmaxThe maximum number of “levels” of bisection to be performed.
innThe dimension of the tridiagonal matrix T. n >= 1.
inmmaxThe maximum number of intervals.
inminpThe initial number of intervals.
innbminThe smallest number of intervals that should be processed using a vector loop. If zero, then only the scalar loop will be used.
inabstolThe minimum (absolute) width of an interval.
inreltolThe minimum relative width of an interval.
inpivminThe minimum absolute value of a “pivot” in the Sturm sequence loop.
inDDouble precision array, dimension (n). The diagonal elements of the tridiagonal matrix T.
inEDouble precision array, dimension (n). The offdiagonal elements of T in positions 0..n-2.
inE2Double precision array, dimension (n). The squares of the offdiagonal elements of T.
inoutnvalInteger array, dimension (minp). If ijob=1 or 2, not referenced. If ijob=3, the desired values of N(w).
inoutABDouble precision array, dimension (mmax, 2), column-major. The endpoints of the intervals.
inoutCDouble precision array, dimension (mmax). If ijob=1, ignored. If ijob=2, workspace. If ijob=3, the starting search points.
outmoutIf ijob=1, the number of eigenvalues in the intervals. If ijob=2 or 3, the number of intervals output.
inoutNABInteger array, dimension (mmax, 2), column-major. The eigenvalue counts at the interval endpoints.
outworkDouble precision workspace, dimension (mmax).
outiworkInteger workspace, dimension (mmax).
outinfo= 0: All intervals converged.
= 1..MMAX: The last info intervals did not converge.
= MMAX+1: More than MMAX intervals were generated.
void dlaebz(
const INT ijob,
const INT nitmax,
const INT n,
const INT mmax,
const INT minp,
const INT nbmin,
const f64 abstol,
const f64 reltol,
const f64 pivmin,
const f64* restrict D,
const f64* restrict E,
const f64* restrict E2,
INT* restrict nval,
f64* restrict AB,
f64* restrict C,
INT* mout,
INT* restrict NAB,
f64* restrict work,
INT* restrict iwork,
INT* info
);