9 #ifndef __seoprec_logdet_linop_h__
10 #define __seoprec_logdet_linop_h__
14 using namespace QDP::Hints;
131 template<
typename T,
typename P,
typename Q>
139 const Subset&
subset()
const {
return rb[1];}
192 unprecEvenEvenInvLinOp(Achi,
chi, msign);
193 unprecEvenEvenInvLinOp(Apsi,
psi,
isign);
194 derivUnprecEvenEvenLinOp(ds_u, Achi,Apsi,
isign);
196 ds_u[
mu] *= Real(-1);
198 getFermBC().zero(ds_u);
209 unprecOddOddInvLinOp(Achi,
chi, msign);
210 unprecOddOddInvLinOp(Apsi,
psi,
isign);
211 derivUnprecOddOddLinOp(ds_u, Achi,Apsi,
isign);
212 for(
int mu=0;
mu <
Nd; ++
mu) ds_u[
mu] *= Real(-1);
213 getFermBC().zero(ds_u);
223 T tmp; moveToFastMemoryHint(
tmp);
228 derivUnprecEvenEvenInvLinOp(ds_u,
chi,
tmp,
PLUS);
231 derivUnprecEvenOddLinOp(ds_tmp,
tmp,
psi,
PLUS);
244 getFermBC().zero(ds_u);
254 T tmp; moveToFastMemoryHint(
tmp);
259 derivUnprecOddOddInvLinOp(ds_u,
chi,
tmp,
PLUS);
262 derivUnprecOddEvenLinOp(ds_tmp,
tmp,
psi,
PLUS);
270 derivUnprecEvenEvenInvLinOp(ds_tmp,
tmp,
psi,
MINUS);
273 getFermBC().zero(ds_u);
Base class for all fermion action boundary conditions.
Even-odd preconditioned linear operator.
Even-odd preconditioned linear operator.
virtual const FermBC< T, P, Q > & getFermBC() const =0
Return the fermion BC object for this linear operator.
virtual void unprecEvenEvenInvLinOp(T &chi, const T &psi, enum PlusMinus isign) const override=0
Apply the inverse of the even-even block onto a source std::vector.
virtual void derivUnprecOddOddLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
const Subset & subset() const
Only defined on the odd lattice.
virtual void derivUnprecEvenOddLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const override=0
virtual void unprecEvenEvenLinOp(T &chi, const T &psi, enum PlusMinus isign) const override=0
Apply the even-even block onto a source std::vector.
virtual void unprecOddOddInvLinOp(T &chi, const T &psi, enum PlusMinus isign) const override=0
Apply the inverse of the odd-odd block onto a source std::vector.
virtual void unprecEvenOddLinOp(T &chi, const T &psi, enum PlusMinus isign) const override=0
Apply the the even-odd block onto a source std::vector.
virtual Double logDetOddOddLinOp(void) const =0
Get the log det of the odd odd part.
virtual ~SymEvenOddPrecLogDetLinearOperator()
Virtual destructor to help with cleanup;.
virtual void derivUnprecEvenEvenLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
virtual void derivUnprecEvenEvenInvLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
deriv of A^{-1} = - A^{-1} deriv(A) A^{-1}
virtual void derivEvenOddLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const override
Apply the the even-odd block onto a source std::vector.
virtual void derivUnprecOddEvenLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const override=0
virtual Double logDetEvenEvenLinOp(void) const =0
Get the log det of the even even part.
virtual void unprecOddOddLinOp(T &chi, const T &psi, enum PlusMinus isign) const override=0
Apply the the odd-odd block onto a source std::vector.
virtual void derivUnprecOddOddInvLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
deriv of A^{-1} = - A^{-1} deriv(A) A^{-1}
virtual void derivLogDetEvenEvenLinOp(P &ds_u, enum PlusMinus isign) const =0
Get the force from the EvenEven Trace Log.
virtual void derivOddEvenLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const override
Apply the the odd-even block onto a source std::vector.
virtual void derivLogDetOddOddLinOp(P &ds_u, enum PlusMinus isign) const =0
Get the force from the OddOdd Trace Log.
virtual void unprecOddEvenLinOp(T &chi, const T &psi, enum PlusMinus isign) const override=0
Apply the the odd-even block onto a source std::vector.
Asqtad Staggered-Dirac operator.
LinOpSysSolverMGProtoClover::T T
FloatingPoint< double > Double
Preconditioned 4D Linop with Gauge Independent Even-Even part.
multi1d< LatticeColorMatrix > P