Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_Wilson_eo_impl.h
Go to the documentation of this file.
1 
15 #ifndef FOPR_WILSON_EO_IMP_INCLUDED
16 #define FOPR_WILSON_EO_IMP_INCLUDED
17 
18 #include "Fopr/fopr_eo.h"
19 #include "Field/index_eo.h"
20 
21 #include "IO/bridgeIO.h"
22 using Bridge::vout;
23 
25 
35 namespace Imp {
36  class Fopr_Wilson_eo : public Fopr_eo
37  {
38  public:
39  static const std::string class_name;
40 
41  private:
42  int m_Nc, m_Nd, m_Nvc, m_Ndf;
44  int m_Nx, m_Ny, m_Nz, m_Nt, m_Nx2;
45 
46  double m_kappa;
47  std::vector<int> m_boundary;
48  std::vector<double> m_boundary2;
49 
50  std::string m_mode;
51  std::string m_repr;
52 
56 
57  std::vector<int> m_Leo;
59 
61  double *vcp1_xp, *vcp2_xp, *vcp1_xm, *vcp2_xm;
62  double *vcp1_yp, *vcp2_yp, *vcp1_ym, *vcp2_ym;
63  double *vcp1_zp, *vcp2_zp, *vcp1_zm, *vcp2_zm;
64  double *vcp1_tp, *vcp2_tp, *vcp1_tm, *vcp2_tm;
65 
66  void (Fopr_Wilson_eo::*m_gm5)(Field&, const Field&);
68  void (Fopr_Wilson_eo::*m_mult_tp)(Field&, const Field&, const int ieo);
69  void (Fopr_Wilson_eo::*m_mult_tm)(Field&, const Field&, const int ieo);
70 
71  void (Fopr_Wilson_eo::*m_mult)(Field&, const Field&);
72  void (Fopr_Wilson_eo::*m_mult_dag)(Field&, const Field&);
73  void (Fopr_Wilson_eo::*m_D)(Field&, const Field&);
74  void (Fopr_Wilson_eo::*m_preProp)(Field&, Field&, const Field&);
75  void (Fopr_Wilson_eo::*m_postProp)(Field&, const Field&, const Field&);
76 
77  public:
78 
80  { init("Dirac"); }
81 
82  Fopr_Wilson_eo(std::string repr)
83  { init(repr); }
84 
86  { tidyup(); }
87 
88  void set_parameters(const Parameters& params);
89  void set_parameters(const double kappa, const std::vector<int> bc);
90 
91  void set_config(Field *U);
92 
94  { return set_config(U.get()); }
95 
96  void set_mode(std::string mode);
97  std::string get_mode() const;
98 
99  // method for even odd fermion operator
100  void preProp(Field& Be, Field& bo, const Field& b)
101  { (this->*m_preProp)(Be, bo, b); }
102 
103  void postProp(Field& x, const Field& xe, const Field& bo)
104  { (this->*m_postProp)(x, xe, bo); }
105 
106  void prePropD(Field&, Field&, const Field&);
107  void postPropD(Field&, const Field&, const Field&);
108  void prePropDag(Field&, Field&, const Field&);
109  void postPropDag(Field&, const Field&, const Field&);
110 
111  void mult(Field& v, const Field& f)
112  { (this->*m_mult)(v, f); }
113 
114  void mult_dag(Field& v, const Field& f)
115  { (this->*m_mult_dag)(v, f); }
116 
117  void D(Field& v, const Field& f);
118  void Ddag(Field& v, const Field& f);
119  void DdagD(Field& v, const Field& f);
120  void DDdag(Field& v, const Field& f);
121  void H(Field& v, const Field& f);
122 
123  // ieo=0: even <-- odd
124  // ieo=1: odd <-- even
125 
126  void Meo(Field&, const Field&, const int ieo);
127  void Mdageo(Field&, const Field&, const int ieo);
128  void MeoMoe(Field&, const Field&);
129  void Meo_gm5(Field&, const Field&, const int ieo);
130 
131  void mult_gm5(Field&, const Field&);
132  void mult_gm5(Field&);
133  void gm5_dirac(Field&, const Field&);
134  void gm5_chiral(Field&, const Field&);
135  void gm5_self_dirac(Field&);
136  void gm5_self_chiral(Field&);
137 
139  void gm5p(const int mu, Field&, const Field& v);
140 
141  int field_nvol() { return m_Nvol2; }
142  int field_nin() { return m_Nvc * m_Nd; }
143  int field_nex() { return 1; }
144 
146  double flop_count();
147 
148  private:
149  void init(const std::string);
150  void tidyup();
151 
152  void mult_xp(Field&, const Field&, const int ieo);
153  void mult_xm(Field&, const Field&, const int ieo);
154  void mult_yp(Field&, const Field&, const int ieo);
155  void mult_ym(Field&, const Field&, const int ieo);
156  void mult_zp(Field&, const Field&, const int ieo);
157  void mult_zm(Field&, const Field&, const int ieo);
158  void mult_tp_dirac(Field&, const Field&, const int ieo);
159  void mult_tm_dirac(Field&, const Field&, const int ieo);
160  void mult_tp_chiral(Field&, const Field&, const int ieo);
161  void mult_tm_chiral(Field&, const Field&, const int ieo);
162 
163  void clear_impl(Field&);
164  void scal_impl(Field&, double);
165 
166  // member data for threading
167  int m_Mz, m_Mt;
170 
171  struct mult_arg
172  {
173  int isite;
175  int kz0, kz1, kt0, kt1;
176  };
177  std::vector<mult_arg> m_arg;
178 
179  // member functions for threading
180  void setup_thread();
181  void mult_xp1_thread(int, double *, const double *, int);
182  void mult_xp2_thread(int, double *, const double *, int);
183  void mult_xpb_thread(int, double *, const double *, int);
184  void mult_xm1_thread(int, double *, const double *, int);
185  void mult_xm2_thread(int, double *, const double *, int);
186  void mult_xmb_thread(int, double *, const double *, int);
187  void mult_yp1_thread(int, double *, const double *, int);
188  void mult_yp2_thread(int, double *, const double *, int);
189  void mult_ypb_thread(int, double *, const double *, int);
190  void mult_ym1_thread(int, double *, const double *, int);
191  void mult_ym2_thread(int, double *, const double *, int);
192  void mult_ymb_thread(int, double *, const double *, int);
193  void mult_zp1_thread(int, double *, const double *, int);
194  void mult_zp2_thread(int, double *, const double *, int);
195  void mult_zpb_thread(int, double *, const double *, int);
196  void mult_zm1_thread(int, double *, const double *, int);
197  void mult_zm2_thread(int, double *, const double *, int);
198  void mult_zmb_thread(int, double *, const double *, int);
199  void mult_tp1_dirac_thread(int, double *, const double *, int);
200  void mult_tp2_dirac_thread(int, double *, const double *, int);
201  void mult_tpb_dirac_thread(int, double *, const double *, int);
202  void mult_tm1_dirac_thread(int, double *, const double *, int);
203  void mult_tm2_dirac_thread(int, double *, const double *, int);
204  void mult_tmb_dirac_thread(int, double *, const double *, int);
205  void mult_tp1_chiral_thread(int, double *, const double *, int);
206  void mult_tp2_chiral_thread(int, double *, const double *, int);
207  void mult_tpb_chiral_thread(int, double *, const double *, int);
208  void mult_tm1_chiral_thread(int, double *, const double *, int);
209  void mult_tm2_chiral_thread(int, double *, const double *, int);
210  void mult_tmb_chiral_thread(int, double *, const double *, int);
211  void scal_thread(int, double *, double);
212  void clear_thread(int, double *);
213  void gm5_dirac_thread(int, double *, const double *);
214  void gm5_chiral_thread(int, double *, const double *);
215  void gm5_dirac_thread(int, double *);
216  void gm5_chiral_thread(int, double *);
217  };
218 }
219 #endif
void mult_ymb_thread(int, double *, const double *, int)
void set_config(unique_ptr< Field_G > &U)
void mult_xm(Field &, const Field &, const int ieo)
void postPropD(Field &, const Field &, const Field &)
void mult_tm_dirac(Field &, const Field &, const int ieo)
BridgeIO vout
Definition: bridgeIO.cpp:495
void(Fopr_Wilson_eo::* m_mult_tp)(Field &, const Field &, const int ieo)
void mult_tp2_chiral_thread(int, double *, const double *, int)
void mult_ym(Field &, const Field &, const int ieo)
void mult_xp(Field &, const Field &, const int ieo)
void mult_yp(Field &, const Field &, const int ieo)
void DDdag(Field &v, const Field &f)
void gm5p(const int mu, Field &, const Field &v)
gamma_5 (1 - gamma_mu) v(x + mu) used in force calculation.
void(Fopr_Wilson_eo::* m_mult)(Field &, const Field &)
void mult_zm1_thread(int, double *, const double *, int)
void mult_tm1_chiral_thread(int, double *, const double *, int)
void gm5_dirac(Field &, const Field &)
Container of Field-type object.
Definition: field.h:39
void mult_yp1_thread(int, double *, const double *, int)
void scal_thread(int, double *, double)
int field_nex()
returns the external d.o.f. for which the fermion operator is defined.
void DdagD(Field &v, const Field &f)
void Mdageo(Field &, const Field &, const int ieo)
void(Fopr_Wilson_eo::* m_D)(Field &, const Field &)
void mult(Field &v, const Field &f)
multiplies fermion operator to a given field (2nd argument)
void mult_xmb_thread(int, double *, const double *, int)
Class for parameters.
Definition: parameters.h:46
void mult_zm(Field &, const Field &, const int ieo)
Even-odd site index.
Definition: index_eo.h:39
void gm5_dirac_thread(int, double *, const double *)
void mult_xm1_thread(int, double *, const double *, int)
void set_config(Field *U)
setting pointer to the gauge configuration.
void(Fopr_Wilson_eo::* m_postProp)(Field &, const Field &, const Field &)
void MeoMoe(Field &, const Field &)
void mult_tpb_chiral_thread(int, double *, const double *, int)
void mult_yp2_thread(int, double *, const double *, int)
void mult_tp_dirac(Field &, const Field &, const int ieo)
void Ddag(Field &v, const Field &f)
void Meo(Field &, const Field &, const int ieo)
Fopr_Wilson_eo(std::string repr)
void(Fopr_Wilson_eo::* m_gm5)(Field &, const Field &)
void(Fopr_Wilson_eo::* m_gm5_self)(Field &)
void mult_ypb_thread(int, double *, const double *, int)
void(Fopr_Wilson_eo::* m_mult_dag)(Field &, const Field &)
Field m_w2
working field.
void mult_xp1_thread(int, double *, const double *, int)
SU(N) gauge field.
Definition: field_G.h:38
void init(const std::string)
void mult_tm_chiral(Field &, const Field &, const int ieo)
void mult_tp1_dirac_thread(int, double *, const double *, int)
double flop_count()
this returns the number of floating point operations of Meo.
void mult_zpb_thread(int, double *, const double *, int)
double * vcp1_xp
arrays for data transfer.
pointer get() const
int field_nin()
returns the on-site d.o.f. for which the fermion operator is defined.
void gm5_chiral(Field &, const Field &)
Base class of fermion operator family.
Definition: fopr_eo.h:34
void mult_tmb_dirac_thread(int, double *, const double *, int)
void mult_zm2_thread(int, double *, const double *, int)
void preProp(Field &Be, Field &bo, const Field &b)
void mult_tm2_dirac_thread(int, double *, const double *, int)
Field_G * m_U
dummy: pointing m_Ueo.
void mult_tp_chiral(Field &, const Field &, const int ieo)
std::string m_repr
Dirac matrix representation.
void prePropDag(Field &, Field &, const Field &)
void mult_zmb_thread(int, double *, const double *, int)
void mult_tp2_dirac_thread(int, double *, const double *, int)
int field_nvol()
returns the volume for which the fermion operator is defined.
void mult_tp1_chiral_thread(int, double *, const double *, int)
void(Fopr_Wilson_eo::* m_preProp)(Field &, Field &, const Field &)
void Meo_gm5(Field &, const Field &, const int ieo)
void mult_xpb_thread(int, double *, const double *, int)
void D(Field &v, const Field &f)
void mult_zp1_thread(int, double *, const double *, int)
std::vector< mult_arg > m_arg
void mult_tm2_chiral_thread(int, double *, const double *, int)
std::vector< int > m_boundary
boundary condition.
void mult_tmb_chiral_thread(int, double *, const double *, int)
void mult_xm2_thread(int, double *, const double *, int)
void mult_ym1_thread(int, double *, const double *, int)
std::string get_mode() const
only for Fopr_Overlap
void mult_zp2_thread(int, double *, const double *, int)
void mult_gm5(Field &, const Field &)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru]
void prePropD(Field &, Field &, const Field &)
void mult_zp(Field &, const Field &, const int ieo)
void mult_tpb_dirac_thread(int, double *, const double *, int)
void scal_impl(Field &, double)
void H(Field &v, const Field &f)
double m_kappa
hopping parameter.
void(Fopr_Wilson_eo::* m_mult_tm)(Field &, const Field &, const int ieo)
void mult_ym2_thread(int, double *, const double *, int)
void mult_xp2_thread(int, double *, const double *, int)
std::string m_mode
mult mode.
void postPropDag(Field &, const Field &, const Field &)
void postProp(Field &x, const Field &xe, const Field &bo)
void set_parameters(const Parameters &params)
static const std::string class_name
std::vector< int > m_Leo
void gm5_chiral_thread(int, double *, const double *)
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
void mult_tm1_dirac_thread(int, double *, const double *, int)
std::vector< double > m_boundary2
b.c. for each node.
void mult_dag(Field &v, const Field &f)
hermitian conjugate of mult(Field&, const Field&).