
 
 Purpose
 =======
 
     LA_SBEV and LA_SBEVD compute all eigenvalues and, optionally, all
 eigenvectors of a real symmetric matrix A in band form.
     LA_HBEV and LA_HBEVD compute all eigenvalues and, optionally, all
 eigenvectors of a complex Hermitian matrix A in band form.
     LA_SBEVD and LA_HBEVD use a divide and conquer algorithm. They are
 much faster than LA_SBEV and LA_HBEV for large matrices but use more 
 workspace.
 
 =========
 
         SUBROUTINE LA_SBEV / LA_HBEV / LA_SBEVD /
                  LA_HBEVD( AB, W, UPLO=uplo, Z=z, INFO=info )
             <type>(<wp>), INTENT(INOUT) :: AB(:,:)
             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
 =========
 AB     (input/output) REAL or COMPLEX array, shape (:,:) with 
        size(AB,1) = kd + 1 and
        size(AB,2) = n, where kd is the number of subdiagonals or 
        superdiagonals in the band and n is the order of A.
        On entry, the upper (if UPLO = 'U') or lower (if UPLO = 'L') 
        triangle of matrix A in band storage. The kd + 1 diagonals of A
        are stored in the rows of AB so that the j-th column of A is 
        stored in the j-th column of AB as follows:
         if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j
                                                    1<=j<=n
         if UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+kd)
                                                    1<=j<=n.
        On exit, AB is overwritten by values generated during the 
        reduction of A to a tridiagonal matrix T . If UPLO = 'U', the
        first superdiagonal and the diagonal of T are returned in rows
        kd and kd + 1 of AB. If UPLO = 'L', the diagonal and first 
        subdiagonal of T are returned in the first two rows of AB.
 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.

