VMPS++
Loading...
Searching...
No Matches
FermionSiteU1xSU2.h
Go to the documentation of this file.
1#ifndef FERMIONSITEU1xSU2_H_
2#define FERMIONSITEU1xSU2_H_
3
5
6#include "DmrgTypedefs.h"
7
8#include "symmetry/S1xS2.h"
9#include "symmetry/SU2.h"
10#include "symmetry/U1.h"
11
13
14template <typename Symmetry> class FermionSite;
15
16template <>
17class FermionSite<Sym::S1xS2<Sym::U1<Sym::SpinU1>, Sym::SU2<Sym::ChargeSU2> > >
18{
19 typedef double Scalar;
23
24public:
26 FermionSite (bool REMOVE_DOUBLE, bool REMOVE_EMPTY, bool REMOVE_UP, bool REMOVE_DN, int mfactor_input=1., int k_input=0);
27
28 OperatorType Id_1s() const {return Id_1s_;}
29 OperatorType F_1s() const {return F_1s_;}
30
32 {
33 if (sigma == UP and G == A) {return cupA_1s_;}
34 else if (sigma == UP and G == B) {return cupB_1s_;}
35 else if (sigma == DN and G == A) {return cdnA_1s_;}
36 return cdnB_1s_; //else: sigma==DN and G==B
37 }
38 OperatorType cdag_1s(SPIN_INDEX sigma, SUB_LATTICE G) const {return c_1s(sigma,G).adjoint();}
39
40 OperatorType n_1s() const {return n_1s(UP) + n_1s(DN);}
41 OperatorType n_1s(SPIN_INDEX sigma) const { if (sigma == UP) {return nup_1s_;} return ndn_1s_; }
42 OperatorType ns_1s() const {return Id_1s()-nh_1s();}
43 OperatorType nh_1s() const {return nh_1s_;}
44
45 OperatorType Sz_1s() const {return Sz_1s_;}
46 OperatorType Sp_1s() const {return Sp_1s_;}
47 OperatorType Sm_1s() const {return Sm_1s_;}
49
50 OperatorType T_1s() const {return T_1s_;}
51
53
54protected:
55
57
58 OperatorType Id_1s_; //identity
59 OperatorType F_1s_; //Fermionic sign
60
61 OperatorType cupA_1s_; //annihilation
62 OperatorType cdnA_1s_; //annihilation
63 OperatorType cupB_1s_; //annihilation
64 OperatorType cdnB_1s_; //annihilation
65
66 OperatorType nup_1s_; //particle number
67 OperatorType ndn_1s_; //particle number
68 OperatorType nh_1s_; //holon number
69 OperatorType Sz_1s_; //orbital spin
70 OperatorType Sp_1s_; //orbital spin
71 OperatorType Sm_1s_; //orbital spin
72 OperatorType T_1s_; //orbital isospin
74};
75
77FermionSite (bool REMOVE_DOUBLE, bool REMOVE_EMPTY, bool REMOVE_UP, bool REMOVE_DN, int mfactor_input, int k_input)
78{
79 bool REMOVE_HOLON = (REMOVE_DOUBLE or REMOVE_EMPTY)? true:false;
80
81 //create basis for one Fermionic Site
82 typename Symmetry::qType Q; //empty occupied state
83 Eigen::Index inner_dim;
84 std::vector<std::string> ident;
85 //assert(!U_IS_INFINITE and "For charge SU2, U is not allowed to be infinity. This breaks the Charge-SU2 Symmetry.");
86
87 if (!REMOVE_HOLON)
88 {
89 Q = {0,2};
90 inner_dim = 1;
91 ident.push_back("holon");
92 basis_1s_.push_back(Q,inner_dim,ident);
93 ident.clear();
94 }
95 if (!REMOVE_UP)
96 {
97 Q={+1,1}; //singly occupied state up
98 inner_dim = 1;
99 ident.push_back("up");
100 basis_1s_.push_back(Q,inner_dim,ident);
101 ident.clear();
102 }
103 if (!REMOVE_DN)
104 {
105 Q={-1,1}; //singly occupied state down
106 inner_dim = 1;
107 ident.push_back("dn");
108 basis_1s_.push_back(Q,inner_dim,ident);
109 ident.clear();
110 }
111
112 Id_1s_ = OperatorType({0,1},basis_1s_,"id");
113 F_1s_ = OperatorType({0,1},basis_1s_,"F");
114 cupA_1s_ = OperatorType({-1,2},basis_1s_,"cā†‘(A)");
115 cupB_1s_ = OperatorType({-1,2},basis_1s_,"cā†‘(B)");
116 cdnA_1s_ = OperatorType({+1,2},basis_1s_,"cā†“(A)");
117 cdnB_1s_ = OperatorType({+1,2},basis_1s_,"cā†“(B)");
118 nh_1s_ = OperatorType({0,1},basis_1s_,"nh");
119 T_1s_ = OperatorType({0,3},basis_1s_,"T");
120 exp_ipiSz_1s_ = ComplexOperatorType({0,1},basis_1s_,"exp_ipiSz");
121
122 // create operators one orbitals
123 if (!REMOVE_HOLON) Id_1s_("holon", "holon") = 1.;
124 if (!REMOVE_UP) Id_1s_("up", "up") = 1.;
125 if (!REMOVE_DN) Id_1s_("dn", "dn") = 1.;
126
127 if (!REMOVE_HOLON) F_1s_("holon", "holon") = 1.;
128 if (!REMOVE_UP) F_1s_("up", "up") = -1.;
129 if (!REMOVE_DN) F_1s_("dn", "dn") = -1.;
130
131 if (!REMOVE_HOLON) nh_1s_("holon","holon") = 1.;
132
133 if (!REMOVE_HOLON) T_1s_( "holon","holon") = std::sqrt(0.75);
134
135 if (!REMOVE_HOLON and !REMOVE_DN) cupA_1s_( "dn", "holon" ) = sqrt(2.);
136 if (!REMOVE_HOLON and !REMOVE_UP) cupA_1s_( "holon", "up" ) = -1.;
137
138 if (!REMOVE_HOLON and !REMOVE_UP) cdnA_1s_( "up", "holon" ) = sqrt(2.);
139 if (!REMOVE_HOLON and !REMOVE_DN) cdnA_1s_( "holon", "dn" ) = 1.;
140
141 if (!REMOVE_HOLON and !REMOVE_DN) cupB_1s_( "dn", "holon" ) = -1.*sqrt(2.);
142 if (!REMOVE_HOLON and !REMOVE_UP) cupB_1s_( "holon", "up" ) = -1.;
143
144 if (!REMOVE_HOLON and !REMOVE_UP) cdnB_1s_( "up", "holon" ) = -1.*sqrt(2.);
145 if (!REMOVE_HOLON and !REMOVE_DN) cdnB_1s_( "holon", "dn" ) = 1.;
146
147 nup_1s_ = std::sqrt(0.5) * OperatorType::prod(cupA_1s_.adjoint(),cupA_1s_,{0,1});
148 ndn_1s_ = std::sqrt(0.5) * OperatorType::prod(cdnA_1s_.adjoint(),cdnA_1s_,{0,1});
149
150 Sz_1s_ = 0.5 * (std::sqrt(0.5) * OperatorType::prod(cupA_1s_.adjoint(),cupA_1s_,{0,1}) - std::sqrt(0.5) * OperatorType::prod(cdnA_1s_.adjoint(),cdnA_1s_,{0,1}));
151 Sp_1s_ = -std::sqrt(0.5) * OperatorType::prod(cupA_1s_.adjoint(),cdnA_1s_,{+2,1});
152 Sm_1s_ = -std::sqrt(0.5) * OperatorType::prod(cdnA_1s_.adjoint(),cupA_1s_,{-2,1});
153 //Sm_1s_ = Sp_1s_.adjoint();
154
155 if (!REMOVE_UP) exp_ipiSz_1s_("up","up") = +1.i;
156 if (!REMOVE_DN) exp_ipiSz_1s_("dn","dn") = -1.i;
157 if (!REMOVE_HOLON) exp_ipiSz_1s_("holon","holon") = 1.;
158}
159
160#endif //FERMIONSITESU2xU1_H_
SPIN_INDEX
Definition: DmrgTypedefs.h:36
@ DN
Definition: DmrgTypedefs.h:38
@ UP
Definition: DmrgTypedefs.h:37
SUB_LATTICE
Definition: DmrgTypedefs.h:130
@ B
Definition: DmrgTypedefs.h:130
@ A
Definition: DmrgTypedefs.h:130
Sym::S1xS2< Sym::U1< Sym::SpinU1 >, Sym::SU2< Sym::ChargeSU2 > > Symmetry
SiteOperatorQ< Symmetry, Eigen::Matrix< complex< Scalar >, Eigen::Dynamic, Eigen::Dynamic > > ComplexOperatorType
SiteOperatorQ< Symmetry, Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > > OperatorType
OperatorType Sp_1s_
Definition: FermionSite.h:78
OperatorType Id_1s_
Definition: FermionSite.h:63
OperatorType F_1s_
Definition: FermionSite.h:64
OperatorType nh_1s() const
Definition: FermionSite.h:36
ComplexOperatorType exp_ipiSz_1s_
Definition: FermionSite.h:80
OperatorType Sm_1s_
Definition: FermionSite.h:79
OperatorType ndn_1s_
Definition: FermionSite.h:74
Qbasis< Symmetry > basis_1s_
Definition: FermionSite.h:61
OperatorType c_1s(SPIN_INDEX sigma) const
Definition: FermionSite.h:30
OperatorType nup_1s_
Definition: FermionSite.h:73
OperatorType Id_1s() const
Definition: FermionSite.h:27
OperatorType Sz_1s_
Definition: FermionSite.h:77
Definition: Qbasis.h:39
SiteOperatorQ< Symmetry, MatrixType_ > adjoint() const
Definition: SU2.h:36
Definition: qarray.h:26