pairinteraction
A Rydberg Interaction Calculator
DiagonalizerFeast.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Pairinteraction Developers
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4#pragma once
5
9
10#include <Eigen/SparseCore>
11#include <complex>
12#include <optional>
13
14namespace pairinteraction {
15template <typename Scalar>
17public:
19
21 EigenSystemH<Scalar> eigh(const Eigen::SparseMatrix<Scalar, Eigen::RowMajor> &matrix,
22 double rtol) const override;
23 EigenSystemH<Scalar> eigh(const Eigen::SparseMatrix<Scalar, Eigen::RowMajor> &matrix,
24 std::optional<real_t> min_eigenvalue,
25 std::optional<real_t> max_eigenvalue, double rtol) const override;
26
27private:
28 int m0;
29 template <typename ScalarLim>
30 EigenSystemH<Scalar> dispatch_eigh(const Eigen::SparseMatrix<Scalar, Eigen::RowMajor> &matrix,
31 real_t min_eigenvalue, real_t max_eigenvalue,
32 double rtol) const;
33};
34
35extern template class DiagonalizerFeast<double>;
36extern template class DiagonalizerFeast<std::complex<double>>;
37} // namespace pairinteraction
EigenSystemH< Scalar > eigh(const Eigen::SparseMatrix< Scalar, Eigen::RowMajor > &matrix, double rtol) const override
DiagonalizerFeast(int m0, FloatType float_type=FloatType::FLOAT64)
typename traits::NumTraits< Scalar >::real_t real_t