VMPS++
Loading...
Searching...
No Matches
FermionSiteU0.h
Go to the documentation of this file.
1#ifndef FERMIONSITEU0_H_
2#define FERMIONSITEU0_H_
3
4#include "DmrgTypedefs.h"
5
6#include "symmetry/S1xS2.h"
7#include "symmetry/SU2.h"
8#include "symmetry/U1.h"
9
11
12template <typename Symmetry> class FermionSite;
13
14// template <>
15// class FermionSite<Sym::U0>
16// {
17// typedef double Scalar;
18// typedef Sym::U0 Symmetry;
19// typedef SiteOperatorQ<Symmetry,Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic> > OperatorType;
20// public:
21// FermionSite() {};
22// FermionSite(bool U_IS_INFINITE, bool UPH_IS_INFINITE);
23
24// OperatorType Id_1s() const {return Id_1s_;}
25// OperatorType F_1s() const {return F_1s_;}
26
27// OperatorType c_1s(SPIN_INDEX sigma) const { if (sigma == UP) {return cup_1s_;} return cdn_1s_;}
28// OperatorType cdag_1s(SPIN_INDEX sigma) const { if (sigma == UP) {return cup_1s_.adjoint();} return cdn_1s_.adjoint();}
29
30// OperatorType n_1s() const {return n_1s(UP) + n_1s(DN);}
31// OperatorType n_1s(SPIN_INDEX sigma) const { if (sigma == UP) {return nup_1s_;} return ndn_1s_;}
32// OperatorType ns_1s() const {return n_1s() - 2.*d_1s();}
33// OperatorType nh_1s() const {return 2.*d_1s() - n_1s() + Id_1s();}
34// OperatorType d_1s() const {return d_1s_;}
35
36// OperatorType Sz_1s() const {return Sz_1s_;}
37// OperatorType Sp_1s() const {return Sp_1s_;}
38// OperatorType Sm_1s() const {return Sm_1s_;}
39
40// OperatorType Tz_1s() const {return 0.5*(n_1s() - Id_1s());}
41// OperatorType cc_1s() const {return cc_1s_;}
42// OperatorType cdagcdag_1s() const {return cdagcdag_1s_;}
43
44// Qbasis<Symmetry> basis_1s() const {return basis_1s_;}
45// protected:
46
47// Qbasis<Symmetry> basis_1s_;
48
49// OperatorType Id_1s_; //identity
50// OperatorType F_1s_; //Fermionic sign
51// OperatorType cup_1s_; //annihilation
52// OperatorType cdn_1s_; //annihilation
53
54// OperatorType n_1s_; //particle number
55// OperatorType nup_1s_; //particle number
56// OperatorType ndn_1s_; //particle number
57// OperatorType d_1s_; //double occupancy
58
59// OperatorType Sz_1s_; //orbital spin
60// OperatorType Sp_1s_; //orbital spin
61// OperatorType Sm_1s_; //orbital spin
62
63// OperatorType Tz_1s_; //orbital pseude spin
64// OperatorType cc_1s_; //pairing
65// OperatorType cdagcdag_1s_; //pairing adjoint
66// };
67
68// FermionSite<Sym::U0>::
69// FermionSite(bool U_IS_INFINITE, bool UPH_IS_INFINITE)
70// {
71
72// //create basis for one Fermionic Site
73// typename Symmetry::qType Q = {}; //empty and doubly occupied state
74// Eigen::Index inner_dim;
75// std::vector<std::string> ident;
76
77// if (!UPH_IS_INFINITE and U_IS_INFINITE)
78// {
79// ident.push_back("empty");
80// ident.push_back("up");
81// ident.push_back("dn");
82// inner_dim = 3;
83// basis_1s_.push_back(Q,inner_dim,ident);
84// ident.clear();
85// }
86// else if (!U_IS_INFINITE and !UPH_IS_INFINITE)
87// {
88// ident.push_back("empty");
89// ident.push_back("up");
90// ident.push_back("dn");
91// ident.push_back("double");
92// inner_dim = 4;
93// basis_1s_.push_back(Q,inner_dim,ident);
94// ident.clear();
95// }
96// else
97// {
98// ident.push_back("up");
99// ident.push_back("dn");
100// inner_dim = 2;
101// basis_1s_.push_back(Q,inner_dim,ident);
102// ident.clear();
103// }
104
105// Id_1s_ = OperatorType({},basis_1s_);
106// F_1s_ = OperatorType({},basis_1s_);
107// cup_1s_ = OperatorType({},basis_1s_);
108// cdn_1s_ = OperatorType({},basis_1s_);
109// d_1s_ = OperatorType({},basis_1s_);
110// Sz_1s_ = OperatorType({},basis_1s_);
111// Sp_1s_ = OperatorType({},basis_1s_);
112// Sm_1s_ = OperatorType({},basis_1s_);
113
114// // create operators one orbitals
115// if (!UPH_IS_INFINITE) Id_1s_("empty", "empty") = 1.;
116
117// if (!U_IS_INFINITE and !UPH_IS_INFINITE) Id_1s_("double", "double") = 1.;
118// Id_1s_("up", "up") = 1.;
119// Id_1s_("dn", "dn") = 1.;
120
121// if (!UPH_IS_INFINITE) F_1s_("empty", "empty") = 1.;
122// if (!U_IS_INFINITE and !UPH_IS_INFINITE) F_1s_("double", "double") = 1.;
123// F_1s_("up", "up") = -1.;
124// F_1s_("dn", "dn") = -1.;
125
126// if (!UPH_IS_INFINITE) cup_1s_("empty", "up") = 1.;
127// if (!U_IS_INFINITE and !UPH_IS_INFINITE) cup_1s_("dn", "double") = 1.;
128
129// if (!UPH_IS_INFINITE) cdn_1s_("empty", "dn") = 1.;
130// if (!U_IS_INFINITE and !UPH_IS_INFINITE) cdn_1s_("up", "double") = -1.;
131
132// nup_1s_ = cup_1s_.adjoint() * cup_1s_;
133// ndn_1s_ = cdn_1s_.adjoint() * cdn_1s_;
134// if (!U_IS_INFINITE and !UPH_IS_INFINITE) d_1s_( "double", "double" ) = 1.;
135
136// Sz_1s_ = 0.5*(nup_1s_ - ndn_1s_);
137// Sp_1s_ = cup_1s_.adjoint() * cdn_1s_;
138// Sm_1s_ = Sp_1s_.adjoint();
139// cc_1s_ = cdn_1s_ * cup_1s_; //The sign convention corresponds to c_DN c_UP
140// cdagcdag_1s_ = cc_1s_.adjoint(); //The sign convention corresponds to (c_DN c_UP)†=c_UP† c_DN†
141
142// }
143
144#endif //FERMIONSITEU0_H_