81 #if (CUDA_VERSION >= 10010 && __COMPUTE_CAPABILITY__ >= 700)
105 for (
int i = 0; i <
Ls; i++)
107 "b_5[%d] = %e %e \t c_5[%d] = %e %e\n", i,
b_5[i].real(),
b_5[i].imag(), i,
c_5[i].real(),
c_5[i].imag());
125 class DiracMdagMLocal;
214 const double &k)
const = 0;
267 prepare(src, sol, x, b, solType);
303 virtual double Mu()
const {
return 0.; }
315 unsigned long long rtn =
flops;
930 double a = -1.)
const;
975 double Mu()
const {
return mu; }
1130 mutable bool reverse;
1703 warningQuda(
"Coarse gauge links cannot be trivially updated for DiracCoarse(PC). Perform an MG update instead.");
1997 bool reset1 =
false;
2001 if (reset1) {
dirac->
tmp1 = NULL; reset1 =
false; }
2008 bool reset1 =
false;
2009 bool reset2 =
false;
2014 if (reset2) {
dirac->
tmp2 = NULL; reset2 =
false; }
2015 if (reset1) {
dirac->
tmp1 = NULL; reset1 =
false; }
2039 bool reset1 =
false;
2055 bool reset1 =
false;
2056 bool reset2 =
false;
2097 bool reset1 =
false;
2112 bool reset1 =
false;
2113 bool reset2 =
false;
2156 bool reset1 =
false;
2172 bool reset1 =
false;
2173 bool reset2 =
false;
2217 bool reset1 =
false;
2233 bool reset1 =
false;
2234 bool reset2 =
false;
2290 mat(out, in, Tmp1, Tmp2);
2319 switch (dirac_type) {
2337 errorQuda(
"Invalid matpc type for Hermitian gamma5 version of %d", dirac_type);
2349 errorQuda(
"Support for Hermitian DWF operator %d does not exist yet", dirac_type);
2362 errorQuda(
"Invalid pc_type %d for operator %d", pc_type, dirac_type);
2367 errorQuda(
"Kahler-Dirac preconditioned type %d does not have a Hermitian g5 operator", dirac_type);
2373 errorQuda(
"Support for Hermitian coarse operator %d does not exist yet", dirac_type);
2380 default:
errorQuda(
"Invalid Dirac type %d", dirac_type);
2393 bool reset1 =
false;
2409 bool reset1 =
false;
2410 bool reset2 =
false;
2478 const bool pc_solve);
2493 const bool pc_solve);
const ColorSpinorField & Odd() const
DiracCloverHasenbuschTwist(const DiracParam ¶m)
void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass=0., double mu=0., double mu_factor=0.) const
Create the coarse clover operator.
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual ~DiracCloverHasenbuschTwist()
virtual QudaDiracType getDiracType() const
returns the Dirac type
DiracCloverHasenbuschTwist & operator=(const DiracCloverHasenbuschTwist &dirac)
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
void DslashXpayTwistNoClovInv(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k, const double &b) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass=0., double mu=0., double mu_factor=0.) const
Create the coarse even-odd preconditioned clover operator. Unlike the Wilson operator,...
virtual ~DiracCloverHasenbuschTwistPC()
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
DiracCloverHasenbuschTwistPC & operator=(const DiracCloverHasenbuschTwistPC &dirac)
DiracCloverHasenbuschTwistPC(const DiracParam ¶m)
void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
void DslashXpayTwistClovInv(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k, const double &b) const
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
DiracClover & operator=(const DiracClover &dirac)
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
virtual void updateFields(cudaGaugeField *gauge_in, cudaGaugeField *fat_gauge_in, cudaGaugeField *long_gauge_in, cudaCloverField *clover_in)
Update the internal gauge, fat gauge, long gauge, clover field pointer as appropriate....
DiracClover(const DiracParam ¶m)
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
void checkParitySpinor(const ColorSpinorField &, const ColorSpinorField &) const
Check parity spinors are usable (check geometry ?)
virtual QudaDiracType getDiracType() const
returns the Dirac type
void Clover(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass=0., double mu=0., double mu_factor=0.) const
Create the coarse 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 void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
apply 'dslash' operator for the DiracOp. This may be e.g. AD
void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
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=0., double mu=0., double mu_factor=0.) const
Create the coarse even-odd preconditioned clover operator. Unlike the Wilson operator,...
DiracCloverPC & operator=(const DiracCloverPC &dirac)
virtual QudaDiracType getDiracType() const
returns the Dirac type
void CloverInv(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity 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,...
void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
DiracCloverPC(const DiracParam ¶m)
virtual bool isCoarse() const
Whether the Dirac object is the DiracCoarse.
void Clover(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
Apply the coarse clover operator.
double MuFactor() const
accessor for mu factoo for MG/ – override can return a better value
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
Apply DslashXpay out = (D * in)
void createPreconditionedCoarseOp(GaugeField &Yhat, GaugeField &Xinv, const GaugeField &Y, const GaugeField &X)
Create the precondtioned coarse operator.
void createYhat(bool gpu=true) const
Allocate the Yhat and Xinv fields.
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual void updateFields(cudaGaugeField *gauge_in, cudaGaugeField *fat_gauge_in, cudaGaugeField *long_gauge_in, cudaCloverField *clover_in)
Update the internal gauge, fat gauge, long gauge, clover field pointer as appropriate....
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
const Transfer * transfer
void createY(bool gpu=true, bool mapped=false) const
Allocate the Y and X fields.
double Mu() const
accessor for twist parameter – overrride can return better value
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply the full operator.
void initializeLazy(QudaFieldLocation location) const
Create the CPU or GPU coarse gauge fields on demand (requires that the fields have been created in th...
virtual void prefetch(QudaFieldLocation mem_space, qudaStream_t stream=0) const
If managed memory and prefetch is enabled, prefetch all relevant memory fields (X,...
void CloverInv(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
Apply the inverse coarse clover operator.
double Mass() const
accessor for Mass (in case of a factor of 2 for staggered)
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass, double mu, double mu_factor=0.) const
Create the coarse operator from this coarse operator.
const bool need_bidirectional
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Apply DslashXpay out = (D * in + A * x)
void initializeCoarse()
Initialize the coarse gauge fields. Location is determined by gpu_setup variable.
DiracCoarse(const DiracParam ¶m, bool gpu_setup=true, bool mapped=false)
void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply the full operator.
void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Apply DslashXpay out = (D * in + A * x)
virtual QudaDiracType getDiracType() const
returns the Dirac type
DiracCoarsePC(const DiracParam ¶m, bool gpu_setup=true)
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
Apply DslashXpay out = (D * in)
virtual void prefetch(QudaFieldLocation mem_space, qudaStream_t stream=0) const
If managed memory and prefetch is enabled, prefetch all relevant memory fields (Xhat,...
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
void reconstruct(ColorSpinorField &x, const 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 even-odd preconditioned coarse operator. Unlike the Wilson operator,...
DiracDagger(const DiracMatrix &mat)
int getStencilSteps() const
DiracDagger(const DiracMatrix *mat)
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
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.
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
DiracDomainWall4D(const DiracParam ¶m)
DiracDomainWall4D & operator=(const DiracDomainWall4D &dirac)
void Dslash4Xpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
virtual ~DiracDomainWall4D()
void Dslash5(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
void Dslash4(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
Apply the local MdagM operator: equivalent to applying zero Dirichlet boundary condition to MdagM on ...
void Dslash5Xpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
DiracDomainWall4DPC & operator=(const DiracDomainWall4DPC &dirac)
void Dslash5invXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const double &kappa5, const ColorSpinorField &x, const double &k) const
DiracDomainWall4DPC(const DiracParam ¶m)
void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
virtual ~DiracDomainWall4DPC()
virtual QudaDiracType getDiracType() const
returns the Dirac type
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
void Dslash5inv(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const double &kappa5) const
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
apply 'dslash' operator for the DiracOp. This may be e.g. AD
DiracDomainWall & operator=(const DiracDomainWall &dirac)
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.
DiracDomainWall(const DiracParam ¶m)
void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual ~DiracDomainWall()
void checkDWF(const ColorSpinorField &out, const ColorSpinorField &in) const
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
DiracDomainWallPC(const DiracParam ¶m)
DiracDomainWallPC & operator=(const DiracDomainWallPC &dirac)
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual ~DiracDomainWallPC()
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
int getStencilSteps() const
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
virtual bool hermitian() const
return if the operator is HPD
void applyGamma5(ColorSpinorField &vec) const
Left-apply gamma5 as appropriate for the operator.
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
virtual void Dslash4(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
Apply the local MdagM operator: equivalent to applying zero Dirichlet boundary condition to MdagM on ...
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const =0
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual void reconstructSpecialMG(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType solType) const
virtual void MdagMLocal(ColorSpinorField &out, const ColorSpinorField &in) const
Apply the local MdagM operator: equivalent to applying zero Dirichlet boundary condition to MdagM on ...
unsigned long long Flops() const
returns and then zeroes flopcount
bool newTmp(ColorSpinorField **, const ColorSpinorField &) const
void MMdag(ColorSpinorField &out, const ColorSpinorField &in) const
Apply Normal Operator.
double Kappa() const
accessor for Kappa (mass parameter)
virtual void updateFields(cudaGaugeField *gauge_in, cudaGaugeField *fat_gauge_in, cudaGaugeField *long_gauge_in, cudaCloverField *clover_in)
Update the internal gauge, fat gauge, long gauge, clover field pointer as appropriate....
virtual bool hasSpecialMG() const
specifies whether or not there's a specialized prepare/reconstruct used before/after transfering to/f...
void flipDagger() const
Flips value of daggered.
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const =0
Apply MdagM operator which may be optimized.
virtual double Mu() const
accessor for twist parameter – overrride can return better value
virtual bool isCoarse() const
Whether the Dirac object is the DiracCoarse.
virtual double Mass() const
accessor for Mass (in case of a factor of 2 for staggered)
virtual void prepareSpecialMG(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType solType) const
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const =0
apply 'dslash' operator for the DiracOp. This may be e.g. AD
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 ...
QudaPrecision halo_precision
void setHaloPrecision(QudaPrecision halo_precision_) const
virtual double MuFactor() const
accessor for mu factoo for MG/ – override can return a better value
void setMass(double mass)
QudaPrecision HaloPrecision() const
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType solType) const =0
void deleteTmp(ColorSpinorField **, const bool &reset) const
virtual QudaDiracType getDiracType() const =0
returns the Dirac type
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType solType) const =0
Dirac(const DiracParam ¶m)
void Dagger(QudaDagType dag) const
sets whether operator is daggered or not
virtual void checkParitySpinor(const ColorSpinorField &, const ColorSpinorField &) const
Check parity spinors are usable (check geometry ?)
virtual bool hermitian() const
is operator hermitian
virtual void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass=0., double mu=0., double mu_factor=0.) const
Create the coarse operator (virtual parent)
static Dirac * create(const DiracParam ¶m)
Creates a subclass from parameters.
QudaMatPCType getMatPCType() const
returns preconditioning type
void checkSpinorAlias(const ColorSpinorField &, const ColorSpinorField &) const
check spinors do not alias
Dirac & operator=(const Dirac &dirac)
virtual void checkFullSpinor(const ColorSpinorField &, const ColorSpinorField &) const
check full spinors are compatible (check geometry ?)
void setCommDim(const int commDim_[QUDA_MAX_DIM]) const
Enable / disable communications for the Dirac operator.
int getStencilSteps() const
I have no idea what this does.
virtual bool hasDslash() const
Whether or not the operator has a single-parity Dslash.
int commDim[QUDA_MAX_DIM]
void Mdag(ColorSpinorField &out, const ColorSpinorField &in) const
Apply Mdag (daggered operator of M.
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const =0
Xpay version of Dslash.
virtual void updateFields(cudaGaugeField *gauge_in, cudaGaugeField *fat_gauge_in, cudaGaugeField *long_gauge_in, cudaCloverField *clover_in)
Update the internal gauge, fat gauge, long gauge, clover field pointer as appropriate....
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
DiracImprovedStaggered & operator=(const DiracImprovedStaggered &dirac)
cudaGaugeField * fatGauge
virtual void prefetch(QudaFieldLocation mem_space, qudaStream_t stream=0) const
If managed memory and prefetch is enabled, prefetch all relevant memory fields (fat+long links,...
cudaGaugeField * longGauge
void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass, double mu=0., double mu_factor=0.) const
Create the coarse staggered operator.
virtual const cudaGaugeField * getFatLinkField() const
Get the fat link field for MG setup.
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
apply 'dslash' operator for the DiracOp. This may be e.g. AD
virtual void checkParitySpinor(const ColorSpinorField &, const ColorSpinorField &) const
Check parity spinors are usable (check geometry ?)
virtual ~DiracImprovedStaggered()
virtual const cudaGaugeField * getLongLinkField() const
Get the long link field for MG setup.
DiracImprovedStaggered(const DiracParam ¶m)
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
DiracImprovedStaggeredKD(const DiracParam ¶m)
virtual bool hasDslash() const
Whether or not the operator has a single-parity Dslash.
void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass, double mu=0., double mu_factor=0.) const
Create the coarse improved staggered KD operator.
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
virtual void prepareSpecialMG(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType solType) const
virtual ~DiracImprovedStaggeredKD()
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
virtual void checkParitySpinor(const ColorSpinorField &, const ColorSpinorField &) const
Check parity spinors are usable (check geometry ?)
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
virtual bool hasSpecialMG() const
specifies whether or not there's a specialized prepare/reconstruct used before/after transfering to/f...
virtual void prefetch(QudaFieldLocation mem_space, qudaStream_t stream=0) const
If managed memory and prefetch is enabled, prefetch all relevant memory fields (gauge,...
void KahlerDiracInv(ColorSpinorField &out, const ColorSpinorField &in) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
DiracImprovedStaggeredKD & operator=(const DiracImprovedStaggeredKD &dirac)
virtual void reconstructSpecialMG(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType solType) const
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual void updateFields(cudaGaugeField *gauge_in, cudaGaugeField *fat_gauge_in, cudaGaugeField *long_gauge_in, cudaCloverField *clover_in)
Update the internal gauge, fat gauge, long gauge, clover field pointer as appropriate....
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
apply 'dslash' operator for the DiracOp. This may be e.g. AD
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
DiracImprovedStaggeredPC & operator=(const DiracImprovedStaggeredPC &dirac)
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual ~DiracImprovedStaggeredPC()
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
virtual bool hermitian() const
is operator hermitian
DiracImprovedStaggeredPC(const DiracParam ¶m)
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
int getStencilSteps() const
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
apply operator and potentially a shift
DiracMMdag(const Dirac &d)
int getStencilSteps() const
virtual bool hermitian() const
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
DiracMMdag(const Dirac *d)
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
bool isDwf() const
return if the operator is a domain wall operator, that is, 5-dimensional
const Dirac * Expose() const
bool isStaggered() const
return if the operator is a staggered operator
DiracMatrix(const DiracMatrix *mat)
virtual bool hermitian() const
bool isWilsonType() const
return if the operator is a Wilson-type 4-d operator
DiracMatrix(const Dirac *d)
unsigned long long flops() const
virtual void operator()(ColorSpinorField &out, const ColorSpinorField &in) const =0
bool isCoarse() const
return if the operator is a coarse operator
double shift
Shift term added onto operator (M/M^dag M/M M^dag + shift)
DiracMatrix(const DiracMatrix &mat)
virtual void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const =0
virtual int getStencilSteps() const =0
virtual void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const =0
QudaMatPCType getMatPCType() const
DiracMatrix(const Dirac &d)
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
int getStencilSteps() const
DiracMdag(const Dirac &d)
DiracMdag(const Dirac *d)
virtual bool hermitian() const
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
int getStencilSteps() const
DiracMdagM(const Dirac &d)
DiracMdagM(const Dirac *d)
DiracMdagMLocal(const Dirac &d)
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
DiracMdagMLocal(const Dirac *d)
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
int getStencilSteps() const
double eofa_y[QUDA_MAX_DWF_LS]
void m5_eofa_xpay(ColorSpinorField &out, const ColorSpinorField &in, const ColorSpinorField &x, double a=-1.) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void m5_eofa(ColorSpinorField &out, const ColorSpinorField &in) const
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
double eofa_x[QUDA_MAX_DWF_LS]
DiracMobiusEofa(const DiracParam ¶m)
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
double sherman_morrison_fac
double eofa_u[QUDA_MAX_DWF_LS]
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
void full_dslash(ColorSpinorField &out, const ColorSpinorField &in) const
void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual QudaDiracType getDiracType() const
returns the Dirac type
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
void m5inv_eofa_xpay(ColorSpinorField &out, const ColorSpinorField &in, const ColorSpinorField &x, double a=-1.) const
void m5inv_eofa(ColorSpinorField &out, const ColorSpinorField &in) const
DiracMobiusEofaPC(const DiracParam ¶m)
Complex c_5[QUDA_MAX_DWF_LS]
void Dslash4(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
Apply the local MdagM operator: equivalent to applying zero Dirichlet boundary condition to MdagM on ...
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
void Dslash5(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
void Dslash5Xpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
void Dslash4Xpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
void Dslash4pre(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
Complex b_5[QUDA_MAX_DWF_LS]
void Dslash4preXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
DiracMobius(const DiracParam ¶m)
cudaGaugeField * extended_gauge
void Dslash5invXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
void Dslash5inv(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual QudaDiracType getDiracType() const
returns the Dirac type
void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
DiracMobiusPC(const DiracParam ¶m)
void MdagMLocal(ColorSpinorField &out, const ColorSpinorField &in) const
Apply the local MdagM operator: equivalent to applying zero Dirichlet boundary condition to MdagM on ...
DiracMobiusPC & operator=(const DiracMobiusPC &dirac)
Complex b_5[QUDA_MAX_DWF_LS]
int commDim[QUDA_MAX_DIM]
Complex c_5[QUDA_MAX_DWF_LS]
cudaGaugeField * longGauge
cudaGaugeField * fatGauge
QudaPrecision halo_precision
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
DiracStaggered & operator=(const DiracStaggered &dirac)
virtual ~DiracStaggered()
DiracStaggered(const DiracParam ¶m)
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
virtual void checkParitySpinor(const ColorSpinorField &, const ColorSpinorField &) const
Check parity spinors are usable (check geometry ?)
void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass, double mu=0., double mu_factor=0.) const
Create the coarse staggered operator.
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) 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
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual const cudaGaugeField * getGaugeField() const
Get the fine gauge field for MG setup.
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
virtual bool hasDslash() const
Whether or not the operator has a single-parity Dslash.
DiracStaggeredKD & operator=(const DiracStaggeredKD &dirac)
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual ~DiracStaggeredKD()
virtual void prepareSpecialMG(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType solType) const
void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass, double mu=0., double mu_factor=0.) const
Create the coarse staggered KD operator.
virtual QudaDiracType getDiracType() const
returns the Dirac type
DiracStaggeredKD(const DiracParam ¶m)
void KahlerDiracInv(ColorSpinorField &out, const ColorSpinorField &in) const
virtual void reconstructSpecialMG(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType solType) const
virtual void checkParitySpinor(const ColorSpinorField &, const ColorSpinorField &) const
Check parity spinors are usable (check geometry ?)
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
virtual bool hasSpecialMG() const
specifies whether or not there's a specialized prepare/reconstruct used before/after transfering to/f...
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
apply 'dslash' operator for the DiracOp. This may be e.g. AD
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 void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
virtual void updateFields(cudaGaugeField *gauge_in, cudaGaugeField *fat_gauge_in, cudaGaugeField *long_gauge_in, cudaCloverField *clover_in)
Update the internal gauge, fat gauge, long gauge, clover field pointer as appropriate....
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
DiracStaggeredPC & operator=(const DiracStaggeredPC &dirac)
virtual ~DiracStaggeredPC()
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
virtual bool hermitian() const
is operator hermitian
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
DiracStaggeredPC(const DiracParam ¶m)
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
double Mu() const
accessor for twist parameter – overrride can return better value
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 updateFields(cudaGaugeField *gauge_in, cudaGaugeField *fat_gauge_in, cudaGaugeField *long_gauge_in, cudaCloverField *clover_in)
Update the internal gauge, fat gauge, long gauge, clover field pointer as appropriate....
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.
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
void twistedApply(ColorSpinorField &out, const ColorSpinorField &in, const QudaTwistGamma5Type twistType) 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-mass operator.
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual ~DiracTwistedMass()
DiracTwistedMass(const DiracTwistedMass &dirac)
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
double Mu() const
accessor for twist parameter – overrride can return better value
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, QudaParity parity) const
apply 'dslash' operator for the DiracOp. This may be e.g. AD
DiracTwistedMass & operator=(const DiracTwistedMass &dirac)
void Twist(ColorSpinorField &out, const ColorSpinorField &in) const
virtual ~DiracTwistedMassPC()
void reconstruct(ColorSpinorField &x, const 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 even-odd preconditioned twisted-mass operator.
void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
DiracTwistedMassPC(const DiracTwistedMassPC &dirac)
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
void TwistInv(ColorSpinorField &out, const ColorSpinorField &in) const
DiracTwistedMassPC & operator=(const DiracTwistedMassPC &dirac)
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
apply 'dslash' operator for the DiracOp. This may be e.g. AD
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
DiracWilson(const DiracParam ¶m)
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
DiracWilson & operator=(const DiracWilson &dirac)
virtual void createCoarseOp(GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass=0., double mu=0., double mu_factor=0.) const
Create the coarse Wilson operator.
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
virtual 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
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
DiracWilsonPC(const DiracParam ¶m)
void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
DiracWilsonPC & operator=(const DiracWilsonPC &dirac)
void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
Full Covariant Derivative operator. Although not a Dirac operator per se, it's a linear operator so i...
virtual void MCD(ColorSpinorField &out, const ColorSpinorField &in, const int mu) const
virtual void MdagMCD(ColorSpinorField &out, const ColorSpinorField &in, const int mu) const
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
GaugeCovDev(const DiracParam ¶m)
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
GaugeCovDev & operator=(const GaugeCovDev &covDev)
virtual void DslashCD(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const int mu) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
apply 'dslash' operator for the DiracOp. This may be e.g. AD
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
Full Gauge Laplace operator. Although not a Dirac operator per se, it's a linear operator so it's con...
virtual bool hermitian() const
is operator hermitian
GaugeLaplace & operator=(const GaugeLaplace &laplace)
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
virtual QudaDiracType getDiracType() const
returns the Dirac type
GaugeLaplace(const DiracParam ¶m)
virtual void Dslash(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const
apply 'dslash' operator for the DiracOp. This may be e.g. AD
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
virtual void DslashXpay(ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const
Xpay version of Dslash.
Even-odd preconditioned Gauge Laplace operator.
virtual QudaDiracType getDiracType() const
returns the Dirac type
virtual ~GaugeLaplacePC()
void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const
Apply MdagM operator which may be optimized.
virtual bool hermitian() const
is operator hermitian
void M(ColorSpinorField &out, const ColorSpinorField &in) const
Apply M for the dirac op. E.g. the Schur Complement operator.
GaugeLaplacePC & operator=(const GaugeLaplacePC &laplace)
void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const
void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const
GaugeLaplacePC(const DiracParam ¶m)
quda::mgarray< double > mu_factor
void mat(void *out, void **link, void *in, int dagger_bit, int mu, QudaPrecision sPrecision, QudaPrecision gPrecision)
cudaColorSpinorField * tmp
QudaInvertParam inv_param
@ QUDA_TWISTED_MASSPC_DIRAC
@ QUDA_GAUGE_LAPLACE_DIRAC
@ QUDA_GAUGE_COVDEV_DIRAC
@ QUDA_TWISTED_CLOVERPC_DIRAC
@ QUDA_MOBIUS_DOMAIN_WALLPC_EOFA_DIRAC
@ QUDA_CLOVER_HASENBUSCH_TWIST_DIRAC
@ QUDA_TWISTED_MASS_DIRAC
@ QUDA_CLOVER_HASENBUSCH_TWISTPC_DIRAC
@ QUDA_DOMAIN_WALL_4D_DIRAC
@ QUDA_MOBIUS_DOMAIN_WALL_EOFA_DIRAC
@ QUDA_GAUGE_LAPLACEPC_DIRAC
@ QUDA_MOBIUS_DOMAIN_WALLPC_DIRAC
@ QUDA_TWISTED_CLOVER_DIRAC
@ QUDA_DOMAIN_WALL_4DPC_DIRAC
@ QUDA_MOBIUS_DOMAIN_WALL_DIRAC
@ QUDA_DOMAIN_WALLPC_DIRAC
enum QudaPrecision_s QudaPrecision
enum QudaDagType_s QudaDagType
enum QudaTwistGamma5Type_s QudaTwistGamma5Type
enum QudaDiracType_s QudaDiracType
enum QudaSolutionType_s QudaSolutionType
enum QudaFieldLocation_s QudaFieldLocation
@ QUDA_MATPC_ODD_ODD_ASYMMETRIC
@ QUDA_MATPC_EVEN_EVEN_ASYMMETRIC
enum QudaMatPCType_s QudaMatPCType
enum QudaParity_s QudaParity
void ax(double a, ColorSpinorField &x)
void axpy(double a, ColorSpinorField &x, ColorSpinorField &y)
void setDiracSloppyParam(DiracParam &diracParam, QudaInvertParam *inv_param, bool pc)
void createDiracWithRefine(Dirac *&d, Dirac *&dSloppy, Dirac *&dPre, Dirac *&dRef, QudaInvertParam ¶m, const bool pc_solve)
std::complex< double > Complex
void setDiracParam(DiracParam &diracParam, QudaInvertParam *inv_param, bool pc)
void gamma5(ColorSpinorField &out, const ColorSpinorField &in)
Applies a gamma5 matrix to a spinor (wrapper to ApplyGamma)
void createDiracWithEig(Dirac *&d, Dirac *&dSloppy, Dirac *&dPre, Dirac *&dRef, QudaInvertParam ¶m, const bool pc_solve)
void createDirac(Dirac *&d, Dirac *&dSloppy, Dirac *&dPre, QudaInvertParam ¶m, const bool pc_solve)
cudaStream_t qudaStream_t
#define QUDA_MAX_DWF_LS
Maximum length of the Ls dimension for domain-wall fermions.
#define QUDA_MAX_DIM
Maximum number of dimensions supported by QUDA. In practice, no routines make use of more than 5.