using .ARPACK ## eigs function eigs(A;nev::Integer=6, ncv::Integer=20, which::ASCIIString="LM", tol=0.0, maxiter::Integer=1000, sigma=0,v0::Vector=zeros((0,)), ritzvec::Bool=true, complexOP::Bool=false) (m, n) = size(A) if m != n; error("Input must be square"); end if n <= 6 && nev > n-1; nev = n-1; end ncv = blas_int(min(max(2*nev+2, ncv), n)) sym = issym(A) T = eltype(A) cmplx = T<:Complex bmat = "I" if !isempty(v0) if length(v0)!=n; error("Starting vector must have length $n"); end if eltype(v0)!=T; error("Starting vector must have eltype $T"); end else v0=zeros(T,(0,)) end if sigma == 0 mode = 1 linop(x) = A * x else C = lufact(A - sigma*eye(T,n)) if cmplx mode = 3 linop(x) = C\x else if !complexOP mode = 3 linop(x) = real(C\x) else mode = 4 linop(x) = imag(C\x) end end end # Compute the Ritz values and Ritz vectors (resid, v, ldv, iparam, ipntr, workd, workl, lworkl, rwork, TOL) = ARPACK.aupd_wrapper(T, linop, n, sym, cmplx, bmat, nev, ncv, which, tol, maxiter, mode, v0) # Postprocessing to get eigenvalues and eigenvectors return ARPACK.eupd_wrapper(T, n, sym, cmplx, bmat, nev, which, ritzvec, TOL, resid, ncv, v, ldv, sigma, iparam, ipntr, workd, workl, lworkl, rwork) end