9 using namespace QDP::Hints;
28 clov.create(fs, param);
30 invclov.create(fs,param,clov);
33 D.create(fs, param.anisoParam);
35 if ( param.twisted_m_usedP )
37 QDPIO::cerr <<
"EvenOddPrecCloverOrbifoldLinOp:: no twisted-mass allowed\n";
42 if (QDP::Layout::subgridLattSize()[0] != QDP::Layout::lattSize()[0])
44 QDPIO::cerr <<
"Requires x-dir on-node\n";
48 if (QDP::Layout::subgridLattSize()[1] != QDP::Layout::lattSize()[1])
50 QDPIO::cerr <<
"Requires y-dir on-node\n";
54 if (QDP::Layout::subgridLattSize()[2] != QDP::Layout::lattSize()[2])
56 QDPIO::cerr <<
"Requires z-dir on-node\n";
66 EvenOddPrecCloverOrbifoldLinOp::oddOddLinOp(LatticeFermion&
chi,
const LatticeFermion&
psi,
79 EvenOddPrecCloverOrbifoldLinOp::evenEvenLinOp(LatticeFermion&
chi,
const LatticeFermion&
psi,
92 EvenOddPrecCloverOrbifoldLinOp::evenEvenInvLinOp(LatticeFermion&
chi,
const LatticeFermion&
psi,
112 EvenOddPrecCloverOrbifoldLinOp::evenOddLinOp(LatticeFermion&
chi,
113 const LatticeFermion&
psi,
135 EvenOddPrecCloverOrbifoldLinOp::oddEvenLinOp(LatticeFermion&
chi,
136 const LatticeFermion&
psi,
150 void EvenOddPrecCloverOrbifoldLinOp::orbifold(LatticeFermion&
chi,
151 const LatticeFermion&
psi,
159 for(
int tt=0; tt < QDP::Layout::subgridLattSize()[3]; ++tt)
161 int t = tt + QDP::Layout::nodeCoord()[3]*QDP::Layout::subgridLattSize()[3];
163 for(
int xx=0; xx < QDP::Layout::lattSize()[0] >> 1; ++xx)
165 for(
int y=0;
y < QDP::Layout::lattSize()[1]; ++
y)
167 multi1d<int>
coord(4);
168 int x = 2*xx + ((
cb+
y+
z+
t) & 1);
175 int site = QDP::Layout::linearSiteIndex(
coord);
177 coord[0] = QDP::Layout::lattSize()[0] - 1 -
x;
178 coord[1] = QDP::Layout::lattSize()[1] - 1 -
y;
179 int site_n = QDP::Layout::linearSiteIndex(
coord);
183 tmp.elem(site) = g4 *
psi.elem(site_n);
184 chi.elem(site) +=
tmp.elem(site) + g3 *
tmp.elem(site);
188 tmp.elem(site) = g4 *
psi.elem(site_n);
189 chi.elem(site) +=
tmp.elem(site) - g3 *
tmp.elem(site);
199 const LatticeFermion&
psi,
204 LatticeFermion tmp1; moveToFastMemoryHint(tmp1);
205 LatticeFermion
tmp2; moveToFastMemoryHint(
tmp2);
206 Real mquarter = -0.25;
215 orbifold(tmp1,
psi,
isign, QDP::Layout::lattSize()[2]-1, 0);
225 orbifold(tmp1,
tmp2,
isign, QDP::Layout::lattSize()[2]-1, 1);
230 chi[rb[1]] += mquarter*tmp1;
238 unsigned long EvenOddPrecCloverOrbifoldLinOp::nFlops()
const
240 unsigned long cbsite_flops = 2*D.nFlops()+2*clov.nFlops()+4*Nc*Ns;
241 return cbsite_flops*(Layout::sitesOnNode()/2);
246 Double EvenOddPrecCloverOrbifoldLinOp::logDetEvenEvenLinOp(
void)
const
248 QDPIO::cerr <<
"EvenOddPrecCloverOrbifoldLinOp::" << __func__ <<
" not suppported\n";
Support class for fermion actions and linear operators.
Class for counted reference semantics.
Even-odd preconditioned Clover fermion linear operator with orbifold.
multi1d< Hadron2PtContraction_t > operator()(const multi1d< LatticeColorMatrix > &u)
Asqtad Staggered-Dirac operator.
FloatingPoint< double > Double
Params for clover ferm acts.