42 double a,
double b,
double c,
double d)
const {
52 double a,
double b,
double c,
double d)
const {
55 &static_cast<const cudaColorSpinorField&>(
x),
62 double a,
double b,
double c,
double d)
const {
66 flops += (1320ll+120ll)*
in.Volume();
72 double a,
double b,
double c,
double d)
const {
75 &static_cast<const cudaColorSpinorField&>(
x),
84 if (
in.TwistFlavor() !=
out.TwistFlavor())
85 errorQuda(
"Twist flavors %d %d don't match",
in.TwistFlavor(),
out.TwistFlavor());
88 errorQuda(
"Twist flavor not set %d\n",
in.TwistFlavor());
135 errorQuda(
"Preconditioned solution requires a preconditioned solve_type");
151 CoarseOp(Y,
X, Xinv, Yhat, T, *
gauge,
c,
kappa,
a,
mu_factor,
QUDA_TWISTED_MASS_DIRAC,
QUDA_MATPC_INVALID);
165 if (&
dirac !=
this) {
184 if (
in.TwistFlavor() !=
out.TwistFlavor())
185 errorQuda(
"Twist flavors %d %d don't match",
in.TwistFlavor(),
out.TwistFlavor());
187 errorQuda(
"Twist flavor not set %d\n",
in.TwistFlavor());
191 double b = 1.0 / (1.0 +
a*
a);
200 double c = 1.0 / (1.0 +
a*
a -
b*
b);
206 bool reset =
newTmp(&doubletTmp,
in);
225 if (
in.TwistFlavor() !=
out.TwistFlavor())
226 errorQuda(
"Twist flavors %d %d don't match",
in.TwistFlavor(),
out.TwistFlavor());
228 errorQuda(
"Twist flavor not set %d\n",
in.TwistFlavor());
232 double b = k / (1.0 +
a*
a);
241 double c = 1.0 / (1.0 +
a*
a -
b*
b);
248 bool reset =
newTmp(&doubletTmp,
in);
440 CoarseOp(Y,
X, Xinv, Yhat, T, *
gauge,
c,
kappa,
a, -
mu_factor,
QUDA_TWISTED_MASSPC_DIRAC,
matpcType);
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
virtual ~DiracTwistedMassPC()
void TwistedDslash(ColorSpinorField &out, const ColorSpinorField &in, QudaParity parity, QudaTwistDslashType twistDslashType, double a, double b, double c, double d) const
DiracTwistedMassPC(const DiracTwistedMassPC &dirac)
double mu_factor[QUDA_MAX_MG_LEVEL]
virtual void checkFullSpinor(const ColorSpinorField &, const ColorSpinorField &) const
DiracTwistedMassPC & operator=(const DiracTwistedMassPC &dirac)
cudaColorSpinorField * tmp
void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
const ColorSpinorField & Even() const
void deleteTmp(ColorSpinorField **, const bool &reset) const
DiracWilson & operator=(const DiracWilson &dirac)
DiracTwistedMass & operator=(const DiracTwistedMass &dirac)
void createCoarseOp(GaugeField &Y, GaugeField &X, GaugeField &Xinv, GaugeField &Yhat, const Transfer &T, double kappa, double mu, double mu_factor=0.) const
Create the coarse even-odd preconditioned twisted-mass operator.
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void Twist(ColorSpinorField &out, const ColorSpinorField &in) const
bool newTmp(ColorSpinorField **, const ColorSpinorField &) const
int commDim[QUDA_MAX_DIM]
VOLATILE spinorFloat kappa
void ApplyTwistGamma(ColorSpinorField &out, const ColorSpinorField &in, int d, double kappa, double mu, double epsilon, int dagger, QudaTwistGamma5Type type)
Apply the twisted-mass gamma operator to a color-spinor field.
void checkSpinorAlias(const ColorSpinorField &, const ColorSpinorField &) const
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
void TwistedDslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const ColorSpinorField &x, QudaParity parity, QudaTwistDslashType twistDslashType, double a, double b, double c, double d) const
QudaSiteSubset SiteSubset() const
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
enum QudaSolutionType_s QudaSolutionType
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
enum QudaParity_s QudaParity
void NdegTwistedDslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const ColorSpinorField &x, QudaParity parity, QudaTwistDslashType twistDslashType, double a, double b, double c, double d) const
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
enum QudaTwistDslashType_s QudaTwistDslashType
void Mdag(ColorSpinorField &out, const ColorSpinorField &in) const
cpuColorSpinorField * out
void M(ColorSpinorField &out, const ColorSpinorField &in) const
void ndegTwistedMassDslashCuda(cudaColorSpinorField *out, const cudaGaugeField &gauge, const cudaColorSpinorField *in, const int parity, const int dagger, const cudaColorSpinorField *x, const QudaTwistDslashType type, const double &kappa, const double &mu, const double &epsilon, const double &k, const int *commDim, TimeProfile &profile)
void NdegTwistedDslash(ColorSpinorField &out, const ColorSpinorField &in, QudaParity parity, QudaTwistDslashType twistDslashType, double a, double b, double c, double d) const
void twistedMassDslashCuda(cudaColorSpinorField *out, const cudaGaugeField &gauge, const cudaColorSpinorField *in, const int parity, const int dagger, const cudaColorSpinorField *x, const QudaTwistDslashType type, const double &kappa, const double &mu, const double &epsilon, const double &k, const int *commDim, TimeProfile &profile)
void createCoarseOp(GaugeField &Y, GaugeField &X, GaugeField &Xinv, GaugeField &Yhat, const Transfer &T, double kappa, double mu, double mu_factor=0.) const
Create the coarse twisted-mass operator.
void CoarseOp(GaugeField &Y, GaugeField &X, GaugeField &Xinv, GaugeField &Yhat, const Transfer &T, const cudaGaugeField &gauge, const cudaCloverField *clover, double kappa, double mu, double mu_factor, QudaDiracType dirac, QudaMatPCType matpc)
Coarse operator construction from a fine-grid operator (Wilson / Clover)
enum QudaTwistGamma5Type_s QudaTwistGamma5Type
DiracTwistedMass(const DiracTwistedMass &dirac)
void TwistInv(ColorSpinorField &out, const ColorSpinorField &in) const
virtual void checkParitySpinor(const ColorSpinorField &, const ColorSpinorField &) const
static __inline__ size_t size_t d
virtual ~DiracTwistedMass()
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void twistedApply(ColorSpinorField &out, const ColorSpinorField &in, const QudaTwistGamma5Type twistType) const