1#ifndef HUBBARDMODELU1_H_COMPLEX
2#define HUBBARDMODELU1_H_COMPLEX
16 typedef Eigen::Matrix<complex<
double>,Eigen::Dynamic,Eigen::Dynamic>
MatrixType;
34 size_t Lcell =
P.size();
36 for (
size_t l=0; l<
N_sites; ++l)
N_phys +=
P.get<
size_t>(
"Ly",l%Lcell);
37 this->
calc(P.get<
size_t>(
"maxPower"));
45 template<
typename Symmetry_>
47 PushType<
SiteOperator<Symmetry_,complex<double>>,complex<double>> &pushlist, std::vector<std::vector<std::string>>& labellist,
48 const BC boundary=BC::OPEN);
62 {
"t",1.+0.i}, {
"tPrime",0.+0.i}, {
"tRung",1.+0.i},
65 {
"V",0.}, {
"Vrung",0.},
66 {
"Vxy",0.}, {
"Vz",0.},
67 {
"Bz",0.}, {
"Bx",0.}, {
"By",0.},
68 {
"J",0.}, {
"Jperp",0.}, {
"J3site",0.},
69 {
"X",0.}, {
"Xperp",0.},
70 {
"REMOVE_DOUBLE",
false}, {
"REMOVE_EMPTY",
false}, {
"REMOVE_UP",
false}, {
"REMOVE_DN",
false}, {
"mfactor",1}, {
"k",1},
71 {
"maxPower",2ul}, {
"CYLINDER",
false}, {
"Ly",1ul}
76 {
"max_alpha",100.}, {
"min_alpha",1.}, {
"lim_alpha",11ul}, {
"eps_svd",1e-7},
77 {
"Mincr_abs", 50ul}, {
"Mincr_per", 2ul}, {
"Mincr_rel", 1.1},
78 {
"min_Nsv",0ul}, {
"max_Nrich",-1},
79 {
"max_halfsweeps",24ul}, {
"min_halfsweeps",1ul},
80 {
"Minit",2ul}, {
"Qinit",2ul}, {
"Mlimit",1000ul},
81 {
"tol_eigval",1e-7}, {
"tol_state",1e-6},
92 size_t Lcell =
P.size();
94 for (
size_t l=0; l<
N_sites; ++l)
96 N_phys +=
P.get<
size_t>(
"Ly",l%Lcell);
103 std::vector<std::vector<std::string>> labellist;
113template<
typename Symmetry_>
117 std::size_t Lcell =
P.size();
120 for(std::size_t loc=0; loc<
N_sites; ++loc)
122 std::size_t lp1 = (loc+1)%
N_sites;
123 std::size_t lp2 = (loc+2)%
N_sites;
125 std::size_t orbitals =
F[loc].orbitals();
126 std::size_t next_orbitals =
F[lp1].orbitals();
127 std::size_t nextn_orbitals =
F[lp2].orbitals();
129 param1d Bx =
P.fill_array1d<
double>(
"Bx",
"Bxorb", orbitals, loc%Lcell);
130 labellist[loc].push_back(Bx.label);
131 auto H_Bx =
F[loc].template coupling_Bx<complex<double>,
Symmetry>(Bx.a);
133 param1d By =
P.fill_array1d<
double>(
"By",
"Byorb", orbitals, loc%Lcell);
134 labellist[loc].push_back(By.label);
135 auto H_By =
F[loc].coupling_By(By.a);
138 pushlist.push_back(std::make_tuple(loc, Hloc, 1.+0.i));
std::enable_if< Dummy::IS_SPIN_SU2() and!Dummy::IS_CHARGE_SU2(), Mpo< Sym::U1< Sym::ChargeU1 >, complex< double > > >::type P(size_t locx1, size_t locx2, size_t locy1=0, size_t locy2=0) const
vector< FermionBase< Sym::U1< Sym::ChargeU1 > > > F
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 calc(const std::size_t power)
void set_name(const std::string &label_in)
static std::vector< T > get_N_site_interaction(T const &Op0, Operator const &... Ops)
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 constexpr MODEL_FAMILY FAMILY
PeierlsHubbardU1(Mpo< Symmetry, complex< double > > &Mpo_input, const vector< Param > ¶ms)
static const map< string, any > sweep_defaults
static const map< string, any > defaults
static constexpr int spinfac
static qarray< 1 > singlet(int N=0)
Sym::U1< Sym::ChargeU1 > Symmetry
Eigen::Matrix< complex< double >, Eigen::Dynamic, Eigen::Dynamic > MatrixType
static void add_operators(const std::vector< FermionBase< Symmetry_ > > &F, const ParamHandler &P, PushType< SiteOperator< Symmetry_, complex< double > >, complex< double > > &pushlist, std::vector< std::vector< std::string > > &labellist, const BC boundary=BC::OPEN)
static void set_operators(const std::vector< FermionBase< Symmetry_ > > &F, const ParamHandler &P, PushType< SiteOperator< Symmetry_, complex< double > >, complex< double > > &pushlist, std::vector< std::vector< std::string > > &labellist, const BC boundary=BC::OPEN)
#define MAKE_TYPEDEFS(MODEL)