Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_Clover.cpp
Go to the documentation of this file.
1 
14 #include "fopr_Clover.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 using std::valarray;
21 using std::string;
22 
23 //- parameter entries
24 namespace {
25  void append_entry(Parameters& param)
26  {
27  param.Register_string("gamma_matrix_type", "NULL");
28 
29  param.Register_double("hopping_parameter", 0.0);
30  param.Register_double("clover_coefficient", 0.0);
31  param.Register_int_vector("boundary_condition", std::valarray<int>());
32 
33  param.Register_string("verbose_level", "NULL");
34  }
35 
36 
37 #ifdef USE_PARAMETERS_FACTORY
38  bool init_param = ParametersFactory::Register("Fopr.Clover", append_entry);
39 #endif
40 }
41 //- end
42 
43 //- parameters class
45 //- end
46 
47 const std::string Fopr_Clover::class_name = "Fopr_Clover";
48 
49 //====================================================================
50 void Fopr_Clover::init(string repr)
51 {
56  m_NinF = 2 * m_Nc * m_Nd;
57 
58  m_boundary.resize(m_Ndim);
59 
60  m_U = 0;
61 
62  m_repr = repr;
63 
64  m_fopr_w = new Fopr_Wilson(repr);
65  m_fopr_csw = new Fopr_CloverTerm(repr);
66 
67  m_v1.reset(m_NinF, m_Nvol, 1);
68  m_v2.reset(m_NinF, m_Nvol, 1);
69 }
70 
71 
72 //====================================================================
74 {
75  delete m_fopr_w;
76  delete m_fopr_csw;
77 }
78 
79 
80 //====================================================================
82 {
83  const string str_vlevel = params.get_string("verbose_level");
84 
85  m_vl = vout.set_verbose_level(str_vlevel);
86 
87  //- fetch and check input parameters
88  double kappa, cSW;
89  valarray<int> bc;
90 
91  int err = 0;
92  err += params.fetch_double("hopping_parameter", kappa);
93  err += params.fetch_double("clover_coefficient", cSW);
94  err += params.fetch_int_vector("boundary_condition", bc);
95 
96  if (err) {
97  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
98  abort();
99  }
100 
101  set_parameters(kappa, cSW, bc);
102 }
103 
104 
105 //====================================================================
106 void Fopr_Clover::set_parameters(double kappa, double cSW, valarray<int> bc)
107 {
108  //- print input parameters
109  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
110  vout.general(m_vl, " kappa = %8.4f\n", kappa);
111  vout.general(m_vl, " cSW = %8.4f\n", cSW);
112  for (int mu = 0; mu < m_Ndim; ++mu) {
113  vout.general(m_vl, " boundary[%d] = %2d\n", mu, bc[mu]);
114  }
115 
116  //- range check
117  // NB. kappa,cSW == 0 is allowed.
118  assert(bc.size() == m_Ndim);
119 
120  //- store values
121  m_kappa = kappa;
122  m_cSW = cSW;
123 
124  for (int mu = 0; mu < m_Ndim; ++mu) {
125  m_boundary[mu] = bc[mu];
126  }
127 
128  //- propagate parameters to components
131 }
132 
133 
134 //====================================================================
136 {
137  // Counting of floating point operations.
138  // defined only for D, Dag, H, DDdag, DdagD which can be called
139  // from the solver algorithms.
140  // Since the flop_count() of Fopr_Wilson_eo defines flop of
141  // (1 - Meo*Moe), flop of clover term is twice added together with
142  // contribution of addion.
143 
144  int Lvol = CommonParameters::Lvol();
145 
146  double flop_w = m_fopr_w->flop_count();
147  double flop_csw = m_fopr_csw->flop_count();
148 
149  flop_csw += static_cast<double>(2 * m_Nc * m_Nd * Lvol);
150 
151  double flop = flop_w + flop_csw;
152 
153  if ((m_mode == "DdagD") || (m_mode == "DDdag")) flop += flop_csw;
154  // for additional twice mult of clover term.
155 
156  return flop;
157 }
158 
159 
160 //====================================================================
161 void Fopr_Clover::D(Field& w, const Field& f)
162 {
163  assert(f.nex() == 1);
164 
165  m_fopr_w->D(w, f);
167  axpy(w, -1.0, m_v1); // w -= m_v1;
168 }
169 
170 
171 //====================================================================
172 void Fopr_Clover::Ddag(Field& w, const Field& f)
173 {
174  mult_gm5(w, f);
175  D(m_v2, w);
176  mult_gm5(w, m_v2);
177 }
178 
179 
180 //====================================================================
181 void Fopr_Clover::DdagD(Field& w, const Field& f)
182 {
183  D(m_v2, f);
184  mult_gm5(w, m_v2);
185  D(m_v2, w);
186  mult_gm5(w, m_v2);
187 }
188 
189 
190 //====================================================================
191 void Fopr_Clover::DDdag(Field& w, const Field& f)
192 {
193  mult_gm5(m_v2, f);
194  D(w, m_v2);
195  mult_gm5(m_v2, w);
196  D(w, m_v2);
197 }
198 
199 
200 //====================================================================
201 void Fopr_Clover::H(Field& w, const Field& f)
202 {
203  D(m_v2, f);
204  mult_gm5(w, m_v2);
205 }
206 
207 
208 //====================================================================
210  const int mu, const int nu)
211 {
212  m_fopr_csw->mult_isigma(v, w, mu, nu);
213 }
214 
215 
216 //====================================================================
217 //============================================================END=====
void DDdag(Field &, const Field &)
BridgeIO vout
Definition: bridgeIO.cpp:207
void Register_string(const string &, const string &)
Definition: parameters.cpp:352
void mult_sigmaF(Field &, const Field &)
const Field_G * m_U
gauge configuration (pointer)
Definition: fopr_Clover.h:63
void tidyup()
Definition: fopr_Clover.cpp:73
std::valarray< int > m_boundary
boundary conditions
Definition: fopr_Clover.h:55
void general(const char *format,...)
Definition: bridgeIO.cpp:38
void D(Field &w, const Field &v)
Container of Field-type object.
Definition: field.h:37
void set_parameters(const Parameters &params)
void DdagD(Field &, const Field &)
Class for parameters.
Definition: parameters.h:40
static int Lvol()
int fetch_int_vector(const string &key, std::valarray< int > &val) const
Definition: parameters.cpp:176
void H(Field &, const Field &)
std::string m_mode
mode of multiplication
Definition: fopr_Clover.h:57
Wilson-type fermion field.
Definition: field_F.h:37
std::string m_repr
gamma matrix representation
Definition: fopr_Clover.h:56
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
double m_cSW
clover coefficient
Definition: fopr_Clover.h:54
double m_kappa
hopping parameter
Definition: fopr_Clover.h:53
Bridge::VerboseLevel m_vl
Definition: fopr.h:99
Fopr_Wilson * m_fopr_w
Wilson fermion kernel.
Definition: fopr_Clover.h:61
static const std::string class_name
Definition: fopr_Clover.h:50
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
Definition: field.h:82
void set_parameters(const Parameters &params)
Definition: fopr_Wilson.cpp:48
int nex() const
Definition: field.h:102
void mult_gm5(Field &v, const Field &w)
Definition: fopr_Clover.h:163
void D(Field &, const Field &)
Field m_v1
Definition: fopr_Clover.h:66
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:193
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
double flop_count()
this returns the number of floating point operations.
Fopr_CloverTerm * m_fopr_csw
Clover term operator.
Definition: fopr_Clover.h:62
static bool Register(const std::string &realm, const creator_callback &cb)
int m_NinF
internal parameters
Definition: fopr_Clover.h:59
void Ddag(Field &, const Field &)
void Register_double(const string &, const double)
Definition: parameters.cpp:324
void Register_int_vector(const string &, const std::valarray< int > &)
Definition: parameters.cpp:345
Field m_v2
working field.
Definition: fopr_Clover.h:66
double flop_count()
this returns the number of floating point operations.
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
double flop_count()
this returns the number of floating point number operations.
string get_string(const string &key) const
Definition: parameters.cpp:85
void init(std::string repr)
Definition: fopr_Clover.cpp:50
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:191
void set_parameters(const Parameters &params)
Definition: fopr_Clover.cpp:81