34 if (in.
Ndim() != 5 || out.
Ndim() != 5) {
errorQuda(
"Staggered dslash requires 5-d fermion fields"); }
37 errorQuda(
"Input and output spinor precisions don't match in dslash_quda");
51 errorQuda(
"The improved staggered Kahler-Dirac operator does not have a single parity form");
57 errorQuda(
"The improved staggered Kahler-Dirac operator does not have a single parity form");
74 bool right_block_precond =
false;
76 if (right_block_precond) {
161 errorQuda(
"Preconditioned solution requires a preconditioned solve_type");
174 errorQuda(
"Preconditioned solution requires a preconditioned solve_type");
179 bool right_block_precond =
false;
181 if (right_block_precond) {
217 bool right_block_precond =
false;
219 if (right_block_precond) {
244 errorQuda(
"Staggered KD operators do not support MG coarsening yet");
QudaSiteSubset SiteSubset() const
const ColorSpinorField & Even() const
bool newTmp(ColorSpinorField **, const ColorSpinorField &) 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....
void deleteTmp(ColorSpinorField **, const bool &reset) const
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.
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
DiracImprovedStaggeredKD(const DiracParam ¶m)
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 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 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
QudaPrecision Precision() const
void prefetch(QudaFieldLocation mem_space, qudaStream_t stream=0) const
If managed memory and prefetch is enabled, prefetch the gauge field and buffers to the CPU or the GPU...
quda::mgarray< double > mu_factor
enum QudaSolutionType_s QudaSolutionType
enum QudaFieldLocation_s QudaFieldLocation
@ QUDA_MATPCDAG_MATPC_SOLUTION
enum QudaParity_s QudaParity
void BuildStaggeredKahlerDiracInverse(GaugeField &Xinv, const cudaGaugeField &gauge, const double mass)
Build the Kahler-Dirac inverse block for KD operators.
void ApplyStaggeredKahlerDiracInverse(ColorSpinorField &out, const ColorSpinorField &in, const GaugeField &Xinv, bool dagger)
Apply the (improved) staggered Kahler-Dirac inverse block to a color-spinor field.
void ApplyImprovedStaggered(ColorSpinorField &out, const ColorSpinorField &in, const GaugeField &U, const GaugeField &L, double a, const ColorSpinorField &x, int parity, bool dagger, const int *comm_override, TimeProfile &profile)
Apply the improved staggered dslash operator to a color-spinor field.
cudaStream_t qudaStream_t