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
(orezarpack::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¶
- Installation instructions
- User guide
- How to use ezARPACK in your project
- What algorithm variant is right for your problem?
- Symmetric real eigenproblems
- General real eigenproblems
- General complex eigenproblems
- Parallel ARPACK versions of eigensolvers
- List of supported matrix/vector algebra libraries
- Advanced: Customization of Lanczos/Arnoldi implicit restarting
- Advanced: Adding a new storage backend
- Usage examples: serial solvers
- Usage examples: MPI-parallelized solvers
- API reference
- Specializations of the
arpack_solver
class template - Specializations of the
mpi::arpack_solver
class template - Data storage backends
ezarpack/storages/base.hpp
- definition ofstorage_traits
structureezarpack/storages/eigen.hpp
- Eigen 3ezarpack/storages/blaze.hpp
- Blazeezarpack/storages/armadillo.hpp
- Armadilloezarpack/storages/ublas.hpp
- Boost uBLASezarpack/storages/triqs.hpp
- TRIQS arraysezarpack/storages/nda.hpp
- TRIQS/ndaezarpack/storages/xtensor.hpp
- xtensor
- Auxiliary headers
ezarpack/common.hpp
- declarations of common types and exceptionsezarpack/solver_base.hpp
- primaryarpack_solver
class templateezarpack/arpack_solver.hpp
- include allarpack_solver
specializationsezarpack/arpack.hpp
- low level C++ interface to FORTRAN routines of ARPACKezarpack/mpi/solver_base.hpp
- primarympi::arpack_solver
class templateezarpack/mpi/arpack_solver.hpp
- include allmpi::arpack_solver
specializationsezarpack/mpi/parpack.hpp
- low level C++ interface to FORTRAN routines of PARPACKezarpack/mpi/mpi_util.hpp
- MPI utility functionsezarpack/version.hpp
- ezARPACK version information
- Specializations of the
- Changelog
- Index
- Search Page