Visible to Intel only — GUID: GUID-496E5BE2-2984-40AA-A2C1-DF1E25A7D275
Visible to Intel only — GUID: GUID-496E5BE2-2984-40AA-A2C1-DF1E25A7D275
p?stedc
Computes all eigenvalues and eigenvectors of a symmetric tridiagonal matrix in parallel.
Syntax
void psstedc (const char* compz, const MKL_INT* n, float* d, float* e, float* q, const MKL_INT* iq, const MKL_INT* jq, const MKL_INT* descq, float* work, MKL_INT* lwork, MKL_INT* iwork, const MKL_INT* liwork, MKL_INT* info);
void pdstedc (const char* compz, const MKL_INT* n, double* d, double* e, double* q, const MKL_INT* iq, const MKL_INT* jq, const MKL_INT* descq, double* work, MKL_INT* lwork, MKL_INT* iwork, const MKL_INT* liwork, MKL_INT* info);
Include Files
- mkl_scalapack.h
Description
p?stedc computes all eigenvalues and eigenvectors of a symmetric tridiagonal matrix in parallel, using the divide and conquer algorithm.
Input Parameters
- compz
-
= 'N': Compute eigenvalues only. (NOT IMPLEMENTED YET)
= 'I': Compute eigenvectors of tridiagonal matrix also.
= 'V': Compute eigenvectors of original dense symmetric matrix also. On entry, Z contains the orthogonal matrix used to reduce the original matrix to tridiagonal form. (NOT IMPLEMENTED YET)
- n
-
(global)
The order of the tridiagonal matrix T. n >= 0.
- d
-
(global)
Array, size (n)
On entry, the diagonal elements of the tridiagonal matrix.
- e
-
(global)
Array, size (n-1).
On entry, the subdiagonal elements of the tridiagonal matrix.
- iq
-
(global)
Q's global row index, which points to the beginning of the submatrix which is to be operated on.
- jq
-
(global)
Q's global column index, which points to the beginning of the submatrix which is to be operated on.
- descq
-
(global and local)
Array of size dlen_.
The array descriptor for the distributed matrix Q.
- work
-
(local)
Array, size (lwork)
- lwork
-
(local)
The size of the array work.
lwork = 6*n + 2*NP*NQ
NP = numroc( n, NB, MYROW, DESCQ( rsrc_ ), NPROW )
NQ = numroc( n, NB, MYCOL, DESCQ( csrc_ ), NPCOL )
numroc is a ScaLAPACK tool function.
If lwork = -1, the lwork is global input and a workspace query is assumed; the routine only calculates the minimum size for the work array. The required workspace is returned as the first element of work and no error message is issued by pxerbla.
- iwork
-
(local)
Array, size (liwork)
- liwork
-
The size of the array iwork.
liwork = 2 + 7*n + 8*NPCOL
Output Parameters
d |
On exit, if info = 0, the eigenvalues in descending order. |
q |
(local) Array, local size ( lld_q, LOCc(jq+n-1)) q contains the orthonormal eigenvectors of the symmetric tridiagonal matrix. On output, q is distributed across the P processes in block cyclic format. |
work |
On output, work[0] returns the workspace needed. |
iwork |
On exit, if liwork > 0, iwork[0] returns the optimal liwork. |
info |
(global) = 0: successful exit. < 0: If the i-th argument is an array and the j-th entry had an illegal value, then info = -(i*100+j), if the i-th argument is a scalar and had an illegal value, then info = -i. > 0: The algorithm failed to compute the info/(n+1)-th eigenvalue while working on the submatrix lying in global rows and columns mod(info,n+1). |