Bridge++  Ver.2.1.3
afopr_Clover.h
Go to the documentation of this file.
1 
9 #ifndef ACCEL_AFOPR_CLOVER_H
10 #define ACCEL_AFOPR_CLOVER_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 
27 
28 class Field;
29 
30 template<typename AFIELD>
31 class AFopr_Clover : public AFopr<AFIELD>
32 {
33  public:
34  typedef typename AFIELD::real_t real_t;
35  static const std::string class_name;
36 
37  protected:
39 
40  int m_Nc, m_Nd, m_Ndim;
42  int m_Nx, m_Ny, m_Nz, m_Nt, m_Nst;
43  // int m_Nxv, m_Nstv;
44 
47  std::vector<int> m_boundary;
48  // std::string m_repr; //!< gamma matrix representation
50 
53 
54  std::string m_mode;
55 
57 
59 
61 
63 
64  int do_comm[4]; // switchs of communication (4=Ndim): (0: n, 1: y).
65  int do_comm_any; // switchs of communication (if any): (0: n, 1: y).
66 
67  int m_Nsize[4];
68  int m_bc[4];
69  int m_bc2[4];
70 
71  std::vector<int> m_Nbdsize;
73  std::vector<Channel> chsend_up, chrecv_up, chsend_dn, chrecv_dn;
75 
77 
78 public:
79 
81  AFopr_Clover(const Parameters& params){ init(params); }
82 
85 
87  void set_parameters(const Parameters& params);
88 
90  void set_parameters(real_t CKs, real_t csW, std::vector<int> bc);
91 
92  void get_parameters(Parameters& params) const;
93 
95  void set_config(Field* u);
96 
98  void set_boundary_config(AFIELD& U, const int mu);
99 
101  inline Field* get_conf(void){return m_conf;};
102 
104  void set_mode(std::string mode);
105 
107  std::string get_mode() const;
108 
109  void mult(AFIELD&, const AFIELD&);
110  void mult_dag(AFIELD&, const AFIELD&);
111  void mult_gm5(AFIELD&, const AFIELD&);
112 
113  void mult(AFIELD&, const AFIELD&,
114  const std::string mode);
115 
116  void mult_dag(AFIELD&, const AFIELD&,
117  const std::string mode);
118 
120  virtual void mult_up(int mu, AFIELD&, const AFIELD&);
121 
123  virtual void mult_dn(int mu, AFIELD&, const AFIELD&);
124 
125  // void gm5(AFIELD&, const AFIELD&);
126  void D(AFIELD&, const AFIELD&);
127  void H(AFIELD&, const AFIELD&);
128  void DdagD(AFIELD&, const AFIELD&);
129  void Ddag(AFIELD&, const AFIELD&);
130 
132  int field_nin() { return 2 * m_Nc * m_Nd; }
133 
135  int field_nvol() { return m_Nst; }
136 
138  int field_nex() { return 1; }
139 
141  double flop_count();
142 
143  private:
144 
146  void init(const Parameters& params);
147 
149  void tidyup();
150 
152  void setup_channels();
153 
155  void mult_DorH(AFIELD& v, const AFIELD& w, const int flag);
156 
157  void D_alt(AFIELD&, const AFIELD&);
158  void H_alt(AFIELD&, const AFIELD&);
159 
161  void set_config_omp(Field* u);
162  void set_config_impl(Field* u);
163  void set_config_saved(Field* u);
164 
165  void mult_xp(real_t*, real_t*);
166  void mult_xm(real_t*, real_t*);
167  void mult_yp(real_t*, real_t*);
168  void mult_ym(real_t*, real_t*);
169  void mult_zp(real_t*, real_t*);
170  void mult_zm(real_t*, real_t*);
171  void mult_tp(real_t*, real_t*);
172  void mult_tm(real_t*, real_t*);
173 
174 #ifdef USE_FACTORY
175  private:
176  static AFopr<AFIELD> *create_object_with_params(const Parameters& params)
177  { return new AFopr_Clover(params); }
178 
179  public:
180  static bool register_factory()
181  {
182  bool init1 = AFopr<AFIELD>::Factory_params::Register("Clover",
183  create_object_with_params);
184  return init1;
185  }
186 #endif
187 
188 };
189 
190 #endif // AFOPR_CLOVER_H
AFopr_Clover::mult_dag
void mult_dag(AFIELD &, const AFIELD &)
hermitian conjugate of mult.
Definition: afopr_Clover-tmpl.h:474
AFopr_Clover::chsend_up
std::vector< Channel > chsend_up
Definition: afopr_Clover.h:73
bridgeIO.h
AFopr_Clover::m_conf
Field * m_conf
original gauge config.
Definition: afopr_Clover.h:51
AFopr_Clover::m_bc2
int m_bc2[4]
Definition: afopr_Clover.h:69
AFopr_Clover::set_boundary_config
void set_boundary_config(AFIELD &U, const int mu)
setting fermion boundary condition to gauge field.
AFopr_Clover::m_Nx
int m_Nx
Definition: afopr_Clover.h:42
AFopr_Clover::H_alt
void H_alt(AFIELD &, const AFIELD &)
Definition: afopr_Clover-tmpl.h:684
AFopr
Definition: afopr.h:48
AFopr_Clover::flop_count
double flop_count()
returns floating operation counts.
Definition: afopr_Clover-tmpl.h:1206
AFopr_Clover::field_nvol
int field_nvol()
returns local volume size parameter.
Definition: afopr_Clover.h:135
communicator_impl.h
Parameters
Class for parameters.
Definition: parameters.h:46
AFopr_Clover::m_bc
int m_bc[4]
Definition: afopr_Clover.h:68
AFopr_Clover::Ddag
void Ddag(AFIELD &, const AFIELD &)
Definition: afopr_Clover-tmpl.h:620
AFopr_Clover::m_fopr_ct
AFopr_CloverTerm< AFIELD > * m_fopr_ct
Definition: afopr_Clover.h:56
AFopr_CloverTerm
Definition: afopr_CloverTerm.h:31
AFopr_Clover::m_Nt
int m_Nt
Definition: afopr_Clover.h:42
AFopr_Clover::m_Ndm2
int m_Ndm2
Definition: afopr_Clover.h:41
AFopr_Clover::AFopr_Clover
AFopr_Clover(const Parameters &params)
constructor.
Definition: afopr_Clover.h:81
AFopr_Clover::setup_channels
void setup_channels()
setup channels for communication.
Definition: afopr_Clover-tmpl.h:110
AFopr_Clover::D
void D(AFIELD &, const AFIELD &)
Definition: afopr_Clover-tmpl.h:668
AFopr_Clover::mult_up
virtual void mult_up(int mu, AFIELD &, const AFIELD &)
upward nearest neighbor hopping term.
Definition: afopr_Clover-tmpl.h:560
ChannelSet
ChannelSet class for a collection of channels.
Definition: channel.h:148
AFopr_Clover::Gamma_repr
Gamma_repr
Definition: afopr_Clover.h:38
AFopr_Clover::mult_xm
void mult_xm(real_t *, real_t *)
Definition: afopr_Clover-tmpl.h:834
AFopr_Clover::do_comm
int do_comm[4]
Definition: afopr_Clover.h:64
AFopr_Clover::m_cSW
real_t m_cSW
clover coefficient.
Definition: afopr_Clover.h:46
AFopr_Clover::m_Nsize
int m_Nsize[4]
Definition: afopr_Clover.h:67
AFopr_Clover::m_v2
AFIELD m_v2
working spinor field.
Definition: afopr_Clover.h:62
AFopr_Clover::field_nex
int field_nex()
returns external size parameter.
Definition: afopr_Clover.h:138
afopr_CloverTerm.h
AFopr_Clover::m_Ndim
int m_Ndim
Definition: afopr_Clover.h:40
AFopr_Clover::set_config_omp
void set_config_omp(Field *u)
set_config implementation
Definition: afopr_Clover-tmpl.h:318
AFopr_Clover::m_Nz
int m_Nz
Definition: afopr_Clover.h:42
AFopr_Clover::D_alt
void D_alt(AFIELD &, const AFIELD &)
Definition: afopr_Clover-tmpl.h:632
Timer
Definition: timer.h:31
Field::real_t
double real_t
Definition: field.h:51
AFopr_Clover::~AFopr_Clover
~AFopr_Clover()
destructor.
Definition: afopr_Clover.h:84
AFopr_Clover::mult_DorH
void mult_DorH(AFIELD &v, const AFIELD &w, const int flag)
mult implementation
Definition: afopr_Clover-tmpl.h:692
AFopr_Clover::m_U
AFIELD m_U
copied gauge config. with boundary conditions.
Definition: afopr_Clover.h:52
AFopr_Clover::chrecv_up
std::vector< Channel > chrecv_up
Definition: afopr_Clover.h:73
AFopr_Clover::real_t
AFIELD::real_t real_t
Definition: afopr_Clover.h:34
AFopr_Clover::get_mode
std::string get_mode() const
returns mult mode.
Definition: afopr_Clover-tmpl.h:447
AFopr_Clover::m_Ny
int m_Ny
Definition: afopr_Clover.h:42
AFopr_Clover::chset_recv
ChannelSet chset_recv
Definition: afopr_Clover.h:74
AFopr_Clover::mult_zp
void mult_zp(real_t *, real_t *)
Definition: afopr_Clover-tmpl.h:983
AFopr_Clover::mult_gm5
void mult_gm5(AFIELD &, const AFIELD &)
multiplies gamma_5 matrix.
Definition: afopr_Clover-tmpl.h:536
AFopr_Clover::set_mode
void set_mode(std::string mode)
setting mult mode.
Definition: afopr_Clover-tmpl.h:435
AFopr_Clover::CHIRAL
@ CHIRAL
Definition: afopr_Clover.h:38
AFopr_Clover::m_Nvc
int m_Nvc
Definition: afopr_Clover.h:41
timer.h
AFopr_Clover::m_vl
Bridge::VerboseLevel m_vl
verbose level
Definition: afopr_Clover.h:49
AFopr_Clover::init
void init(const Parameters &params)
initial setup.
Definition: afopr_Clover-tmpl.h:25
AFopr_Clover::m_Nbdsize
std::vector< int > m_Nbdsize
Definition: afopr_Clover.h:71
AFopr_Clover::m_Nc
int m_Nc
Definition: afopr_Clover.h:40
AFopr_Clover::field_nin
int field_nin()
returns inner size parameter.
Definition: afopr_Clover.h:132
AFopr_Clover::mult_xp
void mult_xp(real_t *, real_t *)
Definition: afopr_Clover-tmpl.h:784
AFopr_Clover::m_boundary
std::vector< int > m_boundary
pointer to boundary condition
Definition: afopr_Clover.h:47
AFopr_Clover::mult_ym
void mult_ym(real_t *, real_t *)
Definition: afopr_Clover-tmpl.h:933
AFopr_Clover::m_repr
enum AFopr_Clover::Gamma_repr m_repr
gamma matrix representation
AFopr_Clover::DIRAC
@ DIRAC
Definition: afopr_Clover.h:38
AFopr_Clover::set_parameters
void set_parameters(const Parameters &params)
setting parameters by a Parameter object.
Definition: afopr_Clover-tmpl.h:192
AFopr_Clover::m_timer
Timer m_timer
Definition: afopr_Clover.h:76
AFopr_Clover::m_Ndf
int m_Ndf
Definition: afopr_Clover.h:41
parameters.h
AFopr_Clover::tidyup
void tidyup()
final tidy-up.
Definition: afopr_Clover-tmpl.h:161
AFopr_Clover::mult_tp
void mult_tp(real_t *, real_t *)
Definition: afopr_Clover-tmpl.h:1082
real_t
double real_t
Definition: bridgeACC_AField_double.cpp:14
AFopr_Clover::H
void H(AFIELD &, const AFIELD &)
Definition: afopr_Clover-tmpl.h:675
AFopr_Clover::m_CKs
real_t m_CKs
hopping parameter.
Definition: afopr_Clover.h:45
AFopr_Clover::set_config_saved
void set_config_saved(Field *u)
Definition: afopr_Clover-tmpl.h:376
AFopr_Clover::m_mode
std::string m_mode
mult mode
Definition: afopr_Clover.h:54
AFopr_Clover::chrecv_dn
std::vector< Channel > chrecv_dn
Definition: afopr_Clover.h:73
AFopr_Clover::set_config
void set_config(Field *u)
setting gauge configuration.
Definition: afopr_Clover-tmpl.h:302
AFopr_Clover::mult_zm
void mult_zm(real_t *, real_t *)
Definition: afopr_Clover-tmpl.h:1033
AFopr_Clover::m_Nst
int m_Nst
Definition: afopr_Clover.h:42
AFopr_Clover::m_Nd
int m_Nd
Definition: afopr_Clover.h:40
AFopr_Clover::chset_send
ChannelSet chset_send
Definition: afopr_Clover.h:74
AFopr_Clover::get_parameters
void get_parameters(Parameters &params) const
gets parameters by a Parameter object: to be implemented in a subclass.
Definition: afopr_Clover-tmpl.h:286
AFopr_Clover::set_config_impl
void set_config_impl(Field *u)
Definition: afopr_Clover-tmpl.h:328
AFopr_Clover::m_memory_saved
bool m_memory_saved
Definition: afopr_Clover.h:60
AFopr_Clover::m_v1
AFIELD m_v1
Definition: afopr_Clover.h:62
AFopr_Clover::m_T
AFIELD m_T
clover term
Definition: afopr_Clover.h:58
AFopr_Clover
Definition: afopr_Clover.h:31
commonParameters.h
AFopr_Clover::do_comm_any
int do_comm_any
Definition: afopr_Clover.h:65
Field
Container of Field-type object.
Definition: field.h:46
afopr.h
AFopr_Clover::mult_tm
void mult_tm(real_t *, real_t *)
Definition: afopr_Clover-tmpl.h:1144
communicator.h
AFopr_Clover::mult_dn
virtual void mult_dn(int mu, AFIELD &, const AFIELD &)
downward nearest neighbor hopping term.
Definition: afopr_Clover-tmpl.h:583
Bridge::VerboseLevel
VerboseLevel
Definition: bridgeIO.h:45
AFopr_Clover::class_name
static const std::string class_name
Definition: afopr_Clover.h:35
AFopr_Clover::chsend_dn
std::vector< Channel > chsend_dn
Definition: afopr_Clover.h:73
AFopr_Clover::get_conf
Field * get_conf(void)
returns the pointer to gauge configuration.
Definition: afopr_Clover.h:101
AFopr_Clover::DdagD
void DdagD(AFIELD &, const AFIELD &)
Definition: afopr_Clover-tmpl.h:606
AFopr_Clover::mult_yp
void mult_yp(real_t *, real_t *)
Definition: afopr_Clover-tmpl.h:884
AFopr_Clover::mult
void mult(AFIELD &, const AFIELD &)
multiplies fermion operator to a given field.
Definition: afopr_Clover-tmpl.h:454
Channel_impl
Definition: channel.h:86
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:572