26 #ifndef COM_DAFER45_TBTK_RECIPROCAL_LATTICE
27 #define COM_DAFER45_TBTK_RECIPROCAL_LATTICE
30 #include "TBTK/StateTreeNode.h"
31 #include "TBTK/UnitCell.h"
33 #include <initializer_list>
69 class ReciprocalLattice{
72 ReciprocalLattice(UnitCell *unitCell);
78 Model* generateModel(std::initializer_list<double> momentum)
const;
81 Model* generateModel(std::vector<double> momentum)
const;
85 const std::vector<std::vector<double>> &momentums,
86 const std::vector<Index> &blockIndices
90 const std::vector<std::vector<double>>& getReciprocalLatticeVectors()
const;
93 unsigned int getNumBands()
const;
102 StateSet *realSpaceEnvironment;
105 StateTreeNode *realSpaceEnvironmentStateTree;
111 StateSet *realSpaceReferenceCell;
114 std::vector<std::vector<double>> reciprocalLatticeVectors;
118 static constexpr
double ROUNDOFF_MARGIN_MULTIPLIER = 1.01;
121 void setupReciprocalLatticeVectors(
const UnitCell *unitCell);
124 void setupRealSpaceEnvironment(
const UnitCell *unitCell);
127 inline const std::vector<std::vector<double>>& ReciprocalLattice::getReciprocalLatticeVectors()
const{
128 return reciprocalLatticeVectors;
131 inline unsigned int ReciprocalLattice::getNumBands()
const{
132 return unitCell->getNumStates();