trl - Thick Restart (Block) Lanczos
A C++20 implementation of a Block Lanczos eigensolver with thick restarting scheme for computing eigenvalues and eigenvectors of large sparse matrices.
The algorithm itself is implemented using an abstract concept of an eigenvalue problem which itself must define an abstract concept of a block multivector (and related types). This makes it possible to adapt the method to different hardware (e.g. CPUs or GPUs) without changing the algorithm itself.
Currently two implementations (here called “backends”) are available that can be plugged into the algorithm:
An OpenMP backend: This is the default and is always built. It requires and OpenMP capable compiler.
A SYCL backend: This backend is experimental and work in progress. It is currently only tested with the AdaptiveCpp SYCL compiler but other SYCL implementations should work as well.
To facilitate the implementation of new backends, C++20 concepts for the eigenproblem and the necessary types are given.
Backends:
C++ 20 Concepts
Algorithms: