QUDA  v0.7.0
A library for QCD on GPUs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dirac_quda.h
Go to the documentation of this file.
1 #ifndef _DIRAC_QUDA_H
2 #define _DIRAC_QUDA_H
3 
4 #include <quda_internal.h>
5 #include <color_spinor_field.h>
6 #include <gauge_field.h>
7 #include <clover_field.h>
8 #include <dslash_quda.h>
9 
10 #include <face_quda.h>
11 #include <blas_quda.h>
12 
13 #include <typeinfo>
14 
15 namespace quda {
16 
17  // Params for Dirac operator
18  class DiracParam {
19 
20  public:
22  double kappa;
23  double mass;
24  double m5; // used by domain wall only
25  int Ls;
26  double b_5[QUDA_MAX_DWF_LS];
27  double c_5[QUDA_MAX_DWF_LS];
31  cudaGaugeField *fatGauge; // used by staggered only
32  cudaGaugeField *longGauge; // used by staggered only
35 
36  double mu; // used by twisted mass only
37  double epsilon; //2nd tm parameter (used by twisted mass only)
38 
40  cudaColorSpinorField *tmp2; // used by Wilson-like kernels only
41 
42  int commDim[QUDA_MAX_DIM]; // whether to do comms or not
43 
46  dagger(QUDA_DAG_INVALID), gauge(0), clover(0), cloverInv(0), mu(0.0), epsilon(0.0),
47  tmp1(0), tmp2(0)
48  {
49 
50  }
51 
52  void print() {
53  printfQuda("Printing DslashParam\n");
54  printfQuda("type = %d\n", type);
55  printfQuda("kappa = %g\n", kappa);
56  printfQuda("mass = %g\n", mass);
57  printfQuda("m5 = %g\n", m5);
58  printfQuda("Ls = %d\n", Ls);
59  printfQuda("matpcType = %d\n", matpcType);
60  printfQuda("dagger = %d\n", dagger);
61  printfQuda("mu = %g\n", mu);
62  printfQuda("epsilon = %g\n", epsilon);
63  for (int i=0; i<QUDA_MAX_DIM; i++) printfQuda("commDim[%d] = %d\n", i, commDim[i]);
64  for (int i=0; i<Ls; i++) printfQuda("b_5[%d] = %e\t c_5[%d] = %e\n", i,b_5[i],i,c_5[i]);
65  }
66  };
67 
68  void setDiracParam(DiracParam &diracParam, QudaInvertParam *inv_param, bool pc);
69  void setDiracSloppyParam(DiracParam &diracParam, QudaInvertParam *inv_param, bool pc);
70 
71  // forward declarations
72  class DiracMatrix;
73  class DiracM;
74  class DiracMdagM;
75  class DiracMMdag;
76  class DiracMdag;
77 
78  // Abstract base class
79  class Dirac {
80 
81  friend class DiracMatrix;
82  friend class DiracM;
83  friend class DiracMdagM;
84  friend class DiracMMdag;
85  friend class DiracMdag;
86 
87  protected:
89  double kappa;
90  double mass;
92  mutable QudaDagType dagger; // mutable to simplify implementation of Mdag
93  mutable unsigned long long flops;
94  mutable cudaColorSpinorField *tmp1; // temporary hack
95  mutable cudaColorSpinorField *tmp2; // temporary hack
96 
97  bool newTmp(cudaColorSpinorField **, const cudaColorSpinorField &) const;
98  void deleteTmp(cudaColorSpinorField **, const bool &reset) const;
99 
101 
102  int commDim[QUDA_MAX_DIM]; // whether do comms or not
103 
105 
106  public:
107  Dirac(const DiracParam &param);
108  Dirac(const Dirac &dirac);
109  virtual ~Dirac();
110  Dirac& operator=(const Dirac &dirac);
111 
112  virtual void checkParitySpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const;
113  virtual void checkFullSpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const;
114  void checkSpinorAlias(const cudaColorSpinorField &, const cudaColorSpinorField &) const;
115 
116  virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in,
117  const QudaParity parity) const = 0;
119  const QudaParity parity, const cudaColorSpinorField &x,
120  const double &k) const = 0;
121  virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const = 0;
122  virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const = 0;
123  void Mdag(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
125 
126  // required methods to use e-o preconditioning for solving full system
127  virtual void prepare(cudaColorSpinorField* &src, cudaColorSpinorField* &sol,
129  const QudaSolutionType) const = 0;
130  virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b,
131  const QudaSolutionType) const = 0;
132  void setMass(double mass){ this->mass = mass;}
133  // Dirac operator factory
134  static Dirac* create(const DiracParam &param);
135 
136  unsigned long long Flops() const { unsigned long long rtn = flops; flops = 0; return rtn; }
137 
138 
140  void Dagger(QudaDagType dag) { dagger = dag; }
141  };
142 
143  // Full Wilson
144  class DiracWilson : public Dirac {
145 
146  protected:
147  void initConstants();
148  FaceBuffer face1, face2; // multi-gpu communication buffers
149 
150  public:
151  DiracWilson(const DiracParam &param);
152  DiracWilson(const DiracWilson &dirac);
153  DiracWilson(const DiracParam &param, const int nDims);//to correctly adjust face for DW and non-deg twisted mass
154 
155  virtual ~DiracWilson();
157 
158  virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in,
159  const QudaParity parity) const;
161  const QudaParity parity, const cudaColorSpinorField &x, const double &k) const;
162  virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
163  virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
164 
165  virtual void prepare(cudaColorSpinorField* &src, cudaColorSpinorField* &sol,
167  const QudaSolutionType) const;
168  virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b,
169  const QudaSolutionType) const;
170  };
171 
172  // Even-odd preconditioned Wilson
173  class DiracWilsonPC : public DiracWilson {
174 
175  private:
176 
177  public:
180  virtual ~DiracWilsonPC();
181  DiracWilsonPC& operator=(const DiracWilsonPC &dirac);
182 
183  void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
184  void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
185 
188  const QudaSolutionType) const;
190  const QudaSolutionType) const;
191  };
192 
193  // Full clover
194  class DiracClover : public DiracWilson {
195 
196  protected:
197  void initConstants();
198  void checkParitySpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const;
200 
201  public:
202  DiracClover(const DiracParam &param);
203  DiracClover(const DiracClover &dirac);
204  virtual ~DiracClover();
206 
209  const cudaColorSpinorField &x, const double &k) const;
210  virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
211  virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
212 
213  virtual void prepare(cudaColorSpinorField* &src, cudaColorSpinorField* &sol,
215  const QudaSolutionType) const;
216  virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b,
217  const QudaSolutionType) const;
218  };
219 
220  // Even-odd preconditioned clover
221  class DiracCloverPC : public DiracClover {
222 
223  public:
226  virtual ~DiracCloverPC();
227  DiracCloverPC& operator=(const DiracCloverPC &dirac);
228 
230  void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in,
231  const QudaParity parity) const;
233  const QudaParity parity, const cudaColorSpinorField &x, const double &k) const;
234 
235  void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
236  void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
237 
240  const QudaSolutionType) const;
242  const QudaSolutionType) const;
243  };
244 
245 
246 
247  // Full domain wall
248  class DiracDomainWall : public DiracWilson {
249 
250  protected:
251  double m5;
252  double kappa5;
253  int Ls; // length of the fifth dimension
254 
255  public:
258  virtual ~DiracDomainWall();
260 
262  const QudaParity parity) const;
264  const QudaParity parity, const cudaColorSpinorField &x, const double &k) const;
265 
266  virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
267  virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
268 
269  virtual void prepare(cudaColorSpinorField* &src, cudaColorSpinorField* &sol,
271  const QudaSolutionType) const;
272  virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b,
273  const QudaSolutionType) const;
274  };
275 
276  // 5d Even-odd preconditioned domain wall
278 
279  private:
280 
281  public:
284  virtual ~DiracDomainWallPC();
286 
287  void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
288  void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
289 
292  const QudaSolutionType) const;
294  const QudaSolutionType) const;
295  };
296 
297 // 4d Even-odd preconditioned domain wall
299 
300  private:
301 
302  public:
305  virtual ~DiracDomainWall4DPC();
308  const QudaParity parity) const;
309  void Dslash5(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const;
310  void Dslash5inv(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const double &k) const;
312  const QudaParity parity, const cudaColorSpinorField &x, const double &k) const;
314  const QudaParity parity, const cudaColorSpinorField &x, const double &k) const;
315 
316  void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
317  void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
318 
321  const QudaSolutionType) const;
323  const QudaSolutionType) const;
324  };
325 
326 
327 // 4d Even-odd preconditioned Mobius domain wall
329 
330  protected:
331  //Mobius coefficients
334 
335  private:
336 
337  public:
340  virtual ~DiracMobiusDomainWallPC();
343  const QudaParity parity) const;
345  const QudaParity parity) const;
347  void Dslash5inv(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const double &k) const;
349  const QudaParity parity, const cudaColorSpinorField &x, const double &k) const;
351  const QudaParity parity, const cudaColorSpinorField &x, const double &k) const;
352 
353  void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
355  //void Mdag(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
357  cudaColorSpinorField &b, const QudaSolutionType) const;
359  };
360 
361  // Full twisted mass
362  class DiracTwistedMass : public DiracWilson {
363 
364  protected:
365  double mu;
366  double epsilon;
368  const QudaTwistGamma5Type twistType) const;
369 
370  public:
372  DiracTwistedMass(const DiracParam &param, const int nDim);
373  virtual ~DiracTwistedMass();
375 
377 
378  virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
379  virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
380 
381  virtual void prepare(cudaColorSpinorField* &src, cudaColorSpinorField* &sol,
383  const QudaSolutionType) const;
384  virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b,
385  const QudaSolutionType) const;
386  };
387 
388  // Even-odd preconditioned twisted mass
390 
391  public:
393  DiracTwistedMassPC(const DiracParam &param, const int nDim);
394 
395  virtual ~DiracTwistedMassPC();
397 
399 
400  virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in,
401  const QudaParity parity) const;
402  virtual void DslashXpay(cudaColorSpinorField &out, const cudaColorSpinorField &in,
403  const QudaParity parity, const cudaColorSpinorField &x, const double &k) const;
404  void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
405  void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
406 
409  const QudaSolutionType) const;
411  const QudaSolutionType) const;
412  };
413 
414  // Full twisted mass with a clover term
416 
417  protected:
418  double mu;
419  double epsilon;
422  void checkParitySpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const;
424  const QudaTwistGamma5Type twistType, const int parity) const;
425 
426  public:
428  DiracTwistedClover(const DiracParam &param, const int nDim);
429  virtual ~DiracTwistedClover();
431 
432  void TwistClover(cudaColorSpinorField &out, const cudaColorSpinorField &in, const int parity) const; //IS PARITY REQUIRED???
433 
434  virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
435  virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
436 
437  virtual void prepare(cudaColorSpinorField* &src, cudaColorSpinorField* &sol,
439  const QudaSolutionType) const;
440  virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b,
441  const QudaSolutionType) const;
442  };
443 
444  // Even-odd preconditioned twisted mass with a clover term
446 
447  public:
449  DiracTwistedCloverPC(const DiracParam &param, const int nDim);
450 
451  virtual ~DiracTwistedCloverPC();
453 
454  void TwistCloverInv(cudaColorSpinorField &out, const cudaColorSpinorField &in, const int parity) const;
455 
456  virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in,
457  const QudaParity parity) const;
458  virtual void DslashXpay(cudaColorSpinorField &out, const cudaColorSpinorField &in,
459  const QudaParity parity, const cudaColorSpinorField &x, const double &k) const;
460  void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
461  void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
462 
465  const QudaSolutionType) const;
467  const QudaSolutionType) const;
468  };
469 
470  // Full staggered
471  class DiracStaggered : public Dirac {
472 
473  protected:
474  FaceBuffer face1, face2; // multi-gpu communication buffers
475 
476  public:
479  virtual ~DiracStaggered();
481 
482  virtual void checkParitySpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const;
483 
484  virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in,
485  const QudaParity parity) const;
487  const QudaParity parity, const cudaColorSpinorField &x, const double &k) const;
488  virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
489  virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
490 
491  virtual void prepare(cudaColorSpinorField* &src, cudaColorSpinorField* &sol,
493  const QudaSolutionType) const;
494  virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b,
495  const QudaSolutionType) const;
496  };
497 
498  // Even-odd preconditioned staggered
500 
501  protected:
502 
503  public:
506  virtual ~DiracStaggeredPC();
508 
509  virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
510  virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
511 
512  virtual void prepare(cudaColorSpinorField* &src, cudaColorSpinorField* &sol,
514  const QudaSolutionType) const;
515  virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b,
516  const QudaSolutionType) const;
517  };
518 
519  // Full staggered
520  class DiracImprovedStaggered : public Dirac {
521 
522  protected:
525  FaceBuffer face1, face2; // multi-gpu communication buffers
526 
527  public:
530  virtual ~DiracImprovedStaggered();
532 
533  virtual void checkParitySpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const;
534 
535  virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in,
536  const QudaParity parity) const;
538  const QudaParity parity, const cudaColorSpinorField &x, const double &k) const;
539  virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
540  virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
541 
542  virtual void prepare(cudaColorSpinorField* &src, cudaColorSpinorField* &sol,
544  const QudaSolutionType) const;
545  virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b,
546  const QudaSolutionType) const;
547  };
548 
549  // Even-odd preconditioned staggered
551 
552  protected:
553 
554  public:
557  virtual ~DiracImprovedStaggeredPC();
559 
560  virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
561  virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const;
562 
563  virtual void prepare(cudaColorSpinorField* &src, cudaColorSpinorField* &sol,
565  const QudaSolutionType) const;
566  virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b,
567  const QudaSolutionType) const;
568  };
569 
570  // Functor base class for applying a given Dirac matrix (M, MdagM, etc.)
571  class DiracMatrix {
572 
573  protected:
574  const Dirac *dirac;
575 
576  public:
577  DiracMatrix(const Dirac &d) : dirac(&d) { }
578  DiracMatrix(const Dirac *d) : dirac(d) { }
579  virtual ~DiracMatrix() = 0;
580 
581  virtual void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in) const = 0;
583  cudaColorSpinorField &tmp) const = 0;
585  cudaColorSpinorField &Tmp1, cudaColorSpinorField &Tmp2) const = 0;
586 
587  unsigned long long flops() const { return dirac->Flops(); }
588 
589 
591 
592  std::string Type() const { return typeid(*dirac).name(); }
593 
594  bool isStaggered() const {
595  return (Type() == typeid(DiracStaggeredPC).name() ||
596  Type() == typeid(DiracStaggered).name() ||
597  Type() == typeid(DiracImprovedStaggeredPC).name() ||
598  Type() == typeid(DiracImprovedStaggered).name()) ? true : false;
599  }
600  };
601 
603  {
604 
605  }
606 
607  class DiracM : public DiracMatrix {
608 
609  public:
610  DiracM(const Dirac &d) : DiracMatrix(d) { }
611  DiracM(const Dirac *d) : DiracMatrix(d) { }
612 
614  {
615  dirac->M(out, in);
616  }
617 
619  {
620  dirac->tmp1 = &tmp;
621  dirac->M(out, in);
622  dirac->tmp1 = NULL;
623  }
624 
626  cudaColorSpinorField &Tmp1, cudaColorSpinorField &Tmp2) const
627  {
628  dirac->tmp1 = &Tmp1;
629  dirac->tmp2 = &Tmp2;
630  dirac->M(out, in);
631  dirac->tmp2 = NULL;
632  dirac->tmp1 = NULL;
633  }
634  };
635 
636  class DiracMdagM : public DiracMatrix {
637 
638  public:
639  DiracMdagM(const Dirac &d) : DiracMatrix(d), shift(0.0) { }
640  DiracMdagM(const Dirac *d) : DiracMatrix(d), shift(0.0) { }
641 
643  double shift;
644 
646  {
647  dirac->MdagM(out, in);
648  if (shift != 0.0) axpyCuda(shift, const_cast<cudaColorSpinorField&>(in), out);
649  }
650 
652  {
653  dirac->tmp1 = &tmp;
654  dirac->MdagM(out, in);
655  if (shift != 0.0) axpyCuda(shift, const_cast<cudaColorSpinorField&>(in), out);
656  dirac->tmp1 = NULL;
657  }
658 
660  cudaColorSpinorField &Tmp1, cudaColorSpinorField &Tmp2) const
661  {
662  dirac->tmp1 = &Tmp1;
663  dirac->tmp2 = &Tmp2;
664  dirac->MdagM(out, in);
665  if (shift != 0.0) axpyCuda(shift, const_cast<cudaColorSpinorField&>(in), out);
666  dirac->tmp2 = NULL;
667  dirac->tmp1 = NULL;
668  }
669  };
670 
671 
672  class DiracMMdag : public DiracMatrix {
673 
674  public:
675  DiracMMdag(const Dirac &d) : DiracMatrix(d), shift(0.0) { }
676  DiracMMdag(const Dirac *d) : DiracMatrix(d), shift(0.0) { }
677 
679  double shift;
680 
682  {
683  dirac->MMdag(out, in);
684  if (shift != 0.0) axpyCuda(shift, const_cast<cudaColorSpinorField&>(in), out);
685  }
686 
688  {
689  dirac->tmp1 = &tmp;
690  dirac->MMdag(out, in);
691  if (shift != 0.0) axpyCuda(shift, const_cast<cudaColorSpinorField&>(in), out);
692  dirac->tmp1 = NULL;
693  }
694 
696  cudaColorSpinorField &Tmp1, cudaColorSpinorField &Tmp2) const
697  {
698  dirac->tmp1 = &Tmp1;
699  dirac->tmp2 = &Tmp2;
700  dirac->MMdag(out, in);
701  if (shift != 0.0) axpyCuda(shift, const_cast<cudaColorSpinorField&>(in), out);
702  dirac->tmp2 = NULL;
703  dirac->tmp1 = NULL;
704  }
705  };
706 
707  class DiracMdag : public DiracMatrix {
708 
709  public:
710  DiracMdag(const Dirac &d) : DiracMatrix(d) { }
711  DiracMdag(const Dirac *d) : DiracMatrix(d) { }
712 
714  {
715  dirac->Mdag(out, in);
716  }
717 
719  {
720  dirac->tmp1 = &tmp;
721  dirac->Mdag(out, in);
722  dirac->tmp1 = NULL;
723  }
724 
726  cudaColorSpinorField &Tmp1, cudaColorSpinorField &Tmp2) const
727  {
728  dirac->tmp1 = &Tmp1;
729  dirac->tmp2 = &Tmp2;
730  dirac->Mdag(out, in);
731  dirac->tmp2 = NULL;
732  dirac->tmp1 = NULL;
733  }
734  };
735 
736 } // namespace quda
737 
738 #endif // _DIRAC_QUDA_H
FaceBuffer face1
Definition: dirac_quda.h:148
DiracImprovedStaggeredPC & operator=(const DiracImprovedStaggeredPC &dirac)
Dirac(const DiracParam &param)
Definition: dirac.cpp:12
virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
void Dslash5(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
cudaGaugeField & gauge
Definition: dirac_quda.h:88
virtual void DslashXpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
virtual void checkParitySpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const
virtual void checkParitySpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const
Definition: dirac.cpp:84
double c_5[QUDA_MAX_DWF_LS]
NEW: used by mobius domain wall only.
Definition: dirac_quda.h:27
DiracImprovedStaggeredPC(const DiracParam &param)
void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
unsigned long long flops
Definition: dirac_quda.h:93
virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
void setDiracSloppyParam(DiracParam &diracParam, QudaInvertParam *inv_param, bool pc)
cudaColorSpinorField * tmp1
Definition: dirac_quda.h:39
virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
DiracMatrix(const Dirac &d)
Definition: dirac_quda.h:577
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in, cudaColorSpinorField &tmp) const
Definition: dirac_quda.h:718
void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
DiracWilson(const DiracParam &param)
DiracDomainWall4DPC & operator=(const DiracDomainWall4DPC &dirac)
DiracWilsonPC & operator=(const DiracWilsonPC &dirac)
void Dslash5inv(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const double &k) const
void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
DiracTwistedMassPC(const DiracTwistedMassPC &dirac)
void Clover(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
DiracWilsonPC(const DiracParam &param)
void TwistInv(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
virtual void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
DiracStaggeredPC(const DiracParam &param)
void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
DiracMdag(const Dirac &d)
Definition: dirac_quda.h:710
void twistedCloverApply(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaTwistGamma5Type twistType, const int parity) const
void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
bool newTmp(cudaColorSpinorField **, const cudaColorSpinorField &) const
Definition: dirac.cpp:51
void CloverInv(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
DiracMdagM(const Dirac *d)
Definition: dirac_quda.h:640
double c_5[QUDA_MAX_DWF_LS]
Definition: dirac_quda.h:333
::std::string string
Definition: gtest.h:1979
void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
DiracTwistedMassPC & operator=(const DiracTwistedMassPC &dirac)
virtual void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
TimeProfile profile
Definition: dirac_quda.h:104
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in, cudaColorSpinorField &Tmp1, cudaColorSpinorField &Tmp2) const
Definition: dirac_quda.h:625
virtual void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in, cudaColorSpinorField &Tmp1, cudaColorSpinorField &Tmp2) const
Definition: dirac_quda.h:725
virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const =0
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
Definition: dirac_quda.h:713
void Dslash5inv(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const double &k) const
DiracWilson & operator=(const DiracWilson &dirac)
void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in, cudaColorSpinorField &tmp) const
Definition: dirac_quda.h:651
virtual ~Dirac()
Definition: dirac.cpp:28
DiracTwistedMass & operator=(const DiracTwistedMass &dirac)
virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
virtual void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
DiracTwistedCloverPC(const DiracTwistedCloverPC &dirac)
QudaMatPCType getMatPCType() const
Definition: dirac_quda.h:590
virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
virtual ~DiracClover()
virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
cudaGaugeField * gauge
Definition: dirac_quda.h:30
cudaGaugeField & fatGauge
Definition: dirac_quda.h:523
DiracMobiusDomainWallPC & operator=(const DiracMobiusDomainWallPC &dirac)
unsigned long long flops() const
Definition: dirac_quda.h:587
QudaGaugeParam param
Definition: pack_test.cpp:17
void checkSpinorAlias(const cudaColorSpinorField &, const cudaColorSpinorField &) const
Definition: dirac.cpp:129
virtual void DslashXpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const =0
void setDiracParam(DiracParam &diracParam, QudaInvertParam *inv_param, bool pc)
DiracStaggered & operator=(const DiracStaggered &dirac)
virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
void Dslash4Xpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const =0
int commDim[QUDA_MAX_DIM]
Definition: dirac_quda.h:102
virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
double shift
Shift term added onto operator (M^dag M + shift)
Definition: dirac_quda.h:679
virtual void DslashXpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
virtual void DslashXpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
DiracDomainWallPC(const DiracParam &param)
void TwistClover(cudaColorSpinorField &out, const cudaColorSpinorField &in, const int parity) const
void Dslash4(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
void Dslash5(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
cudaColorSpinorField * tmp
void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
DiracClover & operator=(const DiracClover &dirac)
virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
DiracStaggeredPC & operator=(const DiracStaggeredPC &dirac)
virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
cudaCloverField & clover
Definition: dirac_quda.h:420
void Dagger(QudaDagType dag)
Definition: dirac_quda.h:140
virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
DiracDomainWall & operator=(const DiracDomainWall &dirac)
unsigned long long Flops() const
Definition: dirac_quda.h:136
virtual void checkParitySpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const
cudaCloverField & clover
Definition: dirac_quda.h:199
DiracMatrix(const Dirac *d)
Definition: dirac_quda.h:578
DiracTwistedCloverPC & operator=(const DiracTwistedCloverPC &dirac)
DiracDomainWall4DPC(const DiracParam &param)
int commDim[QUDA_MAX_DIM]
Definition: dirac_quda.h:42
virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
QudaDagType dagger
Definition: dirac_quda.h:29
cpuColorSpinorField * in
void Dslash5Xpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
enum QudaMatPCType_s QudaMatPCType
DiracTwistedClover & operator=(const DiracTwistedClover &dirac)
double mass
Definition: dirac_quda.h:90
void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
QudaTune tune
Definition: dirac_quda.h:100
virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const =0
void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
cudaColorSpinorField * tmp2
Definition: dirac_quda.h:40
DiracDomainWall(const DiracParam &param)
DiracMMdag(const Dirac &d)
Definition: dirac_quda.h:675
enum QudaSolutionType_s QudaSolutionType
virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
double b_5[QUDA_MAX_DWF_LS]
NEW: used by domain wall and twisted mass.
Definition: dirac_quda.h:26
void deleteTmp(cudaColorSpinorField **, const bool &reset) const
Definition: dirac.cpp:59
QudaDiracType type
Definition: dirac_quda.h:21
DiracTwistedClover(const DiracTwistedClover &dirac)
Dirac * dirac
Definition: dslash_test.cpp:45
void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
QudaDagType dagger
Definition: dirac_quda.h:92
QudaMatPCType matpcType
NEW: used by mobius domain wall only.
Definition: dirac_quda.h:28
void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
enum QudaDagType_s QudaDagType
void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
enum QudaParity_s QudaParity
void axpyCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y)
Definition: blas_quda.cu:115
virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
cudaCloverField * cloverInv
Definition: dirac_quda.h:34
DiracCloverPC(const DiracParam &param)
virtual void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
Definition: dirac_quda.h:613
virtual void DslashXpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
Definition: dirac_quda.h:681
DiracDomainWallPC & operator=(const DiracDomainWallPC &dirac)
int x[4]
void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
double kappa
Definition: dirac_quda.h:89
QudaMatPCType matpcType
Definition: dirac_quda.h:91
double shift
Shift term added onto operator (M^dag M + shift)
Definition: dirac_quda.h:643
DiracM(const Dirac &d)
Definition: dirac_quda.h:610
void setMass(double mass)
Definition: dirac_quda.h:132
virtual void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
DiracMobiusDomainWallPC(const DiracParam &param)
void Dslash5Xpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
void Dslash4(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
void Dslash4pre(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
DiracClover(const DiracParam &param)
FaceBuffer face2
Definition: dirac_quda.h:148
cudaColorSpinorField * tmp2
Definition: dirac_quda.h:95
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in, cudaColorSpinorField &tmp) const
Definition: dirac_quda.h:687
virtual void checkFullSpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const
Definition: dirac.cpp:121
virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
DiracM(const Dirac *d)
Definition: dirac_quda.h:611
virtual void DslashXpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
const Dirac * dirac
Definition: dirac_quda.h:574
Dirac & operator=(const Dirac &dirac)
Definition: dirac.cpp:32
virtual ~DiracMatrix()=0
Definition: dirac_quda.h:602
QudaInvertParam inv_param
Definition: dslash_test.cpp:38
virtual void DslashXpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
NEW : added setFace(), domainWallDslashCuda() got an extra argument.
cpuColorSpinorField * out
void TwistCloverInv(cudaColorSpinorField &out, const cudaColorSpinorField &in, const int parity) const
virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const =0
cudaColorSpinorField * tmp1
Definition: dirac_quda.h:94
cudaCloverField * clover
Definition: dirac_quda.h:33
virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
virtual void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const =0
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in, cudaColorSpinorField &Tmp1, cudaColorSpinorField &Tmp2) const
Definition: dirac_quda.h:659
#define QUDA_MAX_DWF_LS
Maximum length of the Ls dimension for domain-wall fermions.
void Dslash4Xpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
DiracMdagM(const Dirac &d)
Definition: dirac_quda.h:639
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in, cudaColorSpinorField &tmp) const
Definition: dirac_quda.h:618
virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
virtual void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in) const =0
#define printfQuda(...)
Definition: util_quda.h:67
enum QudaTune_s QudaTune
cudaGaugeField * fatGauge
Definition: dirac_quda.h:31
void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
DiracMMdag(const Dirac *d)
Definition: dirac_quda.h:676
cudaGaugeField & longGauge
Definition: dirac_quda.h:524
virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
cudaCloverField & cloverInv
Definition: dirac_quda.h:421
void twistedApply(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaTwistGamma5Type twistType) const
std::string Type() const
Definition: dirac_quda.h:592
bool isStaggered() const
Definition: dirac_quda.h:594
virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
void DslashXpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
cudaGaugeField * longGauge
Definition: dirac_quda.h:32
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...
void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
DiracTwistedMass(const DiracTwistedMass &dirac)
void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
static Dirac * create(const DiracParam &param)
Definition: dirac.cpp:134
double b_5[QUDA_MAX_DWF_LS]
Definition: dirac_quda.h:332
virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
void Mdag(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
Definition: dirac.cpp:68
virtual ~DiracWilson()
DiracStaggered(const DiracParam &param)
DiracCloverPC & operator=(const DiracCloverPC &dirac)
virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in, cudaColorSpinorField &Tmp1, cudaColorSpinorField &Tmp2) const
Definition: dirac_quda.h:695
virtual void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
void operator()(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
Definition: dirac_quda.h:645
virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
DiracMdag(const Dirac *d)
Definition: dirac_quda.h:711
void DslashXpay(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity, const cudaColorSpinorField &x, const double &k) const
NEW : added setFace(), domainWallDslashCuda() got an extra argument.
virtual void Dslash(cudaColorSpinorField &out, const cudaColorSpinorField &in, const QudaParity parity) const
DiracImprovedStaggered(const DiracParam &param)
const QudaParity parity
Definition: dslash_test.cpp:29
void checkParitySpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const
QudaMatPCType getMatPCType() const
Definition: dirac_quda.h:139
virtual void M(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
virtual void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
virtual void reconstruct(cudaColorSpinorField &x, const cudaColorSpinorField &b, const QudaSolutionType) const
virtual void MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
enum QudaDiracType_s QudaDiracType
void checkParitySpinor(const cudaColorSpinorField &, const cudaColorSpinorField &) const
DiracImprovedStaggered & operator=(const DiracImprovedStaggered &dirac)
void Twist(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
virtual void prepare(cudaColorSpinorField *&src, cudaColorSpinorField *&sol, cudaColorSpinorField &x, cudaColorSpinorField &b, const QudaSolutionType) const
void MMdag(cudaColorSpinorField &out, const cudaColorSpinorField &in) const
Definition: dirac.cpp:75