DiFfRG
Loading...
Searching...
No Matches
combined_coordinates.hh
Go to the documentation of this file.
1#pragma once
2
3// standard library
4#include <cmath>
5#include <tuple>
6
7// DiFfRG
12
13namespace DiFfRG
14{
15 template <typename Idx, typename NT> class BosonicCoordinates1DFiniteT
16 {
17 public:
18 using ctype = NT;
19 static constexpr uint dim = 2;
20
27
28 template <typename Idx2, typename NT2>
34
35 template <typename NT2>
44
51 std::array<NT, 2> __forceinline__ __device__ __host__ forward(const uint m, const uint p) const
52 {
53 return {matsubara_values.forward(m), logarithmic_coordinates.forward(p)};
54 }
55
62 std::tuple<Idx, NT> __forceinline__ __device__ __host__ 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 uint size() const { return m_size * grid_extent; }
80 std::array<uint, 2> sizes() const { return {{m_size, grid_extent}}; }
81
83
84 private:
86
89 };
90
91 template <typename Idx, typename NT> class FermionicCoordinates1DFiniteT
92 {
93 public:
94 using ctype = NT;
95 static constexpr uint dim = 2;
96
103
104 template <typename Idx2, typename NT2>
110
111 template <typename NT2>
120
127 std::array<NT, 2> __forceinline__ __device__ __host__ forward(const uint m, const uint p) const
128 {
129 return {matsubara_values.forward(m), logarithmic_coordinates.forward(p)};
130 }
131
138 std::tuple<Idx, NT> __forceinline__ __device__ __host__ backward(const NT m, const NT p) const
139 {
140 Idx m_idx = matsubara_values.backward(m);
141 NT p_idx = 0;
142 if (m_idx >= int(m_size)) {
143 m_idx = m_size - 1;
144 const auto new_p = std::sqrt(powr<2>(p) + powr<2>(m - matsubara_values.forward(m_idx)));
145 p_idx = logarithmic_coordinates.backward(new_p);
146 } else if (m_idx < 0) {
147 m_idx = 0;
148 const auto new_p = std::sqrt(powr<2>(p) + powr<2>(m - matsubara_values.forward(m_idx)));
149 p_idx = logarithmic_coordinates.backward(new_p);
150 } else
151 p_idx = logarithmic_coordinates.backward(p);
152 return {m_idx, p_idx};
153 }
154
155 uint size() const { return m_size * grid_extent; }
156 std::array<uint, 2> sizes() const { return {{m_size, grid_extent}}; }
157
159
160 private:
162
165 };
166} // namespace DiFfRG
Definition combined_coordinates.hh:16
static constexpr uint dim
Definition combined_coordinates.hh:19
const NT m_T
Definition combined_coordinates.hh:82
const NT p_start
Definition combined_coordinates.hh:82
const uint grid_extent
Definition combined_coordinates.hh:85
const NT p_stop
Definition combined_coordinates.hh:82
std::array< NT, 2 > __forceinline__ __device__ __host__ forward(const uint m, const uint p) const
Transform from the grid to the physical space.
Definition combined_coordinates.hh:51
const NT p_bias
Definition combined_coordinates.hh:82
const NT m_stop
Definition combined_coordinates.hh:82
uint size() const
Definition combined_coordinates.hh:79
BosonicCoordinates1DFiniteT(Idx m_start, Idx m_stop, NT m_T, uint grid_extent, NT p_start, NT p_stop, NT p_bias)
Definition combined_coordinates.hh:21
const uint m_size
Definition combined_coordinates.hh:85
std::array< uint, 2 > sizes() const
Definition combined_coordinates.hh:80
std::tuple< Idx, NT > __forceinline__ __device__ __host__ backward(const NT m, const NT p) const
Transform from the physical space to the grid.
Definition combined_coordinates.hh:62
BosonicMatsubaraValues< Idx, NT > matsubara_values
Definition combined_coordinates.hh:87
BosonicCoordinates1DFiniteT(const LogarithmicCoordinates1D< NT2 > &logarithmic_coordinates, Idx m_start, Idx m_stop, NT m_T)
Definition combined_coordinates.hh:36
LogarithmicCoordinates1D< NT > logarithmic_coordinates
Definition combined_coordinates.hh:88
const NT m_start
Definition combined_coordinates.hh:82
NT ctype
Definition combined_coordinates.hh:18
BosonicCoordinates1DFiniteT(const BosonicCoordinates1DFiniteT< Idx2, NT2 > &other)
Definition combined_coordinates.hh:29
Definition stack_coordinates.hh:52
Definition combined_coordinates.hh:92
std::array< uint, 2 > sizes() const
Definition combined_coordinates.hh:156
FermionicCoordinates1DFiniteT(const LogarithmicCoordinates1D< NT2 > &logarithmic_coordinates, Idx m_start, Idx m_stop, NT m_T)
Definition combined_coordinates.hh:112
const NT p_start
Definition combined_coordinates.hh:158
NT ctype
Definition combined_coordinates.hh:94
uint size() const
Definition combined_coordinates.hh:155
const NT m_stop
Definition combined_coordinates.hh:158
static constexpr uint dim
Definition combined_coordinates.hh:95
std::tuple< Idx, NT > __forceinline__ __device__ __host__ backward(const NT m, const NT p) const
Transform from the physical space to the grid.
Definition combined_coordinates.hh:138
const NT m_T
Definition combined_coordinates.hh:158
const uint m_size
Definition combined_coordinates.hh:161
FermionicCoordinates1DFiniteT(Idx m_start, Idx m_stop, NT m_T, uint grid_extent, NT p_start, NT p_stop, NT p_bias)
Definition combined_coordinates.hh:97
const NT p_bias
Definition combined_coordinates.hh:158
const NT m_start
Definition combined_coordinates.hh:158
FermionicMatsubaraValues< Idx, NT > matsubara_values
Definition combined_coordinates.hh:163
const NT p_stop
Definition combined_coordinates.hh:158
std::array< NT, 2 > __forceinline__ __device__ __host__ forward(const uint m, const uint p) const
Transform from the grid to the physical space.
Definition combined_coordinates.hh:127
FermionicCoordinates1DFiniteT(const FermionicCoordinates1DFiniteT< Idx2, NT2 > &other)
Definition combined_coordinates.hh:105
LogarithmicCoordinates1D< NT > logarithmic_coordinates
Definition combined_coordinates.hh:164
const uint grid_extent
Definition combined_coordinates.hh:161
Definition stack_coordinates.hh:99
Definition coordinates.hh:142
Definition complex_math.hh:14
constexpr __forceinline__ __host__ __device__ NumberType powr(const NumberType x)
A compile-time evaluatable power function for whole number exponents.
Definition math.hh:45
unsigned int uint
Definition utils.hh:22