Legendre mesh type.
A Legendre mesh is defined by the number of Legendre polynomials \( N \) used in the series expansion, an inverse temperature \( \beta > 0 \) and its particle statistics.
A Legendre mesh is an index-only mesh (no value attached to each point) and has the following properties:
- Each mesh point is identified by a unique index \( n \in \{0, 1, \ldots, N-1\} \).
- An index \( n \) is mapped to the corresponding data index \( d \) by the identity function \( d(n) = n \) and vice versa.
- There is no explicit value associated with a mesh point, i.e. it carries no value at each mesh point.
Green's function containers that are based on a Legendre mesh store the coefficients \( f_n \) of the generalized Fourier series expansion of a function \( f(\tau) \) in terms of Legendre polynomials, which is defined on the imaginary time axis. To evaluate the function at an arbitrary imaginary time \( \tau \in [0, \beta] \), the GF container sums up the Fourier series to the maximum degree \( N-1 \):
\[ f(\tau) \approx \sum_{n=0}^{N-1} \frac{\sqrt{2n + 1}}{\beta} f_n P_n(x(\tau)) \; ,
\]
where \( P_n \) denotes the Legendre polynomial of degree \( n \), \( x(\tau) = 2\tau / \beta - 1 \) is a linear map from \( [0, \beta] \) to \( [-1, 1] \) and
\[ f_n = \sqrt{2n + 1} \int_0^\beta d\tau \, f(\tau) P_n(x(\tau)) \; ,
\]
are the expansion coefficients.
Definition at line 76 of file legendre.hpp.
|
|
| legendre ()=default |
| | Default constructor constructs an empty mesh.
|
| | legendre (double beta, statistic_enum statistic, long max_n) |
| | Construct a mesh of Legendre polynomials with degrees \( n = 0, 1, \ldots, N - 1 \) on the interval \([0, \beta] \) and the given particle statistics.
|
|
auto | begin () const |
| | Get an iterator to the beginning of the mesh.
|
|
double | beta () const noexcept |
| | Get the inverse temperature \( \beta \).
|
|
auto | cbegin () const |
| | Get a const iterator to the beginning of the mesh.
|
|
auto | cend () const |
| | Get a const iterator to the end of the mesh.
|
| void | deserialize (auto &ar) |
| | Deserialize the mesh from a generic archive.
|
|
auto | end () const |
| | Get an iterator to the end of the mesh.
|
| bool | is_index_valid (index_t n) const noexcept |
| | Check if an index \( n \) is valid.
|
|
uint64_t | mesh_hash () const |
| | Get the hash value of the mesh.
|
| mesh_point_t | operator() (long n) const |
| | Function call operator to access a mesh point by its index \( n \in \{0, 1, \ldots, N-1\} \).
|
|
bool | operator== (legendre const &) const =default |
| | Equal-to comparison operator compares \( N \), \( \beta \) and the particle statistics.
|
| mesh_point_t | operator[] (long d) const |
| | Subscript operator to access a mesh point by its data index \( d \in \{0, 1, \ldots, N-1\} \).
|
| void | serialize (auto &ar) const |
| | Serialize the mesh to a generic archive.
|
|
long | size () const |
| | Get the size \( N \) of the mesh, i.e. the number of mesh points or polynomials in the series expansion.
|
|
auto | statistic () const noexcept |
| | Get the particle statistics.
|
| data_index_t | to_data_index (index_t n) const noexcept |
| | Map an index \( n \in \{0, 1, \ldots, N-1\} \) to its corresponding data index \( d(n) \).
|
| index_t | to_index (long d) const noexcept |
| | Map a data index \( d \in \{0, 1, \ldots, N-1\} \) to the corresponding index \( n(d) \).
|