ezARPACK

ezARPACK is a C++11 wrapper around ARPACK-NG, a FORTRAN 77 library designed to solve large scale sparse eigenproblems. It allows for solving eigenproblems for symmetric, asymmetric and complex double precision matrices with a minimal amount of boilerplate code. Both standard and generalized problems are supported, as well as all advanced spectral transformation modes from the original FORTRAN implementation.

The main goal of this header-only library is providing easy access to the powerful ARPACK and Parallel ARPACK (PARPACK) algorithms from modern C++ code. ezARPACK pursues this goal by implementing two crucial features.

  • Following the ideology of ARPACK, ezARPACK does not force the user to stick with a predefined matrix storage format. Instead, user code is expected to apply a linear operator to a vector (memory buffer) passed to it and to store the result in another buffer at each iteration of the Arnoldi/Lanczos algorithm. Any callable C++ object with a suitable signature can be used to implement action of the operator on a vector.

  • Input, output and temporary data arrays used by ARPACK subroutines are allocated and stored as matrix/vector objects from a supported C++ matrix algebra library. Currently, there are a few supported storage backends.

    Upon choosing the right backend via a template parameter of the solver class ezarpack::arpack_solver (or ezarpack::mpi::arpack_solver), programmer can use callable objects to act on the vectors from their library of choice. The output eigenvalues and eigenvectors are accessible to the calling code in a compatible format too.

    Besides covering a range of popular matrix frameworks, ezARPACK allows for easy addition of new backends via specialization of a traits structure.

You can learn about library’s capabilities and the most common usage patterns from the User guide. For an in-depth description of ezARPACK’s API consult the API reference. The source code repository and the issue tracker are hosted on GitHub.

Being a header-only library, ezARPACK does not require installation. However, you may still choose to follow the Installation instructions to build and run unit tests, build examples, and install the library so that it is discoverable by other CMake-based projects.

ezARPACK is distributed under the terms of the Mozilla Public License, v. 2.0. You can obtain a copy of the MPL at http://mozilla.org/MPL/2.0/.

Contents