Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 <valarray>
18 #include <vector>
19 #include <string>
20 
21 //#include "fopr_Wilson_eo.h"
22 #include "fopr_Wilson_eo_impl.h"
23 #include "fopr_CloverTerm_eo.h"
24 
25 //#include "solver_CG.h"
26 
27 #include "bridgeIO.h"
28 using Bridge::vout;
29 
30 //- parameters class
31 class Parameters_Fopr_Clover_eo : virtual public Parameters
32 {
33  public:
35 };
36 //- end
37 
39 
52 class Fopr_Clover_eo : public Fopr_eo
53 {
54  public:
55  static const std::string class_name;
56 
57  private:
60 
61  double m_kappa;
62  double m_cSW;
63  std::valarray<int> m_boundary;
64 
65  std::string m_mode;
66 
69 
72 
75 
76  void (Fopr_Clover_eo::*m_mult)(Field &, const Field &);
77  void (Fopr_Clover_eo::*m_mult_dag)(Field &, const Field &);
78  void (Fopr_Clover_eo::*m_preProp)(Field &, Field &, const Field &);
79  void (Fopr_Clover_eo::*m_postProp)(Field &, const Field &, const Field &);
80 
81  public:
82  Fopr_Clover_eo(std::string repr) { init(repr); }
83 
85 
86  void set_parameters(const Parameters& params);
87  void set_parameters(const double kappa, const double cSW,
88  const std::valarray<int> bc);
89  void set_config(Field *U);
90 
91  void set_mode(std::string mode)
92  {
93  m_mode = mode;
94 
95  if (m_mode == "D") {
100  } else if (m_mode == "Ddag") {
105  } else if (m_mode == "DdagD") {
108  } else if (m_mode == "DDdag") {
111  } else if (m_mode == "H") {
114  } else {
115  vout.crucial("%s: undefined mode = %s\n", class_name.c_str(), mode.c_str());
116  abort();
117  }
118  }
119 
120  std::string get_mode() const
121  { return m_mode; }
122 
123  const Field mult(const Field& f)
124  {
126  Field v(f.nin(), f.nvol(), f.nex());
127  mult(v, f);
128  return v;
129  }
130 
131  const Field mult_dag(const Field& f)
132  {
134  Field v(f.nin(), f.nvol(), f.nex());
135  mult_dag(v, f);
136  return v;
137  }
138 
139  void mult(Field& v, const Field& f)
140  { (this->*m_mult)(v, f); }
141 
142  void mult_dag(Field& v, const Field& f)
143  { (this->*m_mult_dag)(v, f); }
144 
145  //- method for even odd fermion operator
146  void preProp(Field& Be, Field& bo, const Field& b)
147  { (this->*m_preProp)(Be, bo, b); }
148 
149  void postProp(Field& x, const Field& xe, const Field& bo)
150  { (this->*m_postProp)(x, xe, bo); }
151 
153  void assert_single_thread();
154 
155  void prePropD(Field&, Field&, const Field&);
156  void postPropD(Field&, const Field&, const Field&);
157  void prePropDag(Field&, Field&, const Field&);
158  void postPropDag(Field&, const Field&, const Field&);
159 
160  const Field_F mult_csw_inv(const Field_F&, const int ieo);
161 
162  // const Field_G trSigmaInv(const int mu, const int nu);
163 
164  const Field D(const Field& f);
165  const Field Ddag(const Field& f);
166  const Field DdagD(const Field& f);
167  const Field DDdag(const Field& f);
168  const Field H(const Field& f);
169  const Field mult_gm5(const Field& f);
170  const Field MeoMoe(const Field& f);
171 
172  void D(Field& v, const Field& f);
173  void Ddag(Field& v, const Field& f);
174  void DdagD(Field& v, const Field& f);
175  void DDdag(Field& v, const Field& f);
176  void H(Field& v, const Field& f);
177  void mult_gm5(Field& v, const Field& f);
178  void MeoMoe(Field& v, const Field& f);
179 
180  // ieo=0: even <-- odd
181  // ieo=1: odd <-- even
182  // void Meo(Field_F&, const Field_F&, const int ieo);
183  void Meo(Field&, const Field&, const int ieo);
184  void Meo_gm5(Field_F&, const Field_F&, const int ieo);
185  void Mdageo(Field_F&, const Field_F&, const int ieo);
186 
187  const Field_F Meo(const Field_F&, const int ieo);
188  const Field_F Meo_gm5(const Field_F&, const int ieo);
189  const Field_F Mdageo(const Field_F&, const int ieo);
190 
191  void mult_isigma(Field_F& w, const Field_F& f,
192  const int mu, const int nu);
193 
194  inline std::vector<double> csmatrix(const int& site)
195  { return m_fopr_csw->csmatrix(site); }
196 
197  int field_nvol() { return m_Nvol; }
198  int field_nin() { return 2 * m_Nc * m_Nd; }
199  int field_nex() { return 1; }
200 
202  double flop_count();
203 
204  private:
205  void init(const std::string repr);
206  void tidyup();
207 };
208 #endif
BridgeIO vout
Definition: bridgeIO.cpp:207
void mult_isigma(Field_F &w, const Field_F &f, const int mu, const int nu)
std::vector< double > csmatrix(const int &site)
void set_parameters(const Parameters &params)
Fopr_Clover_eo(std::string repr)
std::string get_mode() const
double flop_count()
this returns the number of floating point operations.
double m_cSW
clover coefficient.
void postProp(Field &x, const Field &xe, const Field &bo)
Container of Field-type object.
Definition: field.h:37
int field_nvol()
returns the volume for which the fermion operator is defined.
void init(const std::string repr)
void(Fopr_Clover_eo::* m_preProp)(Field &, Field &, const Field &)
int nvol() const
Definition: field.h:101
const Field mult(const Field &f)
multiplies fermion operator to a given field and returns the resultant field.
void Mdageo(Field_F &, const Field_F &, const int ieo)
void(Fopr_Clover_eo::* m_mult)(Field &, const Field &)
const Field mult_gm5(const Field &f)
Class for parameters.
Definition: parameters.h:40
std::string m_mode
Even-odd site index.
Definition: index_eo.h:39
const Field D(const Field &f)
const Field DDdag(const Field &f)
const Field MeoMoe(const Field &f)
Field_F m_vF3
working field.
const Field DdagD(const Field &f)
void prePropDag(Field &, Field &, const Field &)
Wilson-type fermion field.
Definition: field_F.h:37
void postPropDag(Field &, const Field &, const Field &)
static const std::string class_name
int nin() const
Definition: field.h:100
const Field H(const Field &f)
const Field Ddag(const Field &f)
void Meo(Field &, const Field &, const int ieo)
void(Fopr_Clover_eo::* m_mult_dag)(Field &, const Field &)
SU(N) gauge field.
Definition: field_G.h:36
Field m_w1
working field.
void Meo_gm5(Field_F &, const Field_F &, const int ieo)
Even-odd Clover fermion operator.
Base class of fermion operator family.
Definition: fopr_eo.h:33
int nex() const
Definition: field.h:102
void assert_single_thread()
function returning Field instance must be called from single thread.
Fopr_Wilson_eo * m_fopr_w
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
void preProp(Field &Be, Field &bo, const Field &b)
const Field mult_dag(const Field &f)
hermitian conjugate of mult(const Field&amp;).
Even-odd Wilson fermion operator.
double m_kappa
hopping parameter.
std::valarray< int > m_boundary
boundary condition.
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.
Fopr_CloverTerm_eo * m_fopr_csw
void(Fopr_Clover_eo::* m_postProp)(Field &, const 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&amp;, const Field&amp;).
void mult(Field &v, const Field &f)
multiplies fermion operator to a given field (2nd argument)
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 &)