p?heevd
p?heevd
Computes all eigenvalues and eigenvectors of a complex Hermitian matrix by using a divide and conquer algorithm.
Syntax
void
pcheevd
(
char
*jobz
,
char
*uplo
,
MKL_INT
*n
,
MKL_Complex8
*a
,
MKL_INT
*ia
,
MKL_INT
*ja
,
MKL_INT
*desca
,
float
*w
,
MKL_Complex8
*z
,
MKL_INT
*iz
,
MKL_INT
*jz
,
MKL_INT
*descz
,
MKL_Complex8
*work
,
MKL_INT
*lwork
,
float
*rwork
,
MKL_INT
*lrwork
,
MKL_INT
*iwork
,
MKL_INT
*liwork
,
MKL_INT
*info
);
void
pzheevd
(
char
*jobz
,
char
*uplo
,
MKL_INT
*n
,
MKL_Complex16
*a
,
MKL_INT
*ia
,
MKL_INT
*ja
,
MKL_INT
*desca
,
double
*w
,
MKL_Complex16
*z
,
MKL_INT
*iz
,
MKL_INT
*jz
,
MKL_INT
*descz
,
MKL_Complex16
*work
,
MKL_INT
*lwork
,
double
*rwork
,
MKL_INT
*lrwork
,
MKL_INT
*iwork
,
MKL_INT
*liwork
,
MKL_INT
*info
);
Include Files
- mkl_scalapack.h
Description
The
p?heevd
function
computes all eigenvalues and eigenvectors of a complex Hermitian matrix A
by using a divide and conquer algorithm.Input Parameters
np
= the number of rows local to a given process.nq
= the number of columns local to a given process.- jobz
- (global) Must be'N'or'V'.Specifies if it is necessary to compute the eigenvectors:If, then only eigenvalues are computed.jobz='N'If, then eigenvalues and eigenvectors are computed.jobz='V'
- uplo
- (global) Must be'U'or'L'.Specifies whether the upper or lower triangular part of the Hermitian matrixAis stored:If,uplo='U'astores the upper triangular part ofA.If,uplo='L'astores the lower triangular part ofA.
- n
- (global) The number of rows and columns of the matrixA(.n≥0)
- a
- (local).Block cyclic array of global sizeand local sizen*n. On entry, the Hermitian matrixlld_a*LOCc(ja+n-1)A.If, only the upper triangular part ofuplo='U'Ais used to define the elements of the Hermitian matrix.If, only the lower triangular part ofuplo='L'Ais used to define the elements of the Hermitian matrix.
- ia,ja
- (global) The row and column indices in the global matrixAindicating the first row and the first column of the submatrixA, respectively.
- desca
- (global and local) array of sizedlen_. The array descriptor for the distributed matrixA. Ifis incorrect,desca[ctxt_- 1]p?heevdcannot guarantee correct error reporting.
- iz,jz
- (global) The row and column indices in the global matrixZindicating the first row and the first column of the submatrixZ, respectively.
- descz
- (global and local) array of sizedlen_. The array descriptor for the distributed matrixZ.must equaldescz[ctxt_- 1]desca[.ctxt_- 1]
- work
- (local).Array of sizelwork.
- lwork
- (local) The size of the arraywork.If eigenvalues are requested:lwork=n+ (nb0 +mq0 +nb)*nbwithnp0 =numroc( max(n,nb, 2 ),nb, 0, 0,NPROW)mq0 =numroc( max(n,nb, 2 ),nb, 0, 0,NPCOL)If, thenlwork= -1lworkis global input and a workspace query is assumed; thefunctiononly calculates the size required for optimal performance for all work arrays. The required workspace is returned as the first element of the corresponding work arrays, and no error message is issued bypxerbla.
- (local).Workspace array of sizelrwork.
- lrwork
- (local) The size of the arrayrwork.,lrwork≥1 + 9*n+ 3*np*nqwithnp=numroc(n,nb,myrow,iarow,NPROW)nq=numroc(n,nb,mycol,iacol,NPCOL)
- iwork
- (local) Workspace array of sizeliwork.
- liwork
- (local) , size ofiwork..liwork= 7*n+ 8*npcol+ 2
Output Parameters
- a
- On exit, the lower triangle (if), or the upper triangle (ifuplo='L') ofuplo='U'A, including the diagonal, is overwritten.
- w
- (global).Array of sizen. If,info= 0wcontains the eigenvalues in the ascending order.
- z
- (local).Array, global size, local sizen*n.lld_z*LOCc(jz+n-1)Thezparameter contains the orthonormal eigenvectors of the matrixA.
- work[0]
- On exit, returns adequate workspace to allow optimal performance.
- rwork[0]
- (local)On output,rwork[0]returns workspace required to guarantee completion.
- iwork[0]
- (local).On return,iwork[0]contains the amount of integer workspace required.
- info
- (global)If, the execution is successful.info= 0If:info< 0If thei-th argument is an array and thej-entry had an illegal value, then. If theinfo= -(i*100+j)i-th argument is a scalar and had an illegal value, then.info= -iIf:info>0Ifinfo= 1 throughn, thei-th eigenvalue did not converge.