35template <
typename _Scalar>
69 throw std::invalid_argument(
"HubbardHamiltonian::HubbardHamiltonian(const HoppingMatrix<Scalar>&, const SquareMatrix<Scalar>&, const SquareMatrix<Scalar>&): The total Hubbard Hamiltonian matrix must be Hermitian.");
83 U_matrix {
SquareMatrix<double>::Identity(H.matrix().dimension())},
84 mu_matrix {
SquareMatrix<double>::Identity(H.matrix().dimension())} {
87 for (
size_t i = 0; i < H.
matrix().dimension(); i++) {
88 this->U_matrix(i, i) *= U;
89 this->mu_matrix(i, i) *= mu;
103 U_matrix {
SquareMatrix<double>::Identity(H.matrix().dimension())},
104 mu_matrix {
SquareMatrix<double>::Identity(H.matrix().dimension())} {
107 for (
size_t i = 0; i < U.size(); i++) {
108 this->U_matrix(i, i) *= U[i];
109 this->mu_matrix(i, i) *= mu[i];
128 template <
typename Z = Scalar>
139 for (
size_t p = 0; p < K; p++) {
140 for (
size_t q = p; q < K; q++) {
142 hopping(p, q) = hopping_plus_u(p, q);
143 hopping(q, p) = hopping_plus_u(q, p);
145 U(p, q) = hopping_plus_u(p, q);
163 template <
typename Z = Scalar>
172 for (
size_t p = 0; p < K; p++) {
173 for (
size_t q = p; q < K; q++) {
174 h.parameters()(p, q) = H(p, q);
175 h.parameters()(q, p) = H(q, p);
188 template <
typename Z = Scalar>
196 for (
size_t p = 0; p < K; p++) {
197 g_par(p, p, p, p) = H(p, p);
224 return this->hopping_matrix.
matrix() + this->mu_matrix;
Definition: HoppingMatrix.hpp:34
const SquareMatrix< Scalar > & matrix() const
Definition: HoppingMatrix.hpp:160
Definition: HubbardHamiltonian.hpp:36
const SquareMatrix< Scalar > & onSiteRepulsionMatrix() const
Definition: HubbardHamiltonian.hpp:237
enable_if_t< std::is_same< Z, double >::value, ScalarRSQTwoElectronOperator< double > > twoElectron() const
Definition: HubbardHamiltonian.hpp:189
HubbardHamiltonian(const HoppingMatrix< Scalar > &H, const SquareMatrix< Scalar > &U, const SquareMatrix< Scalar > &mu)
Definition: HubbardHamiltonian.hpp:61
const HoppingMatrix< Scalar > & hoppingMatrix() const
Definition: HubbardHamiltonian.hpp:211
size_t numberOfLatticeSites() const
Definition: HubbardHamiltonian.hpp:217
enable_if_t< std::is_same< Z, double >::value, ScalarRSQOneElectronOperator< double > > core() const
Definition: HubbardHamiltonian.hpp:164
const SquareMatrix< Scalar > & onSitePotentialMatrix() const
Definition: HubbardHamiltonian.hpp:231
HubbardHamiltonian(const HoppingMatrix< Scalar > &H, const std::vector< double > &U, const std::vector< double > &mu)
Definition: HubbardHamiltonian.hpp:101
const SquareMatrix< Scalar > oneElectronContributions() const
Definition: HubbardHamiltonian.hpp:223
_Scalar Scalar
Definition: HubbardHamiltonian.hpp:39
static enable_if_t< std::is_same< Z, double >::value, HubbardHamiltonian< double > > Random(const size_t K)
Definition: HubbardHamiltonian.hpp:129
HubbardHamiltonian(const HoppingMatrix< Scalar > &H, const double &U, const double &mu=0.0)
Definition: HubbardHamiltonian.hpp:81
Definition: RSQOneElectronOperator.hpp:42
Definition: RSQTwoElectronOperator.hpp:43
static FinalOperator Zero(const size_t dim, const Vectorizer &vectorizer)
Definition: SQOperatorStorageBase.hpp:145
Definition: SquareMatrix.hpp:39
size_t dimension() const
Definition: SquareMatrix.hpp:299
bool isHermitian(const double threshold=1.0e-08) const
Definition: SquareMatrix.hpp:311
static Self Zero(const size_t dim)
Definition: SquareMatrix.hpp:289
static Self RandomSymmetric(const size_t dim)
Definition: SquareMatrix.hpp:201
Definition: SquareRankFourTensor.hpp:36
static Self Zero(const size_t dim)
Definition: SquareRankFourTensor.hpp:147
Definition: BaseOneElectronIntegralBuffer.hpp:25
typename std::enable_if< B, T >::type enable_if_t
Definition: type_traits.hpp:37