|
TRIQS/TRIQS 4.0.0
Researching Interacting Quantum Systems
|
#include <triqs/lattice/tight_binding.hpp>
Tight-binding Hamiltonian on a Bravais lattice with fully localised orbitals.
The Hamiltonian is parametrised by a set of lattice displacements \( \{ \mathbf{R}_j \} \) (given in units of the lattice basis vectors) and the associated overlap (hopping) matrices \( \{ t_{\mathbf{R}_j} \} \) between orbitals in the unit cell. The Bloch Hamiltonian in reciprocal space is obtained by the discrete Fourier transform
\[ h_{\mathbf{k}} = \sum_j t_{\mathbf{R}_j} \, e^{2 \pi i \, \mathbf{k} \cdot \mathbf{R}_j} \; , \]
where the momentum \( \mathbf{k} \) is expressed in units of the reciprocal lattice basis vectors.
The orbital overlap within a unit cell (the on-site block at \( \mathbf{R} = 0 \)) is the identity matrix unless explicitly overridden by the user-provided hoppings.
Definition at line 83 of file tight_binding.hpp.
Public Member Functions | |
| tight_binding (bravais_lattice bl, hopping_dict hoppings) | |
| Construct a tight-binding Hamiltonian on a given Bravais lattice from a hopping dictionary. | |
| tight_binding (bravais_lattice bl, std::vector< nda::vector< long > > displ_vec, std::vector< nda::matrix< dcomplex > > overlap_mat_vec) | |
| Construct a tight-binding Hamiltonian on a given Bravais lattice from explicit displacement and overlap lists. | |
| auto | dispersion (int n_l) const |
| Compute the dispersion on a regular Brillouin zone mesh with n_l points per dimension. | |
| template<typename K> requires (nda::ArrayOfRank<K, 1> or nda::ArrayOfRank<K, 2>) | |
| auto | dispersion (K const &k) const |
| Compute the dispersion, i.e. the eigenvalue spectrum of \( h_{\mathbf{k}} \), for a given momentum vector (or array of momentum vectors). | |
| auto | dispersion (mesh::brzone const &k_mesh) const |
| Compute the dispersion on a given Brillouin zone mesh. | |
| auto const & | displ_vec () const |
| Get the list of displacement vectors, in units of the lattice basis vectors. | |
| auto | fourier (int n_l) const |
| Compute the Fourier transform on a regular Brillouin zone mesh with n_l points per dimension. | |
| template<typename K> requires (nda::ArrayOfRank<K, 1> or nda::ArrayOfRank<K, 2>) | |
| auto | fourier (K const &k) const |
| Compute the Fourier transform for a given momentum vector (or array of momentum vectors). | |
| auto | fourier (mesh::brzone const &k_mesh) const |
| Compute the Fourier transform on a given Brillouin zone mesh. | |
| bravais_lattice const & | lattice () const |
| Get the underlying Bravais lattice. | |
| template<typename R> | |
| r_t | lattice_to_real_coordinates (R const &x) const |
| Transform a vector from the lattice basis to the standard basis. | |
| long | n_orbitals () const |
| Number of orbitals (also the size of the Bloch Hamiltonian matrix \( h_{\mathbf{k}} \)). | |
| bool | operator!= (tight_binding const &tb) const |
| Not-equal-to comparison operator (negation of operator==()). | |
| bool | operator== (tight_binding const &tb) const |
| Equal-to comparison operator. True if the underlying lattice, displacements and overlap matrices all match. | |
| auto const & | overlap_mat_vec () const |
| Get the list of overlap (hopping) matrices, aligned with the displacement vectors. | |
Static Public Member Functions | |
| static tight_binding | h5_read_construct (h5::group g, std::string subgroup_name) |
| Construct a tight-binding Hamiltonian by reading it from HDF5. | |
| static std::string | hdf5_format () |
| Get the HDF5 format tag. | |
Friends | |
| template<typename F> | |
| void | foreach (tight_binding const &tb, F f) |
| Apply a callable to every (displacement, overlap matrix) pair stored in the tight-binding Hamiltonian. | |
| void | h5_write (h5::group fg, std::string subgroup_name, tight_binding const &tb) |
| Write a tight-binding Hamiltonian to HDF5. | |
| std::ostream & | operator<< (std::ostream &sout, tight_binding const &tb) |
| Write a tight-binding Hamiltonian to a std::ostream. | |
| triqs::lattice::tight_binding::tight_binding | ( | bravais_lattice | bl, |
| std::vector< nda::vector< long > > | displ_vec, | ||
| std::vector< nda::matrix< dcomplex > > | overlap_mat_vec ) |
Construct a tight-binding Hamiltonian on a given Bravais lattice from explicit displacement and overlap lists.
The matrix structure of each overlap matrix is with respect to the orbitals in the unit cell. The displacement and overlap lists must have the same length, and every overlap matrix must be square with size equal to the number of orbitals in the unit cell.
| bl | Underlying Bravais lattice. |
| displ_vec | List of displacement vectors, in units of the lattice basis vectors. |
| overlap_mat_vec | List of overlap (hopping) matrices, one per displacement. |
Definition at line 69 of file tight_binding.cpp.
| triqs::lattice::tight_binding::tight_binding | ( | bravais_lattice | bl, |
| hopping_dict | hoppings ) |
Construct a tight-binding Hamiltonian on a given Bravais lattice from a hopping dictionary.
| bl | Underlying Bravais lattice. |
| hoppings | Hopping dictionary mapping displacement vectors to their overlap matrices. |
Definition at line 76 of file tight_binding.cpp.
|
inline |
Compute the dispersion on a regular Brillouin zone mesh with n_l points per dimension.
| n_l | Number of grid-points along each reciprocal direction. |
Definition at line 254 of file tight_binding.hpp.
|
inline |
Compute the dispersion, i.e. the eigenvalue spectrum of \( h_{\mathbf{k}} \), for a given momentum vector (or array of momentum vectors).
| k | Momentum vector (or an array of momentum vectors) in units of the reciprocal lattice basis vectors. |
Definition at line 219 of file tight_binding.hpp.
|
inline |
Compute the dispersion on a given Brillouin zone mesh.
| k_mesh | Brillouin zone mesh on which to evaluate the band energies. |
Definition at line 240 of file tight_binding.hpp.
|
inline |
Compute the Fourier transform on a regular Brillouin zone mesh with n_l points per dimension.
| n_l | Number of grid-points along each reciprocal direction. |
Definition at line 205 of file tight_binding.hpp.
|
inline |
Compute the Fourier transform for a given momentum vector (or array of momentum vectors).
The Bloch Hamiltonian is given by
\[ h_{\mathbf{k}} = \sum_j t_{\mathbf{R}_j} \, e^{2 \pi i \, \mathbf{k} \cdot \mathbf{R}_j} \; , \]
with lattice displacements \( \{ \mathbf{R}_j \} \) and associated overlap (hopping) matrices \( \{ t_{\mathbf{R}_j} \} \). The momentum \( \mathbf{k} \) is expressed in units of the reciprocal lattice basis vectors.
| k | Momentum vector (or an array of momentum vectors) in units of the reciprocal lattice basis vectors. |
Definition at line 163 of file tight_binding.hpp.
|
inline |
Compute the Fourier transform on a given Brillouin zone mesh.
| k_mesh | Brillouin zone mesh on which to evaluate the Bloch Hamiltonian. |
Definition at line 189 of file tight_binding.hpp.
|
inlinestatic |
Construct a tight-binding Hamiltonian by reading it from HDF5.
| g | h5::group to be read from. |
| subgroup_name | Name of the subgroup. |
Definition at line 310 of file tight_binding.hpp.
|
inline |
Transform a vector from the lattice basis to the standard basis.
Equivalent to calling lattice_to_real_coordinates() on the underlying Bravais lattice.
| x | Vector in the lattice basis. |
Definition at line 131 of file tight_binding.hpp.
|
friend |
Apply a callable to every (displacement, overlap matrix) pair stored in the tight-binding Hamiltonian.
| tb | Tight-binding Hamiltonian to iterate over. |
| f | Callable invoked as f(R, t_R) for each stored displacement R and its overlap matrix t_R. |
Definition at line 142 of file tight_binding.hpp.
|
friend |
Write a tight-binding Hamiltonian to HDF5.
| fg | h5::group to be written to. |
| subgroup_name | Name of the subgroup. |
| tb | Tight-binding Hamiltonian to be written. |
Definition at line 294 of file tight_binding.hpp.
|
friend |
Write a tight-binding Hamiltonian to a std::ostream.
| sout | std::ostream object. |
| tb | Tight-binding Hamiltonian to be written. |
Definition at line 276 of file tight_binding.hpp.