Bridge++  Ver. 1.2.x
 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_IMPL_INCLUDED
16 #define FOPR_WILSON_EO_IMPL_INCLUDED
17 
18 #include "fopr_Wilson_eo.h"
19 
20 #include "channel.h"
21 
22 #include "bridgeIO.h"
23 using Bridge::vout;
24 
26 
37 {
38  public:
39  static const std::string class_name;
40 
41  private:
42  int m_Nc, m_Nd, m_Nvc, m_Ndf;
43  int m_Nvol, m_Nvol2, m_Ndim;
44  int m_Nx, m_Ny, m_Nz, m_Nt, m_Nx2;
45 
46  double m_kappa;
47  std::valarray<int> m_boundary;
48  std::valarray<double> m_boundary2;
49 
51 
52  std::string m_mode;
53  std::string m_repr;
54 
56  Field_G *m_Ueo;
57  Field_G *m_U;
58 
59  valarray<int> m_Leo;
60  Field m_v1, m_v2, m_w1, m_w2;
61 
63  double *vcp1_xp, *vcp2_xp, *vcp1_xm, *vcp2_xm;
64  double *vcp1_yp, *vcp2_yp, *vcp1_ym, *vcp2_ym;
65  double *vcp1_zp, *vcp2_zp, *vcp1_zm, *vcp2_zm;
66  double *vcp1_tp, *vcp2_tp, *vcp1_tm, *vcp2_tm;
67 
68  // use async data transfer
69  std::valarray<int> m_npe;
70  std::valarray<Channel *> m_fw_send;
71  std::valarray<Channel *> m_fw_recv;
72  std::valarray<Channel *> m_bw_send;
73  std::valarray<Channel *> m_bw_recv;
74 
77  void (Fopr_Wilson_eo::Fopr_Wilson_eo_impl::*m_mult_tp)(Field &, const Field &, const int ieo);
78  void (Fopr_Wilson_eo::Fopr_Wilson_eo_impl::*m_mult_tm)(Field &, const Field &, const int ieo);
79 
80  public:
81 
82  Fopr_Wilson_eo_impl(std::string repr)
83  { init(repr); }
84 
86  { tidyup(); }
87 
88  void set_parameters(const double kappa, const std::valarray<int> bc);
89 
90  void set_config(Field *U);
91 
92  void prePropD(Field&, Field&, const Field&);
93  void postPropD(Field&, const Field&, const Field&);
94  void prePropDag(Field&, Field&, const Field&);
95  void postPropDag(Field&, const Field&, const Field&);
96 
97  void D(Field& v, const Field& f);
98  void Ddag(Field& v, const Field& f);
99  void DdagD(Field& v, const Field& f);
100  void DDdag(Field& v, const Field& f);
101  void H(Field& v, const Field& f);
102 
103  // ieo=0: even <-- odd
104  // ieo=1: odd <-- even
105 
106  void Meo(Field&, const Field&, const int ieo);
107  void Mdageo(Field&, const Field&, const int ieo);
108  void MeoMoe(Field&, const Field&);
109  void Meo_gm5(Field&, const Field&, const int ieo);
110 
111  void mult_gm5(Field&, const Field&);
112  void mult_gm5(Field&);
113  void gm5_dirac(Field&, const Field&);
114  void gm5_chiral(Field&, const Field&);
115  void gm5_self_dirac(Field&);
116  void gm5_self_chiral(Field&);
117 
119  void gm5p(const int mu, Field&, const Field& v);
120 
121  int field_nvol() { return m_Nvol2; }
122  int field_nin() { return m_Nvc * m_Nd; }
123  int field_nex() { return 1; }
124 
126  double flop_count();
127 
128  void mult_p(int mu, Field_F&, const Field_F&, const int ieo);
129  void mult_m(int mu, Field_F&, const Field_F&, const int ieo);
130 
131  private:
132  void init(const std::string);
133  void tidyup();
134 
135  void mult_xp(Field&, const Field&, const int ieo);
136  void mult_xm(Field&, const Field&, const int ieo);
137  void mult_yp(Field&, const Field&, const int ieo);
138  void mult_ym(Field&, const Field&, const int ieo);
139  void mult_zp(Field&, const Field&, const int ieo);
140  void mult_zm(Field&, const Field&, const int ieo);
141  void mult_tp_dirac(Field&, const Field&, const int ieo);
142  void mult_tm_dirac(Field&, const Field&, const int ieo);
143  void mult_tp_chiral(Field&, const Field&, const int ieo);
144  void mult_tm_chiral(Field&, const Field&, const int ieo);
145 
146  void clear_impl(Field&);
147  void scal_impl(Field&, double);
148 
149  // member data for threading
150  int m_Mz, m_Mt;
151  int m_Nthread, m_Ntask;
152  int m_Ntask_z, m_Ntask_t;
153 
154  struct mult_arg
155  {
156  int isite;
158  int kz0, kz1, kt0, kt1;
159  };
160  valarray<mult_arg> m_arg;
161 
162  // member functions for threading
163  void setup_thread();
164  void mult_xp1_thread(int, double *, double *, int);
165  void mult_xp2_thread(int, double *, double *, int);
166  void mult_xpb_thread(int, double *, double *, int);
167  void mult_xm1_thread(int, double *, double *, int);
168  void mult_xm2_thread(int, double *, double *, int);
169  void mult_xmb_thread(int, double *, double *, int);
170  void mult_yp1_thread(int, double *, double *, int);
171  void mult_yp2_thread(int, double *, double *, int);
172  void mult_ypb_thread(int, double *, double *, int);
173  void mult_ym1_thread(int, double *, double *, int);
174  void mult_ym2_thread(int, double *, double *, int);
175  void mult_ymb_thread(int, double *, double *, int);
176  void mult_zp1_thread(int, double *, double *, int);
177  void mult_zp2_thread(int, double *, double *, int);
178  void mult_zpb_thread(int, double *, double *, int);
179  void mult_zm1_thread(int, double *, double *, int);
180  void mult_zm2_thread(int, double *, double *, int);
181  void mult_zmb_thread(int, double *, double *, int);
182  void mult_tp1_dirac_thread(int, double *, double *, int);
183  void mult_tp2_dirac_thread(int, double *, double *, int);
184  void mult_tpb_dirac_thread(int, double *, double *, int);
185  void mult_tm1_dirac_thread(int, double *, double *, int);
186  void mult_tm2_dirac_thread(int, double *, double *, int);
187  void mult_tmb_dirac_thread(int, double *, double *, int);
188  void mult_tp1_chiral_thread(int, double *, double *, int);
189  void mult_tp2_chiral_thread(int, double *, double *, int);
190  void mult_tpb_chiral_thread(int, double *, double *, int);
191  void mult_tm1_chiral_thread(int, double *, double *, int);
192  void mult_tm2_chiral_thread(int, double *, double *, int);
193  void mult_tmb_chiral_thread(int, double *, double *, int);
194  void scal_thread(int, double *, double);
195  void clear_thread(int, double *);
196  void gm5_dirac_thread(int, double *, double *);
197  void gm5_chiral_thread(int, double *, double *);
198  void gm5_dirac_thread(int, double *);
199  void gm5_chiral_thread(int, double *);
200 };
201 #endif
void mult_tm2_dirac_thread(int, double *, double *, int)
void prePropD(Field &, Field &, const Field &)
void mult_xp(Field &, const Field &, const int ieo)
void mult_tp1_dirac_thread(int, double *, double *, int)
void mult_tp_chiral(Field &, const Field &, const int ieo)
BridgeIO vout
Definition: bridgeIO.cpp:207
void prePropDag(Field &, Field &, const Field &)
void mult_ym1_thread(int, double *, double *, int)
void(Fopr_Wilson_eo::Fopr_Wilson_eo_impl::* m_mult_tp)(Field &, const Field &, const int ieo)
void MeoMoe(Field &, const Field &)
void mult_xp1_thread(int, double *, double *, int)
void mult_tp_dirac(Field &, const Field &, const int ieo)
void mult_xm(Field &, const Field &, const int ieo)
Implementation of even-odd Wilson fermion operator.
void Meo_gm5(Field &, const Field &, const int ieo)
void mult_tm2_chiral_thread(int, double *, double *, int)
std::valarray< Channel * > m_bw_recv
void set_parameters(const double kappa, const std::valarray< int > bc)
void mult_ymb_thread(int, double *, double *, int)
Container of Field-type object.
Definition: field.h:37
std::valarray< Channel * > m_fw_recv
void DdagD(Field &v, const Field &f)
void gm5_chiral(Field &, const Field &)
void mult_tmb_dirac_thread(int, double *, double *, int)
void mult_zm(Field &, const Field &, const int ieo)
void gm5_dirac(Field &, const Field &)
void mult_zp1_thread(int, double *, double *, int)
void(Fopr_Wilson_eo::Fopr_Wilson_eo_impl::* m_mult_tm)(Field &, const Field &, const int ieo)
Even-odd site index.
Definition: index_eo.h:39
double * vcp1_xp
arrays for data transfer.
void mult_xp2_thread(int, double *, double *, int)
void mult_gm5(Field &, const Field &)
void postPropDag(Field &, const Field &, const Field &)
Wilson-type fermion field.
Definition: field_F.h:37
void mult_tm_dirac(Field &, const Field &, const int ieo)
Field_G * m_U
dummy: pointing m_Ueo.
void mult_ypb_thread(int, double *, double *, int)
void Meo(Field &, const Field &, const int ieo)
void(Fopr_Wilson_eo::Fopr_Wilson_eo_impl::* m_gm5_self)(Field &)
void postPropD(Field &, const Field &, const Field &)
SU(N) gauge field.
Definition: field_G.h:36
void mult_tm1_dirac_thread(int, double *, double *, int)
void DDdag(Field &v, const Field &f)
void mult_zm2_thread(int, double *, double *, int)
std::valarray< Channel * > m_bw_send
void mult_tmb_chiral_thread(int, double *, double *, int)
void Mdageo(Field &, const Field &, const int ieo)
void mult_xm2_thread(int, double *, double *, int)
void(Fopr_Wilson_eo::Fopr_Wilson_eo_impl::* m_gm5)(Field &, const Field &)
void mult_ym2_thread(int, double *, double *, int)
void mult_zp(Field &, const Field &, const int ieo)
void mult_tm_chiral(Field &, const Field &, const int ieo)
void mult_ym(Field &, const Field &, const int ieo)
void mult_xm1_thread(int, double *, double *, int)
void mult_tp1_chiral_thread(int, double *, double *, int)
std::valarray< Channel * > m_fw_send
void mult_tp2_dirac_thread(int, double *, double *, int)
void mult_tp2_chiral_thread(int, double *, double *, int)
void mult_tpb_chiral_thread(int, double *, double *, int)
void H(Field &v, const Field &f)
void D(Field &v, const Field &f)
std::valarray< double > m_boundary2
b.c. for each node.
VerboseLevel
Definition: bridgeIO.h:25
void mult_zp2_thread(int, double *, double *, int)
std::valarray< int > m_boundary
boundary condition.
void mult_xmb_thread(int, double *, double *, int)
void Ddag(Field &v, const Field &f)
void mult_zmb_thread(int, double *, double *, int)
void mult_yp(Field &, const Field &, const int ieo)
void mult_yp1_thread(int, double *, double *, int)
void mult_zm1_thread(int, double *, double *, int)
void mult_m(int mu, Field_F &, const Field_F &, const int ieo)
double flop_count()
this returns the number of floating point operations of Meo.
void mult_p(int mu, Field_F &, const Field_F &, const int ieo)
void mult_zpb_thread(int, double *, double *, int)
void mult_yp2_thread(int, double *, double *, int)
std::string m_repr
Dirac matrix representation.
void mult_xpb_thread(int, double *, double *, int)
void gm5p(const int mu, Field &, const Field &v)
gamma_5 (1 - gamma_mu) v(x + mu) used in force calculation.
void mult_tm1_chiral_thread(int, double *, double *, int)
void mult_tpb_dirac_thread(int, double *, double *, int)