Bridge++  Ver. 1.3.x
shiftsolver_CG.h
Go to the documentation of this file.
1 
14 #ifndef SHIFTSOLVER_CG_INCLUDED
15 #define SHIFTSOLVER_CG_INCLUDED
16 
17 #include "shiftsolver.h"
18 
19 #include "bridgeIO.h"
20 using Bridge::vout;
21 
22 //- parameters class
23 class Parameters_Shiftsolver_CG : virtual public Parameters
24 {
25  public:
27 };
28 //- end
29 
31 
39 {
40  public:
41  static const std::string class_name;
42 
43  private:
44 
46  int m_Niter;
47  double m_Stop_cond;
48 
49  std::vector<Field> x, p;
50  Field r, s;
51  std::vector<double> zeta1, zeta2, csh2, pp;
52  double snorm, alpha_p, beta_p;
53  int Nshift2;
54 
55  double m_sigma0;
56 
57  public:
59  : Shiftsolver(), m_fopr(fopr) {}
60 
61  Shiftsolver_CG(Fopr *fopr, int niter, double stop_cond)
62  : Shiftsolver(), m_fopr(fopr)
63  {
64  set_parameters(niter, stop_cond);
65  }
66 
68  : Shiftsolver(), m_fopr(fopr.get()) {}
69 
70  Shiftsolver_CG(unique_ptr<Fopr>& fopr, int niter, double stop_cond)
71  : Shiftsolver(), m_fopr(fopr.get())
72  {
73  set_parameters(niter, stop_cond);
74  }
75 
77 
78  void set_parameters(const Parameters& params);
79  void set_parameters(const int niter, const double stop_cond);
80 
81  void solve(
82  std::vector<Field>& solution,
83  const std::vector<double>& shift,
84  const Field& source,
85  int& Nconv, double& diff);
86 
87  private:
88 
89  void solve_init(double&);
90  void solve_step(double&);
91 
92  void reset_field(const Field& b, const std::vector<double>& sigma, const int Nshift);
93 };
94 #endif
BridgeIO vout
Definition: bridgeIO.cpp:278
Shiftsolver_CG(Fopr *fopr, int niter, double stop_cond)
static const std::string class_name
void reset_field(const Field &b, const std::vector< double > &sigma, const int Nshift)
Shiftsolver_CG(unique_ptr< Fopr > &fopr)
void solve_init(double &)
std::vector< Field > x
int shift(void)
Container of Field-type object.
Definition: field.h:39
std::vector< Field > p
Multishift Conjugate Gradient solver.
void set_parameters(const Parameters &params)
Shiftsolver class as an abstract base class for multi-shift solvers.
Definition: shiftsolver.h:25
Class for parameters.
Definition: parameters.h:38
std::vector< double > csh2
std::vector< double > zeta2
Shiftsolver_CG(unique_ptr< Fopr > &fopr, int niter, double stop_cond)
Shiftsolver_CG(Fopr *fopr)
std::vector< double > pp
std::vector< double > zeta1
Base class of fermion operator family.
Definition: fopr.h:49
void solve_step(double &)
void solve(std::vector< Field > &solution, const std::vector< double > &shift, const Field &source, int &Nconv, double &diff)