PLASMA  2.8.0
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
int PLASMA_ssyevr ( PLASMA_enum  jobz,
PLASMA_enum  range,
PLASMA_enum  uplo,
int  N,
float *  A,
int  LDA,
float  vl,
float  vu,
int  il,
int  iu,
float  abstol,
int *  nbcomputedeig,
float *  W,
PLASMA_desc descT,
float *  Q,
int  LDQ 
)

PLASMA_ssyevr - Computes all eigenvalues and, optionally, eigenvectors of a complex Hermitian matrix A. The matrix A is preliminary reduced to tridiagonal form using a two-stage approach: First stage: reduction to band tridiagonal form; Second stage: reduction from band to tridiagonal form.

Parameters
[in]jobzIntended usage: = PlasmaNoVec: computes eigenvalues only; = PlasmaVec: computes eigenvalues and eigenvectors.
[in]range= PlasmaAllVec: all eigenvalues will be found. = PlasmaVec: all eigenvalues in the half-open interval (VL,VU] will be found. = PlasmaIvec: the IL-th through IU-th eigenvalues will be found. For range = PlasmaVec or PlasmaIvec and IU - IL < N - 1, DSTEBZ and ZSTEIN are called.
[in]uploSpecifies whether the matrix A is upper triangular or lower triangular: = PlasmaUpper: Upper triangle of A is stored; = PlasmaLower: Lower triangle of A is stored.
[in]NThe order of the matrix A. N >= 0.
[in,out]AOn entry, the symmetric (or Hermitian) matrix A. If uplo = PlasmaUpper, the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If uplo = PlasmaLower, the leading N-by-N lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, the lower triangle (if uplo = PlasmaLower) or the upper triangle (if uplo = PlasmaUpper) of A, including the diagonal, is destroyed.
[in]LDAThe leading dimension of the array A. LDA >= max(1,N).
[in]vlsee vu.
[in]vuIf RANGE=PlasmaVec, the lower and upper bounds of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = PlasmaAllVec or PlasmaIvec.
[in]ilsee iu.
[in]iuIf RANGE=PlasmaIvec, the indices (in ascending order) of the smallest and largest eigenvalues to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = PlasmaAllVec or PlasmaVec.
[in]abstolThe 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 + EPS *   max( |a|,|b| ) ,

where EPS is the machine precision. If ABSTOL is less than or equal to zero, then EPS*|T| will be used in its place, where |T| is the 1-norm of the tridiagonal matrix obtained by reducing A to tridiagonal form.

See "Computing Small Singular Values of Bidiagonal Matrices with Guaranteed High Relative Accuracy," by Demmel and Kahan, LAPACK Working Note #3.

If high relative accuracy is important, set ABSTOL to SLAMCH( 'Safe minimum' ). Doing so will guarantee that eigenvalues are computed to high relative accuracy when possible in future releases. The current code does not make any guarantees about high relative accuracy, but furutre releases will. See J. Barlow and J. Demmel, "Computing Accurate Eigensystems of Scaled Diagonally Dominant Matrices", LAPACK Working Note #7, for a discussion of which matrices define their eigenvalues to high relative accuracy. (hard set to use tryrac=1).

Parameters
[in]nbcomputedeigThe total number of eigenvalues found. 0 <= M <= N. If RANGE = PlasmaAllVec, M = N, and if RANGE = PlasmaIvec, M = IU-IL+1.
[out]WOn exit, if info = 0, the eigenvalues.
[in,out]descTOn entry, descriptor as return by PLASMA_Alloc_Workspace_ssyevr On exit, contains auxiliary factorization data.
[out]QOn exit, if jobz = PlasmaVec and info = 0, the eigenvectors.
[in]LDQThe leading dimension of the array Q. LDQ >= max(1,N).
Returns
Return values
PLASMA_SUCCESSsuccessful exit
<0if -i, the i-th argument had an illegal value
>0if INFO = i, the algorithm failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero.
See also
PLASMA_ssyevr_Tile
PLASMA_ssyevr_Tile_Async
PLASMA_cheevr
PLASMA_dsyevr
PLASMA_ssyevr