42 else flops += 552ll*
in.Volume();
55 if (
in.TwistFlavor() !=
out.TwistFlavor())
56 errorQuda(
"Twist flavors %d %d don't match",
in.TwistFlavor(),
out.TwistFlavor());
59 errorQuda(
"Twist flavor not set %d\n",
in.TwistFlavor());
76 *
gauge, cs, cI, &static_cast<const cudaColorSpinorField&>(
in.Even()),
80 *
gauge, cs, cI, &static_cast<const cudaColorSpinorField&>(
in.Odd()),
83 flops += (1320ll+552ll)*
in.Volume();
85 errorQuda(
"Non-deg twisted clover not implemented yet");
108 errorQuda(
"Preconditioned solution requires a preconditioned solve_type");
123 CoarseOp(Y,
X, Xinv, Yhat, T, *
gauge, &
clover,
kappa,
a,
mu_factor,
QUDA_TWISTED_CLOVER_DIRAC,
QUDA_MATPC_INVALID);
137 if (&
dirac !=
this) {
154 checkParitySpinor(
in,
out);
155 checkSpinorAlias(
in,
out);
181 errorQuda(
"Non-degenerate DiracTwistedCloverPC is not implemented \n");
191 checkParitySpinor(
in,
out);
192 checkSpinorAlias(
in,
out);
208 &static_cast<const cudaColorSpinorField&>(
x),
215 &static_cast<const cudaColorSpinorField&>(
x),
221 errorQuda(
"Non-degenerate DiracTwistedCloverPC is not implemented \n");
251 double a = 2.0 *
kappa *
in.TwistFlavor() *
mu;
255 &static_cast<const cudaColorSpinorField&>(
in),
258 flops += (1320ll+96ll)*
in.Volume();
261 errorQuda(
"Non-degenerate DiracTwistedCloverPC is not implemented \n");
321 errorQuda(
"Non-degenrate DiracTwistedCloverPC is not implemented \n");
353 errorQuda(
"Non-degenrate DiracTwistedCloverPC is not implemented \n");
360 CoarseOp(Y,
X, Xinv, Yhat, T, *
gauge, &
clover,
kappa,
a, -
mu_factor,
QUDA_TWISTED_CLOVERPC_DIRAC,
matpcType);
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void M(ColorSpinorField &out, const ColorSpinorField &in) const
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
double mu_factor[QUDA_MAX_MG_LEVEL]
virtual void checkFullSpinor(const ColorSpinorField &, const ColorSpinorField &) const
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-clover operator.
cudaColorSpinorField * tmp
void twistedCloverDslashCuda(cudaColorSpinorField *out, const cudaGaugeField &gauge, const FullClover *clover, const FullClover *cloverInv, const cudaColorSpinorField *in, const int parity, const int dagger, const cudaColorSpinorField *x, const QudaTwistCloverDslashType type, const double &kappa, const double &mu, const double &epsilon, const double &k, const int *commDim, TimeProfile &profile)
const ColorSpinorField & Even() const
void deleteTmp(ColorSpinorField **, const bool &reset) const
DiracWilson & operator=(const DiracWilson &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-clover operator. Unlike the Wilson operator...
DiracTwistedCloverPC(const DiracTwistedCloverPC &dirac)
void checkParitySpinor(const ColorSpinorField &, const ColorSpinorField &) const
bool newTmp(ColorSpinorField **, const ColorSpinorField &) const
void TwistCloverInv(ColorSpinorField &out, const ColorSpinorField &in, const int parity) const
int commDim[QUDA_MAX_DIM]
const ColorSpinorField & Vectors(QudaFieldLocation location=QUDA_CPU_FIELD_LOCATION) const
VOLATILE spinorFloat kappa
DiracTwistedCloverPC & operator=(const DiracTwistedCloverPC &dirac)
QudaSiteSubset SiteSubset() const
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
DiracTwistedClover & operator=(const DiracTwistedClover &dirac)
enum QudaSolutionType_s QudaSolutionType
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
virtual ~DiracTwistedCloverPC()
DiracTwistedClover(const DiracTwistedClover &dirac)
enum QudaParity_s QudaParity
void TwistClover(ColorSpinorField &out, const ColorSpinorField &in, const int parity) const
virtual ~DiracTwistedClover()
void Mdag(ColorSpinorField &out, const ColorSpinorField &in) const
void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
cpuColorSpinorField * out
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
QudaTwistFlavorType TwistFlavor() const
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
virtual void checkParitySpinor(const ColorSpinorField &, const ColorSpinorField &) const
void twistedCloverApply(ColorSpinorField &out, const ColorSpinorField &in, const QudaTwistGamma5Type twistType, const int parity) const
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
void ApplyTwistClover(ColorSpinorField &out, const ColorSpinorField &in, const CloverField &clover, double kappa, double mu, double epsilon, int parity, int dagger, QudaTwistGamma5Type twist)
Apply twisted clover-matrix field to a color-spinor field.
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const