We are proud to announce version 1.0 of NEP-PACK - a Julia package for nonlinear eigenvalue problems with eigenvalue nonlinearities. The package is released with an open-source license. The package makes full use of the efficiency of Julia, yet maintains usability, and integrates well with other software packages and other programming languages (including matlab and python) as illustrated in tutorials. The package is designed to be easy to use for NEP-application researchers and engineers as well as algorithm developers.
Currently, the package contains implementations of many state-of-the-art algorithms including projection methods (nonlinear Arnoldi, two variants of Jacobi-Davidson methods), contour integral methods (Beyn’s method and block SS), Krylov methods (nleigs, infinite Arnoldi variants, CORK-pencil data tyoe, infinite Lanczos), Rayleigh functional methods (residual inverse iteration, Rayleigh functional iteration), Newton-type methods (augmented Newton, implicit determinant, Newton-QR, quasi-Newton, Broydens method).
Common features and subtasks of different algorithms are implemented by code sharing, e.g., the contour integral methods have a common way to compute the integrals, such that if a new quadrature method is implemented, it can easily be used for both contour integral methods. The separation of subtask, allows for user and application specific improvements and sometimes even parallelization, e.g., the contour integral method can parallelized without modifying the internals of the package, as illustrated in the tutorials.
The NEP-PACK data types are constructed such that NEP-problems can be defined for general problems, e.g., as a sum of products of matrices and functions, or using many common classes are supported natively by the package such as time-delay systems and polynomial eigenvalue problems (monomial and Chebyshev). An additional feature of our software design allows for transparent implementations of transformations and manipulations of NEP-objects. Nonlinear Rayleigh-Ritz projection is implemented as a transformation that results in a new NEP-object (of much smaller dimension) and essentially any of the NEP-algorithms of the package can be used to solve the projected problem. Certain types of deflation have been implemented in an algorithm independent way. One particular type of deflation, deflates eigenvalues by constructing a larger NEP, with a smaller eigenvalue set, which we implement as a procedure resulting in an instantiation of a new NEP-object, such that we can combine deflation for essentially any algorithm in the package. Chebyshev interpolation is provided in a way that it transforms a general NEP, to a NEP represented in a (scaled and shifted) Chebyshev basis, such that (again) most solvers of the package can be used and additionally Chebyshev companion linearizations.
Documentation & tutorials: https://nep-pack.github.io/NonlinearEigenproblems.jl/