
 
 Purpose
 =======
 
      LA_SYEV and LA_SYEVD compute all eigenvalues and, optionally, all
 eigenvectors of a real symmetric matrix A.
      LA_HEEV and LA_HEEVD compute all eigenvalues and, optionally, all
 eigenvectors of a complex Hermitian matrix A.
      LA_SYEVD and LA_HEEVD use a divide and conquer algorithm. If 
 eigenvectors are desired, they can be much faster than LA_SYEV and 
 LA_HEEV for large matrices but use more workspace.
 
 =========
 
       SUBROUTINE LA_SYEV / LA_HEEV / LA_SYEVD / LA_HEEVD( A, W, &
                       JOBZ=jobz, UPLO=uplo, INFO=info )
           <type>(<wp>), INTENT(INOUT) :: A(:,:)
           REAL(<wp>), INTENT(OUT) :: W(:)
           CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: JOBZ, UPLO
           INTEGER, INTENT(OUT), OPTIONAL :: INFO
       where
           <type> ::= REAL | COMPLEX
           <wp> ::= KIND(1.0) | KIND(1.0D0)
 
 
 Arguments
 =========
 
 A      (input/output) REAL or COMPLEX square array, shape (:,:).
        On entry, the matrix A.
        If UPLO = 'U', the upper triangular part of A contains the upper
        triangular part of the matrix A. If UPLO = 'L', the lower 
        triangular part of A contains the lower triangular part of the
        matrix A.
        On exit:
        If JOBZ = 'V', then the columns of A contain the orthonormal 
        eigenvectors of the matrix A in the order of the eigenvalues.
        If JOBZ = 'N', then the upper triangle (if UPLO = 'U') or the 
        lower triangle (if UPLO = 'L') of A, including the diagonal, is
        destroyed.
 W      (output) REAL array, shape (:) with size(W) = size(A,1).
        The eigenvalues in ascending order.
 JOBZ   Optional (input) CHARACTER(LEN=1).
        = 'N': Computes eigenvalues only;
        = 'V': Computes eigenvalues and eigenvectors.
        Default value: 'N'.
 UPLO   Optional (input) CHARACTER(LEN=1).
        = 'U': Upper triangle of A is stored;
        = 'L': Lower triangle of A is stored.
        Default value: 'U'.
 INFO   Optional (output) INTEGER.
        = 0: successful exit.
        < 0: if INFO = -i, the i-th argument had an illegal value
        > 0: if INFO = i, then i off-diagonal elements of an
        intermediate tridiagonal form did not converge to zero.
        If INFO is not present and an error occurs, then the program is 
        terminated with an error message.

