6 #ifndef __prec_ovext_linop_array_w_h__
7 #define __prec_ovext_linop_array_w_h__
30 multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >
34 typedef LatticeFermion
T;
35 typedef multi1d<LatticeColorMatrix>
P;
36 typedef multi1d<LatticeColorMatrix>
Q;
42 const multi1d<Real>& resP_,
43 const multi1d<Real>& rootQ_,
44 const multi1d<Real>& beta_,
45 const Real& OverMass_,
49 {create(fs,Npoles_, coeffP_, resP_, rootQ_, beta_,
50 OverMass_,Mass_,b5_,c5_);}
56 const multi1d<Real>& resP_,
57 const multi1d<Real>& rootQ_,
58 const multi1d<Real>& beta_,
59 const Real& OverMass_,
75 const multi1d<LatticeFermion>&
psi,
84 const multi1d<LatticeFermion>&
psi,
92 const multi1d<LatticeFermion>&
psi,
100 const multi1d<LatticeFermion>&
psi,
109 const multi1d<LatticeFermion>&
psi,
118 const multi1d<LatticeFermion>&
psi,
127 const multi1d<LatticeFermion>&
chi,
const multi1d<LatticeFermion>&
psi,
138 const multi1d<LatticeFermion>&
chi,
const multi1d<LatticeFermion>&
psi,
147 const multi1d<LatticeFermion>&
chi,
const multi1d<LatticeFermion>&
psi,
155 const multi1d<LatticeFermion>&
chi,
const multi1d<LatticeFermion>&
psi,
174 return offDiagNFlops();
179 return offDiagNFlops();
184 return diagInvNFlops();
192 unsigned long flops=oddEvenNFlops() + evenEvenInvNFlops() + evenOddNFlops() + oddOddNFlops() + (2*Nc*Ns*
N5*(Layout::sitesOnNode()/2));
205 void applyDiag(multi1d<LatticeFermion>&
chi,
206 const multi1d<LatticeFermion>&
psi,
217 void applyDiagInv(multi1d<LatticeFermion>&
chi,
218 const multi1d<LatticeFermion>&
psi,
230 void applyOffDiag(multi1d<LatticeFermion>&
chi,
231 const multi1d<LatticeFermion>&
psi,
243 void applyDerivOffDiag(multi1d<LatticeColorMatrix>& ds_u,
244 const multi1d<LatticeFermion>&
chi,
245 const multi1d<LatticeFermion>&
psi,
251 unsigned long cbsite_flops = (10*
N5-8)*Nc*Ns;
252 return cbsite_flops*(Layout::sitesOnNode()/2);
257 unsigned long cbsite_flops =
N5*1320+(10*
N5-8)*Nc*Ns;
258 return cbsite_flops*(Layout::sitesOnNode()/2);
263 unsigned long cbsite_flops = (15*
N5-13)*Nc*Ns;
264 return cbsite_flops*(Layout::sitesOnNode()/2);
Even-odd preconditioned linear operator including derivatives for arrays.
EvenOddPreconditioned Extended-Overlap (N&N) linear operator.
void derivEvenOddLinOp(multi1d< LatticeColorMatrix > &ds_u, const multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Apply the the even-odd block onto a source std::vector.
void oddEvenLinOp(multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Apply the the odd-even block onto a source std::vector.
~EvenOddPrecOvExtLinOpArray()
Destructor is automatic.
void evenEvenInvLinOp(multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Apply the inverse of the odd-odd block onto a source std::vector.
EvenOddPrecOvExtLinOpArray(Handle< FermState< T, P, Q > > fs, const int Npoles_, const Real &coeffP_, const multi1d< Real > &resP_, const multi1d< Real > &rootQ_, const multi1d< Real > &beta_, const Real &OverMass_, const Real &Mass_, const Real &b5_, const Real &c5_)
Full constructor.
void operator=(const EvenOddPrecOvExtLinOpArray &)
Hide =.
unsigned long offDiagNFlops(void) const
Return flops performed by the off diagonal part.
void evenOddLinOp(multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Apply the the even-odd block onto a source std::vector.
unsigned long oddOddNFlops(void) const
Return flops performed by the oddOddLinOp.
void derivOddOddLinOp(multi1d< LatticeColorMatrix > &ds_u, const multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Apply the the odd-odd block onto a source std::vector.
unsigned long evenEvenNFlops(void) const
Return flops performed by the evenEvenLinOp.
void oddOddInvLinOp(multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Apply the inverse of the odd-odd block onto a source std::vector.
unsigned long evenOddNFlops(void) const
Return flops performed by the evenOddLinOp.
void derivEvenEvenLinOp(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.
unsigned long nFlops() const
Return flops performed by the operator()
EvenOddPrecOvExtLinOpArray()
Partial constructor.
unsigned long oddEvenNFlops(void) const
Return flops performed by the oddEvenLinOp.
const FermBC< T, P, Q > & getFermBC() const
Return the fermion BC object for this linear operator.
multi1d< LatticeColorMatrix > P
void oddOddLinOp(multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Apply the the odd-odd block onto a source std::vector.
unsigned long diagNFlops(void) const
Return flops performed by the diagonal part.
int size() const
Length of DW flavor index/space.
void derivOddEvenLinOp(multi1d< LatticeColorMatrix > &ds_u, const multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Apply the the odd-even block onto a source std::vector.
void evenEvenLinOp(multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Apply the even-even block onto a source std::vector.
unsigned long diagInvNFlops(void) const
Return flops performed by the diag inv part.
unsigned long evenEvenInvNFlops(void) const
Return flops performed by the evenEvenInvLinOp.
multi1d< LatticeColorMatrix > Q
Base class for all fermion action boundary conditions.
Support class for fermion actions and linear operators.
Class for counted reference semantics.
General Wilson-Dirac dslash of arrays.
Include possibly optimized Wilson dslash.
Include possibly optimized Wilson dslash.
Preconditioned 4D Linop with Gauge Independent Even-Even part.
Class for counted reference semantics.
Asqtad Staggered-Dirac operator.