43 std::string method_description =
"local-orbital")
45 , method_description_(std::move(method_description))
56 std::vector<Real> eigenvalues(
static_cast<std::size_t
>(dimension), 0.0);
58 std::vector<Complex> eigenvectors(
static_cast<std::size_t
>(dimension) * dimension,
61 const int status = diagonalizer_->solve(dimension,
62 hamiltonian_at_kpoint.data(),
63 overlap_at_kpoint.data(),
67 throw std::runtime_error(
68 "LocalOrbitalQuantumStateInterpolator::eigenvalues_at: the eigensolver failed with "
70 std::to_string(status) +
71 "; a positive status above the basis size means the overlap S(k) is not positive "
72 "definite, i.e. the model's orbitals are linearly dependent at this k-point");
78 return method_description_ +
": " + std::to_string(hamiltonian_.
number_of_orbitals()) +
79 " orbitals on " + std::to_string(hamiltonian_.
lattice_vectors().size()) +
89 [[nodiscard]] std::map<std::string, Real>
diagnostics()
const override {
90 Real total_weight = 0.0;
92 total_weight += vector.bloch_sum_weight;
108 LocalOrbitalHamiltonian hamiltonian_;
109 std::string method_description_;
110 std::unique_ptr<SubspaceDiagonalizer> diagonalizer_;
int number_of_orbitals() const
std::vector< Complex > overlap_at_kpoint(const Vector3D &kpoint) const
S(k) by the same Bloch sum, or the identity when the basis is orthonormal.
const std::vector< LocalOrbitalLatticeVector > & lattice_vectors() const
std::vector< Complex > hamiltonian_at_kpoint(const Vector3D &kpoint) const
static constexpr const char * TOTAL_BLOCH_SUM_WEIGHT
The name that diagnostic goes by, which a results file gives a key of its own.
std::string description() const override
One line for logs: the method and the size of the model.
LocalOrbitalQuantumStateInterpolator(LocalOrbitalHamiltonian hamiltonian, std::string method_description="local-orbital")
int number_of_bands() const override
Number of eigenvalues returned per k-point.
const LocalOrbitalHamiltonian & hamiltonian() const
The model itself, for diagnostics (decay of H(R), the R set) and tests.
std::vector< Real > eigenvalues_at(const Vector3D &kpoint) const override
Ascending eigenvalues in Rydberg at one k-point in crystal coordinates.
std::map< std::string, Real > diagnostics() const override
std::complex< double > Complex
One lattice vector of the Hamiltonian's real-space domain.