9 #ifndef __eoprec_logdet_linop_h__
10 #define __eoprec_logdet_linop_h__
14 using namespace QDP::Hints;
99 template<
typename T,
typename P,
typename Q>
107 const Subset&
subset()
const {
return rb[1];}
124 moveToFastMemoryHint(tmp1);
125 moveToFastMemoryHint(
tmp2);
126 moveToFastMemoryHint(
tmp3);
138 this->evenOddLinOp(tmp1,
psi,
isign);
139 this->evenEvenInvLinOp(
tmp2, tmp1,
isign);
146 this->evenOddLinOp(tmp1,
chi, msign);
147 this->evenEvenInvLinOp(
tmp3, tmp1, msign);
156 getFermBC().zero(ds_u);
184 for(
int i=0;
i <
chi.size();
i++) {
193 for(
int i=0;
i <
chi.size();
i++) {
195 this->evenOddLinOp(tmp1,
chi[
i], msign);
196 this->evenEvenInvLinOp(
tmp3[
i], tmp1, msign);
206 getFermBC().zero(ds_u);
213 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
221 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
229 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
237 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
250 for(
int i=0;
i <
chi.size();
i++) {
265 for(
int i=0;
i <
chi.size();
i++) {
279 for(
int i=0;
i <
chi.size();
i++) {
293 for(
int i=0;
i <
chi.size();
i++) {
302 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
394 template<
typename T,
typename P,
typename Q>
402 const Subset&
subset()
const {
return rb[1];}
412 virtual void deriv(
P& ds_u,
const multi1d<T>&
chi,
const multi1d<T>&
psi,
421 multi1d<T> tmp1(size()),
tmp2(size()),
tmp3(size());
422 moveToFastMemoryHint(tmp1);
423 moveToFastMemoryHint(
tmp2);
424 moveToFastMemoryHint(
tmp3);
436 this->evenOddLinOp(tmp1,
psi,
isign);
437 this->evenEvenInvLinOp(
tmp2, tmp1,
isign);
442 this->evenOddLinOp(tmp1,
psi,
isign);
443 this->evenEvenInvLinOp(
tmp2, tmp1,
isign);
444 this->evenOddLinOp(tmp1,
chi, msign);
445 this->evenEvenInvLinOp(
tmp3, tmp1, msign);
450 this->evenOddLinOp(tmp1,
chi, msign);
451 this->evenEvenInvLinOp(
tmp3, tmp1, msign);
455 getFermBC().zero(ds_u);
462 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
470 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
478 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
486 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
493 QDPIO::cerr <<
"EvenOdd: not implemented" << std::endl;
Even-odd preconditioned linear operator including derivatives for arrays.
Even-odd preconditioned linear operator.
Even-odd preconditioned 5D linear operator.
const Subset & subset() const
Only defined on the odd lattice.
virtual ~EvenOddPrecLogDetLinearOperatorArray()
Virtual destructor to help with cleanup;.
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.
virtual int size() const =0
Get the szie expected of arrays.
virtual void derivLogDetEvenEvenLinOp(P &ds_u, enum PlusMinus isign) const
Get the force from the EvenEven Trace Log.
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.
virtual const FermBC< T, P, Q > & getFermBC() const =0
Return the fermion BC object for this linear operator.
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 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 Double logDetEvenEvenLinOp(void) const =0
Get the log det of the even even part.
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.
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 ~EvenOddPrecLogDetLinearOperator()
Virtual destructor to help with cleanup;.
virtual void derivEvenOddLinOpMP(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 void derivLogDetEvenEvenLinOp(P &ds_u, enum PlusMinus isign) const
Get the force from the EvenEven Trace Log.
virtual Double logDetEvenEvenLinOp(void) const =0
Get the log det of the even even part.
virtual void derivEvenEvenLinOpMP(P &ds_u, const multi1d< T > &chi, const multi1d< 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 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.
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 derivOddOddLinOpMP(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
virtual void derivOddEvenLinOpMP(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
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 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.
const Subset & subset() const
Only defined on the odd lattice.
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
FloatingPoint< double > Double
multi1d< LatticeColorMatrix > P