Chebyshev imaginary time mesh type.
A Chebyshev imaginary time mesh is defined by its size \( N \geq 0 \), an inverse temperature \( \beta
> 0 \) and its particle statistics. It stores function values at Chebyshev collocation points and uses barycentric interpolation for evaluation at arbitrary imaginary times, providing exponential convergence for smooth functions.
A Chebyshev imaginary time mesh 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.
- An index \( n \) is mapped to the corresponding value \( \tau \) by the function \( \tau(n) = \frac{\beta}{2} (x_n + 1) \) where \( x_n = \cos\left(\frac{(2n + 1) \pi}{2N}\right) \) is the Chebyshev point of the first kind.
Green's function containers that are based on a Chebyshev imaginary time mesh store the function values at the discrete time points \( \tau(n) \), i.e. \( f_n = f(\tau(n)) \), and use barycentric interpolation to evaluate the function at an arbitrary imaginary time \( \tau \in [0, \beta] \):
\[ f(\tau) \approx \frac{\sum_{n=0}^{N-1} \frac{w_n}{x - x_n} f_n}{\sum_{n=0}^{N-1} \frac{w_n}{x - x_n}}
\]
where \( x = 2\tau/\beta - 1 \) is the scaled coordinate and \( w_n \) are the barycentric weights.
Definition at line 71 of file chebyshev.hpp.
|
|
| chebyshev ()=default |
| | Default constructor constructs an empty mesh.
|
| | chebyshev (double beta, statistic_enum stat, long N) |
| | Construct a Chebyshev mesh on \( [0, \beta] \) with \( N \) collocation points.
|
|
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.
|
|
double | inv_beta_x2 () const noexcept |
| | Get the precomputed \( 2 / \beta \) for fast tau -> [-1, 1] mapping.
|
| 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== (chebyshev 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\} \).
|
|
nda::vector_const_view< double > | points () const |
| | Access to Chebyshev points scaled to [0, beta].
|
|
nda::vector_const_view< double > | points_standard () const |
| | Access to Chebyshev points on [-1, 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.
|
|
statistic_enum | 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 (data_index_t d) const noexcept |
| | Map a data index \( d \in \{0, 1, \ldots, N-1\} \) to the corresponding index \( n(d) \).
|
| value_t | to_value (index_t n) const noexcept |
| | Map an index \( n \) to its corresponding value \( \tau_n \).
|
|
nda::vector_const_view< double > | weights () const |
| | Access to barycentric weights.
|