VMPS++
Loading...
Searching...
No Matches
FermionSiteU1xU1.h
Go to the documentation of this file.
1#ifndef FERMIONSITEU1xU1_H_
2#define FERMIONSITEU1xU1_H_
3
4#include "DmrgTypedefs.h"
5
6#include "symmetry/S1xS2.h"
7#include "symmetry/SU2.h"
8#include "symmetry/U1.h"
9
10#include "sites/U1Helper.h"
11
13
14template <typename Symmetry> class FermionSite;
15
16// template <>
17// class FermionSite<Sym::S1xS2<Sym::U1<Sym::SpinU1>,Sym::U1<Sym::ChargeU1> > >
18// {
19// typedef double Scalar;
20// typedef Sym::S1xS2<Sym::U1<Sym::SpinU1>,Sym::U1<Sym::ChargeU1> > Symmetry;
21// typedef SiteOperatorQ<Symmetry,Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic> > OperatorType;
22// public:
23// FermionSite() {};
24// FermionSite(bool U_IS_INFINITE, bool UPH_IS_INFINITE);
25
26// OperatorType Id_1s() const {return Id_1s_;}
27// OperatorType F_1s() const {return F_1s_;}
28
29// OperatorType c_1s(SPIN_INDEX sigma) const { if (sigma == UP) {return cup_1s_;} return cdn_1s_;}
30// OperatorType cdag_1s(SPIN_INDEX sigma) const { if (sigma == UP) {return cup_1s_.adjoint();} return cdn_1s_.adjoint();}
31
32// OperatorType n_1s() const {return n_1s(UP) + n_1s(DN);}
33// OperatorType n_1s(SPIN_INDEX sigma) const { if (sigma == UP) {return nup_1s_;} return ndn_1s_;}
34// OperatorType ns_1s() const {return n_1s() - 2.*d_1s();}
35// OperatorType nh_1s() const {return 2.*d_1s() - n_1s() + Id_1s();}
36// OperatorType d_1s() const {return d_1s_;}
37
38// OperatorType Sz_1s() const {return Sz_1s_;}
39// OperatorType Sp_1s() const {return Sp_1s_;}
40// OperatorType Sm_1s() const {return Sm_1s_;}
41
42// OperatorType Tz_1s() const {return 0.5*(n_1s() - Id_1s());}
43// OperatorType cc_1s() const {return cc_1s_;}
44// OperatorType cdagcdag_1s() const {return cdagcdag_1s_;}
45
46// Qbasis<Symmetry> basis_1s() const {return basis_1s_;}
47
48// template<typename Symmetry> friend void fill_SiteOps (FermionSite<Symmetry> &Site, bool U_IS_INFINITE, bool UPH_IS_INFINITE);
49// protected:
50
51// Qbasis<Symmetry> basis_1s_;
52
53// OperatorType Id_1s_; //identity
54// OperatorType F_1s_; //Fermionic sign
55// OperatorType cup_1s_; //annihilation
56// OperatorType cdn_1s_; //annihilation
57
58// OperatorType n_1s_; //particle number
59// OperatorType nup_1s_; //particle number
60// OperatorType ndn_1s_; //particle number
61// OperatorType d_1s_; //double occupancy
62
63// OperatorType Sz_1s_; //orbital spin
64// OperatorType Sp_1s_; //orbital spin
65// OperatorType Sm_1s_; //orbital spin
66
67// OperatorType Tz_1s_; //orbital pseude spin
68// OperatorType cc_1s_; //pairing
69// OperatorType cdagcdag_1s_; //pairing adjoint
70// };
71
72// FermionSite<Sym::S1xS2<Sym::U1<Sym::SpinU1>,Sym::U1<Sym::ChargeU1> > >::
73// FermionSite(bool U_IS_INFINITE, bool UPH_IS_INFINITE)
74// {
75// //create basis for one Fermionic Site
76// typename Symmetry::qType Q={0,0}; //empty occupied state
77// Eigen::Index inner_dim = 1;
78// std::vector<std::string> ident;
79
80// if (!UPH_IS_INFINITE)
81// {
82// ident.push_back("empty");
83// this->basis_1s_.push_back(Q,inner_dim,ident);
84// ident.clear();
85// }
86
87// Q={+1,1}; //up spin state
88// inner_dim = 1;
89// ident.push_back("up");
90// this->basis_1s_.push_back(Q,inner_dim,ident);
91// ident.clear();
92
93// Q={-1,1}; //down spin state
94// inner_dim = 1;
95// ident.push_back("dn");
96// this->basis_1s_.push_back(Q,inner_dim,ident);
97// ident.clear();
98
99// if (!U_IS_INFINITE and !UPH_IS_INFINITE)
100// {
101// Q={0,2}; //doubly occupied state
102// inner_dim = 1;
103// ident.push_back("double");
104// this->basis_1s_.push_back(Q,inner_dim,ident);
105// ident.clear();
106// }
107
108// cout << "single site basis" << endl << this->basis_1s_ << endl;
109
110// ::fill_SiteOps(*this, U_IS_INFINITE, UPH_IS_INFINITE);
111// }
112
113#endif //FERMIONSITESU2xU1_H_