Bridge++  Ver.2.1.3
afopr_OptimalDomainwall.h
Go to the documentation of this file.
1 
10 #ifndef AFOPR_OPTIMALDOMAINWALL_INCLUDED
11 #define AFOPR_OPTIMALDOMAINWALL_INCLUDED
12 
13 #include <valarray>
14 #include <string>
15 
16 #include "lib/Fopr/afopr.h"
18 #include "lib/Field/field.h"
19 #include "lib/IO/bridgeIO.h"
20 using Bridge::vout;
21 
22 #include "lib_alt/Fopr/afopr_Domainwall_General.h"
23 
24 class Field_G;
25 
27 
31 template<typename AFIELD>
32 class AFopr_OptimalDomainwall : public AFopr<AFIELD>
33 {
34  public:
35  typedef typename AFIELD::real_t real_t;
36  static const std::string class_name;
37 
38  private:
39  // parameters common to overlap fermion
40  double m_mq;
41  double m_M0;
42  int m_Ns;
43  std::vector<int> m_boundary;
44  std::vector<double> m_b;
45  std::vector<double> m_c;
47 
48  std::string m_mode;
49 
50  int m_NinF;
51  int m_Nvol;
52  int m_Ndim;
53 
54  AFopr_Domainwall_General<AFIELD>* m_foprdw;
55 
57  void init(const Parameters& params);
58 
60  void tidyup();
61 
62  public:
64  : AFopr<AFIELD>() { init(params); }
65 
67 
68  void set_parameters(const Parameters& params);
69 
70  void set_parameters(const double mq, const double M0, const int Ns,
71  const std::vector<int> bc,
72  const double b, const double c,
73  const double lambda_min, const double lambda_max);
74 
75  void set_config(Field* U) { m_foprdw->set_config(U); }
76 
77  void set_config(unique_ptr<Field_G>& U)
78  { m_foprdw->set_config(U.get()); }
79 
80  void set_mode(std::string mode);
81 
82  std::string get_mode() const { return m_mode; }
83 
84  void mult(AFIELD& v, const AFIELD& w)
85  { m_foprdw->mult(v, w); }
86 
87  void mult_dag(AFIELD& v, const AFIELD& w)
88  { m_foprdw->mult_dag(v, w); }
89 
91  void mult(AFIELD& v, const AFIELD& w, std::string mode)
92  { m_foprdw->mult(v, w, mode); }
93 
94  void mult_gm5(AFIELD& v, const AFIELD& w)
95  { m_foprdw->mult_gm5(v, w); }
96 
97  int field_nin(){ return m_NinF; }
98  int field_nvol(){ return m_Nvol; }
99  int field_nex(){ return m_Ns; }
100 
102  double flop_count() { return m_foprdw->flop_count(); }
103 
105  double flop_count(std::string mode)
106  { return m_foprdw->flop_count(mode); }
107 
108  private:
109 
110  void set_optimalDomainwall(const double b, const double c,
111  const double lambda_min,
112  const double lambda_max);
113 
114 #ifdef USE_FACTORY
115  private:
116  static AFopr<AFIELD> *create_object_with_params(const Parameters& params)
117  { return new AFopr_OptimalDomainwall(params); }
118 
119  public:
120  static bool register_factory()
121  {
123  "OptimalDomainwall", create_object_with_params);
124  return init1;
125  }
126 #endif
127 
128 };
129 #endif
AFopr_OptimalDomainwall::m_Ndim
int m_Ndim
spacetime dimensions
Definition: afopr_OptimalDomainwall.h:52
AFopr_OptimalDomainwall::m_vl
Bridge::VerboseLevel m_vl
verbose level
Definition: afopr_OptimalDomainwall.h:46
AFopr_OptimalDomainwall::real_t
AFIELD::real_t real_t
Definition: afopr_OptimalDomainwall.h:35
bridgeIO.h
AFopr_OptimalDomainwall::m_NinF
int m_NinF
on-site d.o.f.
Definition: afopr_OptimalDomainwall.h:50
AFopr_OptimalDomainwall::mult
void mult(AFIELD &v, const AFIELD &w, std::string mode)
mult with specified mode.
Definition: afopr_OptimalDomainwall.h:91
AFopr
Definition: afopr.h:48
AFopr_OptimalDomainwall::mult_gm5
void mult_gm5(AFIELD &v, const AFIELD &w)
multiplies gamma_5 matrix.
Definition: afopr_OptimalDomainwall.h:94
Parameters
Class for parameters.
Definition: parameters.h:46
AFopr_OptimalDomainwall::m_boundary
std::vector< int > m_boundary
boundary conditions
Definition: afopr_OptimalDomainwall.h:43
AFopr_OptimalDomainwall::mult
void mult(AFIELD &v, const AFIELD &w)
multiplies fermion operator to a given field.
Definition: afopr_OptimalDomainwall.h:84
AFopr_OptimalDomainwall::m_Ns
int m_Ns
size of fifth-dimension
Definition: afopr_OptimalDomainwall.h:42
AFopr_OptimalDomainwall::set_config
void set_config(Field *U)
sets the gauge configuration.
Definition: afopr_OptimalDomainwall.h:75
AFopr_OptimalDomainwall::m_Nvol
int m_Nvol
volume size
Definition: afopr_OptimalDomainwall.h:51
AFopr_OptimalDomainwall::flop_count
double flop_count()
this returns the number of floating point number operations.
Definition: afopr_OptimalDomainwall.h:102
AFopr_OptimalDomainwall::flop_count
double flop_count(std::string mode)
flop-count for specified mode.
Definition: afopr_OptimalDomainwall.h:105
AFopr_OptimalDomainwall::init
void init(const Parameters &params)
initial setup.
Definition: afopr_OptimalDomainwall-tmpl.h:31
AFopr_OptimalDomainwall::m_b
std::vector< double > m_b
Definition: afopr_OptimalDomainwall.h:44
Field::real_t
double real_t
Definition: field.h:51
AFopr_OptimalDomainwall::field_nex
int field_nex()
returns the external degree of freedom of the fermion field.
Definition: afopr_OptimalDomainwall.h:99
AFopr_OptimalDomainwall::field_nin
int field_nin()
returns the on-site degree of freedom of the fermion field.
Definition: afopr_OptimalDomainwall.h:97
AFopr_OptimalDomainwall::set_mode
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: afopr_OptimalDomainwall-tmpl.h:162
AFopr_OptimalDomainwall::field_nvol
int field_nvol()
returns the volume of the fermion field.
Definition: afopr_OptimalDomainwall.h:98
AFopr_OptimalDomainwall::m_mq
double m_mq
quark mass
Definition: afopr_OptimalDomainwall.h:40
AFopr_OptimalDomainwall
Alternative version of the Optimal Domain-wall fermion operator.
Definition: afopr_OptimalDomainwall.h:32
AFopr_OptimalDomainwall::mult_dag
void mult_dag(AFIELD &v, const AFIELD &w)
hermitian conjugate of mult.
Definition: afopr_OptimalDomainwall.h:87
AFopr_OptimalDomainwall::m_mode
std::string m_mode
Definition: afopr_OptimalDomainwall.h:48
AFopr_OptimalDomainwall::AFopr_OptimalDomainwall
AFopr_OptimalDomainwall(const Parameters &params)
Definition: afopr_OptimalDomainwall.h:63
AFopr_OptimalDomainwall::set_config
void set_config(unique_ptr< Field_G > &U)
Definition: afopr_OptimalDomainwall.h:77
AFopr_OptimalDomainwall::~AFopr_OptimalDomainwall
~AFopr_OptimalDomainwall()
Definition: afopr_OptimalDomainwall.h:66
AFopr_OptimalDomainwall::get_mode
std::string get_mode() const
returns the current mult mode.
Definition: afopr_OptimalDomainwall.h:82
field.h
AFopr_OptimalDomainwall::m_foprdw
AFopr_Domainwall_General< AFIELD > * m_foprdw
Definition: afopr_OptimalDomainwall.h:54
AFopr_OptimalDomainwall::set_optimalDomainwall
void set_optimalDomainwall(const double b, const double c, const double lambda_min, const double lambda_max)
Definition: afopr_OptimalDomainwall-tmpl.h:133
AFopr_OptimalDomainwall::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: afopr_OptimalDomainwall-tmpl.h:57
AFopr_OptimalDomainwall::tidyup
void tidyup()
final tidyup.
Definition: afopr_OptimalDomainwall-tmpl.h:50
AFopr_OptimalDomainwall::m_M0
double m_M0
domain-wall height
Definition: afopr_OptimalDomainwall.h:41
AFopr_OptimalDomainwall::m_c
std::vector< double > m_c
Definition: afopr_OptimalDomainwall.h:45
commonParameters.h
Field
Container of Field-type object.
Definition: field.h:46
afopr.h
Bridge::VerboseLevel
VerboseLevel
Definition: bridgeIO.h:45
Field_G
SU(N) gauge field.
Definition: field_G.h:38
AFopr_OptimalDomainwall::class_name
static const std::string class_name
Definition: afopr_OptimalDomainwall.h:36
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:572