QUDA  v0.7.0
A library for QCD on GPUs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
lanczos_quda.h
Go to the documentation of this file.
1 #ifndef _LANCZOS_QUDA_H
2 #define _LANCZOS_QUDA_H
3 
4 #include <quda.h>
5 #include <quda_internal.h>
6 #include <dirac_quda.h>
7 #include <ritz_quda.h>
8 #include <color_spinor_field.h>
9 #include <eig_variables.h>
10 
11 namespace quda {
12 
16  class Eig_Solver {
17 
18  protected:
21 
22  public:
23  Eig_Solver(QudaEigParam &eigParam, TimeProfile &profile) : eigParam(eigParam), profile(profile) { ; }
24  virtual ~Eig_Solver() { ; }
25 
26  virtual void operator()(double *alpha, double *beta, cudaColorSpinorField **Eig_Vec,
27  cudaColorSpinorField &r, cudaColorSpinorField &Apsi, int k0, int m) = 0;
28 
29  // solver factory
31 
35  bool convergence(const double &r2, const double &hq2, const double &r2_tol,
36  const double &hq_tol);
37 
41  void PrintStats(const char*, int k, const double &r2, const double &b2, const double &hq2);
42 
49  void PrintSummary(const char *name, int k, const double &r2, const double &b2);
50 
54  void GrandSchm_test(cudaColorSpinorField &psi, cudaColorSpinorField **Eig_Vec, int Nvec, double *delta);
55  };
56 
60  class Lanczos : public Eig_Solver {
61 
62  private:
63  const RitzMat &ritz_mat;
64 
65  public:
67  virtual ~Lanczos();
68 
69  void operator()(double *alpha, double *beta, cudaColorSpinorField **Eig_Vec,
70  cudaColorSpinorField &r, cudaColorSpinorField &Apsi, int k0, int m);
71  };
72 
77  class ImpRstLanczos : public Eig_Solver {
78 
79  private:
80  const RitzMat &ritz_mat;
81 
82  public:
84  virtual ~ImpRstLanczos();
85 
86  void operator()(double *alpha, double *beta, cudaColorSpinorField **Eig_Vec,
87  cudaColorSpinorField &r, cudaColorSpinorField &Apsi, int k0, int m);
88  };
89 
90 
91 } // namespace quda
92 
93 #endif // _LANCZOS_QUDA_H
void operator()(double *alpha, double *beta, cudaColorSpinorField **Eig_Vec, cudaColorSpinorField &r, cudaColorSpinorField &Apsi, int k0, int m)
QudaEigParam & eigParam
Definition: lanczos_quda.h:19
void PrintStats(const char *, int k, const double &r2, const double &b2, const double &hq2)
Definition: eig_solver.cpp:38
ImpRstLanczos(RitzMat &ritz_mat, QudaEigParam &eigParam, TimeProfile &profile)
QudaGaugeParam param
Definition: pack_test.cpp:17
bool convergence(const double &r2, const double &hq2, const double &r2_tol, const double &hq_tol)
Definition: eig_solver.cpp:32
void GrandSchm_test(cudaColorSpinorField &psi, cudaColorSpinorField **Eig_Vec, int Nvec, double *delta)
Definition: eig_solver.cpp:45
virtual void operator()(double *alpha, double *beta, cudaColorSpinorField **Eig_Vec, cudaColorSpinorField &r, cudaColorSpinorField &Apsi, int k0, int m)=0
TimeProfile & profile
Definition: lanczos_quda.h:20
static Eig_Solver * create(QudaEigParam &param, RitzMat &ritz_mat, TimeProfile &profile)
Definition: eig_solver.cpp:12
Lanczos(RitzMat &ritz_mat, QudaEigParam &eigParam, TimeProfile &profile)
Eig_Solver(QudaEigParam &eigParam, TimeProfile &profile)
Definition: lanczos_quda.h:23
Main header file for the QUDA library.
void PrintSummary(const char *name, int k, const double &r2, const double &b2)
Definition: eig_solver.cpp:42
virtual ~Eig_Solver()
Definition: lanczos_quda.h:24
void operator()(double *alpha, double *beta, cudaColorSpinorField **Eig_Vec, cudaColorSpinorField &r, cudaColorSpinorField &Apsi, int k0, int m)