!----------------------------------------------------------------- ! ! Purpose ! ======= ! ! LA_SPEVD / LA_HPEVD computes all the eigenvalues and, optionally, ! eigenvectors of a real symmetric matrix A in packed storage. If ! eigenvectors are desired, it uses a divide and conquer algorithm. ! The divide and conquer algorithm makes very mild assumptions about ! floating point arithmetic. It will work on machines with a guard ! digit in add/subtract, or on those binary machines without guard ! digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or ! Cray-2. It could conceivably fail on hexadecimal or decimal machines ! without guard digits, but we know of none. ! ! Arguments ! ========= ! ! SUBROUTINE LA_SPEVD / LA_HPEV( AP, W, UPLO, Z, INFO ) ! (), INTENT(INOUT) :: AP(:) ! REAL(), INTENT(OUT) :: W(:) ! CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO ! (), INTENT(OUT), OPTIONAL :: Z(:,:) ! INTEGER, INTENT(OUT), OPTIONAL :: INFO ! ::= REAL | COMPLEX ! ::= KIND(1.0) | KIND(1.0D0) ! ! ===================== ! ! AP (input/output) either REAL or 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, AP is overwritten by values generated during the ! reduction to tridiagonal form. If UPLO = 'U', the diagonal ! and first superdiagonal of the tridiagonal matrix T overwrite ! the corresponding elements of A, and if UPLO = 'L', the ! diagonal and first subdiagonal of T overwrite the ! corresponding elements of A. ! INFO = -1 if SIZE(AP) < 0 or SIZE(AP) /= n*(n+1)/2. ! ! W (output) either REAL or COMPLEX array, shape (:), ! SIZE(W) == n, where = n*(n+1)/2 == SIZE(AP). ! If INFO = 0, the eigenvalues in ascending order. ! INFO = -2 if SIZE(W) /= n. ! ! UPLO Optional (input) CHARACTER*1 ! = 'U': Upper triangle of A is stored; ! = 'L': Lower triangle of A is stored. ! If UPLO is not present UPLO = 'U' is assumed. ! INFO -3 if UPLO /= 'U' nor 'L'. ! ! Z Optional (output) either REAL or COMPLEX rectangular array, ! shape either (:,:), size(Z,1) == n and size(Z,2) == n. ! Z contains the orthonormal eigenvectors of the matrix A, ! with the i-th column of Z holding the eigenvector associated ! with W(i). ! INFO = -4 if SIZE(Z,1) and SIZE(Z,2) /= n. ! ! INFO Optional (output) INTEGER ! = 0: successful exit. ! < 0: if INFO = -i, the i-th argument had an illegal value. ! > 0: if INFO = i, the algorithm failed to converge; 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. ! !------------------------------------- .