12 using namespace QDP::Hints;
20 const CloverFermActParams& param_)
27 clov.create(fs, param);
29 invclov.create(fs,param,clov);
32 D.create(fs, param.anisoParam);
48 swatch.reset(); swatch.start();
51 clov_apply_time += swatch.getTimeInSeconds();
65 swatch.reset(); swatch.start();
68 clov_apply_time += swatch.getTimeInSeconds();
80 swatch.reset(); swatch.start();
83 clov_apply_time += swatch.getTimeInSeconds();
99 const LatticeFermion&
psi,
122 const LatticeFermion&
psi,
143 const LatticeFermion&
psi,
148 LatticeFermion tmp1; moveToFastMemoryHint(tmp1);
149 LatticeFermion
tmp2; moveToFastMemoryHint(
tmp2);
150 Real mquarter = -0.25;
158 swatch.reset(); swatch.start();
161 clov_apply_time += swatch.getTimeInSeconds();
166 swatch.reset(); swatch.start();
169 clov_apply_time += swatch.getTimeInSeconds();
171 chi[rb[1]] += mquarter*tmp1;
174 if( param.twisted_m_usedP ){
176 tmp1[rb[1]] = (GammaConst<Ns,Ns*Ns-1>() * timesI(
psi));
179 chi[rb[1]] += param.twisted_m * tmp1;
182 chi[rb[1]] -= param.twisted_m * tmp1;
193 const LatticeFermion&
chi,
const LatticeFermion&
psi,
198 swatch.reset(); swatch.start();
201 clov_deriv_time += swatch.getTimeInSeconds();
209 const multi1d<LatticeFermion>&
chi,
const multi1d<LatticeFermion>&
psi,
214 swatch.reset(); swatch.start();
217 clov_deriv_time += swatch.getTimeInSeconds();
230 invclov.derivTrLn(ds_u,
isign, 0);
238 const LatticeFermion&
chi,
const LatticeFermion&
psi,
245 ds_u[
mu] *= Real(-0.5);
253 const LatticeFermion&
chi,
const LatticeFermion&
psi,
261 ds_u[
mu] *= Real(-0.5);
270 const LatticeFermion&
chi,
const LatticeFermion&
psi,
275 swatch.reset(); swatch.start();
278 clov_deriv_time += swatch.getTimeInSeconds();
285 const multi1d<LatticeFermion>&
chi,
const multi1d<LatticeFermion>&
psi,
290 swatch.reset(); swatch.start();
293 clov_deriv_time += swatch.getTimeInSeconds();
301 unsigned long cbsite_flops = 2*D.nFlops()+2*clov.nFlops()+4*Nc*Ns;
302 if( param.twisted_m_usedP ) {
303 cbsite_flops += 4*Nc*Ns;
305 return cbsite_flops*(Layout::sitesOnNode()/2);
311 return invclov.cholesDet(0);
void derivLogDetEvenEvenLinOp(multi1d< LatticeColorMatrix > &ds_u, enum PlusMinus isign) const
Apply the even-even block onto a source std::vector.
unsigned long nFlops() const
Return flops performed by the operator()
void oddOddLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the odd-odd block onto a source std::vector.
void derivOddOddLinOp(multi1d< LatticeColorMatrix > &ds_u, const LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the odd-odd block onto a source std::vector.
void oddEvenLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the odd-even block onto a source std::vector.
void derivOddOddLinOpMP(multi1d< LatticeColorMatrix > &ds_u, const multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
void create(Handle< FermState< T, P, Q > > fs, const CloverFermActParams ¶m_)
Creation routine.
void derivOddEvenLinOp(multi1d< LatticeColorMatrix > &ds_u, const LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the odd-even block onto a source std::vector.
void evenEvenLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the even-even block onto a source std::vector.
void evenOddLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the even-odd block onto a source std::vector.
void operator()(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply even-odd preconditioned Clover fermion linear operator.
void derivEvenOddLinOp(multi1d< LatticeColorMatrix > &ds_u, const LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the even-odd block onto a source std::vector.
Double logDetEvenEvenLinOp(void) const
Get the log det of the even even part.
void derivEvenEvenLinOpMP(multi1d< LatticeColorMatrix > &ds_u, const multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Apply the even-even block onto a source std::vector.
void derivEvenEvenLinOp(multi1d< LatticeColorMatrix > &ds_u, const LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the even-even block onto a source std::vector.
void evenEvenInvLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the inverse of the even-even block onto a source std::vector.
Even-odd preconditioned Clover fermion linear operator.
Asqtad Staggered-Dirac operator.
multi1d< LatticeFermion > chi(Ncb)
FloatingPoint< double > Double