Bridge++  Ver. 1.3.x
fopr_Clover_eo.h
Go to the documentation of this file.
1 
14 #ifndef FOPR_CLOVER_EO_INCLUDED
15 #define FOPR_CLOVER_EO_INCLUDED
16 
17 #include <vector>
18 #include <string>
19 
20 //#include "fopr_Wilson_eo.h"
21 #include "fopr_Wilson_eo_impl.h"
22 #include "fopr_CloverTerm_eo.h"
23 
24 //#include "solver_CG.h"
25 
26 #include "bridgeIO.h"
27 using Bridge::vout;
28 
29 //- parameters class
30 class Parameters_Fopr_Clover_eo : virtual public Parameters
31 {
32  public:
34 };
35 //- end
36 
38 
53 class Fopr_Clover_eo : public Fopr_eo
54 {
55  public:
56  static const std::string class_name;
57 
58  private:
61 
62  double m_kappa;
63  double m_cSW;
64  std::vector<int> m_boundary;
65 
66  std::string m_mode;
67 
70 
73 
76 
77  void (Fopr_Clover_eo::*m_mult)(Field&, const Field&);
78  void (Fopr_Clover_eo::*m_mult_dag)(Field&, const Field&);
79  void (Fopr_Clover_eo::*m_preProp)(Field&, Field&, const Field&);
80  void (Fopr_Clover_eo::*m_postProp)(Field&, const Field&, const Field&);
81 
82  public:
83  Fopr_Clover_eo(std::string repr) { init(repr); }
84 
86 
87  void set_parameters(const Parameters& params);
88  void set_parameters(const double kappa, const double cSW,
89  const std::vector<int> bc);
90 
91  void set_config(Field *U);
92 
94  {
95  set_config(U.get());
96  }
97 
98  void set_mode(std::string mode)
99  {
100  m_mode = mode;
101 
102  if (m_mode == "D") {
107  } else if (m_mode == "Ddag") {
112  } else if (m_mode == "DdagD") {
115  } else if (m_mode == "DDdag") {
118  } else if (m_mode == "H") {
121  } else {
122  vout.crucial("%s: undefined mode = %s\n", class_name.c_str(), mode.c_str());
123  exit(EXIT_FAILURE);
124  }
125  }
126 
127  std::string get_mode() const
128  { return m_mode; }
129 
130 
131  void mult(Field& v, const Field& f)
132  { (this->*m_mult)(v, f); }
133 
134  void mult_dag(Field& v, const Field& f)
135  { (this->*m_mult_dag)(v, f); }
136 
137  //- method for even odd fermion operator
138  void preProp(Field& Be, Field& bo, const Field& b)
139  { (this->*m_preProp)(Be, bo, b); }
140 
141  void postProp(Field& x, const Field& xe, const Field& bo)
142  { (this->*m_postProp)(x, xe, bo); }
143 
144  void prePropD(Field&, Field&, const Field&);
145  void postPropD(Field&, const Field&, const Field&);
146  void prePropDag(Field&, Field&, const Field&);
147  void postPropDag(Field&, const Field&, const Field&);
148 
149  const Field_F mult_csw_inv(const Field_F&, const int ieo);
150 
151  void D(Field& v, const Field& f);
152  void Ddag(Field& v, const Field& f);
153  void DdagD(Field& v, const Field& f);
154  void DDdag(Field& v, const Field& f);
155  void H(Field& v, const Field& f);
156  void mult_gm5(Field& v, const Field& f);
157  void MeoMoe(Field& v, const Field& f);
158 
159  // ieo=0: even <-- odd
160  // ieo=1: odd <-- even
161  void Meo(Field&, const Field&, const int ieo);
162  void Meo_gm5(Field_F&, const Field_F&, const int ieo);
163  void Mdageo(Field_F&, const Field_F&, const int ieo);
164 
165  void mult_isigma(Field_F& w, const Field_F& f,
166  const int mu, const int nu);
167 
168  inline std::vector<double> csmatrix(const int& site)
169  { return m_fopr_csw->csmatrix(site); }
170 
171  int field_nvol() { return m_Nvol; }
172  int field_nin() { return 2 * m_Nc * m_Nd; }
173  int field_nex() { return 1; }
174 
176  double flop_count();
177 
178  private:
179  void init(const std::string repr);
180  void tidyup();
181 };
182 #endif
BridgeIO vout
Definition: bridgeIO.cpp:278
void mult_isigma(Field_F &w, const Field_F &f, const int mu, const int nu)
std::vector< double > csmatrix(const int &site)
void MeoMoe(Field &v, const Field &f)
void set_parameters(const Parameters &params)
void mult_gm5(Field &v, const Field &f)
Fopr_Clover_eo(std::string repr)
std::string get_mode() const
only for Fopr_Overlap
double flop_count()
this returns the number of floating point operations.
void(Fopr_Clover_eo::* m_mult)(Field &, const Field &)
double m_cSW
clover coefficient.
void postProp(Field &x, const Field &xe, const Field &bo)
void(Fopr_Clover_eo::* m_postProp)(Field &, const Field &, const Field &)
Container of Field-type object.
Definition: field.h:39
int field_nvol()
returns the volume for which the fermion operator is defined.
std::vector< int > m_boundary
boundary condition.
void init(const std::string repr)
void Mdageo(Field_F &, const Field_F &, const int ieo)
Class for parameters.
Definition: parameters.h:38
std::string m_mode
Even-odd site index.
Definition: index_eo.h:38
void H(Field &v, const Field &f)
Field_F m_vF3
working field.
void(Fopr_Clover_eo::* m_preProp)(Field &, Field &, const Field &)
void prePropDag(Field &, Field &, const Field &)
Wilson-type fermion field.
Definition: field_F.h:37
void DdagD(Field &v, const Field &f)
void postPropDag(Field &, const Field &, const Field &)
static const std::string class_name
void Meo(Field &, const Field &, const int ieo)
SU(N) gauge field.
Definition: field_G.h:38
Field m_w1
working field.
void DDdag(Field &v, const Field &f)
void Meo_gm5(Field_F &, const Field_F &, const int ieo)
Even-odd Clover fermion operator.
pointer get() const
Base class of fermion operator family.
Definition: fopr_eo.h:34
void set_config(unique_ptr< Field_G > &U)
Fopr_Wilson_eo * m_fopr_w
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
void preProp(Field &Be, Field &bo, const Field &b)
Even-odd Wilson fermion operator.
double m_kappa
hopping parameter.
void set_config(Field *U)
setting pointer to the gauge configuration.
int field_nex()
returns the external d.o.f. for which the fermion operator is defined.
void D(Field &v, const Field &f)
Fopr_CloverTerm_eo * m_fopr_csw
void Ddag(Field &v, const Field &f)
void(Fopr_Clover_eo::* m_mult_dag)(Field &, const Field &)
int field_nin()
returns the on-site d.o.f. for which the fermion operator is defined.
Field_G * m_Ueo
const Field_F mult_csw_inv(const Field_F &, const int ieo)
void prePropD(Field &, Field &, const Field &)
std::vector< double > csmatrix(const int &)
void mult_dag(Field &v, const Field &f)
hermitian conjugate of mult(Field&, const Field&).
void mult(Field &v, const Field &f)
multiplies fermion operator to a given field (2nd argument) and set the resultant field to the 1st ar...
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
void postPropD(Field &, const Field &, const Field &)