!----------------------------------------------------------------- ! ! Purpose ! ======= ! ! LA_SPGV | LA_HPGV computes all the eigenvalues and, optionally, the ! eigenvectors of a real generalized symmetric-definite eigenproblem, ! of the form ! A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x. ! Here A and B are assumed to be symmetric, stored in packed format, ! and B is also positive definite. ! ! ======= ! ! SUBROUTINE LA_SPGV / LA_HPGV_F90( AP, BP, W, ITYPE, UPLO, Z, INFO ) ! (), INTENT(INOUT) :: AP(:), BP(:) ! REAL(), INTENT(OUT) :: W(:) ! INTEGER, INTENT(IN), OPTIONAL :: ITYPE ! CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO ! (), INTENT(OUT), OPTIONAL :: Z(:,:) ! INTEGER, INTENT(OUT), OPTIONAL :: INFO ! where ! ::= REAL | COMPLEX ! ::= KIND(1.0) | KIND(1.0D0) ! ! Arguments ! ========= ! ! AP (input/output) REAL | COMPLEX array, shape (:), ! SIZE(AP) == (n*(n+1)/2). ! On entry, the upper or lower triangle of the symmetric matrix ! A, packed columnwise in a linear array. The j-th column of A ! is stored in the array AP as follows: ! if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j; ! if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n. ! On exit, the contents of AP are destroyed. ! ! BP (input/output) REAL | COMPLEX array, shape (:), ! SIZE(BP) == (n*(n+1)/2). ! On entry, the upper or lower triangle of the symmetric matrix ! B, packed columnwise in a linear array. The j-th column of B ! is stored in the array BP as follows: ! if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j; ! if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n. ! On exit, the triangular factor U or L from the Cholesky ! factorization B = U**T*U or B = L*L**T, in the same storage ! format as B. ! ! W (output) REAL array, shape (:), SIZE(W) == n, where ! n*(n+1)/2 == SIZE(AP). ! If INFO = 0, the eigenvalues in ascending order. ! ! ITYPE Optional (input) INTEGER ! Specifies the problem type to be solved: ! = 1: A*x = (lambda)*B*x ! = 2: A*B*x = (lambda)*x ! = 3: B*A*x = (lambda)*x ! If ITYPE is not present ITYPE = 1 is assumed. ! ! UPLO Optional (input) CHARACTER*1 ! = 'U': Upper triangles of A and B are stored; ! = 'L': Lower triangles of A and B are stored. ! If UPLO is not present UPLO = 'U' is assumed ! ! Z Optional (output) REAL | COMPLEX array, shape (:,:), ! SIZE(Z,1) == SIZE(Z,2) == n. ! If INFO = 0, Z contains the matrix Z of eigenvectors. ! The eigenvectors are normalized as follows: ! if ITYPE = 1 or 2, Z**T*B*Z = I; ! if ITYPE = 3, Z**T*inv(B)*Z = I. ! ! INFO Optional (output) INTEGER ! = 0: successful exit ! < 0: if INFO = -i, the i-th argument had an illegal value ! > 0: SPPTRF or SSPEV returned an error code: ! <= n: if INFO = i, SSPEV failed to converge; ! i off-diagonal elements of an intermediate ! tridiagonal form did not converge to zero. ! > n: if INFO = n + i, for 1 <= i <= n, then the leading ! minor of order i of B is not positive definite. ! The factorization of B could not be completed and ! no eigenvalues or eigenvectors were computed. ! If INFO is not present and an error occurs, then the program is ! terminated with an error message. !--------------------------------------------------------------------- .