
 
 Purpose
 =======
 
     LA_SPEV and LA_SPEVD compute all eigenvalues and, optionally, all
 eigenvectors of a real symmetric matrix A in packed storage.
     LA_HPEV and LA_HPEVD compute all eigenvalues and, optionally, all
 eigenvectors of a complex Hermitian matrix A in packed storage.
     LA_SPEVD and LA_HPEVD use a divide and conquer algorithm. If 
 eigenvectors are desired, they can be much faster than LA_SPEV and 
 LA_HPEV for large matrices but use more workspace.
 
 =========
 
       SUBROUTINE LA_SPEV / LA_HPEV / LA_SPEVD / LA_HPEVD( AP, W, &
                     UPLO=uplo, Z=z, INFO=info )
           <type>(<wp>), INTENT(INOUT) :: AP(:)
           REAL(<wp>), INTENT(OUT) :: W(:)
           CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
           <type>(<wp>), INTENT(OUT), OPTIONAL :: Z(:,:)
           INTEGER, INTENT(OUT), OPTIONAL :: INFO
       where
           <type> ::= REAL | COMPLEX
           <wp>   ::= KIND(1.0) | KIND(1.0D0)
 
 Arguments
 =========
 
 AP      (input/output) REAL or COMPLEX array, shape (:) with size(AP)=
         n*(n+1)/2, where n is the order of A.
         On entry, the upper or lower triangle of matrix A in packed 
  	 storage. The elements are stored columnwise as follows:
         if UPLO = 'U', AP(i+(j-1)*j/2)=A(i,j) for 1<=i<=j<=n;
         if UPLO = 'L', AP(i+(j-1)*(2*n-j)/2)=A(i,j) for 1<=j<=i<=n.
         On exit, AP is overwritten by values generated during the 
         reduction of A to a tridiagonal matrix T . If UPLO = 'U', the
         diagonal and first superdiagonal of T overwrite the correspond-
         ing diagonals of A. If UPLO = 'L', the diagonal and first
 	 subdiagonal of T overwrite the corresponding diagonals of A.
 W       (output) REAL array, shape (:) with size(W) = n.
         The eigenvalues in ascending order.
 UPLO    Optional (input) CHARACTER(LEN=1).
         = 'U': Upper triangle of A is stored;
         = 'L': Lower triangle of A is stored.
         Default value: 'U'.
 Z       Optional (output) REAL or COMPLEX square array, shape (:,:)
         with size(Z,1) = n.
         The columns of Z contain the orthonormal eigenvectors of A in
 	 the order of the eigenvalues.
 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.

