VMPS++
Loading...
Searching...
No Matches
FermionSiteU1xU0.h
Go to the documentation of this file.
1#ifndef FERMIONSITEU1xU0_H_
2#define FERMIONSITEU1xU0_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::U1<Sym::SpinU1> >
16// {
17// typedef double Scalar;
18// typedef Sym::U1<Sym::SpinU1> 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::U1<Sym::SpinU1> >::
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// inner_dim = 1;
81// Q = {0};
82// basis_1s_.push_back(Q,inner_dim,ident);
83// ident.clear();
84// }
85// else if (!U_IS_INFINITE and !UPH_IS_INFINITE)
86// {
87// Q={0}; //doubly occupied state
88// inner_dim = 2;
89// ident.push_back("empty");
90// ident.push_back("double");
91// basis_1s_.push_back(Q,inner_dim,ident);
92// ident.clear();
93// }
94
95// Q={+1}; //up spin state
96// inner_dim = 1;
97// ident.push_back("up");
98// basis_1s_.push_back(Q,inner_dim,ident);
99// ident.clear();
100
101// Q={-1}; //down spin state
102// inner_dim = 1;
103// ident.push_back("dn");
104// basis_1s_.push_back(Q,inner_dim,ident);
105// ident.clear();
106
107// Id_1s_ = OperatorType({0},basis_1s_);
108// F_1s_ = OperatorType({0},basis_1s_);
109// cup_1s_ = OperatorType({-1},basis_1s_);
110// cdn_1s_ = OperatorType({+1},basis_1s_);
111// d_1s_ = OperatorType({0},basis_1s_);
112// Sz_1s_ = OperatorType({0},basis_1s_);
113// Sp_1s_ = OperatorType({+2},basis_1s_);
114// Sm_1s_ = OperatorType({-2},basis_1s_);
115
116// // create operators one orbitals
117// if (!UPH_IS_INFINITE) Id_1s_("empty", "empty") = 1.;
118
119// if (!U_IS_INFINITE and !UPH_IS_INFINITE) Id_1s_("double", "double") = 1.;
120// Id_1s_("up", "up") = 1.;
121// Id_1s_("dn", "dn") = 1.;
122
123// if (!UPH_IS_INFINITE) F_1s_("empty", "empty") = 1.;
124// if (!U_IS_INFINITE and !UPH_IS_INFINITE) F_1s_("double", "double") = 1.;
125// F_1s_("up", "up") = -1.;
126// F_1s_("dn", "dn") = -1.;
127
128// if (!UPH_IS_INFINITE) cup_1s_("empty", "up") = 1.;
129// if (!U_IS_INFINITE and !UPH_IS_INFINITE) cup_1s_("dn", "double") = 1.;
130
131// if (!UPH_IS_INFINITE) cdn_1s_("empty", "dn") = 1.;
132// if (!U_IS_INFINITE and !UPH_IS_INFINITE) cdn_1s_("up", "double") = -1.;
133
134// nup_1s_ = cup_1s_.adjoint() * cup_1s_;
135// ndn_1s_ = cdn_1s_.adjoint() * cdn_1s_;
136// if (!U_IS_INFINITE and !UPH_IS_INFINITE) d_1s_( "double", "double" ) = 1.;
137
138// Sz_1s_ = 0.5*(nup_1s_ - ndn_1s_);
139// Sp_1s_ = cup_1s_.adjoint() * cdn_1s_;
140// Sm_1s_ = Sp_1s_.adjoint();
141// cc_1s_ = cdn_1s_ * cup_1s_; //The sign convention corresponds to c_DN c_UP
142// cdagcdag_1s_ = cc_1s_.adjoint(); //The sign convention corresponds to (c_DN c_UP)†=c_UP† c_DN†
143
144// }
145
146#endif //FERMIONSITESU2xU1_H_