6 #ifndef __eoprec_constdet_linop_h__
7 #define __eoprec_constdet_linop_h__
11 using namespace QDP::Hints;
89 template<
typename T,
typename P,
typename Q>
111 moveToFastMemoryHint(tmp1);
112 moveToFastMemoryHint(
tmp2);
122 this->evenOddLinOp(tmp1,
psi,
isign);
123 this->evenEvenInvLinOp(
tmp2, tmp1,
isign);
128 this->evenOddLinOp(tmp1,
chi, msign);
129 this->evenEvenInvLinOp(
tmp2, tmp1, msign);
137 ds_u[
mu] *= Real(-1);
140 getFermBC().zero(ds_u);
147 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
155 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
163 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
171 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
203 for(
int i=0;
i <
chi.size();
i++) {
217 for(
int i=0;
i <
chi.size();
i++) {
261 for(
int i=0;
i <
chi.size();
i++) {
271 for(
int i=0;
i <
chi.size();
i++) {
273 this->evenOddLinOp(tmp1,
chi[
i], msign);
274 this->evenEvenInvLinOp(
tmp2[
i], tmp1, msign);
284 ds_u[
mu] *= Real(-1);
287 getFermBC().zero(ds_u);
361 template<
typename T,
typename P,
typename Q>
369 const Subset&
subset()
const {
return rb[1];}
372 virtual int size(
void)
const = 0;
379 virtual void deriv(
P& ds_u,
const multi1d<T>&
chi,
const multi1d<T>&
psi,
388 multi1d<T> tmp1(size()),
tmp2(size()),
tmp3(size());
389 moveToFastMemoryHint(tmp1);
390 moveToFastMemoryHint(
tmp2);
406 this->evenOddLinOp(tmp1,
psi,
isign);
407 this->evenEvenInvLinOp(
tmp2, tmp1,
isign);
411 this->evenOddLinOp(tmp1,
chi, msign);
412 this->evenEvenInvLinOp(
tmp2, tmp1, msign);
420 ds_u[
mu] *= Real(-1);
423 getFermBC().zero(ds_u);
430 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
438 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
446 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
454 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
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
Apply the operator onto a source std::vector.
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
Apply the the odd-odd block onto a source std::vector.
virtual void derivEvenEvenLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
Apply the even-even block onto a source std::vector.
virtual int size(void) const =0
Expected length of array index.
virtual void derivOddEvenLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
Apply the the odd-even block onto a source std::vector.
virtual ~EvenOddPrecConstDetLinearOperatorArray()
Virtual destructor to help with cleanup;.
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 multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
Apply the the even-odd block onto a source std::vector.
Even-odd preconditioned linear operator.
virtual void derivEvenOddLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
Apply the the even-odd block onto a source std::vector.
virtual void derivEvenOddLinOpMP(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
virtual ~EvenOddPrecConstDetLinearOperator()
Virtual destructor to help with cleanup;.
virtual void derivOddEvenLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
Apply the the odd-even block onto a source std::vector.
virtual void derivOddEvenLinOpMP(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
virtual void derivEvenEvenLinOpMP(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
virtual void derivEvenEvenLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
Apply the even-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 derivOddOddLinOpMP(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
virtual void derivOddOddLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
Apply the the odd-odd block onto a source std::vector.
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 deriv(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
Apply the derivative of the operator onto a source std::vector.
Even-odd preconditioned linear operator including derivatives for arrays.
Even-odd preconditioned linear operator.
Base class for all fermion action boundary conditions.
Base class for even-odd preconditioned 4D and 5D Linop.
Asqtad Staggered-Dirac operator.
LinOpSysSolverMGProtoClover::T T
multi1d< LatticeColorMatrix > P