1#ifndef FERMIONSITEU0xSU2_H_
2#define FERMIONSITEU0xSU2_H_
26 FermionSite (
bool REMOVE_DOUBLE,
bool REMOVE_EMPTY,
bool REMOVE_UP,
bool REMOVE_DN,
int mfactor_input=1,
int k_input=0);
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_;}
76FermionSite (
bool REMOVE_DOUBLE,
bool REMOVE_EMPTY,
bool REMOVE_UP,
bool REMOVE_DN,
int mfactor_input,
int k_input)
78 bool REMOVE_HOLON = (REMOVE_DOUBLE or REMOVE_EMPTY)?
true:
false;
82 Eigen::Index inner_dim;
83 std::vector<std::string> ident;
90 ident.push_back(
"holon");
91 basis_1s_.push_back(Q,inner_dim,ident);
95 if (!REMOVE_UP and !REMOVE_DN)
99 ident.push_back(
"up");
100 ident.push_back(
"dn");
101 basis_1s_.push_back(Q,inner_dim,ident);
104 else if (REMOVE_UP and !REMOVE_DN)
108 ident.push_back(
"dn");
109 basis_1s_.push_back(Q,inner_dim,ident);
112 else if (!REMOVE_UP and REMOVE_DN)
116 ident.push_back(
"up");
117 basis_1s_.push_back(Q,inner_dim,ident);
132 if (!REMOVE_HOLON) Id_1s_(
"holon",
"holon") = 1.;
133 if (!REMOVE_UP) Id_1s_(
"up",
"up") = 1.;
134 if (!REMOVE_DN) Id_1s_(
"dn",
"dn") = 1.;
136 if (!REMOVE_HOLON) F_1s_(
"holon",
"holon") = 1.;
137 if (!REMOVE_UP) F_1s_(
"up",
"up") = -1.;
138 if (!REMOVE_DN) F_1s_(
"dn",
"dn") = -1.;
140 if (!REMOVE_HOLON) nh_1s_(
"holon",
"holon") = 1.;
142 if (!REMOVE_HOLON) T_1s_(
"holon",
"holon" ) = std::sqrt(0.75);
144 if (!REMOVE_HOLON and !REMOVE_DN) cupA_1s_(
"dn",
"holon" ) = sqrt(2.);
145 if (!REMOVE_HOLON and !REMOVE_UP) cupA_1s_(
"holon",
"up" ) = -1.;
147 if (!REMOVE_HOLON and !REMOVE_UP) cdnA_1s_(
"up",
"holon" ) = sqrt(2.);
148 if (!REMOVE_HOLON and !REMOVE_DN) cdnA_1s_(
"holon",
"dn" ) = 1.;
150 if (!REMOVE_HOLON and !REMOVE_DN) cupB_1s_(
"dn",
"holon" ) = -1.*sqrt(2.);
151 if (!REMOVE_HOLON and !REMOVE_UP) cupB_1s_(
"holon",
"up" ) = -1.;
153 if (!REMOVE_HOLON and !REMOVE_UP) cdnB_1s_(
"up",
"holon" ) = -1.*sqrt(2.);
154 if (!REMOVE_HOLON and !REMOVE_DN) cdnB_1s_(
"holon",
"dn" ) = 1.;
156 nup_1s_ = std::sqrt(0.5) * OperatorType::prod(cupA_1s_.
adjoint(),cupA_1s_,{1});
157 ndn_1s_ = std::sqrt(0.5) * OperatorType::prod(cdnA_1s_.
adjoint(),cdnA_1s_,{1});
166 Sz_1s_ = 0.5 * (std::sqrt(0.5) * OperatorType::prod(cupA_1s_.
adjoint(),cupA_1s_,{1}) - std::sqrt(0.5) * OperatorType::prod(cdnA_1s_.
adjoint(),cdnA_1s_,{1}));
168 Sp_1s_ = -std::sqrt(0.5) * OperatorType::prod(cupA_1s_.
adjoint(),cdnA_1s_,{1});
169 Sm_1s_ = Sp_1s_.adjoint();
171 if (!REMOVE_UP) exp_ipiSz_1s_(
"up",
"up") = +1.i;
172 if (!REMOVE_DN) exp_ipiSz_1s_(
"dn",
"dn") = -1.i;
173 if (!REMOVE_HOLON) exp_ipiSz_1s_(
"holon",
"holon") = 1.;
Qbasis< Symmetry > basis_1s() const
SiteOperatorQ< Symmetry, Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > > OperatorType
OperatorType T_1s() const
ComplexOperatorType exp_ipiSz_1s() const
Qbasis< Symmetry > basis_1s_
OperatorType c_1s(SPIN_INDEX sigma, SUB_LATTICE G) const
OperatorType F_1s() const
SiteOperatorQ< Symmetry, Eigen::Matrix< complex< Scalar >, Eigen::Dynamic, Eigen::Dynamic > > ComplexOperatorType
OperatorType Id_1s() const
OperatorType cdag_1s(SPIN_INDEX sigma, SUB_LATTICE G) const
OperatorType n_1s(SPIN_INDEX sigma) const
OperatorType nh_1s() const
ComplexOperatorType exp_ipiSz_1s_
OperatorType Sm_1s() const
OperatorType n_1s() const
OperatorType ns_1s() const
OperatorType Sz_1s() const
Sym::SU2< Sym::ChargeSU2 > Symmetry
OperatorType Sp_1s() const
OperatorType nh_1s() const
ComplexOperatorType exp_ipiSz_1s_
Qbasis< Symmetry > basis_1s_
OperatorType c_1s(SPIN_INDEX sigma) const
OperatorType Id_1s() const
SiteOperatorQ< Symmetry, MatrixType_ > adjoint() const