#include <ReciprocalLattice.h>
Public Member Functions | |
ReciprocalLattice (UnitCell *unitCell) | |
~ReciprocalLattice () | |
Model * | generateModel (std::initializer_list< double > momentum) const |
Model * | generateModel (std::vector< double > momentum) const |
Model * | generateModel (const std::vector< std::vector< double >> &momentums, const std::vector< Index > &blockIndices) const |
const std::vector< std::vector< double > > & | getReciprocalLatticeVectors () const |
unsigned int | getNumBands () const |
The ReciprocalLattice provides methods for constructing momentum space Models from a UnitCell. Let the real space Hamiltonian be written on the form
\[ H = \sum_{RiR'i'}a_{RiR'i'}c_{Ri'}^{\dagger}c_{R'i'}, \]
where R and R' are UnitCell-indices and i and i' are intra UnitCell-indices. Expanding the operators in the momentum basis we have
\[ H = \sum_{RkiR'k'i'}a_{RiR'i'}c_{ki}^{\dagger}c_{k'i'}e^{i(k\cdot R - k'\cdot R')}. \]
Now assuming translational invaraince, such that the coefficients only depend on the relative UnitCell positions, we can write
\[ H = \sum_{\bar{R}kiR'k'i'}a_{\bar{R}i0i'}c_{ki}^{\dagger}c_{k'i'}e^{ik\cdot\bar{R}}e^{i(k-k')\cdot R'}, \]
where
\[\bar{R} = R - R'\]
. Carrying out the sum over R' we arrive at
\[ H = \sum_{kik'i'}\left(\sum_{\bar{R}}a_{\bar{R}i0i'}e^{ik\cdot\bar{R}}\right)c_{ki}^{\dagger}c_{k'i'}. \]
It therefore follows that the momentum space HoppingAmplitudes are given by
\[ a_{kik'i'} = \sum_{\bar{R}}a_{\bar{R}i0i'}e^{ik\cdot\bar{R}}. \]
The purpose of this class is to provide method for constructing Models for given k and k' using these coefficients. This is done by specifying a real space environment around a reference UnitCell, large enough to ensure that the sum can run over all relevant
\[\bar{R}\]
, and then using this to calcualte the coefficeints when Models with given k and k' is demanded.
TBTK::ReciprocalLattice::ReciprocalLattice | ( | UnitCell * | unitCell | ) |
Constructor.
TBTK::ReciprocalLattice::~ReciprocalLattice | ( | ) |
Destructor.
Model* TBTK::ReciprocalLattice::generateModel | ( | std::initializer_list< double > | momentum | ) | const |
Genearates a Model for give momentum.
Model* TBTK::ReciprocalLattice::generateModel | ( | std::vector< double > | momentum | ) | const |
Genearates a Model for give momentum.
Model* TBTK::ReciprocalLattice::generateModel | ( | const std::vector< std::vector< double >> & | momentums, |
const std::vector< Index > & | blockIndices | ||
) | const |
Genearates a Model for give momentum.
|
inline |
Get number of bands.
|
inline |
Get reciprocal lattice vectors.