Cyclic lattice mesh type for Bravais lattices with Born-von Karman periodic boundary conditions.
A cyclic lattice mesh is defined by an underlying Bravais lattice and the number of unit cells in each of the three dimensions, \( N_1 \), \( N_2 \) and \( N_3 \), which define the supercell and the periodic boundary conditions (PBC) \( f(\mathbf{R}^{\mathbf{n}}) = f(\mathbf{R}^{\mathbf{n}} + \mathbf{T}^{\mathbf{m}})\). Here, \( \mathbf{T}^{\mathbf{m}} = \sum_{i=1}^3 \mathbf{a}_i N_i m_i = \tilde{\mathbf{A}} \mathbf{m} \) is a supercell translation vector, \( \mathbf{a}_i \) is a Bravais lattice basis vector in direction \( i \) and \( \mathbf{m} = (m_1, m_2, m_3) \) with \( m_i \in \mathbb{Z} \).
It has the following properties:
- Each mesh point is identified by
- a unique index in the supercell \( \mathbf{n} = (n_1, n_2, n_3) \), where \( 0 \leq n_i < N_i \), and
- an infinite set of indices due to the periodic boundary conditions, i.e. \( \{ \tilde{\mathbf{n}} = \mathbf{n} + \mathbf{N} \mathbf{m} : \mathbf{N} \mathbf{m} = (N_1 m_1, N_2 m_2, N_3 m_3) \in \mathbb{Z}^3 \} \).
- The size of the mesh is \( N = N_1 \, N_2 \, N_3 \), i.e. the total number of unit cells in the supercell.
- An index \( \mathbf{n} \) is mapped to the corresponding data index \( d \) by the function \( d(\mathbf{n}) = n_3 + N_3 (n_2 + N_2 n_1) = n_3 + n_2 N_3 + n_1 N_2 N_3 \). The inverse map is \( \mathbf{n}(d) = (\lfloor d / s_1 \rfloor, \lfloor (d \mod s_1) / s_2 \rfloor, (d \mod s_1) \mod s_2 ) \), where \( s_1 = N_2 N_3 \) and \( s_2 = N_3 \).
- An index \( \mathbf{n} \) is mapped to the corresponding value (lattice point) \( \mathbf{R}(\mathbf{n}) \equiv \mathbf{R}^{\mathbf{n}} = \sum_{i=1}^3 \mathbf{a}_i n_i = \mathbf{A} \mathbf{n} \), where \( \mathbf{a}_i \) is the Bravais lattice basis vectors in direction \( i \). The inverse map is then \( \mathbf{n}(\mathbf{R}^{\mathbf{n}}) = \mathbf{A}^{-1} \mathbf{R}^{\mathbf{n}} = \mathbf{n} \).
Green's function containers that are based on a cyclic lattice mesh store the function values at the discrete lattice points \( \mathbf{R}^{\mathbf{n}} \), i.e. \( f_{\mathbf{n}} = f(\mathbf{R}^{\mathbf{n}}) \). Because of the PBC, the container only has to store values for indices with \( 0 \leq n_i < N_i \). To evaluate the function at an arbitrary lattice point, it is first mapped to the supercell using the PBC and then the corresponding function value is returned.
Definition at line 88 of file cyclat.hpp.
|
| | cyclat (bravais_lattice const &bl, long L) |
| | Construct a cyclic lattice mesh on a Bravais lattice with a cubic supercell.
|
| | cyclat (bravais_lattice const &bl, nda::matrix< long > const &M) |
| | Construct a cyclic lattice mesh on a Bravais lattice with the given periodization matrix.
|
| | cyclat (bravais_lattice const &bl, std::array< long, 3 > const &dims) |
| | Construct a cyclic lattice mesh on a Bravais lattice with the given supercell dimensions.
|
| | cyclat (long L1=1, long L2=1, long L3=1) |
| | Construct a cyclic lattice mesh on a cubic Bravais lattice with \( a = 1 \) and the given supercell dimensions.
|
|
auto | begin () const |
| | Get an iterator to the beginning of the mesh.
|
|
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 & | dims () const |
| | Get the number of unit cells in each of the three dimensions.
|
|
auto | end () const |
| | Get an iterator to the end of the mesh.
|
| index_t | index_modulo (index_t const &n_tilde) const |
| | Map an arbitrary index \( \tilde{\mathbf{n}} \) to the unique index \( \mathbf{n} \) in the supercell.
|
| bool | is_index_valid (index_t const &n) const noexcept |
| | Check if an index \( \mathbf{n} \) is valid, i.e. corresponds to a unit cell/lattice point in the supercell.
|
|
auto const & | lattice () const noexcept |
| | Get the underlying Bravais lattice.
|
|
uint64_t | mesh_hash () const |
| | Get the hash value of the mesh.
|
| mesh_point_t | operator() (index_t const &n) const |
| | Function call operator to access a mesh point by its index \( \mathbf{n} \).
|
|
bool | operator== (cyclat const &m) const |
| | Equal-to comparison operator compares the underlying Bravais lattice and the number of unit cells in each of the three dimensions.
|
| mesh_point_t | operator[] (closest_mesh_point_t< value_t > const &cmp) const |
| | Subscript operator to access a mesh point by a lattice point \( \mathbf{R}^{\mathbf{n}} \) contained in a triqs::mesh::closest_mesh_point_t.
|
| 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 unit cells in the supercell.
|
| data_index_t | to_data_index (closest_mesh_point_t< value_t > const &cmp) const |
| | Map a lattice point \( \mathbf{R}^{\mathbf{n}} \) to its data index \( d(\mathbf{R}^{\mathbf{n}}) \).
|
| data_index_t | to_data_index (index_t const &n) const |
| | Map an index \( \mathbf{n} \) to its corresponding data index \( d(\mathbf{n}) \).
|
| index_t | to_index (closest_mesh_point_t< value_t > const &cmp) const |
| | Map a lattice point \( \mathbf{R}^{\mathbf{n}} \) to its index \( \mathbf{n} \).
|
| index_t | to_index (data_index_t d) const |
| | Map a data index \( d \in \{0, 1, \ldots, N-1\} \) to the corresponding index \( \mathbf{n}(d)
\).
|
| value_t | to_value (index_t const &n) const |
| | Map an index \( \mathbf{n} \) to its corresponding lattice point \( \mathbf{R}^{\mathbf{n}} \).
|
|
auto | units () const |
| | Get the matrix \( \mathbf{A}^T \) containing the basis vectors of the Bravais lattice in its rows.
|