Bridge++  Ver.2.1.3
afopr_CloverTerm.h
Go to the documentation of this file.
1 
10 #ifndef ACCEL_AFOPR_CLOVERTERM_H
11 #define ACCEL_AFOPR_CLOVERTERM_H
12 
13 #include <cstdio>
14 #include <cstdlib>
15 #include <string>
16 #include <vector>
17 
18 #include "lib/Fopr/afopr.h"
23 #include "lib/IO/bridgeIO.h"
24 using Bridge::vout;
25 
26 class Field;
27 template<typename AFIELD> class AStaple_lex;
28 template<typename AFIELD> class ASolver;
29 
30 template<typename AFIELD>
31 class AFopr_CloverTerm : 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 
46  std::vector<int> m_boundary;
47  // std::string m_repr; //!< gamma matrix representation
49 
52 
53  std::string m_mode;
54 
57 
59 
61 
63 
65 
66  int do_comm[4]; // switchs of communication (4=Ndim): (0: n, 1: y).
67  int do_comm_any; // switchs of communication (if any): (0: n, 1: y).
68 
69  int m_Nsize[4];
70 
71 public:
73  AFopr_CloverTerm(const Parameters& params){ init(params); }
74 
77 
79  void set_parameters(const Parameters& params);
80 
82  void set_parameters(real_t CKs, real_t csW, std::vector<int> bc);
83 
85  void set_config(Field* u);
86 
87  // void set_config(unique_ptr<Field_G>& u)
88  // { set_config(u.get()); }
89 
91  void set_boundary_config(AFIELD& U, const int mu);
92 
94  inline Field* get_conf(void){return m_conf;};
95 
97  void set_mode(std::string mode);
98 
100  std::string get_mode() const;
101 
102  void mult(AFIELD&, const AFIELD&);
103  void mult_dag(AFIELD&, const AFIELD&);
104  void mult_gm5(AFIELD&, const AFIELD&);
105 
106  void mult(AFIELD&, const AFIELD&,
107  const std::string mode);
108 
109  void H(AFIELD&, const AFIELD&);
110  void D(AFIELD&, const AFIELD&);
111 
112  void mult_csw(AFIELD&, const AFIELD&);
113  void multadd_csw(AFIELD&, const AFIELD&);
114  void mult_csw_inv(AFIELD&, const AFIELD&);
115 
117  void get_csw(AFIELD& T);
118 
120  void get_csw_inv(AFIELD& T);
121 
123  void get_csw_inv(AFIELD& T, const int);
124 
126  int field_nin() { return 2 * m_Nc * m_Nd; }
127 
129  int field_nvol() { return m_Nst; }
130 
132  int field_nex() { return 1; }
133 
135  double flop_count();
136 
137  private:
139  void init(const Parameters& params);
140 
142  void tidyup();
143 
145  void setup_channels();
146 
147  void set_config_omp(Field* u);
148  void set_config_impl(Field* u);
149 
151  void set_csw(Field& u);
152 
154  void solve_csw_inv();
155  void solve_csw_inv_dirac();
156  void solve_csw_inv_chiral();
157 
159  void set_csw_dirac(Field& u);
160 
162  void set_csw_chiral(Field& u);
163 
165  void set_fieldstrength(AFIELD& Fst, AFIELD& u, int, int);
166 
168  void multadd_csw(real_t* v2, real_t* v1);
169 
171  void multadd_csw_dirac(real_t* v2, real_t* v1, int site);
172 
174  void multadd_csw_chiral(real_t* v2, real_t* v1, int site);
175 
176  void mult_gm5(real_t*, real_t*);
177 
178 #ifdef USE_FACTORY
179  private:
180  static AFopr<AFIELD> *create_object_with_params(
181  const Parameters& params)
182  { return new AFopr_CloverTerm(params); }
183 
184  public:
185  static bool register_factory()
186  {
188  "CloverTerm", create_object_with_params);
189  return init1;
190  }
191 #endif
192 
193 };
194 
195 #endif // ACCEL_AFOPR_CLOVERTERM_H
AFopr_CloverTerm::setup_channels
void setup_channels()
setup channels for communication.
AFopr_CloverTerm::m_v2
AFIELD m_v2
working spinor fields.
Definition: afopr_CloverTerm.h:60
AFopr_CloverTerm::multadd_csw_dirac
void multadd_csw_dirac(real_t *v2, real_t *v1, int site)
multiply diagonal term at each site (Dirac repr).
bridgeIO.h
AFopr_CloverTerm::m_repr
enum AFopr_CloverTerm::Gamma_repr m_repr
gamma matrix representation
AFopr_CloverTerm::set_csw_chiral
void set_csw_chiral(Field &u)
setting clover term (Chiral repr).
Definition: afopr_CloverTerm-tmpl.h:612
AFopr_CloverTerm::solve_csw_inv_chiral
void solve_csw_inv_chiral()
Definition: afopr_CloverTerm-tmpl.h:379
AFopr_CloverTerm::get_conf
Field * get_conf(void)
returns the pointer to gauge configuration.
Definition: afopr_CloverTerm.h:94
AFopr_CloverTerm::multadd_csw
void multadd_csw(AFIELD &, const AFIELD &)
Definition: afopr_CloverTerm-tmpl.h:916
AFopr
Definition: afopr.h:48
ASolver
Definition: asolver.h:23
AFopr_CloverTerm::get_csw_inv
void get_csw_inv(AFIELD &T)
getting the inverse of clover term.
Definition: afopr_CloverTerm-tmpl.h:465
AFopr_CloverTerm::set_parameters
void set_parameters(const Parameters &params)
setting parameters by a Parameter object.
Definition: afopr_CloverTerm-tmpl.h:105
AFopr_CloverTerm::tidyup
void tidyup()
final tidy-up.
Definition: afopr_CloverTerm-tmpl.h:94
AFopr_CloverTerm::mult
void mult(AFIELD &, const AFIELD &)
multiplies fermion operator to a given field.
Definition: afopr_CloverTerm-tmpl.h:768
AFopr_CloverTerm::set_config_omp
void set_config_omp(Field *u)
Definition: afopr_CloverTerm-tmpl.h:199
communicator_impl.h
Parameters
Class for parameters.
Definition: parameters.h:46
AFopr_CloverTerm::m_Ndim
int m_Ndim
Definition: afopr_CloverTerm.h:40
AFopr_CloverTerm::~AFopr_CloverTerm
~AFopr_CloverTerm()
destructor.
Definition: afopr_CloverTerm.h:76
AFopr_CloverTerm::m_vl
Bridge::VerboseLevel m_vl
verbose level
Definition: afopr_CloverTerm.h:48
AFopr_CloverTerm::set_mode
void set_mode(std::string mode)
setting mult mode.
Definition: afopr_CloverTerm-tmpl.h:748
AFopr_CloverTerm::solve_csw_inv_dirac
void solve_csw_inv_dirac()
Definition: afopr_CloverTerm-tmpl.h:321
AFopr_CloverTerm::m_T
AFIELD m_T
Definition: afopr_CloverTerm.h:58
AFopr_CloverTerm::m_staple
AStaple_lex< AFIELD > * m_staple
Definition: afopr_CloverTerm.h:55
AFopr_CloverTerm
Definition: afopr_CloverTerm.h:31
AFopr_CloverTerm::m_CKs
real_t m_CKs
hopping parameter.
Definition: afopr_CloverTerm.h:44
AFopr_CloverTerm::m_U2
AFIELD m_U2
Definition: afopr_CloverTerm.h:64
AFopr_CloverTerm::m_cSW
real_t m_cSW
clover coefficient.
Definition: afopr_CloverTerm.h:45
AFopr_CloverTerm::m_ut1
AFIELD m_ut1
Definition: afopr_CloverTerm.h:62
AFopr_CloverTerm::m_Ny
int m_Ny
Definition: afopr_CloverTerm.h:42
AFopr_CloverTerm::CHIRAL
@ CHIRAL
Definition: afopr_CloverTerm.h:38
AFopr_CloverTerm::H
void H(AFIELD &, const AFIELD &)
Definition: afopr_CloverTerm-tmpl.h:837
AFopr_CloverTerm::m_Tinv
AFIELD m_Tinv
clover term (+1) and its inverse.
Definition: afopr_CloverTerm.h:58
AFopr_CloverTerm::field_nin
int field_nin()
returns inner size parameter.
Definition: afopr_CloverTerm.h:126
AFopr_CloverTerm::do_comm
int do_comm[4]
Definition: afopr_CloverTerm.h:66
AFopr_CloverTerm::m_v1
AFIELD m_v1
Definition: afopr_CloverTerm.h:60
AFopr_CloverTerm::set_fieldstrength
void set_fieldstrength(AFIELD &Fst, AFIELD &u, int, int)
setting field strength.
Definition: afopr_CloverTerm-tmpl.h:719
Field::real_t
double real_t
Definition: field.h:51
AFopr_CloverTerm::m_boundary
std::vector< int > m_boundary
pointer to boundary condition
Definition: afopr_CloverTerm.h:46
AFopr_CloverTerm::set_csw
void set_csw(Field &u)
setting clover term.
Definition: afopr_CloverTerm-tmpl.h:255
AFopr_CloverTerm::m_F2
AFIELD m_F2
working gauge fields.
Definition: afopr_CloverTerm.h:64
AFopr_CloverTerm::DIRAC
@ DIRAC
Definition: afopr_CloverTerm.h:38
AFopr_CloverTerm::flop_count
double flop_count()
returns floating operation counts.
Definition: afopr_CloverTerm-tmpl.h:941
AFopr_CloverTerm::set_csw_dirac
void set_csw_dirac(Field &u)
setting clover term (Dirac repr).
Definition: afopr_CloverTerm-tmpl.h:517
AStaple_lex
Staple construction.
Definition: afopr_CloverTerm.h:27
AFopr_CloverTerm::set_config
void set_config(Field *u)
setting gauge configuration.
Definition: afopr_CloverTerm-tmpl.h:186
AFopr_CloverTerm::mult_gm5
void mult_gm5(AFIELD &, const AFIELD &)
multiplies gamma_5 matrix.
Definition: afopr_CloverTerm-tmpl.h:819
AFopr_CloverTerm::m_mode
std::string m_mode
mult mode
Definition: afopr_CloverTerm.h:53
AFopr_CloverTerm::m_Nt
int m_Nt
Definition: afopr_CloverTerm.h:42
AFopr_CloverTerm::multadd_csw_chiral
void multadd_csw_chiral(real_t *v2, real_t *v1, int site)
multiply diagonal term at each site (Chiral repr).
AFopr_CloverTerm::get_csw
void get_csw(AFIELD &T)
getting clover term.
Definition: afopr_CloverTerm-tmpl.h:451
AFopr_CloverTerm::m_Nz
int m_Nz
Definition: afopr_CloverTerm.h:42
AFopr_CloverTerm::set_boundary_config
void set_boundary_config(AFIELD &U, const int mu)
setting fermion boundary condition to gauge field.
AFopr_CloverTerm::m_conf
Field * m_conf
original gauge config.
Definition: afopr_CloverTerm.h:50
parameters.h
AFopr_CloverTerm::class_name
static const std::string class_name
Definition: afopr_CloverTerm.h:35
real_t
double real_t
Definition: bridgeACC_AField_double.cpp:14
AFopr_CloverTerm< Field >::Gamma_repr
Gamma_repr
Definition: afopr_CloverTerm.h:38
AFopr_CloverTerm::m_Ndm2
int m_Ndm2
Definition: afopr_CloverTerm.h:41
AFopr_CloverTerm::field_nex
int field_nex()
returns external size parameter.
Definition: afopr_CloverTerm.h:132
AFopr_CloverTerm::mult_csw
void mult_csw(AFIELD &, const AFIELD &)
Definition: afopr_CloverTerm-tmpl.h:866
AFopr_CloverTerm::real_t
AFIELD::real_t real_t
Definition: afopr_CloverTerm.h:34
AFopr_CloverTerm::m_U
AFIELD m_U
copied gauge config. with boundary conditions.
Definition: afopr_CloverTerm.h:51
AFopr_CloverTerm::m_Ndf
int m_Ndf
Definition: afopr_CloverTerm.h:41
AFopr_CloverTerm::m_Nd
int m_Nd
Definition: afopr_CloverTerm.h:40
AFopr_CloverTerm::m_Nvc
int m_Nvc
Definition: afopr_CloverTerm.h:41
AFopr_CloverTerm::m_Nc
int m_Nc
Definition: afopr_CloverTerm.h:40
AFopr_CloverTerm::mult_dag
void mult_dag(AFIELD &, const AFIELD &)
hermitian conjugate of mult.
Definition: afopr_CloverTerm-tmpl.h:785
AFopr_CloverTerm::m_Nsize
int m_Nsize[4]
Definition: afopr_CloverTerm.h:69
AFopr_CloverTerm::solve_csw_inv
void solve_csw_inv()
solve the inverse of clover term.
Definition: afopr_CloverTerm-tmpl.h:271
AFopr_CloverTerm::m_ut2
AFIELD m_ut2
working gauge fields.
Definition: afopr_CloverTerm.h:62
AFopr_CloverTerm::m_Nx
int m_Nx
Definition: afopr_CloverTerm.h:42
AFopr_CloverTerm::m_Nst
int m_Nst
Definition: afopr_CloverTerm.h:42
AFopr_CloverTerm::set_config_impl
void set_config_impl(Field *u)
Definition: afopr_CloverTerm-tmpl.h:209
commonParameters.h
AFopr_CloverTerm::AFopr_CloverTerm
AFopr_CloverTerm(const Parameters &params)
constructor.
Definition: afopr_CloverTerm.h:73
AFopr_CloverTerm::get_mode
std::string get_mode() const
returns mult mode.
Definition: afopr_CloverTerm-tmpl.h:761
AFopr_CloverTerm::m_solver
ASolver< AFIELD > * m_solver
Definition: afopr_CloverTerm.h:56
Field
Container of Field-type object.
Definition: field.h:46
afopr.h
communicator.h
Bridge::VerboseLevel
VerboseLevel
Definition: bridgeIO.h:45
AFopr_CloverTerm::init
void init(const Parameters &params)
initial setup.
Definition: afopr_CloverTerm-tmpl.h:16
AFopr_CloverTerm::D
void D(AFIELD &, const AFIELD &)
Definition: afopr_CloverTerm-tmpl.h:830
AFopr_CloverTerm::do_comm_any
int do_comm_any
Definition: afopr_CloverTerm.h:67
AFopr_CloverTerm::field_nvol
int field_nvol()
returns local volume size parameter.
Definition: afopr_CloverTerm.h:129
AFopr_CloverTerm::mult_csw_inv
void mult_csw_inv(AFIELD &, const AFIELD &)
Definition: afopr_CloverTerm-tmpl.h:891
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:572