76 ApplyTwistedClover(out, in, *
gauge, *
clover, k, 2 *
mu *
kappa, x,
parity,
dagger,
commDim,
profile);
80 errorQuda(
"Non-degenerate operator is not implemented");
94 ApplyTwistedClover(out, in, *
gauge, *
clover, -
kappa, 2.0 *
kappa *
mu, in,
QUDA_INVALID_PARITY,
dagger,
commDim,
114 errorQuda(
"Preconditioned solution requires a preconditioned solve_type");
136 errorQuda(
"Wilson-type operators only support aggregation coarsening");
139 CoarseOp(Y, X, T, *
gauge,
clover,
kappa,
mass, a,
mu_factor,
QUDA_TWISTED_CLOVER_DIRAC,
QUDA_MATPC_INVALID);
161 if (&
dirac !=
this) {
186 if (
dagger && symmetric && !reverse) {
192 ApplyTwistedCloverPreconditioned(out, in, *
gauge, *
clover, 1.0, -2.0 *
kappa *
mu,
false, in,
parity,
dagger,
210 if (
dagger && symmetric && !reverse) {
216 ApplyTwistedCloverPreconditioned(out, in, *
gauge, *
clover, k, -2.0 *
kappa *
mu,
true, x,
parity,
dagger,
commDim,
246 errorQuda(
"Non-degenerate operator is not implemented");
276 src = odd_bit ? &(x.
Even()) : &(x.
Odd());
277 sol = odd_bit ? &(x.
Odd()) : &(x.
Even());
301 errorQuda(
"Non-degenerate operator is not implemented");
333 errorQuda(
"Non-degenerate operator is not implemented");
343 errorQuda(
"Wilson-type operators only support aggregation coarsening");
346 CoarseOp(Y, X, T, *
gauge,
clover,
kappa,
mass, a, -
mu_factor,
QUDA_TWISTED_CLOVERPC_DIRAC,
matpcType);
const ColorSpinorField & Odd() const
QudaTwistFlavorType TwistFlavor() const
const ColorSpinorField & Even() const
bool newTmp(ColorSpinorField **, const ColorSpinorField &) const
virtual void prefetch(QudaFieldLocation mem_space, qudaStream_t stream=0) const
If managed memory and prefetch is enabled, prefetch the gauge field and temporary spinors to the CPU ...
void deleteTmp(ColorSpinorField **, const bool &reset) const
virtual void checkParitySpinor(const ColorSpinorField &, const ColorSpinorField &) const
Check parity spinors are usable (check geometry ?)
void checkSpinorAlias(const ColorSpinorField &, const ColorSpinorField &) const
check spinors do not alias
virtual void checkFullSpinor(const ColorSpinorField &, const ColorSpinorField &) const
check full spinors are compatible (check geometry ?)
int commDim[QUDA_MAX_DIM]
void Mdag(ColorSpinorField &out, const ColorSpinorField &in) const
Apply Mdag (daggered operator of M.
void TwistClover(ColorSpinorField &out, const ColorSpinorField &in, const int parity) const
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
DiracTwistedClover(const DiracTwistedClover &dirac)
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
apply 'dslash' operator for the DiracOp. This may be e.g. AD
void checkParitySpinor(const ColorSpinorField &, const ColorSpinorField &) const
Check parity spinors are usable (check geometry ?)
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass, double mu, double mu_factor=0.) const
Create the coarse twisted-clover operator.
virtual void prefetch(QudaFieldLocation mem_space, qudaStream_t stream=0) const
If managed memory and prefetch is enabled, prefetch all relevant memory fields (gauge,...
virtual ~DiracTwistedClover()
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
DiracTwistedClover & operator=(const DiracTwistedClover &dirac)
void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass, double mu, double mu_factor=0.) const
Create the coarse even-odd preconditioned twisted-clover operator. Unlike the Wilson operator,...
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
apply 'dslash' operator for the DiracOp. This may be e.g. AD
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void TwistCloverInv(ColorSpinorField &out, const ColorSpinorField &in, const int parity) const
virtual void prefetch(QudaFieldLocation mem_space, qudaStream_t stream=0) const
If managed memory and prefetch is enabled, prefetch all relevant memory fields (gauge,...
virtual ~DiracTwistedCloverPC()
DiracTwistedCloverPC & operator=(const DiracTwistedCloverPC &dirac)
void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
DiracTwistedCloverPC(const DiracTwistedCloverPC &dirac)
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
DiracWilson & operator=(const DiracWilson &dirac)
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
apply 'dslash' operator for the DiracOp. This may be e.g. AD
QudaTransferType getTransferType() const
const ColorSpinorField & Vectors(QudaFieldLocation location=QUDA_INVALID_FIELD_LOCATION) const
void prefetch(QudaFieldLocation mem_space, qudaStream_t stream=0) const
If managed memory and prefetch is enabled, prefetch the clover, the norm field (as appropriate),...
quda::mgarray< double > mu_factor
@ QUDA_TWISTED_CLOVERPC_DIRAC
@ QUDA_TWISTED_CLOVER_DIRAC
enum QudaTwistGamma5Type_s QudaTwistGamma5Type
@ QUDA_TRANSFER_AGGREGATE
enum QudaSolutionType_s QudaSolutionType
enum QudaFieldLocation_s QudaFieldLocation
@ QUDA_MATPC_ODD_ODD_ASYMMETRIC
@ QUDA_MATPC_EVEN_EVEN_ASYMMETRIC
@ QUDA_TWIST_GAMMA5_INVERSE
@ QUDA_TWIST_GAMMA5_DIRECT
@ QUDA_MATPCDAG_MATPC_SOLUTION
enum QudaParity_s QudaParity
void ApplyTwistedCloverPreconditioned(ColorSpinorField &out, const ColorSpinorField &in, const GaugeField &U, const CloverField &C, double a, double b, bool xpay, const ColorSpinorField &x, int parity, bool dagger, const int *comm_override, TimeProfile &profile)
Driver for applying the preconditioned twisted-clover stencil.
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.
@ INVERSE_CLOVER_PREFETCH_TYPE
@ CLOVER_CLOVER_PREFETCH_TYPE
void ApplyTwistedClover(ColorSpinorField &out, const ColorSpinorField &in, const GaugeField &U, const CloverField &C, double a, double b, const ColorSpinorField &x, int parity, bool dagger, const int *comm_override, TimeProfile &profile)
Driver for applying the twisted-clover stencil.
void CoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, const cudaGaugeField &gauge, const cudaCloverField *clover, double kappa, double mass, double mu, double mu_factor, QudaDiracType dirac, QudaMatPCType matpc)
Coarse operator construction from a fine-grid operator (Wilson / Clover)
cudaStream_t qudaStream_t