PZHEEVD(3)    ScaLAPACK routine of NEC Numeric Library Collection   PZHEEVD(3)



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 sub-
               matrix 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 sub-
               matrix 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 parame-
               ters 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  align-
       ment  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.
                   (see also LAPACK Working Note 132)
                     http://www.netlib.org/lapack/lawns/lawn132.ps



ScaLAPACK routine               31 October 2017                     PZHEEVD(3)