6 #ifndef __seoprec_linop_h__
7 #define __seoprec_linop_h__
12 using namespace QDP::Hints;
130 template<
typename T,
typename P,
typename Q>
138 const Subset&
subset()
const {
return rb[1];}
173 T tmp; moveToFastMemoryHint(
tmp);
191 T tmp; moveToFastMemoryHint(
tmp);
211 T tmp1; moveToFastMemoryHint(tmp1);
224 getFermBC().modifyF(
chi);
231 T tmp; moveToFastMemoryHint(
tmp);
244 getFermBC().modifyF(
chi);
252 T tmp1; moveToFastMemoryHint(tmp1);
253 QDPIO::cout <<
"M_Unprec : " << std::endl;
263 unprecEvenEvenLinOp(
chi,tmp1,
isign);
272 unprecEvenEvenLinOp(tmp1,
psi,
isign);
277 getFermBC().modifyF(
chi);
295 T M_eo_psi; moveToFastMemoryHint(M_eo_psi);
296 T M_oe_dag_chi; moveToFastMemoryHint(M_oe_dag_chi);
300 evenOddLinOp( M_eo_psi,
psi,
isign);
301 evenOddLinOp( M_oe_dag_chi,
chi, msign);
306 derivOddEvenLinOp(ds_tmp,
chi,M_eo_psi,
isign);
309 derivEvenOddLinOp(ds_tmp, M_oe_dag_chi,
psi,
isign);
312 getFermBC().zero(ds_u);
320 T M_eo_psi; moveToFastMemoryHint(M_eo_psi);
321 T M_oe_dag_chi; moveToFastMemoryHint(M_oe_dag_chi);
329 for(
int i=0;
i <
chi.size(); ++
i) {
331 evenOddLinOp( M_oe_dag_chi,
chi[
i], msign);
333 derivOddEvenLinOp(ds_tmp,
chi[
i],M_eo_psi,
isign);
335 derivEvenOddLinOp(ds_tmp, M_oe_dag_chi,
psi[
i],
isign);
338 getFermBC().zero(ds_u);
Primary include file for CHROMA library code.
Differentiable Linear Operator.
Base class for all fermion action boundary conditions.
Even-odd preconditioned linear operator.
virtual void unprecOddOddInvLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the inverse of the odd-odd block onto a source std::vector.
virtual void evenOddLinOp(T &chi, const T &psi, enum PlusMinus isign) const
Apply the EvenOdd Linop for which we have a category default)
virtual void derivOddEvenLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
Compute force coming from OddEven (A^{-1}_oo D_oe ) term.
virtual void derivMultipole(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
Apply the derivative of the operator onto a source std::vector.
virtual void unprecEvenEvenInvLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the inverse of the even-even block onto a source std::vector.
virtual void jacobiOp(T &chi, const T &psi, enum PlusMinus isign) const
Apply the Jacobi Operator.
virtual void derivEvenOddLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
Compute force coming from EvenOdd (A^{-1}_ee D_eo) term.
virtual void oddEvenLinOp(T &chi, const T &psi, enum PlusMinus isign) const
virtual void unprecOddEvenLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the odd-even 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 deriv(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
Deriv.
virtual void unprecLinOp(T &chi, const T &psi, enum PlusMinus isign) const
Apply the UNPRECONDITIONED operator onto a source std::vector.
virtual ~SymEvenOddPrecLinearOperator()
Virtual destructor to help with cleanup;.
virtual void unprecEvenOddLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the even-odd block onto a source std::vector.
virtual void unprecEvenEvenLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the even-even block onto a source std::vector.
const Subset & subset() const
Only defined on the odd lattice.
virtual void unprecOddOddLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the odd-odd block onto a source std::vector.
multi1d< Hadron2PtContraction_t > operator()(const multi1d< LatticeColorMatrix > &u)
Asqtad Staggered-Dirac operator.
LinOpSysSolverMGProtoClover::T T
multi1d< LatticeColorMatrix > P