Purpose ======= LA_GEEV computes for a real or complex square matrix A, the eigenvalues and, optionally, the left and/or right eigenvectors. A right eigenvector v(j) of A satisfies A * v(j) = lambda(j) * v(j) where lambda(j) is its eigenvalue. A left eigenvector u(j) of A satisffies u(j)^H * A = lambda(j) * u(j)^H where u(j)^H denotes the conjugate-transpose of u(j). ========= SUBROUTINE LA_GEEV( A, , VL=vl, VR=vr, INFO=info ) (), INTENT(INOUT) :: A(:,:) (), INTENT(OUT) :: (), INTENT(OUT), OPTIONAL :: VL(:,:), VR(:,:) INTEGER, INTENT(OUT), OPTIONAL :: INFO where ::= REAL | COMPLEX ::= KIND(1.0) | KIND(1.0D0) ::= WR, WI | W ::= WR(:), WI(:) | W(:) Arguments ========= A (input/output) REAL or COMPLEX square array, shape (:,:). On entry, the matrix A. On exit, the contents of A are destroyed. (output) REAL or COMPLEX array, shape (:) with size(w) = size(A,1). The computed eigenvalues. ::= WR(:), WI(:) | W(:), where WR(:), WI(:) are of REAL type (for the real and imaginary parts) and W(:) is of COMPLEX type. Note: If A is real, then a complex-conjugate pair appear consecutively, with the eigenvalue having the positive imaginary part appearing first. VL Optional (output) REAL or COMPLEX square array, shape (:,:) with size(VL,1) = size(A,1). The left eigenvectors u(j) are stored in the columns of VL in the order of their eigenvalues. Each eigenvector is scaled so that the Euclidean norm is 1 and the largest component is real. Note: If A is real then complex eigenvectors, like their eigenvalues, occur in complex conjugate pairs. The real and imaginary parts of the first eigenvector of the pair are stored in VL(:,j) and VL(:,j+1). Thus a complex conjugate pair is given by u(j) = VL(:,j) + i*VL(:,j+1), u(j+1) = VL(:,j) - i*VL(:,j+1) VR Optional (output) REAL or COMPLEX square array, shape (:,:) with size(VR,1) = size(A,1). The right eigenvectors v(j) are stored in the columns of VR in the order of their eigenvalues. Each eigenvector is scaled so that the Euclidean norm is 1 and the largest component is real. Note: If A is real then complex eigenvectors, like their eigenvalues, occur in complex conjugate pairs. The real and imaginary parts of the first eigenvector of the pair are stored in VR(:,j) and VR(:,j+1). Thus a complex conjugate pair is given by v(j) = VR(:,j) + i*VR(:,j+1), v(j+1) = VR(:,j) - i*VR(:,j+1) INFO Optional (output) INTEGER. = 0: successful exit. < 0: if INFO = -i, the i-th argument had an illegal value. > 0: if INFO = i, the QR algorithm failed to compute all the eigenvalues and no eigenvectors were computed. Elements i+1 : n of contain eigenvalues which have converged. n is the order of A If INFO is not present and an error occurs, then the program is terminated with an error message.