Developer Reference

  • 0.10
  • 10/21/2020
  • Public Content
Contents

?larrd2

Computes the eigenvalues of a symmetric tridiagonal matrix to suitable accuracy.

Syntax

void slarrd2
(
char*
range
,
char*
order
,
MKL_INT*
n
,
float*
vl
,
float*
vu
,
MKL_INT*
il
,
MKL_INT*
iu
,
float*
gers
,
float*
reltol
,
float*
d
,
float*
e
,
float*
e2
,
float*
pivmin
,
MKL_INT*
nsplit
,
MKL_INT*
isplit
,
MKL_INT*
m
,
float*
w
,
float*
werr
,
float*
wl
,
float*
wu
,
MKL_INT*
iblock
,
MKL_INT*
indexw
,
float*
work
,
MKL_INT*
iwork
,
MKL_INT*
dol
,
MKL_INT*
dou
,
MKL_INT*
info
);
void dlarrd2
(
char*
range
,
char*
order
,
MKL_INT*
n
,
double*
vl
,
double*
vu
,
MKL_INT*
il
,
MKL_INT*
iu
,
double*
gers
,
double*
reltol
,
double*
d
,
double*
e
,
double*
e2
,
double*
pivmin
,
MKL_INT*
nsplit
,
MKL_INT*
isplit
,
MKL_INT*
m
,
double*
w
,
double*
werr
,
double*
wl
,
double*
wu
,
MKL_INT*
iblock
,
MKL_INT*
indexw
,
double*
work
,
MKL_INT*
iwork
,
MKL_INT*
dol
,
MKL_INT*
dou
,
MKL_INT*
info
);
Include Files
  • mkl_scalapack.h
Description
?larrd2
computes the eigenvalues of a symmetric tridiagonal matrix
T
to limited initial accuracy. This is an auxiliary code to be called from larre2a.
?larrd2
has been created using the LAPACK code
larrd
which itself stems from stebz. The motivation for creating
?larrd2
is efficiency: When computing eigenvalues in parallel and the input tridiagonal matrix splits into blocks,
?larrd2
can skip over blocks which contain none of the eigenvalues from DOL to DOU for which the processor responsible. In extreme cases (such as large matrices consisting of many blocks of small size like 2x2), the gain can be substantial.
Optimization Notice
Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.
Notice revision #20110804
This notice covers the following instruction sets: SSE2, SSE4.2, AVX2, AVX-512.
Input Parameters
range
= 'A': ("All") all eigenvalues will be found.
= 'V': ("Value") all eigenvalues in the half-open interval (
vl
,
vu
] will be found.
= 'I': ("Index")
eigenvalues of the entire matrix with the indices in a given range
will be found.
order
= 'B': ("By Block") the eigenvalues will be grouped by split-off block (see
iblock
,
isplit
) and ordered from smallest to largest within the block.
= 'E': ("Entire matrix") the eigenvalues for the entire matrix will be ordered from smallest to largest.
n
The order of the tridiagonal matrix
T
.
n
>= 0.
vl
,
vu
If
range
='V', the lower and upper bounds of the interval to be searched for eigenvalues. Eigenvalues less than or equal to
vl
, or greater than
vu
, will not be returned.
vl
<
vu
.
Not referenced if
range
= 'A' or 'I'.
il
,
iu
If
range
='I', the indices (in ascending order) of the
smallest eigenvalue, to be returned in
w
[
il
-1], and largest eigenvalue, to be returned in
w
[
iu
-1]
.
1
il
iu
=
n
, if
n
> 0;
il
= 1 and
iu
= 0 if
n
= 0.
Not referenced if
range
= 'A' or 'V'.
gers
Array of size 2*
n
The
n
Gerschgorin intervals (the
i
-th Gerschgorin interval is
(
gers
[2*
i
-2],
gers
[2*
i
-1])
).
reltol
The minimum relative width of an interval. When an interval is narrower than
reltol
times the larger (in magnitude) endpoint, then it is considered to be sufficiently small, i.e., converged. Note: this should always be at least radix*machine epsilon.
d
Array of size
n
The
n
diagonal elements of the tridiagonal matrix
T
.
e
Array of size
n
-1
The (
n
-1) off-diagonal elements of the tridiagonal matrix
T
.
e2
Array of size
n
-1
The (
n
-1) squared off-diagonal elements of the tridiagonal matrix
T
.
pivmin
The minimum pivot allowed in the sturm sequence for
T
.
nsplit
The number of diagonal blocks in the matrix
T
.
1
nsplit
n
.
isplit
Array of size
n
The splitting points, at which
T
breaks up into submatrices.
The first submatrix consists of rows/columns 1 to
isplit
[0], the second of rows/columns
isplit
[0]+1 through
isplit
[1], etc., and the
nsplit
-th submatrix consists of rows/columns
isplit
[
nsplit
-2]+1 through
isplit
[
nsplit
-1]=
n
.
(Only the first
nsplit
elements will actually be used, but since the user cannot know a priori what value
nsplit
will have,
n
words must be reserved for
isplit
.)
work
(workspace) Array of size 4*
n
iwork
(workspace) Array of size 3*
n
dol
,
dou
Specifying an index range
dol
:
dou
allows the user to work on only a selected part of the representation tree.
Otherwise, the setting
dol
=1,
dou
=
n
should be applied.
Note that
dol
and
dou
refer to the order in which the eigenvalues are stored in W.
OUTPUT Parameters
m
The actual number of eigenvalues found. 0
m
n
.
(See also the description of
info
=2,3.)
w
Array of size
n
On exit, the first
m
elements of
w
will contain the eigenvalue approximations.
?larrd2
computes an interval
I
j
= (
a
j
,
b
j
] that includes eigenvalue
j
. The eigenvalue approximation is given as the interval midpoint
w
[
j
-1]= (
a
j
+
b
j
)/2
. The corresponding error is bounded by
werr
[
j
-1] = abs(
a
j
-
b
j
)/2
.
werr
Array of size
n
The error bound on the corresponding eigenvalue approximation in
w
.
wl
,
wu
The interval (
wl
,
wu
] contains all the wanted eigenvalues.
If
range
='V', then
wl
=
vl
and
wu
=
vu
.
If
range
='A', then
wl
and
wu
are the global Gerschgorin bounds
on the spectrum.
If
range
='I', then
wl
and
wu
are computed by SLAEBZ from the
index range specified.
iblock
Array of size
n
At each row/column
j
where
e
[
j
-1]
is zero or small, the matrix
T
is considered to split into a block diagonal matrix. On exit, if
info
= 0,
iblock
[
i
] specifies to which block (from 0 to the number of blocks minus one) the eigenvalue
w
[
i
] belongs
. (
?larrd2
may use the remaining
n
-
m
elements as workspace.)
indexw
Array of size
n
The indices of the eigenvalues within each block (submatrix); for example,
indexw
[
i
]=
j
and
iblock
[
i
]=
k
imply that the (
i
+1)-th eigenvalue
w
[
i
] is the
j
-th eigenvalue in block
k
.
info
= 0: successful exit
< 0: if
info
= -
i
, the
i
-th argument had an illegal value
> 0: some or all of the eigenvalues failed to converge or were not computed:
  • =1 or 3: Bisection failed to converge for some eigenvalues; these eigenvalues are flagged by a negative block number. The effect is that the eigenvalues may not be as accurate as the absolute and relative tolerances.
  • =2 or 3:
    range
    ='I' only: Not all of the eigenvalues
    il
    :
    iu
    were found.
  • = 4:
    range
    ='I', and the Gershgorin interval initially used was too small. No eigenvalues were computed.

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804