/home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/discretization/coordinates/combined_coordinates.hh Source File#

DiFfRG: /home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/discretization/coordinates/combined_coordinates.hh Source File
DiFfRG
combined_coordinates.hh
Go to the documentation of this file.
1#pragma once
2
3// DiFfRG
8
9namespace DiFfRG
10{
11 template <typename Idx = int, typename NT = double> class BosonicCoordinates1DFiniteT
12 {
13 public:
14 using ctype = NT;
15 static constexpr size_t dim = 2;
16
23
24 template <typename Idx2, typename NT2>
30
31 template <typename NT2>
40
47 device::array<NT, 2> KOKKOS_FORCEINLINE_FUNCTION forward(const size_t m, const size_t p) const
48 {
49 return {matsubara_values.forward(m), logarithmic_coordinates.forward(p)};
50 }
51 template <typename IT> device::array<NT, 2> KOKKOS_FORCEINLINE_FUNCTION forward(const device::array<IT, 2> mp) const
52 {
53 return forward(mp[0], mp[1]);
54 }
55
62 std::tuple<Idx, NT> KOKKOS_FUNCTION backward(const NT m, const NT p) const
63 {
64 Idx m_idx = matsubara_values.backward(m);
65 NT p_idx = 0;
66 if (m_idx >= int(m_size)) {
67 m_idx = m_size - 1;
68 const auto new_p = std::sqrt(powr<2>(p) + powr<2>(m - matsubara_values.forward(m_idx)));
69 p_idx = logarithmic_coordinates.backward(new_p);
70 } else if (m_idx < 0) {
71 m_idx = 0;
72 const auto new_p = std::sqrt(powr<2>(p) + powr<2>(m - matsubara_values.forward(m_idx)));
73 p_idx = logarithmic_coordinates.backward(new_p);
74 } else
75 p_idx = logarithmic_coordinates.backward(p);
76 return {m_idx, p_idx};
77 }
78
79 device::array<size_t, 2> KOKKOS_INLINE_FUNCTION from_linear_index(auto i) const
80 {
82 // calculate the index for each coordinate system
83 idx[0] = i / grid_extent; // Matsubara index
84 idx[1] = i % grid_extent; // Logarithmic index
85
86 return idx;
87 }
88
89 size_t size() const { return m_size * grid_extent; }
91
93
94 std::string to_string() const
95 {
96 return "Combined(" + matsubara_values.to_string() + ", " + logarithmic_coordinates.to_string() + ")";
97 }
98
99 private:
100 const size_t grid_extent, m_size;
101
104 };
105
106 template <typename Idx = int, typename NT = double> class FermionicCoordinates1DFiniteT
107 {
108 public:
109 using ctype = NT;
110 static constexpr size_t dim = 2;
111
118
119 template <typename Idx2, typename NT2>
125
126 template <typename NT2>
135
142 device::array<NT, 2> KOKKOS_FORCEINLINE_FUNCTION forward(const size_t m, const size_t p) const
143 {
144 return {matsubara_values.forward(m), logarithmic_coordinates.forward(p)};
145 }
146 template <typename IT> device::array<NT, 2> KOKKOS_FORCEINLINE_FUNCTION forward(const device::array<IT, 2> mp) const
147 {
148 return forward(mp[0], mp[1]);
149 }
150
157 std::tuple<Idx, NT> KOKKOS_FUNCTION backward(const NT m, const NT p) const
158 {
159 Idx m_idx = matsubara_values.backward(m);
160 NT p_idx = 0;
161 if (m_idx >= int(m_size)) {
162 m_idx = m_size - 1;
163 const auto new_p = std::sqrt(powr<2>(p) + powr<2>(m - matsubara_values.forward(m_idx)));
164 p_idx = logarithmic_coordinates.backward(new_p);
165 } else if (m_idx < 0) {
166 m_idx = 0;
167 const auto new_p = std::sqrt(powr<2>(p) + powr<2>(m - matsubara_values.forward(m_idx)));
168 p_idx = logarithmic_coordinates.backward(new_p);
169 } else
170 p_idx = logarithmic_coordinates.backward(p);
171 return {m_idx, p_idx};
172 }
173
174 device::array<size_t, 2> KOKKOS_INLINE_FUNCTION from_linear_index(auto i) const
175 {
177 // calculate the index for each coordinate system
178 idx[0] = i / grid_extent; // Matsubara index
179 idx[1] = i % grid_extent; // Logarithmic index
180
181 return idx;
182 }
183
184 size_t size() const { return m_size * grid_extent; }
186
188
189 std::string to_string() const
190 {
191 return "Combined(" + matsubara_values.to_string() + ", " + logarithmic_coordinates.to_string() + ")";
192 }
193
194 private:
195 const size_t grid_extent, m_size;
196
199 };
200} // namespace DiFfRG
Definition combined_coordinates.hh:12
std::tuple< Idx, NT > KOKKOS_FUNCTION backward(const NT m, const NT p) const
Transform from the physical space to the grid.
Definition combined_coordinates.hh:62
const NT m_T
Definition combined_coordinates.hh:92
const NT p_start
Definition combined_coordinates.hh:92
const NT p_stop
Definition combined_coordinates.hh:92
static constexpr size_t dim
Definition combined_coordinates.hh:15
const NT p_bias
Definition combined_coordinates.hh:92
const size_t m_size
Definition combined_coordinates.hh:100
const NT m_stop
Definition combined_coordinates.hh:92
const size_t grid_extent
Definition combined_coordinates.hh:100
device::array< NT, 2 > KOKKOS_FORCEINLINE_FUNCTION forward(const device::array< IT, 2 > mp) const
Definition combined_coordinates.hh:51
device::array< size_t, 2 > KOKKOS_INLINE_FUNCTION from_linear_index(auto i) const
Definition combined_coordinates.hh:79
device::array< size_t, 2 > sizes() const
Definition combined_coordinates.hh:90
BosonicMatsubaraValues< Idx, NT > matsubara_values
Definition combined_coordinates.hh:102
BosonicCoordinates1DFiniteT(const LogarithmicCoordinates1D< NT2 > &logarithmic_coordinates, Idx m_start, Idx m_stop, NT m_T)
Definition combined_coordinates.hh:32
size_t size() const
Definition combined_coordinates.hh:89
std::string to_string() const
Definition combined_coordinates.hh:94
BosonicCoordinates1DFiniteT(Idx m_start, Idx m_stop, NT m_T, size_t grid_extent, NT p_start, NT p_stop, NT p_bias)
Definition combined_coordinates.hh:17
LogarithmicCoordinates1D< NT > logarithmic_coordinates
Definition combined_coordinates.hh:103
device::array< NT, 2 > KOKKOS_FORCEINLINE_FUNCTION forward(const size_t m, const size_t p) const
Transform from the grid to the physical space.
Definition combined_coordinates.hh:47
const NT m_start
Definition combined_coordinates.hh:92
NT ctype
Definition combined_coordinates.hh:14
BosonicCoordinates1DFiniteT(const BosonicCoordinates1DFiniteT< Idx2, NT2 > &other)
Definition combined_coordinates.hh:25
Definition stack_coordinates.hh:50
Definition combined_coordinates.hh:107
size_t size() const
Definition combined_coordinates.hh:184
device::array< NT, 2 > KOKKOS_FORCEINLINE_FUNCTION forward(const device::array< IT, 2 > mp) const
Definition combined_coordinates.hh:146
FermionicCoordinates1DFiniteT(const LogarithmicCoordinates1D< NT2 > &logarithmic_coordinates, Idx m_start, Idx m_stop, NT m_T)
Definition combined_coordinates.hh:127
const size_t grid_extent
Definition combined_coordinates.hh:195
const NT p_start
Definition combined_coordinates.hh:187
device::array< size_t, 2 > KOKKOS_INLINE_FUNCTION from_linear_index(auto i) const
Definition combined_coordinates.hh:174
NT ctype
Definition combined_coordinates.hh:109
std::tuple< Idx, NT > KOKKOS_FUNCTION backward(const NT m, const NT p) const
Transform from the physical space to the grid.
Definition combined_coordinates.hh:157
device::array< NT, 2 > KOKKOS_FORCEINLINE_FUNCTION forward(const size_t m, const size_t p) const
Transform from the grid to the physical space.
Definition combined_coordinates.hh:142
std::string to_string() const
Definition combined_coordinates.hh:189
const size_t m_size
Definition combined_coordinates.hh:195
const NT m_stop
Definition combined_coordinates.hh:187
const NT m_T
Definition combined_coordinates.hh:187
static constexpr size_t dim
Definition combined_coordinates.hh:110
device::array< size_t, 2 > sizes() const
Definition combined_coordinates.hh:185
FermionicCoordinates1DFiniteT(Idx m_start, Idx m_stop, NT m_T, size_t grid_extent, NT p_start, NT p_stop, NT p_bias)
Definition combined_coordinates.hh:112
const NT p_bias
Definition combined_coordinates.hh:187
const NT m_start
Definition combined_coordinates.hh:187
FermionicMatsubaraValues< Idx, NT > matsubara_values
Definition combined_coordinates.hh:197
const NT p_stop
Definition combined_coordinates.hh:187
FermionicCoordinates1DFiniteT(const FermionicCoordinates1DFiniteT< Idx2, NT2 > &other)
Definition combined_coordinates.hh:120
LogarithmicCoordinates1D< NT > logarithmic_coordinates
Definition combined_coordinates.hh:198
Definition stack_coordinates.hh:110
Definition coordinates.hh:304
std::array< T, N > array
Definition kokkos.hh:133
Definition complex_math.hh:10