Brillouin zone mesh type.
A Brillouin zone (BZ) mesh is defined by an underlying Brillouin zone and the number of mesh points in the primitive reciprocal unit cell along each of the three dimensions, \( N_1 \), \( N_2 \) and \( N_3 \). The periodic boundary conditions (PBC) in real space (see cyclic-lattice mesh) translate in reciprocal space to \( f(\mathbf{k}) = f(\mathbf{k} + \mathbf{G}^{\mathbf{m}}) \), where \( \mathbf{G}^{\mathbf{m}} = \sum_{i=1}^3
\mathbf{b}_i m_i = \mathbf{B} \mathbf{m} \) is a reciprocal lattice vector, \( \mathbf{b}_i \) is a reciprocal 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 first BZ \( \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 mesh points in the BZ.
- 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 ( \( \mathbf{k} \)-vector) \( \mathbf{k}(\mathbf{n}) \equiv \mathbf{k}^{\mathbf{n}} = \sum_{i=1}^3 \mathbf{b}_i n_i / N_i = \tilde{\mathbf{B}} \mathbf{n} \), where \( \mathbf{b}_i \) is the reciprocal lattice basis vector in direction \( i \). The inverse map is then \( \mathbf{n}(\mathbf{k}^{\mathbf{n}}) = \tilde{\mathbf{B}}^{-1} \mathbf{k}^{\mathbf{n}} = \mathbf{n} \).
Green's function containers that are based on a BZ mesh store the function values at the discrete \( \mathbf{k}
\)-points \( \mathbf{k}^{\mathbf{n}} \), i.e. \( f_{\mathbf{n}} = f(\mathbf{k}^{\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 \( \mathbf{k} \)-vector, \( \mathbf{k} \) is first mapped to the BZ using PBC and then trilinear interpolation is performed.
- at one of the \( \mathbf{k}^{\mathbf{n}} \), it is first mapped to the BZ using PBC and then the corresponding function value is returned.
Definition at line 104 of file brzone.hpp.
|
|
| brzone ()=default |
| | Default constructor constructs an empty mesh.
|
| | brzone (brillouin_zone const &bz, long n_k) |
| | Construct a Brillouin zone mesh with the same number of mesh points in each direction.
|
| | brzone (brillouin_zone const &bz, nda::matrix< long > const &M) |
| | Construct a Brillouin zone mesh with the given periodization matrix.
|
| | brzone (brillouin_zone const &bz, std::array< long, 3 > const &dims) |
| | Construct a Brillouin zone mesh with the given number of mesh points.
|
|
auto | begin () const |
| | Get an iterator to the beginning of the mesh.
|
|
auto const & | bz () const noexcept |
| | Get the underlying Brillouin zone.
|
|
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.
|
template<typename V>
requires (is_k_expr<V> or std::ranges::contiguous_range<V> or nda::ArrayOfRank<V, 1>) |
| index_t | closest_index (V const &k) const |
| | Map a given \( \mathbf{k} \)-vector or expression to the closest \( \mathbf{k}^{\mathbf{n}} \) in the first BZ and return its index \( \mathbf{n} \).
|
| void | deserialize (auto &ar) |
| | Deserialize the mesh from a generic archive.
|
|
auto const & | dims () const |
| | Get the number of mesh points 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 first BZ.
|
| bool | is_index_valid (index_t const &n) const noexcept |
| | Check if an index \( \mathbf{n} \) is valid, i.e. corresponds to a \( \mathbf{k}^\mathbf{n} \) in the first BZ.
|
|
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== (brzone const &m) const |
| | Equal-to comparison operator compares the underlying Brillouin zone and the number of k-points 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 \( \mathbf{k} \)-point \( \mathbf{k}^{\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 total number of mesh points in the first BZ.
|
| template<typename V> |
| data_index_t | to_data_index (closest_mesh_point_t< V > const &cmp) const |
| | Map a \( \mathbf{k} \)-vector \( \mathbf{k}^{\mathbf{n}} \) to its data index \(d(\mathbf{k}^{\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}) \).
|
| template<char OP, typename L, typename R> |
| data_index_t | to_data_index (k_expr< OP, L, R > const &ex) const |
| | Map a binary \( \mathbf{k} \)-expression to a data index \( d \).
|
| template<char OP, typename L> |
| data_index_t | to_data_index (k_expr_unary< OP, L > const &ex) const |
| | Map an unary \( \mathbf{k} \)-expression to a data index \( d \).
|
| template<typename V> |
| index_t | to_index (closest_mesh_point_t< V > const &cmp) const |
| | Map a given \( \mathbf{k} \)-vector or expression to the closest \( \mathbf{k}^{\mathbf{n}} \) in the first BZ and return 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 \( \mathbf{k} \)-point \( \mathbf{k}^{\mathbf{n}}
\).
|
|
auto | units () const |
| | Get the matrix \( \tilde{\mathbf{B}}^T \) containing the scaled reciprocal basis vectors in its rows.
|
|
auto | units_inv () const |
| | Get the matrix \( \left( \tilde{\mathbf{B}}^T \right)^{-1} \).
|