1#ifndef HUBBARDMODELSU2_H_
2#define HUBBARDMODELSU2_H_
14#include "Geometry2D.h"
51 typedef Eigen::Matrix<
double,Eigen::Dynamic,Eigen::Dynamic>
MatrixType;
70 size_t Lcell =
P.size();
72 for (
size_t l=0; l<
N_sites; ++l)
N_phys +=
P.get<
size_t>(
"Ly",l%Lcell);
82 std::vector<std::vector<std::string>>& labellist,
const BC boundary=BC::OPEN);
96 {
"t",1.}, {
"tPrime",0.}, {
"tRung",1.}, {
"tPrimePrime",0.},
99 {
"V",0.}, {
"Vext",0.}, {
"Vrung",0.},
100 {
"Vz",0.}, {
"Vzrung",0.}, {
"Vxy",0.}, {
"Vxyrung",0.},
101 {
"J",0.}, {
"Jperp",0.},
102 {
"X",0.}, {
"Xrung",0.},
103 {
"REMOVE_DOUBLE",
false}, {
"REMOVE_EMPTY",
false}, {
"REMOVE_UP",
false}, {
"REMOVE_DN",
false}, {
"mfactor",1}, {
"k",0},
104 {
"maxPower",2ul}, {
"CYLINDER",
false}, {
"Ly",1ul}
109 {
"max_alpha",100.}, {
"min_alpha",1.}, {
"lim_alpha",11ul}, {
"eps_svd",1e-7},
110 {
"Dincr_abs", 4ul}, {
"Dincr_per", 2ul}, {
"Dincr_rel", 1.1},
111 {
"min_Nsv",0ul}, {
"max_Nrich",-1},
112 {
"max_halfsweeps",24ul}, {
"min_halfsweeps",6ul},
113 {
"Minit",1ul}, {
"Qinit",1ul}, {
"Mlimit",500ul},
114 {
"tol_eigval",1e-7}, {
"tol_state",1e-6},
124 ParamHandler P(params,defaults);
125 size_t Lcell = P.size();
127 for (
size_t l=0; l<N_sites; ++l)
129 N_phys += P.get<
size_t>(
"Ly",l%Lcell);
130 setLocBasis(F[l].get_basis().qloc(),l);
133 param1d U = P.fill_array1d<
double>(
"U",
"Uorb", F[0].orbitals(), 0);
134 if (isfinite(U.a.sum()))
136 this->set_name(
"Hubbard");
140 this->set_name(
"U=∞-Hubbard");
144 std::vector<std::vector<std::string>> labellist;
146 add_operators(F, P, pushlist, labellist, boundary);
148 this->construct_from_pushlist(pushlist, labellist, Lcell);
151 this->precalc_TwoSiteData();
157 std::size_t Lcell =
P.size();
160 for(std::size_t loc=0; loc<
N_sites; ++loc)
162 std::size_t orbitals =
F[loc].orbitals();
std::enable_if< Dummy::IS_SPIN_SU2() and!Dummy::IS_CHARGE_SU2(), Mpo< Sym::SU2< Sym::SpinSU2 >, double > >::type P(size_t locx1, size_t locx2, size_t locy1=0, size_t locy2=0) const
vector< FermionBase< Sym::SU2< Sym::SpinSU2 > > > F
DMRG::VERBOSITY::OPTION VERB
void precalc_TwoSiteData(bool FORCE=false)
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)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixType
static qarray< 1 > singlet(int N=0)
static const map< string, any > defaults
HubbardSU2(Mpo< Symmetry > &Mpo_input, const vector< Param > ¶ms)
Sym::SU2< Sym::SpinSU2 > Symmetry
static constexpr MODEL_FAMILY FAMILY
static const map< string, any > sweep_defaults
static constexpr int spinfac
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)
#define MAKE_TYPEDEFS(MODEL)
void finalize(bool PRINT_STATS=false)