1#ifndef STRAWBERRY_HUBBARDMODEL_Z2
2#define STRAWBERRY_HUBBARDMODEL_Z2
30 size_t Lcell =
P.size();
32 for (
size_t l=0; l<
N_sites; ++l)
N_phys +=
P.get<
size_t>(
"Ly",l%Lcell);
40 template<
typename Symmetry_>
43 const BC boundary=BC::OPEN);
50 static const std::map<string,std::any>
defaults;
55 {
"t",1.}, {
"tPrime",0.}, {
"tRung",1.},
56 {
"mu",0.}, {
"t0",0.}, {
"DeltaUP",0.}, {
"DeltaDN",0.},
58 {
"V",0.}, {
"Vrung",0.},
59 {
"Vxy",0.}, {
"Vz",0.},
61 {
"J",0.}, {
"Jperp",0.}, {
"J3site",0.},
62 {
"X",0.}, {
"Xperp",0.},
63 {
"V",0.}, {
"Vrung",0.},
64 {
"REMOVE_DOUBLE",
false}, {
"REMOVE_EMPTY",
false}, {
"REMOVE_UP",
false}, {
"REMOVE_DN",
false}, {
"mfactor",1}, {
"k",0},
65 {
"maxPower",2ul}, {
"CYLINDER",
false}, {
"Ly",1ul}
75 size_t Lcell =
P.size();
77 for (
size_t l=0; l<
N_sites; ++l)
79 N_phys +=
P.get<
size_t>(
"Ly",l%Lcell);
86 std::vector<std::vector<std::string>> labellist;
95template<
typename Symmetry_>
99 std::size_t Lcell =
P.size();
102 for(std::size_t loc=0; loc<
N_sites; ++loc)
104 std::size_t lp1 = (loc+1)%
N_sites;
105 std::size_t lp2 = (loc+2)%
N_sites;
107 std::size_t orbitals =
F[loc].orbitals();
108 std::size_t next_orbitals =
F[lp1].orbitals();
109 std::size_t nextn_orbitals =
F[lp2].orbitals();
111 param2d DeltaUPpara =
P.fill_array2d<
double>(
"DeltaUP",
"DeltaUPpara", {orbitals, next_orbitals}, loc%Lcell);
112 param2d DeltaDNpara =
P.fill_array2d<
double>(
"DeltaDN",
"DeltaDNpara", {orbitals, next_orbitals}, loc%Lcell);
114 labellist[loc].push_back(DeltaUPpara.label);
115 labellist[loc].push_back(DeltaDNpara.label);
117 if (loc <
N_sites-1 or !
static_cast<bool>(boundary))
119 for (std::size_t alfa=0; alfa<orbitals; ++alfa)
120 for (std::size_t beta=0; beta<next_orbitals; ++beta)
122 if (!
P.HAS(
"DeltaUPfull"))
124 if (DeltaUPpara(alfa,beta) != 0.)
130 if (!
P.HAS(
"DeltaDNfull"))
132 if (DeltaDNpara(alfa,beta) != 0.)
std::enable_if< Dummy::IS_SPIN_SU2(), Mpo< Sym::ZN< Sym::ChargeZ2, 2 >, double > >::type c(size_t locx, size_t locy=0, double factor=1.) const
std::enable_if< Dummy::IS_SPIN_SU2() and!Dummy::IS_CHARGE_SU2(), Mpo< Sym::ZN< Sym::ChargeZ2, 2 >, double > >::type P(size_t locx1, size_t locx2, size_t locy1=0, size_t locy2=0) const
vector< FermionBase< Sym::ZN< Sym::ChargeZ2, 2 > > > F
std::enable_if< Dummy::IS_SPIN_SU2(), Mpo< Sym::ZN< Sym::ChargeZ2, 2 >, double > >::type cdag(size_t locx, size_t locy=0, double factor=std::sqrt(2.)) const
void finalize(const bool COMPRESS=true, const std::size_t power=1, const double tolerance=::mynumeric_limits< double >::epsilon())
void setLocBasis(const std::vector< std::vector< qType > > &q)
DMRG::VERBOSITY::OPTION VERB
void set_name(const std::string &label_in)
void precalc_TwoSiteData(bool FORCE=false)
void construct_from_pushlist(const PushType< OperatorType, CouplScalar > &pushlist, const std::vector< std::vector< std::string > > &labellist, size_t Lcell)
static void set_operators(const std::vector< FermionBase< Symmetry_ > > &F, const ParamHandler &P, PushType< SiteOperator< Symmetry_, double >, double > &pushlist, std::vector< std::vector< std::string > > &labellist, const BC boundary=BC::OPEN)
static void add_operators(const std::vector< FermionBase< Symmetry_ > > &F, const ParamHandler &P, PushType< SiteOperator< Symmetry_, double >, double > &pushlist, std::vector< std::vector< std::string > > &labellist, const BC boundary=BC::OPEN)
Sym::ZN< Sym::ChargeZ2, 2 > Symmetry
static constexpr int spinfac
static qarray< 1 > singlet(int N=0)
HubbardZ2(Mpo< Symmetry > &Mpo_input, const vector< Param > ¶ms)
static const std::map< string, std::any > defaults
static constexpr MODEL_FAMILY FAMILY
#define MAKE_TYPEDEFS(MODEL)