7 #ifndef __SHIFTED_LINOP_W_H__
8 #define __SHIFTED_LINOP_W_H__
19 using namespace QDP::Hints;
21 template<
typename T,
typename P,
typename Q,
22 template<
typename,
typename,
typename>
class LinOp>
26 template<
typename T,
typename P,
typename Q>
30 base_op(base_op_),
mu(mu_){}
32 const Subset&
subset()
const override {
return base_op.subset(); }
40 moveToFastMemoryHint(
tmp);
46 out[rb[1]] +=
mu*(Gamma(15)*timesI(
tmp));
51 out[rb[1]] -=
mu*(Gamma(15)*timesI(
tmp));
65 for(
int i=0;
i<
Nd; ++
i){
70 base_op.deriv(ds_u, Y, X,
isign);
73 Y_prime = Gamma(15)*Y;
74 base_op.derivUnprecOddOddLinOp(ds_extra, Y_prime, X,
isign);
75 for(
int i=0;
i<
Nd; ++
i)
79 for(
int i=0;
i<
Nd; ++
i)
80 ds_u[
i] += timesI(ds_extra[
i]);
82 for(
int i=0;
i<
Nd; ++
i)
83 ds_u[
i] -= timesI(ds_extra[
i]);
100 template<
typename T,
typename P,
typename Q>
105 base_op(base_op_),
mu(mu_){}
107 const Subset&
subset()
const override {
return base_op.subset(); }
115 out[rb[1]] +=
mu*(Gamma(15)*timesI(
in));
119 out[rb[1]] -=
mu*(Gamma(15)*timesI(
in));
127 base_op.deriv(ds_u, Y, X,
isign);
Differentiable Linear Operator.
Even-odd preconditioned linear operator.
Base class for all fermion action boundary conditions.
Even-odd preconditioned linear operator.
void operator()(T &out, const T &in, enum PlusMinus isign) const override
Apply the operator onto a source std::vector.
const Subset & subset() const override
Return the subset on which the operator acts.
const EvenOddPrecLinearOperator< T, P, Q > & base_op
TwistedShiftedLinOp(const EvenOddPrecLinearOperator< T, P, Q > &base_op_, const Real &mu_)
const FermBC< T, P, Q > & getFermBC() const override
Return the fermion BC object for this linear operator.
void deriv(P &ds_u, const T &Y, const T &X, enum PlusMinus isign) const override
Apply the derivative of the operator onto a source std::vector.
const SymEvenOddPrecLogDetLinearOperator< T, P, Q > & base_op
TwistedShiftedLinOp(const SymEvenOddPrecLogDetLinearOperator< T, P, Q > &base_op_, const Real &mu_)
const FermBC< T, P, Q > & getFermBC() const override
Return the fermion BC object for this linear operator.
void deriv(P &ds_u, const T &Y, const T &X, enum PlusMinus isign) const override
Apply the derivative of the operator onto a source std::vector.
void operator()(T &out, const T &in, enum PlusMinus isign) const override
Apply the operator onto a source std::vector.
const Subset & subset() const override
Return the subset on which the operator acts.
Include possibly optimized Wilson dslash.
Preconditioned 4D Linop with Gauge Independent Even-Even part.
Base class for even-odd preconditioned 4D and 5D Linop.
Preconditioned Linear Operators where the Even Even part depends on the gauge field.
multi1d< LatticeColorMatrix > P
Asqtad Staggered-Dirac operator.
LinOpSysSolverMGProtoClover::Q Q
LinOpSysSolverMGProtoClover::T T
static QDP_ColorVector * out
Constructor.
static QDP_ColorVector * in
Preconditioned 4D Linop with Gauge Independent Even-Even part.
Symmetric preconditioned linear pperators where the even-even and odd-odd parts depends on the gauge ...
Handle< LinearOperator< T > > LinOp
multi1d< LatticeColorMatrix > P