VMPS++
Loading...
Searching...
No Matches
PeierlsHubbardSU2xU1xZN.h
Go to the documentation of this file.
1#ifndef HUBBARDMODELSU2XU1XZN_H_COMPLEX
2#define HUBBARDMODELSU2XU1XZN_H_COMPLEX
3
4#include "symmetry/S1xS2.h"
5#include "symmetry/U1.h"
6#include "symmetry/SU2.h"
7#include "symmetry/ZN.h"
8#include "bases/FermionBase.h"
10#include "Mpo.h"
11#include "ParamReturner.h"
12#include "Geometry2D.h" // from TOOLS
14
15#ifndef YMOMENTUM
16#define YMOMENTUM 6
17#endif
18
19namespace VMPS
20{
21
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>>,
24 public ParamReturner
25{
26public:
27
30 typedef Eigen::Matrix<complex<double>,Eigen::Dynamic,Eigen::Dynamic> MatrixType;
32
33//private:
34
35 typedef Eigen::Index Index;
37
38public:
39
41
42 PeierlsHubbardSU2xU1xZN(Mpo<Symmetry,complex<double>> &Mpo_input, const vector<Param> &params, const BC &BC_input=BC::OPEN)
43 :Mpo<Symmetry,complex<double>>(Mpo_input),
46 {
47 this->boundary_condition = BC_input;
48 ParamHandler P(params,PeierlsHubbardSU2xU1xZN::defaults);
49 size_t Lcell = P.size();
50 N_phys = 0;
51 for (size_t l=0; l<N_sites; ++l) N_phys += P.get<size_t>("Ly",l%Lcell);
52 this->precalc_TwoSiteData();
53 this->HERMITIAN = true;
54 this->HAMILTONIAN = true;
55 };
56
57 PeierlsHubbardSU2xU1xZN (const size_t &L, const vector<Param> &params, const BC &boundary=BC::OPEN, const DMRG::VERBOSITY::OPTION &VERB=DMRG::VERBOSITY::OPTION::ON_EXIT);
58
59 static qarray<3> singlet (int N=0) {return qarray<3>{1,N,0};};
60 static constexpr MODEL_FAMILY FAMILY = HUBBARD;
61 static constexpr int spinfac = 1;
62
63 static const map<string,any> defaults;
64 static const map<string,any> sweep_defaults;
65};
66
67// V is standard next-nearest neighbour density interaction
68// Vz and Vxy are anisotropic isospin-isospin next-nearest neighbour interaction
69const map<string,any> PeierlsHubbardSU2xU1xZN::defaults =
70{
71 {"t",1.+0.i}, {"tPrime",0.i}, {"tRung",1.+0.i}, {"tPrimePrime",0.i},
72 {"mu",0.}, {"t0",0.},
73 {"U",0.}, {"Uph",0.},
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}
80};
81
82const map<string,any> PeierlsHubbardSU2xU1xZN::sweep_defaults =
83{
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},
90 {"savePeriod",0ul}, {"CALC_S_ON_EXIT", true}, {"CONVTEST",DMRG::CONVTEST::VAR_2SITE}
91};
92
94PeierlsHubbardSU2xU1xZN (const size_t &L, const vector<Param> &params, const BC &boundary, const DMRG::VERBOSITY::OPTION &VERB)
95:Mpo<Symmetry,complex<double>> (L, qarray<Symmetry::Nq>({1,0,0}), "", PROP::HERMITIAN, PROP::NON_UNITARY, boundary, VERB),
98{
99 ParamHandler P(params,defaults);
100 size_t Lcell = P.size();
101
102 for (size_t l=0; l<N_sites; ++l)
103 {
104 N_phys += P.get<size_t>("Ly",l%Lcell);
105 setLocBasis(F[l].get_basis().qloc(),l);
106 }
107
108 this->set_name("Complex Hubbard");
109
110 PushType<SiteOperator<Symmetry,complex<double>>,complex<double>> pushlist;
111 std::vector<std::vector<std::string>> labellist;
112 PeierlsHubbardSU2xU1::set_operators(F, P, pushlist, labellist, boundary);
113
114 this->construct_from_pushlist(pushlist, labellist, Lcell);
115 this->finalize(PROP::COMPRESS, P.get<size_t>("maxPower"));
116
117 this->precalc_TwoSiteData();
118}
119
120} // end namespace VMPS::models
121
122#endif
MODEL_FAMILY
Definition: DmrgTypedefs.h:96
@ HUBBARD
Definition: DmrgTypedefs.h:96
BC
Definition: DmrgTypedefs.h:161
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
std::size_t N_phys
Definition: MpoTerms.h:400
std::size_t N_sites
Definition: MpoTerms.h:395
DMRG::VERBOSITY::OPTION VERB
Definition: MpoTerms.h:102
BC boundary_condition
Definition: MpoTerms.h:80
Definition: Mpo.h:40
Definition: U1.h:25
Definition: ZN.h:25
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 > &params, 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
Eigen::Matrix< complex< double >, Eigen::Dynamic, Eigen::Dynamic > MatrixType
#define MAKE_TYPEDEFS(MODEL)
Definition: macros.h:4
const bool COMPRESS
Definition: DmrgTypedefs.h:499
const bool NON_UNITARY
Definition: DmrgTypedefs.h:495
const bool HERMITIAN
Definition: DmrgTypedefs.h:492
Definition: qarray.h:26