QUDA v0.4.0
A library for QCD on GPUs
quda/include/invert_quda.h
Go to the documentation of this file.
00001 #ifndef _INVERT_QUDA_H
00002 #define _INVERT_QUDA_H
00003 
00004 #include <quda.h>
00005 #include <quda_internal.h>
00006 #include <dirac_quda.h>
00007 #include <color_spinor_field.h>
00008 
00009 class Solver {
00010 
00011  protected:
00012   QudaInvertParam &invParam;
00013 
00014  public:
00015   Solver(QudaInvertParam &invParam) : invParam(invParam) { ; }
00016   virtual ~Solver() { ; }
00017 
00018   virtual void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in) = 0;
00019 };
00020 
00021 class CG : public Solver {
00022 
00023  private:
00024   const DiracMatrix &mat;
00025   const DiracMatrix &matSloppy;
00026 
00027  public:
00028   CG(DiracMatrix &mat, DiracMatrix &matSloppy, QudaInvertParam &invParam);
00029   virtual ~CG();
00030 
00031   void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in);
00032 };
00033 
00034 class BiCGstab : public Solver {
00035 
00036  private:
00037   DiracMatrix &mat;
00038   const DiracMatrix &matSloppy;
00039   const DiracMatrix &matPrecon;
00040 
00041   // pointers to fields to avoid multiple creation overhead
00042   cudaColorSpinorField *yp, *rp, *pp, *vp, *tmpp, *tp, *wp, *zp;
00043   bool init;
00044 
00045  public:
00046   BiCGstab(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon,
00047            QudaInvertParam &invParam);
00048   virtual ~BiCGstab();
00049 
00050   void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in);
00051 };
00052 
00053 class GCR : public Solver {
00054 
00055  private:
00056   const DiracMatrix &mat;
00057   const DiracMatrix &matSloppy;
00058   const DiracMatrix &matPrecon;
00059 
00060   Solver *K;
00061   QudaInvertParam Kparam; // parameters for preconditioner solve
00062 
00063  public:
00064   GCR(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon,
00065       QudaInvertParam &invParam);
00066   virtual ~GCR();
00067 
00068   void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in);
00069 };
00070 
00071 class MR : public Solver {
00072 
00073  private:
00074   const DiracMatrix &mat;
00075   cudaColorSpinorField *rp;
00076   cudaColorSpinorField *Arp;
00077   cudaColorSpinorField *tmpp;
00078   bool init;
00079 
00080  public:
00081   MR(DiracMatrix &mat, QudaInvertParam &invParam);
00082   virtual ~MR();
00083 
00084   void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in);
00085 };
00086 
00087 // multigrid solver
00088 class alphaSA : public Solver {
00089 
00090  protected:
00091   const DiracMatrix &mat;
00092 
00093  public:
00094   alphaSA(DiracMatrix &mat, QudaInvertParam &invParam);
00095   virtual ~alphaSA() { ; }
00096 
00097   void operator()(cudaColorSpinorField **out, cudaColorSpinorField &in);
00098 };
00099 
00100 class MultiShiftSolver {
00101 
00102  protected:
00103   QudaInvertParam &invParam;
00104 
00105  public:
00106   MultiShiftSolver(QudaInvertParam &invParam) : invParam(invParam) { ; }
00107   virtual ~MultiShiftSolver() { ; }
00108 
00109   virtual void operator()(cudaColorSpinorField **out, cudaColorSpinorField &in) = 0;
00110 };
00111 
00112 class MultiShiftCG : public MultiShiftSolver {
00113 
00114  protected:
00115   const DiracMatrix &mat;
00116   const DiracMatrix &matSloppy;
00117 
00118  public:
00119   MultiShiftCG(DiracMatrix &mat, DiracMatrix &matSloppy, QudaInvertParam &invParam);
00120   virtual ~MultiShiftCG();
00121 
00122   void operator()(cudaColorSpinorField **out, cudaColorSpinorField &in);
00123 };
00124 
00125 #endif // _INVERT_QUDA_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines