QUDA  v0.5.0
A library for QCD on GPUs
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
invert_quda.h
Go to the documentation of this file.
1 #ifndef _INVERT_QUDA_H
2 #define _INVERT_QUDA_H
3 
4 #include <quda.h>
5 #include <quda_internal.h>
6 #include <dirac_quda.h>
7 #include <color_spinor_field.h>
8 
9 namespace quda {
10 
11  class Solver {
12 
13  protected:
16 
17  public:
18  Solver(QudaInvertParam &invParam, TimeProfile &profile) : invParam(invParam), profile(profile) { ; }
19  virtual ~Solver() { ; }
20 
22 
23  // solver factory
25  DiracMatrix &matPrecon, TimeProfile &profile);
26 
27  bool convergence(const double &r2, const double &hq2, const double &r2_tol,
28  const double &hq_tol);
29 
33  void PrintStats(const char*, int k, const double &r2, const double &b2, const double &hq2);
34 
41  void PrintSummary(const char *name, int k, const double &r2, const double &b2);
42 
43  };
44 
45  class CG : public Solver {
46 
47  private:
48  const DiracMatrix &mat;
49  const DiracMatrix &matSloppy;
50 
51  public:
53  virtual ~CG();
54 
56  };
57 
58  class BiCGstab : public Solver {
59 
60  private:
61  DiracMatrix &mat;
62  const DiracMatrix &matSloppy;
63  const DiracMatrix &matPrecon;
64 
65  // pointers to fields to avoid multiple creation overhead
66  cudaColorSpinorField *yp, *rp, *pp, *vp, *tmpp, *tp, *wp, *zp;
67  bool init;
68 
69  public:
70  BiCGstab(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon,
72  virtual ~BiCGstab();
73 
75  };
76 
77  class GCR : public Solver {
78 
79  private:
80  const DiracMatrix &mat;
81  const DiracMatrix &matSloppy;
82  const DiracMatrix &matPrecon;
83 
84  Solver *K;
85  QudaInvertParam Kparam; // parameters for preconditioner solve
86 
87  public:
88  GCR(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon,
90  virtual ~GCR();
91 
93  };
94 
95  class MR : public Solver {
96 
97  private:
98  const DiracMatrix &mat;
101  cudaColorSpinorField *tmpp;
102  bool init;
103  bool allocate_r;
104 
105  public:
107  virtual ~MR();
108 
110  };
111 
112  // multigrid solver
113  class alphaSA : public Solver {
114 
115  protected:
116  const DiracMatrix &mat;
117 
118  public:
120  virtual ~alphaSA() { ; }
121 
123  };
124 
126 
127  protected:
130 
131  public:
133  invParam(invParam), profile(profile) { ; }
134  virtual ~MultiShiftSolver() { ; }
135 
137  };
138 
140 
141  protected:
142  const DiracMatrix &mat;
144 
145  public:
147  virtual ~MultiShiftCG();
148 
150  };
151 
159  class MinResExt {
160 
161  protected:
162  const DiracMatrix &mat;
164 
165  public:
167  virtual ~MinResExt();
168 
178  cudaColorSpinorField **q, int N);
179  };
180 
181 } // namespace quda
182 
183 #endif // _INVERT_QUDA_H