Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_Wilson_eo.h
Go to the documentation of this file.
1 
15 #ifndef FOPR_WILSON_EO_INCLUDED
16 #define FOPR_WILSON_EO_INCLUDED
17 
18 #include "fopr_Wilson.h"
19 
20 #include "fopr_eo.h"
21 #include "shiftField_eo.h"
22 
23 #include "gammaMatrixSet.h"
24 
25 #include "bridgeIO.h"
26 using Bridge::vout;
27 
28 //- parameters class
29 class Parameters_Fopr_Wilson_eo : virtual public Parameters
30 {
31  public:
33 };
34 //- end
35 
37 
51 class Fopr_Wilson_eo : public Fopr_eo
52 {
53  private:
55  double m_kappa;
56  std::valarray<int> m_boundary;
59 
63 
64  std::valarray<GammaMatrix> m_GM;
65 
66  std::string m_mode;
67  std::string m_repr;
68 
69  void (Fopr_Wilson_eo::*m_mult) (Field&, const Field&);
70  void (Fopr_Wilson_eo::*m_mult_dag) (Field&, const Field&);
71  void (Fopr_Wilson_eo::*m_D) (Field&, const Field&);
72  void (Fopr_Wilson_eo::*m_gm5) (Field&, const Field&);
73  void (Fopr_Wilson_eo::*m_preProp) (Field&, Field&, const Field&);
74  void (Fopr_Wilson_eo::*m_postProp) (Field&, const Field&, const Field&);
75 
76  public:
77 
78  Fopr_Wilson_eo(std::string repr)
79  : m_Nvol(CommonParameters::Nvol()),
80  m_Nvol2(CommonParameters::Nvol() / 2),
81  m_Ndim(CommonParameters::Ndim()),
82  trf(m_Nvol2, 1), trf2(m_Nvol2, 1)
83  {
84  init(repr);
85  }
86 
88  {
89  delete m_Ueo;
90  }
91 
92  void set_parameters(const Parameters& params);
93  void set_parameters(const double kappa, const std::valarray<int> bc);
94 
95  void set_config(Field *U);
96 
97  // method for even odd fermion operator
98  void preProp(Field& Be, Field& bo, const Field& b)
99  {
100  (this->*m_preProp)(Be, bo, b);
101  }
102 
103  void postProp(Field& x, const Field& xe, const Field& bo)
104  {
105  (this->*m_postProp)(x, xe, bo);
106  }
107 
108  void prePropD(Field&, Field&, const Field&);
109  void postPropD(Field&, const Field&, const Field&);
110  void prePropDag(Field&, Field&, const Field&);
111  void postPropDag(Field&, const Field&, const Field&);
112 
113  const Field mult(const Field& f)
114  {
115  Field v(f.nin(), f.nvol(), f.nex());
116 
117  mult(v, f);
118  return v;
119  }
120 
121  const Field mult_dag(const Field& f)
122  {
123  Field v(f.nin(), f.nvol(), f.nex());
124 
125  mult_dag(v, f);
126  return v;
127  }
128 
129  void mult(Field& v, const Field& f)
130  {
131  (this->*m_mult)(v, f);
132  }
133 
134  void mult_dag(Field& v, const Field& f)
135  {
136  (this->*m_mult_dag)(v, f);
137  }
138 
139  void set_mode(std::string mode)
140  {
141  m_mode = mode;
142 
143  if (m_mode == "D") {
148  } else if (m_mode == "Ddag") {
153  } else if (m_mode == "DdagD") {
156  } else if (m_mode == "H") {
159  } else {
160  vout.crucial("Fopr_Wilson_eo: input mode is undefined.\n");
161  abort();
162  }
163  }
164 
165  std::string get_mode() const
166  {
167  return m_mode;
168  }
169 
170  void mult_undef(Field&, const Field&)
171  {
172  vout.crucial("Fopr_Wilson_eo: mode undefined.\n");
173  abort();
174  }
175 
176  const Field MeoMoe(const Field& f)
177  {
178  Field_F v((Field_F)f);
179 
180  v -= Meo(Meo(f, 1), 0);
181  return (Field)v;
182  }
183 
184  const Field D(const Field& f)
185  {
186  Field v(f.nin(), f.nvol(), f.nex());
187 
188  D(v, f);
189  return v;
190  }
191 
192  void D(Field& v, const Field& f)
193  {
194  v = f;
195  v -= (Field)Meo(Meo(f, 1), 0);
196  }
197 
198  const Field Ddag(const Field& f)
199  {
200  Field v(f.nin(), f.nvol(), f.nex());
201 
202  Ddag(v, f);
203  return v;
204  }
205 
206  void Ddag(Field& v, const Field& f)
207  {
208  v = f;
209  v -= (Field)Mdageo(Mdageo(f, 1), 0);
210  }
211 
212  const Field DdagD(const Field& f)
213  {
214  Field v(f.nin(), f.nvol(), f.nex());
215 
216  DdagD(v, f);
217  return v;
218  }
219 
220  void DdagD(Field& v, const Field& f)
221  {
222  v = Ddag(D(f));
223  }
224 
225  const Field H(const Field& f)
226  {
227  Field v(f.nin(), f.nvol(), f.nex());
228 
229  H(v, f);
230  return v;
231  }
232 
233  void H(Field& v, const Field& f)
234  {
235  v = mult_gm5(D(f));
236  }
237 
238  // const Field_F D(const Field_F&);
239  // const Field_F H(const Field_F&);
240 
241  const Field_F Meo(const Field_F&, const int ieo);
242  const Field_F Mdageo(const Field_F&, const int ieo);
243 
244  // ieo=0: even <-- odd
245  // ieo=1: odd <-- even
246 
247  const Field_F Meo_gm5(const Field_F&, const int ieo);
248 
249  const Field mult_gm5(const Field&);
250 
252  const Field gm5p(const int mu, const Field& v);
253 
254  int field_nvol() { return CommonParameters::Nvol() / 2; }
256  int field_nex() { return 1; }
257 
258  private:
259  void init(const std::string);
260  void mult_p(int mu, Field_F&, const Field_F&, const int ieo);
261  void mult_m(int mu, Field_F&, const Field_F&, const int ieo);
262 
263  void mult_xp(Field_F&, const Field_F&, const int ieo);
264  void mult_xm(Field_F&, const Field_F&, const int ieo);
265  void mult_yp(Field_F&, const Field_F&, const int ieo);
266  void mult_ym(Field_F&, const Field_F&, const int ieo);
267  void mult_zp(Field_F&, const Field_F&, const int ieo);
268  void mult_zm(Field_F&, const Field_F&, const int ieo);
269  void mult_tp(Field_F&, const Field_F&, const int ieo);
270  void mult_tm(Field_F&, const Field_F&, const int ieo);
271 };
272 #endif