1#ifndef HUBBARDMODELSU2XU1XZN_H_COMPLEX
2#define HUBBARDMODELSU2XU1XZN_H_COMPLEX
12#include "Geometry2D.h"
22class PeierlsHubbardSU2xU1xZN :
public Mpo<Sym::S1xS2<Sym::S1xS2<Sym::SU2<Sym::SpinSU2>,Sym::U1<Sym::ChargeU1> >,Sym::ZN<Sym::Momentum,YMOMENTUM>>,complex<double>>,
23 public HubbardObservables<Sym::S1xS2<Sym::S1xS2<Sym::SU2<Sym::SpinSU2>,Sym::U1<Sym::ChargeU1> >,Sym::ZN<Sym::Momentum,YMOMENTUM>>,complex<double>>,
30 typedef Eigen::Matrix<complex<
double>,Eigen::Dynamic,Eigen::Dynamic>
MatrixType;
49 size_t Lcell =
P.size();
51 for (
size_t l=0; l<
N_sites; ++l)
N_phys +=
P.get<
size_t>(
"Ly",l%Lcell);
71 {
"t",1.+0.i}, {
"tPrime",0.i}, {
"tRung",1.+0.i}, {
"tPrimePrime",0.i},
74 {
"V",0.}, {
"Vext",0.}, {
"Vrung",0.},
75 {
"Vz",0.}, {
"Vzrung",0.}, {
"Vxy",0.}, {
"Vxyrung",0.},
76 {
"J",0.}, {
"Jperp",0.},
77 {
"X",0.}, {
"Xrung",0.},
78 {
"REMOVE_DOUBLE",
false} ,{
"REMOVE_EMPTY",
false}, {
"REMOVE_UP",
false}, {
"REMOVE_DN",
false}, {
"mfactor",1}, {
"k",0},
79 {
"maxPower",1ul}, {
"CYLINDER",
false}, {
"Ly",1ul}
84 {
"max_alpha",100.}, {
"min_alpha",1.}, {
"lim_alpha",11ul}, {
"eps_svd",1e-7},
85 {
"Mincr_abs", 50ul}, {
"Mincr_per", 2ul}, {
"Mincr_rel", 1.1},
86 {
"min_Nsv",0ul}, {
"max_Nrich",-1},
87 {
"max_halfsweeps",24ul}, {
"min_halfsweeps",1ul},
88 {
"Minit",2ul}, {
"Qinit",2ul}, {
"Mlimit",1000ul},
89 {
"tol_eigval",1e-7}, {
"tol_state",1e-6},
95:
Mpo<
Symmetry,complex<double>> (L,
qarray<
Symmetry::Nq>({1,0,0}),
"",
PROP::HERMITIAN,
PROP::NON_UNITARY, boundary, VERB),
99 ParamHandler P(params,defaults);
100 size_t Lcell = P.size();
102 for (
size_t l=0; l<N_sites; ++l)
104 N_phys += P.get<
size_t>(
"Ly",l%Lcell);
105 setLocBasis(F[l].get_basis().qloc(),l);
108 this->set_name(
"Complex Hubbard");
111 std::vector<std::vector<std::string>> labellist;
114 this->construct_from_pushlist(pushlist, labellist, Lcell);
117 this->precalc_TwoSiteData();
std::enable_if< Dummy::IS_SPIN_SU2() and!Dummy::IS_CHARGE_SU2(), Mpo< Sym::S1xS2< Sym::S1xS2< Sym::SU2< Sym::SpinSU2 >, Sym::U1< Sym::ChargeU1 > >, Sym::ZN< Sym::Momentum, YMOMENTUM > >, complex< double > > >::type P(size_t locx1, size_t locx2, size_t locy1=0, size_t locy2=0) const
DMRG::VERBOSITY::OPTION VERB
void precalc_TwoSiteData(bool FORCE=false)
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)
Sym::S1xS2< Sym::S1xS2< Sym::SU2< Sym::SpinSU2 >, Sym::U1< Sym::ChargeU1 > >, Sym::ZN< Sym::Momentum, YMOMENTUM > > Symmetry
static constexpr MODEL_FAMILY FAMILY
PeierlsHubbardSU2xU1xZN(Mpo< Symmetry, complex< double > > &Mpo_input, const vector< Param > ¶ms, const BC &BC_input=BC::OPEN)
static qarray< 3 > singlet(int N=0)
static const map< string, any > sweep_defaults
static const map< string, any > defaults
static constexpr int spinfac
Eigen::Matrix< complex< double >, Eigen::Dynamic, Eigen::Dynamic > MatrixType
PeierlsHubbardSU2xU1xZN()
#define MAKE_TYPEDEFS(MODEL)