6 #include "sse_dslash.h"
8 using namespace QDP::Hints;
27 clov.create(fs, param);
29 invclov.create(fs,param,clov);
32 D.create(fs, param.anisoParam);
43 EvenOddPrecCloverLinOp::oddOddLinOp(LatticeFermion&
chi,
const LatticeFermion&
psi,
48 swatch.reset(); swatch.start();
51 clov_apply_time += swatch.getTimeInSeconds();
59 EvenOddPrecCloverLinOp::evenEvenLinOp(LatticeFermion&
chi,
const LatticeFermion&
psi,
65 swatch.reset(); swatch.start();
68 clov_apply_time += swatch.getTimeInSeconds();
75 EvenOddPrecCloverLinOp::evenEvenInvLinOp(LatticeFermion&
chi,
const LatticeFermion&
psi,
80 swatch.reset(); swatch.start();
83 clov_apply_time += swatch.getTimeInSeconds();
98 EvenOddPrecCloverLinOp::evenOddLinOp(LatticeFermion&
chi,
99 const LatticeFermion&
psi,
121 EvenOddPrecCloverLinOp::oddEvenLinOp(LatticeFermion&
chi,
122 const LatticeFermion&
psi,
143 const LatticeFermion&
psi,
148 LatticeFermion tmp1; moveToFastMemoryHint(tmp1);
149 LatticeFermion
tmp2; moveToFastMemoryHint(
tmp2);
150 Real mquarter = -0.25;
153 sse_su3dslash_prepost_receives();
162 sse_su3dslash_prepost_receives();
167 chi[rb[1]] += mquarter*tmp1;
175 EvenOddPrecCloverLinOp::derivEvenEvenLinOp(multi1d<LatticeColorMatrix>& ds_u,
176 const LatticeFermion&
chi,
const LatticeFermion&
psi,
181 swatch.reset(); swatch.start();
184 clov_deriv_time += swatch.getTimeInSeconds();
191 EvenOddPrecCloverLinOp::derivLogDetEvenEvenLinOp(multi1d<LatticeColorMatrix>& ds_u,
197 invclov.derivTrLn(ds_u,
isign, 0);
204 EvenOddPrecCloverLinOp::derivEvenOddLinOp(multi1d<LatticeColorMatrix>& ds_u,
205 const LatticeFermion&
chi,
const LatticeFermion&
psi,
212 ds_u[
mu] *= Real(-0.5);
219 EvenOddPrecCloverLinOp::derivOddEvenLinOp(multi1d<LatticeColorMatrix>& ds_u,
220 const LatticeFermion&
chi,
const LatticeFermion&
psi,
228 ds_u[
mu] *= Real(-0.5);
236 EvenOddPrecCloverLinOp::derivOddOddLinOp(multi1d<LatticeColorMatrix>& ds_u,
237 const LatticeFermion&
chi,
const LatticeFermion&
psi,
242 swatch.reset(); swatch.start();
245 clov_deriv_time += swatch.getTimeInSeconds();
252 unsigned long EvenOddPrecCloverLinOp::nFlops()
const
254 unsigned long cbsite_flops = 2*D.nFlops()+2*clov.nFlops()+4*Nc*Ns;
255 return cbsite_flops*(Layout::sitesOnNode()/2);
260 Double EvenOddPrecCloverLinOp::logDetEvenEvenLinOp(
void)
const {
261 return invclov.cholesDet(0);
Support class for fermion actions and linear operators.
Class for counted reference semantics.
Even-odd preconditioned Clover fermion linear operator.
multi1d< Hadron2PtContraction_t > operator()(const multi1d< LatticeColorMatrix > &u)
Asqtad Staggered-Dirac operator.
FloatingPoint< double > Double
Params for clover ferm acts.