CHROMA
staggered_operators_s.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 /*! \file
3  * \brief Staggered operators
4  *
5  */
6 
8 
9 namespace Chroma
10 {
11 
12  namespace StaggeredFlavorOperators
13  {
14 
15  namespace AntiSymmetricTensor4D
16  {
17 
18  bool Initialized = false ;
19  class Datum{
20  public:
21  multi1d<int> d;
22  Real sign ;
23  void init(int i,int j, int k, int l, Real s){
24  d.resize(4) ; sign=s ;
25  d[0]=i;d[1]=j;d[2]=k;d[3]=l ;
26  }
27  Datum(){d.resize(4);sign=1.0;}
28  Datum(int i,int j, int k, int l, Real s){
29  init(i,j,k,l,s);
30  }
31  ~Datum(){}
32  } ;
33 
34  Datum eps[24] ;
35 
37  eps[0].init(0,1,2,3,+1.0);
38  eps[1].init(0,3,1,2,+1.0);
39  eps[2].init(0,2,3,1,+1.0);
40  eps[3].init(0,3,2,1,-1.0);
41  eps[4].init(0,1,3,2,-1.0);
42  eps[5].init(0,2,1,3,-1.0);
43 
44  eps[6].init(1,0,2,3,-1.0);
45  eps[7].init(1,3,0,2,-1.0);
46  eps[8].init(1,2,3,0,-1.0);
47  eps[9].init(1,3,2,0,+1.0);
48  eps[10].init(1,0,3,2,+1.0);
49  eps[11].init(1,2,0,3,+1.0);
50 
51  eps[12].init(2,1,0,3,-1.0);
52  eps[13].init(2,3,1,0,-1.0);
53  eps[14].init(2,0,3,1,-1.0);
54  eps[15].init(2,3,0,1,+1.0);
55  eps[16].init(2,1,3,0,+1.0);
56  eps[17].init(2,0,1,3,+1.0);
57 
58  eps[18].init(3,1,2,0,-1.0);
59  eps[19].init(3,0,1,2,-1.0);
60  eps[20].init(3,2,0,1,-1.0);
61  eps[21].init(3,0,2,1,+1.0);
62  eps[22].init(3,1,0,2,+1.0);
63  eps[23].init(3,2,1,0,+1.0);
64  Initialized = true ;
65  }
66 
67  Real eps_sign(int k){
69  //cout<<"EPS_SIGN: "<<eps[k].sign <<std::endl ;
70 
71  return eps[k].sign ;
72  }
73  multi1d<int> eps_indx(int k){
75  //cout<<"EPS_INDX: "<<eps[k].d[0]<< eps[k].d[1]<< eps[k].d[2]<<std::endl ;
76  return eps[k].d;
77  }
78 
79  } // end namespace AntiSymmetricTensor4D
80 
81 
82  using namespace AntiSymmetricTensor4D ;
83 
84 
85  typedef LatticeStaggeredPropagator T ;
86  typedef multi1d<LatticeColorMatrix> G ;
87 
88  void StaggeredZeta(LatticeStaggeredPropagator& dest,int mu){
89  LatticeReal sign = 1.0 ;
90 
91  for(int c(mu+1);c<Nd;c++){
92  where( (QDP::Layout::latticeCoordinate(c) & 1) == 1, -1.0*sign, sign);
93  }
94  dest *= sign ;
95  }
96  //boundary conditions are not checked in both routines.
97  //as a result they do not work right on the boundary...
98 
99  void StaggeredEta(LatticeStaggeredPropagator& dest,int mu){
100  LatticeReal sign = 1.0 ;
101 
102  for(int c(0);c<mu;c++){
103  where( (QDP::Layout::latticeCoordinate(c) & 1) == 1, -1.0*sign, sign);
104  }
105 
106  dest *= sign ;
107  }
108 
109  void SymShift(T& dest,const T& src,const G& u,const int mu){
110  dest = u[mu]*shift(src,FORWARD,mu) + shift(adj(u[mu])*src,BACKWARD,mu) ;
111  }
112 
113 
114  void EtaShift(T& dest, const T& src, const G& u, const multi1d<int>& mu){
115  T tmp(src);
116  for(int c(0) ; c<mu.size();c++){
117  SymShift(dest, tmp, u, mu[c]);
118  StaggeredEta(dest,mu[c]);
119  tmp = dest ;
120  }
121  }
122 
123  void EtaShift(T& dest, const T& src, const G& u, const int mu){
124  SymShift(dest, src, u, mu);
125  StaggeredEta(dest,mu);
126  }
127 
128  void ZetaShift(T& dest, const T& src, const G& u, const multi1d<int>& mu){
129  T tmp(src);
130  for(int c(0) ; c<mu.size();c++){
131  SymShift(dest, tmp, u, mu[c]);
132  StaggeredZeta(dest,mu[c]);
133  tmp = dest ;
134  }
135  }
136 
137  void ZetaShift(T& dest, const T& src, const G& u, const int mu){
138  SymShift(dest, src, u, mu);
139  StaggeredZeta(dest,mu);
140  }
141 
142  void SpinScalar(T& dest, const T& src, const G& u ){
143  dest = src ;
144  }
145 
146  void SpinVector(T& dest, const T& src, const G& u,const int mu){
147  EtaShift(dest,src,u,mu) ;
148  }
149 
150  void SpinTensor(T& dest, const T& src, const G& u,const int mu,const int nu){
151  T tmp ;
152 
153  multi1d<int> d(2) ;
154  d[0]=mu;d[1]=nu;
155  EtaShift(dest,src,u,d);
156  d[0]=nu;d[1]=mu;
157  EtaShift(tmp,src,u,d);
158 
159  dest -= tmp ;
160  dest *= 0.5 ;
161  }
162  void SpinAxialVector (T& dest, const T& src, const G& u,const int mu){
163  T tmp ;
164  dest = zero ;
165  for(int p(0);p<24;p++)
166  if(eps_indx(p)[0]==mu){
167  EtaShift(tmp,src,u,eps_indx(p));
168  dest += eps_sign(p)/6.0*tmp ;
169  }
170  }
171 
172  void SpinPseudoScalar(T& dest, const T& src, const G& u){
173  T tmp ;
174  dest = zero ;
175  for(int p(0);p<24;p++){
176  EtaShift(tmp,src,u,eps_indx(p));
177  dest += eps_sign(p)/24.0*tmp ;
178  }
179  }
180 
181  void FlavorScalar(T& dest,const T& src,const G& u ){
182  dest = src ;
183  }
184 
185  void FlavorVector(T& dest,const T& src,const G& u,const int mu){
186  ZetaShift(dest,src,u,mu) ;
187  }
188 
189  void FlavorTensor(T& dest,const T& src,const G& u,const int mu,const int nu){
190  T tmp ;
191 
192  multi1d<int> d(2) ;
193  d[0]=mu;d[1]=nu;
194  ZetaShift(dest,src,u,d);
195  d[0]=nu;d[1]=mu;
196  ZetaShift(tmp,src,u,d);
197 
198  dest -= tmp ;
199  dest *= 0.5 ;
200  }
201 
202  void FlavorAxialVector (T& dest,const T& src,const G& u,const int mu){
203  T tmp ;
204  dest = zero ;
205  for(int p(0);p<24;p++)
206  if(eps_indx(p)[0]==mu){
207  ZetaShift(tmp,src,u,eps_indx(p));
208  dest += eps_sign(p)/6.0*tmp ;
209  }
210  }
211 
212  void FlavorPseudoScalar(T& dest,const T& src,const G& u){
213  T tmp ;
214  dest = zero ;
215  for(int p(0);p<24;p++){
216  ZetaShift(tmp,src,u,eps_indx(p));
217  dest += eps_sign(p)/24.0*tmp ;
218  }
219  }
220 
221  } // end unamed name space
222 
223 
224 } // end namespace Chroma
225 
int mu
Definition: cool.cc:24
int nu
Definition: cool.cc:25
unsigned j
Definition: ldumul_w.cc:35
Nd
Definition: meslate.cc:74
void EtaShift(T &dest, const T &src, const G &u, const multi1d< int > &mu)
void SpinScalar(T &dest, const T &src, const G &u)
void SymShift(T &dest, const T &src, const G &u, const int mu)
void ZetaShift(T &dest, const T &src, const G &u, const multi1d< int > &mu)
void FlavorPseudoScalar(T &dest, const T &src, const G &u)
void FlavorTensor(T &dest, const T &src, const G &u, const int mu, const int nu)
void SpinTensor(T &dest, const T &src, const G &u, const int mu, const int nu)
multi1d< LatticeColorMatrix > G
void StaggeredZeta(LatticeStaggeredPropagator &dest, int mu)
void SpinVector(T &dest, const T &src, const G &u, const int mu)
void StaggeredEta(LatticeStaggeredPropagator &dest, int mu)
void FlavorVector(T &dest, const T &src, const G &u, const int mu)
void SpinPseudoScalar(T &dest, const T &src, const G &u)
void FlavorAxialVector(T &dest, const T &src, const G &u, const int mu)
void FlavorScalar(T &dest, const T &src, const G &u)
void SpinAxialVector(T &dest, const T &src, const G &u, const int mu)
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
static multi1d< LatticeColorMatrix > u
LatticeFermion tmp
Definition: mespbg5p_w.cc:36
Double c
Definition: invbicg.cc:108
int i
Definition: pbg5p_w.cc:55
DComplex d
Definition: invbicg.cc:99
Double zero
Definition: invbicg.cc:106
int k
Definition: invbicg.cc:119
multi1d< LatticeFermion > s(Ncb)
int l
Definition: pade_trln_w.cc:111
#define FORWARD
Definition: primitives.h:82
#define BACKWARD
Definition: primitives.h:83
Staggered operators.