6 #ifndef __eoprec_linop_h__
7 #define __eoprec_linop_h__
12 using namespace QDP::Hints;
90 template<
typename T,
typename P,
typename Q>
98 const Subset&
subset()
const {
return rb[1];}
128 T tmp1,
tmp2; moveToFastMemoryHint(tmp1); moveToFastMemoryHint(
tmp2);
141 getFermBC().modifyF(
chi, rb[1]);
150 T tmp1,
tmp2; moveToFastMemoryHint(tmp1); moveToFastMemoryHint(
tmp2);
164 getFermBC().modifyF(
chi);
188 T tmp1,
tmp2; moveToFastMemoryHint(tmp1); moveToFastMemoryHint(
tmp2);
206 getFermBC().zero(ds_u);
310 template<
typename T,
typename P,
typename Q>
318 const Subset&
subset()
const {
return rb[1];}
321 virtual int size(
void)
const = 0;
351 multi1d<T> tmp1(size()); moveToFastMemoryHint(tmp1);
352 multi1d<T>
tmp2(size()); moveToFastMemoryHint(
tmp2);
363 for(
int n=0;
n < size(); ++
n)
364 chi[
n][rb[1]] -= tmp1[
n];
366 getFermBC().modifyF(
chi, rb[1]);
375 multi1d<T> tmp1(size()); moveToFastMemoryHint(tmp1);
376 multi1d<T>
tmp2(size()); moveToFastMemoryHint(
tmp2);
382 for(
int n=0;
n < size(); ++
n)
389 for(
int n=0;
n < size(); ++
n)
392 getFermBC().modifyF(
chi);
417 moveToFastMemoryHint(tmp1);
418 moveToFastMemoryHint(
tmp2);
437 getFermBC().zero(ds_u);
445 virtual void deriv(
P& ds_u,
const multi1d<T>&
chi,
const multi1d<T>&
psi,
467 return (this->oddOddNFlops()
468 +this->oddEvenNFlops()
469 +this->evenEvenInvNFlops()
470 +this->evenOddNFlops());
Primary include file for CHROMA library code.
Differentiable Linear Operator.
Differentiable Linear Operator.
Even-odd preconditioned linear operator including derivatives for arrays.
virtual void deriv(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the operator onto a source std::vector.
virtual unsigned long evenOddNFlops() const
Return flops performed by the evenOddLinOp.
const Subset & subset() const
Only defined on the odd lattice.
virtual void derivOddOddLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the odd-odd block onto a source std::vector.
virtual int size(void) const =0
Expected length of array index.
virtual unsigned long evenEvenInvNFlops() const
Return flops performed by the evenEvenInvLinOp.
virtual void derivUnprecLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
virtual unsigned long oddEvenNFlops() const
Return flops performed by the oddEvenLinOp.
virtual unsigned long nFlops() const
Return flops performed by the operator()
virtual void derivOddEvenLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the odd-even block onto a source std::vector.
virtual unsigned long evenEvenNFlops() const
Apply the derivative of the UNPRECONDITIONED operator onto a source std::vector.
virtual void evenOddLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the even-odd block onto a source std::vector.
virtual const FermBC< T, P, Q > & getFermBC() const =0
Return the fermion BC object for this linear operator.
virtual void oddEvenLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the odd-even block onto a source std::vector.
virtual void derivEvenOddLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the even-odd block onto a source std::vector.
virtual void unprecLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
Apply the UNPRECONDITIONED operator onto a source std::vector.
virtual void derivEvenEvenLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the even-even block onto a source std::vector.
virtual void evenEvenLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the even-even block onto a source std::vector.
virtual void oddOddLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the odd-odd block onto a source std::vector.
virtual ~EvenOddPrecLinearOperatorArray()
Virtual destructor to help with cleanup;.
virtual void evenEvenInvLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the inverse of the even-even block onto a source std::vector.
virtual unsigned long oddOddNFlops() const
Return flops performed by the oddOddLinOp.
Even-odd preconditioned linear operator.
virtual void derivOddOddLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the odd-odd block onto a source std::vector.
virtual void oddOddLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the odd-odd block onto a source std::vector.
virtual unsigned long nFlops() const
Return flops performed by the operator()
virtual unsigned long evenEvenInvNFlops() const
Return flops performed by the evenEvenInvLinOp.
virtual void unprecLinOp(T &chi, const T &psi, enum PlusMinus isign) const
Apply the UNPRECONDITIONED operator onto a source std::vector.
virtual void oddEvenLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the odd-even block onto a source std::vector.
virtual unsigned long oddEvenNFlops() const
Return flops performed by the oddEvenLinOp.
virtual void evenOddLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the even-odd block onto a source std::vector.
virtual void evenEvenLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the even-even block onto a source std::vector.
virtual unsigned long evenOddNFlops() const
Return flops performed by the evenOddLinOp.
virtual void derivOddEvenLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the odd-even block onto a source std::vector.
virtual void derivUnprecLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
virtual const FermBC< T, P, Q > & getFermBC() const =0
Return the fermion BC object for this linear operator.
virtual void derivEvenOddLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the even-odd block onto a source std::vector.
virtual void derivEvenEvenLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the even-even block onto a source std::vector.
virtual ~EvenOddPrecLinearOperator()
Virtual destructor to help with cleanup;.
const Subset & subset() const
Only defined on the odd lattice.
virtual unsigned long evenEvenNFlops() const
Return flops performed by the evenEvenLinOp.
virtual void evenEvenInvLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the inverse of the even-even block onto a source std::vector.
virtual unsigned long oddOddNFlops() const
Return flops performed by the oddOddLinOp.
virtual void deriv(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the derivative of the operator onto a source std::vector.
Base class for all fermion action boundary conditions.
multi1d< Hadron2PtContraction_t > operator()(const multi1d< LatticeColorMatrix > &u)
Asqtad Staggered-Dirac operator.
LinOpSysSolverMGProtoClover::T T
multi1d< LatticeColorMatrix > P