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 ) (), INTENT(INOUT) :: A(:,:) REAL(), INTENT(OUT) :: W(:) CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: JOBZ, UPLO INTEGER, INTENT(OUT), OPTIONAL :: INFO where ::= REAL | COMPLEX ::= 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.