TRIQS/TRIQS 4.0.0
Researching Interacting Quantum Systems
Loading...
Searching...
No Matches
triqs::lattice::tight_binding

#include <triqs/lattice/tight_binding.hpp>

Detailed Description

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.

Constructor & Destructor Documentation

◆ tight_binding() [1/2]

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.

Parameters
blUnderlying Bravais lattice.
displ_vecList of displacement vectors, in units of the lattice basis vectors.
overlap_mat_vecList of overlap (hopping) matrices, one per displacement.

Definition at line 69 of file tight_binding.cpp.

◆ tight_binding() [2/2]

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.

Parameters
blUnderlying Bravais lattice.
hoppingsHopping dictionary mapping displacement vectors to their overlap matrices.

Definition at line 76 of file tight_binding.cpp.

Member Function Documentation

◆ dispersion() [1/3]

auto triqs::lattice::tight_binding::dispersion ( int n_l) const
inline

Compute the dispersion on a regular Brillouin zone mesh with n_l points per dimension.

Parameters
n_lNumber of grid-points along each reciprocal direction.
Returns
Tensor-valued Green's function defined on the regular Brillouin zone mesh, with its data initialised with the band energies at every mesh point.

Definition at line 254 of file tight_binding.hpp.

◆ dispersion() [2/3]

template<typename K>
requires (nda::ArrayOfRank<K, 1> or nda::ArrayOfRank<K, 2>)
auto triqs::lattice::tight_binding::dispersion ( K const & k) const
inline

Compute the dispersion, i.e. the eigenvalue spectrum of \( h_{\mathbf{k}} \), for a given momentum vector (or array of momentum vectors).

Parameters
kMomentum vector (or an array of momentum vectors) in units of the reciprocal lattice basis vectors.
Returns
Real-valued array of length n_orbitals containing the band energies at \( \mathbf{k} \), or an array of such band-energy arrays when an array of momenta is passed.

Definition at line 219 of file tight_binding.hpp.

◆ dispersion() [3/3]

auto triqs::lattice::tight_binding::dispersion ( mesh::brzone const & k_mesh) const
inline

Compute the dispersion on a given Brillouin zone mesh.

Parameters
k_meshBrillouin zone mesh on which to evaluate the band energies.
Returns
Tensor-valued Green's function defined on k_mesh, with its data initialised with the band energies at every mesh point (one real value per orbital).

Definition at line 240 of file tight_binding.hpp.

◆ fourier() [1/3]

auto triqs::lattice::tight_binding::fourier ( int n_l) const
inline

Compute the Fourier transform on a regular Brillouin zone mesh with n_l points per dimension.

Parameters
n_lNumber of grid-points along each reciprocal direction.
Returns
Matrix-valued Green's function defined on the regular Brillouin zone mesh, with its data initialised with the Fourier transform \( h_{\mathbf{k}} \) at every mesh point.

Definition at line 205 of file tight_binding.hpp.

◆ fourier() [2/3]

template<typename K>
requires (nda::ArrayOfRank<K, 1> or nda::ArrayOfRank<K, 2>)
auto triqs::lattice::tight_binding::fourier ( K const & k) const
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.

Parameters
kMomentum vector (or an array of momentum vectors) in units of the reciprocal lattice basis vectors.
Returns
Complex matrix \( h_{\mathbf{k}} \) (or an array of such matrices, one per input momentum).

Definition at line 163 of file tight_binding.hpp.

◆ fourier() [3/3]

auto triqs::lattice::tight_binding::fourier ( mesh::brzone const & k_mesh) const
inline

Compute the Fourier transform on a given Brillouin zone mesh.

Parameters
k_meshBrillouin zone mesh on which to evaluate the Bloch Hamiltonian.
Returns
Matrix-valued Green's function defined on k_mesh, with its data initialised with the Fourier transform \( h_{\mathbf{k}} \) at every mesh point.

Definition at line 189 of file tight_binding.hpp.

◆ h5_read_construct()

tight_binding triqs::lattice::tight_binding::h5_read_construct ( h5::group g,
std::string subgroup_name )
inlinestatic

Construct a tight-binding Hamiltonian by reading it from HDF5.

Parameters
gh5::group to be read from.
subgroup_nameName of the subgroup.
Returns
The reconstructed tight-binding Hamiltonian.

Definition at line 310 of file tight_binding.hpp.

◆ lattice_to_real_coordinates()

template<typename R>
r_t triqs::lattice::tight_binding::lattice_to_real_coordinates ( R const & x) const
inline

Transform a vector from the lattice basis to the standard basis.

Equivalent to calling lattice_to_real_coordinates() on the underlying Bravais lattice.

Parameters
xVector in the lattice basis.
Returns
Vector in the standard basis.

Definition at line 131 of file tight_binding.hpp.

◆ foreach

template<typename F>
void foreach ( tight_binding const & tb,
F f )
friend

Apply a callable to every (displacement, overlap matrix) pair stored in the tight-binding Hamiltonian.

Parameters
tbTight-binding Hamiltonian to iterate over.
fCallable 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.

◆ h5_write

void h5_write ( h5::group fg,
std::string subgroup_name,
tight_binding const & tb )
friend

Write a tight-binding Hamiltonian to HDF5.

Parameters
fgh5::group to be written to.
subgroup_nameName of the subgroup.
tbTight-binding Hamiltonian to be written.

Definition at line 294 of file tight_binding.hpp.

◆ operator<<

std::ostream & operator<< ( std::ostream & sout,
tight_binding const & tb )
friend

Write a tight-binding Hamiltonian to a std::ostream.

Parameters
soutstd::ostream object.
tbTight-binding Hamiltonian to be written.
Returns
Reference to std::ostream object.

Definition at line 276 of file tight_binding.hpp.


The documentation for this class was generated from the following files: