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



NAME
       PSSYEVD  -  compute all the eigenvalues and eigenvectors of a real sym-
       metric matrix A by calling the recommended sequence of  ScaLAPACK  rou-
       tines

SYNOPSIS
       SUBROUTINE PSSYEVD( JOBZ,  UPLO,  N,  A,  IA,  JA, DESCA, W, Z, IZ, JZ,
                           DESCZ, WORK, LWORK, IWORK, LIWORK, INFO )

           CHARACTER       JOBZ, UPLO

           INTEGER         IA, INFO, IZ, JA, JZ, LIWORK, LWORK, N

           INTEGER         DESCA( * ), DESCZ( * ), IWORK( * )

           REAL            A( * ), W( * ), WORK( * ), Z( * )

PURPOSE
       PSSYEVD computes all the eigenvalues and eigenvectors of a real symmet-
       ric matrix A by calling the recommended sequence of ScaLAPACK routines.
       In its present form, PSSYEVD assumes a homogeneous system and makes  no
       checks  for  consistency  of the eigenvalues or eigenvectors across the
       different processes.  Because of this, it is possible that a  heteroge-
       neous system may return incorrect results without any error messages.


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 to be operated on, i.e. the
               order of the distributed submatrix sub( A ). N >= 0.

       A       (local input/workspace) block cyclic REAL 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.

       W       (global output) REAL array, dimension (N)
               If INFO=0, the eigenvalues in ascending order.

       Z       (local output) REAL array,
               global  dimension (N, N), local dimension ( LLD_Z, LOCc(JZ+N-1)
               ) Z contains the  orthonormal  eigenvectors  of  the  symmetric
               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) REAL array,
               dimension (LWORK) On  output,  WORK(1)  returns  the  workspace
               required.

       LWORK   (local input) INTEGER
               LWORK  >= MAX( 1+6*N+2*NP*NQ, TRILWMIN ) + 2*N TRILWMIN = 3*N +
               MAX( NB*( NP+1 ), 3*NB ) NP =  NUMROC(  N,  NB,  MYROW,  IAROW,
               NPROW ) NQ = NUMROC( N, NB, MYCOL, IACOL, NPCOL )

               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 workspace/output) INTEGER array, dimension (LIWORK)
               On exit, if LIWORK > 0, IWORK(1) returns the optimal LIWORK.

       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:  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).


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                     PSSYEVD(3)