67 need_bidirectional(false)
84 printfQuda(
"halo_precision = %d\n", halo_precision);
86 for (
int i = 0; i <
Ls; i++)
88 "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());
146 for (
int i=0; i<
QUDA_MAX_DIM; i++) { commDim[i] = commDim_[i]; }
157 const double &k)
const = 0;
174 virtual double Mu()
const {
return 0.; }
177 unsigned long long Flops()
const {
unsigned long long rtn =
flops; flops = 0;
return rtn; }
181 int getStencilSteps()
const;
197 double kappa,
double mass=0.,
double mu=0.,
double mu_factor=0.)
const 208 void initConstants();
271 void initConstants();
544 double Mu()
const {
return mu; }
632 double Mu()
const {
return mu; }
832 void initializeCoarse();
853 void createY(
bool gpu =
true,
bool mapped =
false)
const;
859 void createYhat(
bool gpu =
true)
const;
862 double Mu()
const {
return mu; }
954 double kappa,
double mass,
double mu,
double mu_factor=0.)
const;
1124 virtual int getStencilSteps()
const = 0;
1126 std::string
Type()
const {
return typeid(*dirac).name(); }
1150 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1155 bool reset1 =
false;
1158 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1159 if (reset1) {
dirac->
tmp1 = NULL; reset1 =
false; }
1165 bool reset1 =
false;
1166 bool reset2 =
false;
1170 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1171 if (reset2) {
dirac->
tmp2 = NULL; reset2 =
false; }
1172 if (reset1) {
dirac->
tmp1 = NULL; reset1 =
false; }
1192 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1199 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1209 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1230 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1237 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1247 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1267 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1274 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1284 if (shift != 0.0)
blas::axpy(shift, const_cast<ColorSpinorField&>(in), out);
1322 mat(out, in, Tmp1, Tmp2);
1334 #endif // _DIRAC_QUDA_H
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
Even-odd preconditioned Gauge Laplace operator.
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
void setDiracSloppyParam(DiracParam &diracParam, QudaInvertParam *inv_param, bool pc)
DiracMatrix(const Dirac &d)
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
enum QudaPrecision_s QudaPrecision
int getStencilSteps() const
double shift
Shift term added onto operator (M/M^dag M/M M^dag + shift)
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)
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
DiracMdag(const Dirac &d)
DiracMdagM(const Dirac *d)
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
cudaColorSpinorField * tmp
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
QudaMatPCType getMatPCType() const
int getStencilSteps() const
const bool need_bidirectional
QudaPrecision HaloPrecision() const
DiracDagger(const DiracMatrix *mat)
Complex c_5[QUDA_MAX_DWF_LS]
void setHaloPrecision(QudaPrecision halo_precision_) const
unsigned long long Flops() const
virtual double Mu() const
virtual void MdagM(ColorSpinorField &out, const ColorSpinorField &in) const =0
cudaGaugeField & fatGauge
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
void setDiracParam(DiracParam &diracParam, QudaInvertParam *inv_param, bool pc)
Complex b_5[QUDA_MAX_DWF_LS]
QudaInvertParam inv_param
__device__ __host__ void covDev(Arg &arg, int idx, int parity)
int getStencilSteps() const
int getStencilSteps() const
const Transfer * transfer
void MMdag(ColorSpinorField &out, const ColorSpinorField &in) const
DiracMatrix(const Dirac *d)
int commDim[QUDA_MAX_DIM]
void axpy(double a, ColorSpinorField &x, ColorSpinorField &y)
void Dagger(QudaDagType dag) const
enum QudaMatPCType_s QudaMatPCType
int getStencilSteps() const
int getStencilSteps() const
DiracMMdag(const Dirac &d)
enum QudaSolutionType_s QudaSolutionType
std::complex< double > Complex
enum QudaDagType_s QudaDagType
enum QudaParity_s QudaParity
virtual double MuFactor() const
DiracDagger(const DiracMatrix &mat)
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
QudaPrecision halo_precision
void setMass(double mass)
void operator()(ColorSpinorField &out, const ColorSpinorField &in) const
QudaPrecision halo_precision
void setCommDim(const int commDim_[QUDA_MAX_DIM]) const
Enable / disable communications for the Dirac operator.
QudaMatPCType getMatPCType() const
void Mdag(ColorSpinorField &out, const ColorSpinorField &in) const
virtual void M(ColorSpinorField &out, const ColorSpinorField &in) const =0
enum QudaFieldLocation_s QudaFieldLocation
cpuColorSpinorField * out
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
unsigned long long flops() const
#define QUDA_MAX_DWF_LS
Maximum length of the Ls dimension for domain-wall fermions.
DiracMdagM(const Dirac &d)
Full Gauge Laplace operator. Although not a Dirac operator per se, it's a linear operator so it's con...
cudaGaugeField * fatGauge
DiracMMdag(const Dirac *d)
cudaGaugeField & longGauge
virtual int getStencilSteps() const =0
cudaGaugeField * longGauge
DiracMatrix(const DiracMatrix *mat)
__device__ __host__ void laplace(Arg &arg, int idx, int parity)
enum QudaTwistGamma5Type_s QudaTwistGamma5Type
#define QUDA_MAX_DIM
Maximum number of dimensions supported by QUDA. In practice, no routines make use of more than 5...
DiracMatrix(const DiracMatrix &mat)
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &tmp) const
void mat(void *out, void **link, void *in, int dagger_bit, int mu, QudaPrecision sPrecision, QudaPrecision gPrecision)
void operator()(ColorSpinorField &out, const ColorSpinorField &in, ColorSpinorField &Tmp1, ColorSpinorField &Tmp2) const
Full Covariant Derivative operator. Although not a Dirac operator per se, it's a linear operator so i...
DiracMdag(const Dirac *d)
const Dirac * Expose() const
enum QudaDiracType_s QudaDiracType