Discrete Lehmann representation (DLR) mesh type.
A DLR mesh is defined by the inverse temperature \( \beta > 0 \), the particle statistics, a DLR energy cutoff \( \omega_{\text{max}} \), an error tolerance \( \epsilon \) and a boolean flag specifying if the mesh should be symmetric around \( \omega = 0 \).
A DLR mesh has the following properties:
- Each mesh point is identified by a unique index \( l \in \{0, 1, \ldots, N-1\} \).
- The size of the mesh \( N \) depends on \( \beta \) and the choice of \( \omega_{\text{max}} \) and \( \epsilon \). It is equal to the DLR rank \( r \) and the number of DLR basis functions \( K(\tau, \omega_l) \) or \( K(i\omega_n, \omega_l) \).
- An index \( l \) is mapped to the corresponding data index \( d \) by the identity function \( d(l) = l \) and vice versa.
- An index \( l \) is mapped to the corresponding value \( \omega_l \), where \( \omega_l \) is the l-th DLR frequency.
Green's function containers that are based on a DLR mesh store the coefficients \( f_l \) of the discrete Lehmann representation of a function \( f(\tau) \) or \( f(i\omega_n) \). To evaluate the function at an arbitrary imaginary time \( \tau \in [0, \beta] \) or at a specific Matsubara frequency \( i\omega_n \), the GF container calculates the DLR approximation of the function via
\[ f(\tau) \approx \sum_{l=0}^{N-1} \frac{e^{-\omega_l \tau}}{1 + e^{-\omega_l \beta}} f_l \; ,
\]
or
\[ f(i\omega_n) \approx \sum_{l=0}^{N-1} \frac{1}{i\omega_n + \omega_l} f_l \; .
\]
Definition at line 96 of file dlr.hpp.
|
|
| dlr ()=default |
| | Default constructor constructs an empty mesh.
|
| | dlr (double beta, statistic_enum statistic, double w_max, double eps, bool symmetrize=true) |
| | Construct a DLR mesh with a given energy cutoff \( \omega_{\text{max}} \) and error tolerance \(\epsilon \).
|
| template<nda::AnyOf< dlr_imtime, dlr_imfreq > M> |
| | dlr (M const &m) |
| | Construct a DLR mesh from another DLR type mesh.
|
|
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 const & | dlr_freq () const |
| | Get the array of DLR frequencies \( \omega_l \).
|
|
auto const & | dlr_if () const |
| | Get the Matsubara frequency DLR operations object (see also cppdlr::imfreq_ops).
|
|
auto const & | dlr_it () const |
| | Get the imaginary time DLR operations object (see also cppdlr::imtime_ops).
|
|
auto | end () const |
| | Get an iterator to the end of the mesh.
|
|
double | eps () const noexcept |
| | Get the DLR error tolerance \( \epsilon \).
|
| bool | is_index_valid (long l) const noexcept |
| | Check if an index \( l \) is valid.
|
|
uint64_t | mesh_hash () const noexcept |
| | Get the hash value of the mesh.
|
| mesh_point_t | operator() (long l) const |
| | Function call operator to access a mesh point by its index \( l \in \{0, 1, \ldots, N-1\} \).
|
|
bool | operator== (dlr const &m) const |
| | Equal-to comparison operator compares the hash values.
|
| 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 noexcept |
| | Get the size \( N \) of the mesh, i.e. the DLR rank \( r \).
|
|
statistic_enum | statistic () const noexcept |
| | Get the particle statistics.
|
|
bool | symmetrize () const noexcept |
| | Is the mesh symmetric around \( \omega = 0 \)?
|
| long | to_data_index (long l) const noexcept |
| | Map an index \( l \in \{0, 1, \ldots, N-1\} \) to its corresponding data index \( d(l) \).
|
| long | to_index (long d) const noexcept |
| | Map a data index \( d \in \{0, 1, \ldots, N-1\} \) to the corresponding index \( l(d) \).
|
| double | to_value (long l) const noexcept |
| | Map an index \( l \in \{0, 1, \ldots, N-1\} \) to its corresponding value \( \omega_l \).
|
|
double | w_max () const noexcept |
| | Get the DLR energy cutoff \( \omega_{\text{max}} = \Lambda / \beta \).
|