  Quick Navigator

 Search Site Miscellaneous Server Agreement Year 2038 Credits   PZHEEVD(l) ) PZHEEVD(l)

# NAME

PZHEEVD - compute all the eigenvalues and eigenvectors of a Hermitian matrix A by using a divide and conquer algorithm

# SYNOPSIS

SUBROUTINE PZHEEVD(
JOBZ, UPLO, N, A, IA, JA, DESCA, W, Z, IZ, JZ, DESCZ, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO )
CHARACTER JOBZ, UPLO INTEGER IA, INFO, IZ, JA, JZ, LIWORK, LRWORK, LWORK, N INTEGER DESCA( * ), DESCZ( * ), IWORK( * ) DOUBLE PRECISION RWORK( * ), W( * ) COMPLEX*16 A( * ), WORK( * ), Z( * )

# PURPOSE

PZHEEVD computes all the eigenvalues and eigenvectors of a Hermitian matrix A by using a divide and conquer algorithm.

# ARGUMENTS

NP = the number of rows local to a given process. NQ = the number of columns local to a given process.
JOBZ (input) CHARACTER*1
= 'N': Compute eigenvalues only; (NOT IMPLEMENTED YET)

= 'V': Compute eigenvalues and eigenvectors.
UPLO (global input) CHARACTER*1
Specifies whether the upper or lower triangular part of the symmetric matrix A is stored:

= 'U': Upper triangular

= 'L': Lower triangular
N (global input) INTEGER
The number of rows and columns of the matrix A. N >= 0.
A (local input/workspace) block cyclic COMPLEX*16 array,
global dimension (N, N), local dimension ( LLD_A, LOCc(JA+N-1) )
On entry, the symmetric matrix A. If UPLO = 'U', only the upper triangular part of A is used to define the elements of the symmetric matrix. If UPLO = 'L', only the lower triangular part of A is used to define the elements of the symmetric matrix.
On exit, the lower triangle (if UPLO='L') or the upper triangle (if UPLO='U') of A, including the diagonal, is destroyed.
IA (global input) INTEGER
A's global row index, which points to the beginning of the submatrix which is to be operated on.
JA (global input) INTEGER
A's global column index, which points to the beginning of the submatrix which is to be operated on.
DESCA (global and local input) INTEGER array of dimension DLEN_.
The array descriptor for the distributed matrix A. If DESCA( CTXT_ ) is incorrect, PZHEEV cannot guarantee correct error reporting.
W (global output) DOUBLE PRECISION array, dimension (N)
If INFO=0, the eigenvalues in ascending order.
Z (local output) COMPLEX*16 array,
global dimension (N, N), local dimension ( LLD_Z, LOCc(JZ+N-1) ) Z contains the orthonormal eigenvectors of the matrix A.
IZ (global input) INTEGER
Z's global row index, which points to the beginning of the submatrix which is to be operated on.
JZ (global input) INTEGER
Z's global column index, which points to the beginning of the submatrix which is to be operated on.
DESCZ (global and local input) INTEGER array of dimension DLEN_.
The array descriptor for the distributed matrix Z. DESCZ( CTXT_ ) must equal DESCA( CTXT_ )
WORK (local workspace/output) COMPLEX*16 array,
dimension (LWORK) On output, WORK(1) returns the workspace needed for the computation.
LWORK (local input) INTEGER
If eigenvectors are requested: LWORK = N + ( NP0 + MQ0 + NB ) * NB, with NP0 = NUMROC( MAX( N, NB, 2 ), NB, 0, 0, NPROW ) MQ0 = NUMROC( MAX( N, NB, 2 ), NB, 0, 0, NPCOL )
If LWORK = -1, then LWORK is global input and a workspace query is assumed; the routine calculates the size for all work arrays. Each of these values is returned in the first entry of the corresponding work array, and no error message is issued by PXERBLA.
RWORK (local workspace/output) DOUBLE PRECISION array,
dimension (LRWORK) On output RWORK(1) returns the real workspace needed to guarantee completion. If the input parameters are incorrect, RWORK(1) may also be incorrect.
LRWORK (local input) INTEGER
Size of RWORK array. RWORK >= 1 + 8*N + 2*NP*NQ, NP = NUMROC( N, NB, MYROW, IAROW, NPROW ) NQ = NUMROC( N, NB, MYCOL, IACOL, NPCOL )
IWORK (local workspace/output) INTEGER array, dimension (LIWORK)
On output IWORK(1) returns the integer workspace needed.
LIWORK (input) INTEGER
The dimension of the array IWORK. LIWORK = 7*N + 8*NPCOL + 2
INFO (global output) INTEGER
= 0: successful exit

< 0: If the i-th argument is an array and the j-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: If INFO = 1 through N, the i(th) eigenvalue did not converge in PDLAED3.
Alignment requirements ======================
The distributed submatrices sub( A ), sub( Z ) must verify some alignment properties, namely the following expression should be true: ( MB_A.EQ.NB_A.EQ.MB_Z.EQ.NB_Z .AND. IROFFA.EQ.ICOFFA .AND. IROFFA.EQ.0 .AND.IROFFA.EQ.IROFFZ. AND. IAROW.EQ.IZROW) with IROFFA = MOD( IA-1, MB_A ) and ICOFFA = MOD( JA-1, NB_A ).

# FURTHER DETAILS

Contributed by Francoise Tisseur, University of Manchester.
Reference: F. Tisseur and J. Dongarra, "A Parallel Divide and
Conquer Algorithm for the Symmetric Eigenvalue Problem
on Distributed Memory Architectures",

SIAM J. Sci. Comput., 6:20 (1999), pp. 2223--2236. Visit the GSP FreeBSD Man Page Interface.