pairinteraction
A Rydberg Interaction Calculator
DiagonalizerInterface.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
10
11#include <Eigen/Dense>
12#include <Eigen/SparseCore>
13#include <complex>
14#include <optional>
15
16namespace pairinteraction {
17template <typename Scalar>
21 Eigen::SparseMatrix<Scalar, Eigen::RowMajor> eigenvectors;
23};
24
25template <typename Scalar>
27public:
29
31
33 virtual ~DiagonalizerInterface() = default;
34 virtual EigenSystemH<Scalar> eigh(const Eigen::SparseMatrix<Scalar, Eigen::RowMajor> &matrix,
35 double rtol) const = 0;
36 virtual EigenSystemH<Scalar> eigh(const Eigen::SparseMatrix<Scalar, Eigen::RowMajor> &matrix,
37 std::optional<real_t> min_eigenvalue,
38 std::optional<real_t> max_eigenvalue, double rtol) const;
39
40protected:
42 template <typename ScalarLim>
44 double rtol) const;
45 template <typename RealLim>
47};
48
49extern template class DiagonalizerInterface<double>;
51
52extern template Eigen::MatrixX<float>
54 double rtol) const;
57 const Eigen::MatrixX<std::complex<double>> &matrix, double &shift, double rtol) const;
58
59extern template Eigen::VectorX<double>
61 double shift) const;
63 const Eigen::VectorX<float> &shifted_eigenvalues, double shift) const;
64
65extern template Eigen::MatrixX<double>
67 double rtol) const;
70 const Eigen::MatrixX<std::complex<double>> &matrix, double &shift, double rtol) const;
71
72extern template Eigen::VectorX<double>
74 double shift) const;
76 const Eigen::VectorX<double> &shifted_eigenvalues, double shift) const;
77} // namespace pairinteraction
Eigen::MatrixX< ScalarLim > subtract_mean(const Eigen::MatrixX< Scalar > &matrix, real_t &shift, double rtol) const
typename traits::NumTraits< Scalar >::real_t real_t
virtual EigenSystemH< Scalar > eigh(const Eigen::SparseMatrix< Scalar, Eigen::RowMajor > &matrix, double rtol) const =0
Eigen::VectorX< real_t > add_mean(const Eigen::VectorX< RealLim > &eigenvalues, real_t shift) const
Matrix< Type, Dynamic, Dynamic > MatrixX
Matrix< Type, Dynamic, 1 > VectorX
Eigen::SparseMatrix< Scalar, Eigen::RowMajor > eigenvectors
Eigen::VectorX< real_t > eigenvalues
typename traits::NumTraits< Scalar >::real_t real_t
Helper struct to extract types from a numerical type.
Definition: traits.hpp:35