VMPS++
Loading...
Searching...
No Matches
FermionSiteSU2xSU2.h
Go to the documentation of this file.
1#ifndef FERMIONSITESU2xSU2_H_
2#define FERMIONSITESU2xSU2_H_
3
5
6#include "DmrgTypedefs.h"
7
8#include "symmetry/S1xS2.h"
9#include "symmetry/SU2.h"
10
12
13template <typename Symmetry> class FermionSite;
14
15template <>
16class FermionSite<Sym::S1xS2<Sym::SU2<Sym::SpinSU2>,Sym::SU2<Sym::ChargeSU2> > >
17{
18 typedef double Scalar;
21public:
23 FermionSite (bool REMOVE_DOUBLE, bool REMOVE_EMPTY, bool REMOVE_UP, bool REMOVE_DN, int mfactor_input=1, int k_input=0);
24
25 OperatorType Id_1s() const {return Id_1s_;}
26 OperatorType F_1s() const {return F_1s_;}
27
28 OperatorType c_1s(SUB_LATTICE G) const { if(G == A) {return cA_1s_;} return cB_1s_; }
30
31 OperatorType ns_1s() const {return Id_1s()-nh_1s();}
32 OperatorType nh_1s() const {return nh_1s_;}
33
34 OperatorType S_1s() const {return S_1s_;}
35
36 OperatorType T_1s() const {return T_1s_;}
37
39protected:
41
42 OperatorType Id_1s_; //identity
43 OperatorType F_1s_; //Fermionic sign
44
45 OperatorType cA_1s_; //annihilation
46 OperatorType cB_1s_; //annihilation
47
48 OperatorType nh_1s_; //holon number
49 OperatorType S_1s_; //orbital spin
50 OperatorType T_1s_; //orbital isospin
51};
52
54FermionSite (bool REMOVE_DOUBLE, bool REMOVE_EMPTY, bool REMOVE_UP, bool REMOVE_DN, int mfactor_input, int k_input)
55{
56 bool REMOVE_SPINON = (REMOVE_UP or REMOVE_DN)? true:false;
57 bool REMOVE_HOLON = (REMOVE_DOUBLE or REMOVE_EMPTY)? true:false;
58
59 //create basis for one Fermionic Site
60 typename Symmetry::qType Q; //empty occupied state
61 Eigen::Index inner_dim;
62 std::vector<std::string> ident;
63 //assert(!U_IS_INFINITE and "For charge SU2, U is not allowed to be infinity. This breaks the Charge-SU2 Symmetry.");
64
65 if (!REMOVE_HOLON)
66 {
67 Q = {1,2};
68 inner_dim = 1;
69 ident.push_back("holon");
70 basis_1s_.push_back(Q,inner_dim,ident);
71 ident.clear();
72 }
73 if (!REMOVE_SPINON)
74 {
75 Q={2,1}; //spinon state
76 inner_dim = 1;
77 ident.push_back("spinon");
78 basis_1s_.push_back(Q,inner_dim,ident);
79 ident.clear();
80 }
81
82 Id_1s_ = OperatorType({1,1},basis_1s_,"id");
83 F_1s_ = OperatorType({1,1},basis_1s_,"F");
84 cA_1s_ = OperatorType({2,2},basis_1s_,"c(A)");
85 cB_1s_ = OperatorType({2,2},basis_1s_,"c(B)");
86 nh_1s_ = OperatorType({1,1},basis_1s_,"nh");
87 T_1s_ = OperatorType({1,3},basis_1s_,"T");
88 S_1s_ = OperatorType({3,1},basis_1s_,"S");
89
90 // create operators one orbitals
91 if (!REMOVE_HOLON) Id_1s_("holon", "holon") = 1.;
92 if (!REMOVE_SPINON) Id_1s_("spinon", "spinon") = 1.;
93
94 if (!REMOVE_HOLON) F_1s_("holon", "holon") = 1.;
95 if (!REMOVE_SPINON) F_1s_("spinon", "spinon") = -1.;
96
97 if (!REMOVE_HOLON) nh_1s_("holon","holon") = 1.;
98
99 if (!REMOVE_HOLON) T_1s_( "holon", "holon" ) = std::sqrt(0.75);
100
101 if (!REMOVE_SPINON) S_1s_( "spinon", "spinon" ) = std::sqrt(0.75);
102
103 if (!REMOVE_HOLON and !REMOVE_SPINON) cA_1s_( "spinon", "holon" ) = std::sqrt(2.);
104 if (!REMOVE_HOLON and !REMOVE_SPINON) cA_1s_( "holon", "spinon" ) = std::sqrt(2.);
105
106 if (!REMOVE_HOLON and !REMOVE_SPINON) cB_1s_( "spinon", "holon" ) = std::sqrt(2.);
107 if (!REMOVE_HOLON and !REMOVE_SPINON) cB_1s_( "holon", "spinon" ) = -1.*std::sqrt(2.);
108}
109
110#endif //FERMIONSITESU2xSU2_H_
SUB_LATTICE
Definition: DmrgTypedefs.h:130
@ A
Definition: DmrgTypedefs.h:130
SiteOperatorQ< Symmetry, Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > > OperatorType
Sym::S1xS2< Sym::SU2< Sym::SpinSU2 >, Sym::SU2< Sym::ChargeSU2 > > Symmetry
OperatorType Id_1s_
Definition: FermionSite.h:63
OperatorType F_1s_
Definition: FermionSite.h:64
OperatorType nh_1s() const
Definition: FermionSite.h:36
Qbasis< Symmetry > basis_1s_
Definition: FermionSite.h:61
OperatorType c_1s(SPIN_INDEX sigma) const
Definition: FermionSite.h:30
OperatorType Id_1s() const
Definition: FermionSite.h:27
Definition: Qbasis.h:39
SiteOperatorQ< Symmetry, MatrixType_ > adjoint() const
Definition: SU2.h:36
Definition: qarray.h:26