Bridge++  Ver.2.1.3
afopr_Clover_eo.h
Go to the documentation of this file.
1 
9 #ifndef ACCEL_AFOPR_CLOVER_EO_H
10 #define ACCEL_AFOPR_CLOVER_EO_H
11 
12 #include <cstdio>
13 #include <cstdlib>
14 #include <string>
15 #include <vector>
16 
17 #include "lib/Fopr/afopr.h"
22 #include "lib/Tools/timer.h"
23 #include "lib/IO/bridgeIO.h"
24 using Bridge::vout;
25 
28 
29 class Field;
30 
37 template<typename AFIELD>
38 class AFopr_Clover_eo : public AFopr<AFIELD>
39 {
40  public:
41  typedef typename AFIELD::real_t real_t;
42  static const std::string class_name;
43 
44  protected:
46 
47  int m_Nc, m_Nd;
49  int m_Nst, m_Nx, m_Ny, m_Nz, m_Nt;
50  int m_Ndim;
51  int m_Nx2, m_Nst2;
53 
56  std::vector<int> m_boundary;
57  // std::string m_repr; //!< gamma matrix representation
59 
61 
64 
67 
68  std::string m_mode;
69 
71 
74 
75  int do_comm[4]; // switchs of communication (4=Ndim): (0: n, 1: y).
76  int do_comm_any; // switchs of communication (if any): (0: n, 1: y).
77 
78  int m_Nsize[4];
79  int m_bc[4];
80  int m_bc2[4];
81 
82  std::vector<int> m_Nbdsize;
84  std::vector<Channel> chsend_up, chrecv_up, chsend_dn, chrecv_dn;
86 
88 
90 
92 
93 public:
95  AFopr_Clover_eo(const Parameters& params){
96  init(params);
97  }
98 
101 
103  void set_parameters(const Parameters& params);
104 
106  void set_parameters(real_t CKs, real_t cSW, std::vector<int> bc);
107 
109  void get_parameters(Parameters& params) const;
110 
112  void set_config(Field* u);
113 
115  void set_boundary_config(AFIELD&, int mu);
116 
118  inline Field* get_conf() { return m_conf; };
119 
121  void set_mode(std::string mode);
122 
124  std::string get_mode() const { return m_mode; }
125 
126  void mult(AFIELD&, const AFIELD&);
127  void mult_dag(AFIELD&, const AFIELD&);
128  void mult_gm5(AFIELD&, const AFIELD&);
129 
130  void mult_gm4(AFIELD&, const AFIELD&);
131 
132  void mult(AFIELD&, const AFIELD&,
133  const std::string mode);
134 
135  void DdagD(AFIELD&, const AFIELD&);
136  void Ddag(AFIELD&, const AFIELD&);
137  void D(AFIELD&, const AFIELD&);
138  void gm5(AFIELD&, const AFIELD&);
139 
140  // void aypx(real_t, AFIELD&, const AFIELD&);
141 
143  void mult_test(AFIELD&, const AFIELD&);
144 
146  void Meo(AFIELD&, const AFIELD&, const int ieo);
147 
149  void Meo(AFIELD&, const AFIELD&, const AFIELD&,
150  const int ieo, const int iflag);
151 
153  void Meo_alt(AFIELD&, const AFIELD&, const int ieo);
154 
156  int field_nin() { return 2 * m_Nc * m_Nd; }
157 
159  int field_nvol() { return m_Nst2; }
160 
162  int field_nex() { return 1; }
163 
165  double flop_count();
166 
167  private:
169  void init(const Parameters& params);
170 
172  void tidyup();
173 
175  void setup_channels();
176 
177  void set_config_omp(Field* u);
178  void set_config_impl(Field* u);
179 
180  void mult_xp(real_t*, real_t*, const int);
181  void mult_xm(real_t*, real_t*, const int);
182  void mult_yp(real_t*, real_t*, const int);
183  void mult_ym(real_t*, real_t*, const int);
184  void mult_zp(real_t*, real_t*, const int);
185  void mult_zm(real_t*, real_t*, const int);
186  void mult_tp(real_t*, real_t*, const int);
187  void mult_tm(real_t*, real_t*, const int);
188 
190  void set_csw(int ieo);
191 
192  void mult_cswinv(AFIELD&, const AFIELD&, int ieo);
193 
194  void mult_cswinv(real_t *v2, real_t *v1, int ieo);
195 
196  void mult_cswinv_dirac(real_t *v2, real_t *v1,
197  real_t *csw_inv, int site);
198 
199  void mult_gm5(real_t*, real_t*);
200 
201 #ifdef USE_FACTORY
202  private:
203  static AFopr<AFIELD> *create_object_with_params(const Parameters& params)
204  { return new AFopr_Clover_eo(params); }
205 
206  public:
207  static bool register_factory()
208  {
209  bool init1 = AFopr<AFIELD>::Factory_params::Register("Clover_eo",
210  create_object_with_params);
211  return init1;
212  }
213 #endif
214 
215 };
216 
217 #endif // ACCEL_AFOPR_CLOVER_EO_H
AFopr_Clover_eo::mult
void mult(AFIELD &, const AFIELD &)
multiplies fermion operator to a given field.
Definition: afopr_Clover_eo-tmpl.h:396
AFopr_Clover_eo::m_Nd
int m_Nd
Definition: afopr_Clover_eo.h:47
AFopr_Clover_eo::mult_zp
void mult_zp(real_t *, real_t *, const int)
Definition: afopr_Clover_eo-tmpl.h:902
AFopr_Clover_eo::CHIRAL
@ CHIRAL
Definition: afopr_Clover_eo.h:45
bridgeIO.h
AFopr_Clover_eo::mult_cswinv
void mult_cswinv(AFIELD &, const AFIELD &, int ieo)
Definition: afopr_Clover_eo-tmpl.h:560
AFopr
Definition: afopr.h:48
AFopr_Clover_eo::mult_xm
void mult_xm(real_t *, real_t *, const int)
Definition: afopr_Clover_eo-tmpl.h:752
AFopr_Clover_eo::D
void D(AFIELD &, const AFIELD &)
Definition: afopr_Clover_eo-tmpl.h:497
AFopr_Clover_eo::m_Nc
int m_Nc
Definition: afopr_Clover_eo.h:47
AFopr_Clover_eo::mult_test
void mult_test(AFIELD &, const AFIELD &)
Fermion matrix with ieo = 0: even <– odd, 1: odd <– even.
Org::Fopr_CloverTerm_eo
Definition: fopr_CloverTerm_eo_impl.h:64
communicator_impl.h
Parameters
Class for parameters.
Definition: parameters.h:46
AFopr_Clover_eo::class_name
static const std::string class_name
Definition: afopr_Clover_eo.h:42
AFopr_Clover_eo::m_Nx2v
int m_Nx2v
Definition: afopr_Clover_eo.h:52
AFopr_Clover_eo::m_Ndim
int m_Ndim
Definition: afopr_Clover_eo.h:50
AFopr_Clover_eo::m_fee_inv
AFIELD m_fee_inv
Definition: afopr_Clover_eo.h:65
AFopr_Clover_eo::m_Nst
int m_Nst
Definition: afopr_Clover_eo.h:49
AFopr_Clover_eo::set_config_impl
void set_config_impl(Field *u)
Definition: afopr_Clover_eo-tmpl.h:350
AFopr_Clover_eo::Meo
void Meo(AFIELD &, const AFIELD &, const int ieo)
Fermion matrix with ieo = 0: even <– odd, 1: odd <– even.
Definition: afopr_Clover_eo-tmpl.h:595
AFopr_Clover_eo::m_repr
enum AFopr_Clover_eo::Gamma_repr m_repr
gamma matrix representation
AFopr_CloverTerm
Definition: afopr_CloverTerm.h:31
AFopr_Clover_eo::m_CKs
real_t m_CKs
hopping parameter.
Definition: afopr_Clover_eo.h:54
AFopr_Clover_eo::get_parameters
void get_parameters(Parameters &params) const
getting parameters as a Parameters object.
Definition: afopr_Clover_eo-tmpl.h:303
AFopr_Clover_eo::m_Nsize
int m_Nsize[4]
Definition: afopr_Clover_eo.h:78
AFopr_Clover_eo::m_Ny
int m_Ny
Definition: afopr_Clover_eo.h:49
AFopr_Clover_eo::m_Nz
int m_Nz
Definition: afopr_Clover_eo.h:49
AFopr_Clover_eo::mult_gm4
void mult_gm4(AFIELD &, const AFIELD &)
Definition: afopr_Clover_eo-tmpl.h:545
ChannelSet
ChannelSet class for a collection of channels.
Definition: channel.h:148
AFopr_Clover_eo::~AFopr_Clover_eo
~AFopr_Clover_eo()
destructor.
Definition: afopr_Clover_eo.h:100
AFopr_Clover_eo::mult_tm
void mult_tm(real_t *, real_t *, const int)
Definition: afopr_Clover_eo-tmpl.h:1063
AFopr_Clover_eo::m_Ueo
AFIELD m_Ueo
copied gauge config. with boundary conditions.
Definition: afopr_Clover_eo.h:63
aindex_eo.h
AFopr_Clover_eo::real_t
AFIELD::real_t real_t
Definition: afopr_Clover_eo.h:41
AFopr_Clover_eo::do_comm_any
int do_comm_any
Definition: afopr_Clover_eo.h:76
AFopr_Clover_eo::flop_count
double flop_count()
returns floating operation counts.
Definition: afopr_Clover_eo-tmpl.h:1126
AFopr_Clover_eo::mult_gm5
void mult_gm5(AFIELD &, const AFIELD &)
multiplies gamma_5 matrix.
Definition: afopr_Clover_eo-tmpl.h:430
AFopr_Clover_eo::m_Nx2
int m_Nx2
Definition: afopr_Clover_eo.h:51
AFopr_Clover_eo::setup_channels
void setup_channels()
setup channels for communication.
Definition: afopr_Clover_eo-tmpl.h:130
AFopr_Clover_eo::chsend_up
std::vector< Channel > chsend_up
Definition: afopr_Clover_eo.h:84
AFopr_Clover_eo::Meo_alt
void Meo_alt(AFIELD &, const AFIELD &, const int ieo)
Fermion matrix with ieo = 0: even <– odd, 1: odd <– even.
Definition: afopr_Clover_eo-tmpl.h:517
afopr_CloverTerm.h
AFopr_Clover_eo::mult_yp
void mult_yp(real_t *, real_t *, const int)
Definition: afopr_Clover_eo-tmpl.h:802
AFopr_Clover_eo::set_csw
void set_csw()
setting clover term inverse.
Definition: afopr_Clover_eo-tmpl.h:368
Timer
Definition: timer.h:31
Field::real_t
double real_t
Definition: field.h:51
AFopr_Clover_eo::m_Ieo_origin
int m_Ieo_origin
Definition: afopr_Clover_eo.h:60
AFopr_Clover_eo::set_parameters
void set_parameters(const Parameters &params)
setting parameters by a Parameter object.
Definition: afopr_Clover_eo-tmpl.h:211
AFopr_Clover_eo::mult_tp
void mult_tp(real_t *, real_t *, const int)
Definition: afopr_Clover_eo-tmpl.h:1001
fopr_CloverTerm_eo.h
AFopr_Clover_eo::m_Nst2v
int m_Nst2v
Definition: afopr_Clover_eo.h:52
AFopr_Clover_eo::chset_send
ChannelSet chset_send
Definition: afopr_Clover_eo.h:85
AFopr_Clover_eo::set_mode
void set_mode(std::string mode)
setting mult mode.
Definition: afopr_Clover_eo-tmpl.h:384
AFopr_Clover_eo::m_fopr
Fopr_CloverTerm_eo * m_fopr
Definition: afopr_Clover_eo.h:87
AFopr_Clover_eo::m_Nt
int m_Nt
Definition: afopr_Clover_eo.h:49
AFopr_Clover_eo::m_Nx
int m_Nx
Definition: afopr_Clover_eo.h:49
timer.h
AFopr_Clover_eo::field_nex
int field_nex()
returns external size parameter.
Definition: afopr_Clover_eo.h:162
AFopr_Clover_eo::mult_ym
void mult_ym(real_t *, real_t *, const int)
Definition: afopr_Clover_eo-tmpl.h:852
AFopr_Clover_eo::m_mode
std::string m_mode
mult mode
Definition: afopr_Clover_eo.h:68
AFopr_Clover_eo::chrecv_dn
std::vector< Channel > chrecv_dn
Definition: afopr_Clover_eo.h:84
AFopr_Clover_eo::set_config
void set_config(Field *u)
setting gauge configuration.
Definition: afopr_Clover_eo-tmpl.h:319
AFopr_Clover_eo::m_Ndf
int m_Ndf
Definition: afopr_Clover_eo.h:48
AFopr_Clover_eo::m_Tinv
AFIELD m_Tinv
Definition: afopr_Clover_eo.h:66
AFopr_Clover_eo::get_conf
Field * get_conf()
returns the pointer to gauge configuration.
Definition: afopr_Clover_eo.h:118
AFopr_Clover_eo::m_vl
Bridge::VerboseLevel m_vl
verbose level
Definition: afopr_Clover_eo.h:58
AFopr_Clover_eo::m_v1
AFIELD m_v1
Definition: afopr_Clover_eo.h:72
AFopr_Clover_eo::mult_dag
void mult_dag(AFIELD &, const AFIELD &)
hermitian conjugate of mult.
Definition: afopr_Clover_eo-tmpl.h:413
AFopr_Clover_eo::Ddag
void Ddag(AFIELD &, const AFIELD &)
Definition: afopr_Clover_eo-tmpl.h:473
AFopr_Clover_eo::m_boundary
std::vector< int > m_boundary
pointer to boundary condition
Definition: afopr_Clover_eo.h:56
AFopr_Clover_eo::set_boundary_config
void set_boundary_config(AFIELD &, int mu)
setting gauge configuration with boundary condition.
AFopr_Clover_eo::DIRAC
@ DIRAC
Definition: afopr_Clover_eo.h:45
AFopr_Clover_eo::m_Nbdsize
std::vector< int > m_Nbdsize
Definition: afopr_Clover_eo.h:82
real_t
double real_t
Definition: bridgeACC_AField_double.cpp:14
AFopr_Clover_eo::m_foo_inv
AFIELD m_foo_inv
Definition: afopr_Clover_eo.h:65
AFopr_Clover_eo::m_Nst2
int m_Nst2
Definition: afopr_Clover_eo.h:51
AFopr_Clover_eo::mult_xp
void mult_xp(real_t *, real_t *, const int)
Definition: afopr_Clover_eo-tmpl.h:702
AFopr_Clover_eo::mult_cswinv_dirac
void mult_cswinv_dirac(real_t *v2, real_t *v1, real_t *csw_inv, int site)
AFopr_Clover_eo::do_comm
int do_comm[4]
Definition: afopr_Clover_eo.h:75
AFopr_Clover_eo::chsend_dn
std::vector< Channel > chsend_dn
Definition: afopr_Clover_eo.h:84
AFopr_Clover_eo::m_Nvc
int m_Nvc
Definition: afopr_Clover_eo.h:48
AFopr_Clover_eo::set_config_omp
void set_config_omp(Field *u)
Definition: afopr_Clover_eo-tmpl.h:337
AFopr_Clover_eo::field_nvol
int field_nvol()
returns local volume size parameter.
Definition: afopr_Clover_eo.h:159
AFopr_Clover_eo::m_conf
Field * m_conf
original gauge config.
Definition: afopr_Clover_eo.h:62
AFopr_Clover_eo::m_bc
int m_bc[4]
Definition: afopr_Clover_eo.h:79
AFopr_Clover_eo::init
void init(const Parameters &params)
initial setup.
Definition: afopr_Clover_eo-tmpl.h:26
AFopr_Clover_eo::chset_recv
ChannelSet chset_recv
Definition: afopr_Clover_eo.h:85
AFopr_Clover_eo::AFopr_Clover_eo
AFopr_Clover_eo(const Parameters &params)
constructor.
Definition: afopr_Clover_eo.h:95
AFopr_Clover_eo::m_v2
AFIELD m_v2
working field.
Definition: afopr_Clover_eo.h:73
AFopr_Clover_eo::m_fopr_ct
AFopr_CloverTerm< AFIELD > * m_fopr_ct
Definition: afopr_Clover_eo.h:89
AFopr_Clover_eo::DdagD
void DdagD(AFIELD &, const AFIELD &)
Definition: afopr_Clover_eo-tmpl.h:465
AFopr_Clover_eo::m_Ncol
int m_Ncol
Definition: afopr_Clover_eo.h:48
AFopr_Clover_eo::gm5
void gm5(AFIELD &, const AFIELD &)
AFopr_Clover_eo
Definition: afopr_Clover_eo.h:38
AFopr_Clover_eo::get_mode
std::string get_mode() const
returns the current mult mode.
Definition: afopr_Clover_eo.h:124
commonParameters.h
AFopr_Clover_eo::m_index_eo
AIndex_eo< real_t, AFIELD::IMPL > m_index_eo
Definition: afopr_Clover_eo.h:70
AFopr_Clover_eo::chrecv_up
std::vector< Channel > chrecv_up
Definition: afopr_Clover_eo.h:84
AFopr_Clover_eo::field_nin
int field_nin()
returns inner size parameter.
Definition: afopr_Clover_eo.h:156
AFopr_Clover_eo::Gamma_repr
Gamma_repr
Definition: afopr_Clover_eo.h:45
AFopr_Clover_eo::m_timer
Timer m_timer
Definition: afopr_Clover_eo.h:91
Field
Container of Field-type object.
Definition: field.h:46
afopr.h
communicator.h
Bridge::VerboseLevel
VerboseLevel
Definition: bridgeIO.h:45
AFopr_Clover_eo::tidyup
void tidyup()
final tidy-up.
Definition: afopr_Clover_eo-tmpl.h:181
AFopr_Clover_eo::m_cSW
real_t m_cSW
clover coefficient.
Definition: afopr_Clover_eo.h:55
AFopr_Clover_eo::m_bc2
int m_bc2[4]
Definition: afopr_Clover_eo.h:80
Channel_impl
Definition: channel.h:86
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:572
AIndex_eo< real_t, AFIELD::IMPL >
AFopr_Clover_eo::mult_zm
void mult_zm(real_t *, real_t *, const int)
Definition: afopr_Clover_eo-tmpl.h:952