pairinteraction
A Rydberg Interaction Calculator
GreenTensor.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2025 Pairinteraction Developers
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4#pragma once
5
9
10#include <Eigen/Dense>
11#include <complex>
12#include <map>
13#include <unsupported/Eigen/Splines>
14#include <variant>
15#include <vector>
16
17namespace pairinteraction {
18template <typename Scalar>
20public:
22
24 using complex_t = std::complex<real_t>;
25
26 class ConstantEntry final {
27 public:
28 ConstantEntry(int row, int col, Scalar val);
29 Scalar val() const;
30 int row() const noexcept;
31 int col() const noexcept;
32
33 private:
34 int row_;
35 int col_;
36 Scalar val_;
37 };
38
39 class OmegaDependentEntry final {
40 public:
41 OmegaDependentEntry(int row, int col, Eigen::Spline<real_t, 1> real_spline,
42 Eigen::Spline<real_t, 1> imag_spline);
43 Scalar val(double omega) const;
44 int row() const noexcept;
45 int col() const noexcept;
46
47 private:
48 int row_;
49 int col_;
50 Eigen::Spline<real_t, 1> real_spline;
51 Eigen::Spline<real_t, 1> imag_spline;
52 };
53
54 using Entry = std::variant<ConstantEntry, OmegaDependentEntry>;
55
56 void set_entries(int kappa1, int kappa2,
57 const Eigen::MatrixX<Scalar> &tensor_in_cartesian_coordinates);
58 void set_entries(int kappa1, int kappa2,
59 const std::vector<Eigen::MatrixX<Scalar>> &tensors_in_cartesian_coordinates,
60 const std::vector<double> &omegas);
61 const std::vector<Entry> &get_entries(int kappa1, int kappa2) const;
62
63private:
64 std::map<std::pair<int, int>, std::vector<Entry>> entries_map;
65};
66
67extern template class GreenTensor<double>;
68extern template class GreenTensor<std::complex<double>>;
69} // namespace pairinteraction
ConstantEntry(int row, int col, Scalar val)
Definition: GreenTensor.cpp:20
OmegaDependentEntry(int row, int col, Eigen::Spline< real_t, 1 > real_spline, Eigen::Spline< real_t, 1 > imag_spline)
Definition: GreenTensor.cpp:39
typename traits::NumTraits< Scalar >::real_t real_t
Definition: GreenTensor.hpp:23
const std::vector< Entry > & get_entries(int kappa1, int kappa2) const
std::variant< ConstantEntry, OmegaDependentEntry > Entry
Definition: GreenTensor.hpp:54
std::complex< real_t > complex_t
Definition: GreenTensor.hpp:24
void set_entries(int kappa1, int kappa2, const Eigen::MatrixX< Scalar > &tensor_in_cartesian_coordinates)
Definition: GreenTensor.cpp:65
Matrix< Type, Dynamic, Dynamic > MatrixX
Helper struct to extract types from a numerical type.
Definition: traits.hpp:35