Bridge++  Ver.2.1.3
force_F_Clover_Nf2.cpp
Go to the documentation of this file.
1 
12 
13 const std::string Force_F_Clover_Nf2::class_name = "Force_F_Clover_Nf2";
14 
15 //====================================================================
17 {
19 
20  std::string vlevel;
21  if (!params.fetch_string("verbose_level", vlevel)) {
22  m_vl = vout.set_verbose_level(vlevel);
23  } else {
25  }
26 
27  vout.general(m_vl, "%s: construction\n", class_name.c_str());
29 
30  std::string repr;
31  if (!params.fetch_string("gamma_matrix_type", repr)) {
32  m_repr = repr;
33  } else {
34  m_repr = "Dirac"; // default gamma-matrix type
35  vout.general(m_vl, "gamma_matrix_type is not given: defalt = %s\n",
36  m_repr.c_str());
37  }
38 
39  if ((m_repr != "Dirac") && (m_repr != "Chiral")) {
40  vout.crucial("Error at %s: unsupported gamma-matrix type: %s\n",
41  class_name.c_str(), m_repr.c_str());
42  exit(EXIT_FAILURE);
43  }
44 
46  const int Nvol = CommonParameters::Nvol();
47 
48  m_fopr_c = new Fopr_Clover(params);
49  m_force_w = new Force_F_Wilson_Nf2(params);
50  m_force_csw = new Force_F_CloverTerm(params);
51 
52  m_boundary.resize(m_Ndim);
53 
54  set_parameters_impl(params);
55 
56  m_staple = new Staple_lex();
57 
58  m_force1 = new Field_G(Nvol, m_Ndim);
59  m_force2 = new Field_G(Nvol, m_Ndim);
60 
61  m_eta = new Field_F(Nvol, 1);
62  m_zeta = new Field_F(Nvol, 1);
63 
65  vout.general(m_vl, "%s: construction finished.\n",
66  class_name.c_str());
67 
68 }
69 
70 
71 //====================================================================
72 void Force_F_Clover_Nf2::init(std::string repr)
73 {
75 
77 
78  vout.general(m_vl, "%s: construction (obsolete)\n",
79  class_name.c_str());
81 
82  m_repr = repr;
83 
84  const int Nvol = CommonParameters::Nvol();
86 
87  m_fopr_c = new Fopr_Clover(repr);
88  m_force_w = new Force_F_Wilson_Nf2(repr);
89  m_force_csw = new Force_F_CloverTerm(repr);
90 
91  m_boundary.resize(m_Ndim);
92 
93  m_staple = new Staple_lex();
94 
95  m_force1 = new Field_G(Nvol, m_Ndim);
96  m_force2 = new Field_G(Nvol, m_Ndim);
97 
98  m_eta = new Field_F(Nvol, 1);
99  m_zeta = new Field_F(Nvol, 1);
100 
102  vout.general(m_vl, "%s: construction finished.\n",
103  class_name.c_str());
104 }
105 
106 
107 //====================================================================
109 {
111 
112  delete m_fopr_c;
113  delete m_force_w;
114  delete m_force_csw;
115 
116  delete m_staple;
117 
118  delete m_force1;
119  delete m_force2;
120 
121  delete m_eta;
122  delete m_zeta;
123 }
124 
125 
126 //====================================================================
128 {
129  set_parameters_impl(params);
130 
131  m_fopr_c->set_parameters(params);
132  m_force_w->set_parameters(params);
133  m_force_csw->set_parameters(params);
134 }
135 
136 
137 //====================================================================
139 {
140 #pragma omp barrier
141 
142  int ith = ThreadManager::get_thread_id();
143  if (ith == 0) {
144  std::string vlevel;
145  if (!params.fetch_string("verbose_level", vlevel)) {
146  m_vl = vout.set_verbose_level(vlevel);
147  }
148  }
149 #pragma omp barrier
150 
151  //- fetch and check input parameters
152  double kappa, cSW;
153  std::vector<int> bc;
154 
155  int err = 0;
156  err += params.fetch_double("hopping_parameter", kappa);
157  err += params.fetch_double("clover_coefficient", cSW);
158  err += params.fetch_int_vector("boundary_condition", bc);
159 
160  if (err) {
161  vout.crucial(m_vl, "Error at %s: input parameter not found.\n",
162  class_name.c_str());
163  exit(EXIT_FAILURE);
164  }
165 
166  set_parameters_impl(kappa, cSW, bc);
167 }
168 
169 
170 //====================================================================
171 void Force_F_Clover_Nf2::set_parameters(const double kappa,
172  const double cSW,
173  const std::vector<int> bc)
174 {
175  set_parameters_impl(kappa, cSW, bc);
176 
177  //- propagate parameters
178  Parameters params;
179  get_parameters(params);
180 
181  m_fopr_c->set_parameters(params);
182  m_force_w->set_parameters(params);
183  m_force_csw->set_parameters(params);
184 
185 }
186 
187 
188 //====================================================================
190  const double cSW,
191  const std::vector<int> bc)
192 {
193 #pragma omp barrier
194 
195  assert(bc.size() == m_Ndim);
196 
197  int ith = ThreadManager::get_thread_id();
198 
199  if (ith == 0) {
200  m_kappa = kappa;
201  m_cSW = cSW;
202  m_boundary = bc;
203  }
204 #pragma omp barrier
205 
206  //- print input parameters
207  vout.general(m_vl, "%s: parameters:\n", class_name.c_str());
208  vout.general(m_vl, " gamma-matrix type = %s\n", m_repr.c_str());
209  vout.general(m_vl, " kappa = %12.8f\n", kappa);
210  vout.general(m_vl, " cSW = %12.8f\n", cSW);
211  for (int mu = 0; mu < m_Ndim; ++mu) {
212  vout.general(m_vl, " boundary[%d] = %2d\n", mu, bc[mu]);
213  }
214 
215 }
216 
217 
218 //====================================================================
220 {
221  params.set_double("hopping_parameter", m_kappa);
222  params.set_double("clover_coefficient", m_cSW);
223  params.set_int_vector("boundary_condition", m_boundary);
224  params.set_string("gamma_matrix_type", m_repr);
225 
226  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
227 }
228 
229 
230 //====================================================================
232 {
233 #pragma omp barrier
234 
235  int ith = ThreadManager::get_thread_id();
236  if (ith == 0) m_U = (Field_G *)U;
237 #pragma omp barrier
238 
239  m_fopr_c->set_config(U);
240  m_force_w->set_config(U);
242 }
243 
244 //====================================================================
245 void Force_F_Clover_Nf2::force_udiv(Field& force_, const Field& eta_)
246 {
247 #pragma omp barrier
248 
249  copy(*m_eta, eta_);
250 #pragma omp barrier
251 
252  m_fopr_c->H(*m_zeta, *m_eta);
253 
255  copy(force_, *m_force1);
256 #pragma omp barrier
257 
259  axpy(force_, 1.0, *m_force1);
260 #pragma omp barrier
261 
262 }
263 
264 
265 //====================================================================
266 void Force_F_Clover_Nf2::force_udiv1(Field& force_, const Field& zeta_, const Field& eta_)
267 {
268 #pragma omp barrier
269 
270  copy(*m_eta, eta_);
271  copy(*m_zeta, zeta_);
272 #pragma omp barrier
273 
275 
276  copy(force_, *m_force1);
277 #pragma omp barrier
278 }
279 
280 
281 //====================================================================
283  const Field_F& zeta,
284  const Field_F& eta)
285 {
286 #pragma omp barrier
287 
288  force.set(0.0);
289 #pragma omp barrier
290 
291  m_force_w->set_mode("H");
292  m_force_w->force_udiv1(force, zeta, eta);
293 
294  m_force_csw->force_udiv1(*m_force2, zeta, eta);
295 
296  axpy(force, 1.0, *m_force2);
297 #pragma omp barrier
298 }
299 
300 
301 //============================================================END=====
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
Fopr_Clover::H
void H(Field &, const Field &)
Definition: fopr_Clover.cpp:323
Force_F_Clover_Nf2::set_config
void set_config(Field *U)
Setting gauge configuration.
Definition: force_F_Clover_Nf2.cpp:231
CommonParameters::Ndim
static int Ndim()
Definition: commonParameters.h:117
Force_F_Wilson_Nf2::force_udiv1
void force_udiv1(Field &force, const Field &zeta, const Field &eta)
Definition: force_F_Wilson_Nf2.cpp:241
Field::set
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:175
Parameters
Class for parameters.
Definition: parameters.h:46
Force_F_Clover_Nf2::m_force_csw
Force_F_CloverTerm * m_force_csw
Clover term force.
Definition: force_F_Clover_Nf2.h:45
Parameters::set_double
void set_double(const string &key, const double value)
Definition: parameters.cpp:33
Bridge::BridgeIO::decrease_indent
void decrease_indent()
Definition: bridgeIO.cpp:518
Bridge::BridgeIO::increase_indent
void increase_indent()
Definition: bridgeIO.cpp:508
Force_F_Clover_Nf2::force_udiv
void force_udiv(Field &force, const Field &eta)
For recursive calculation of smeared force.
Definition: force_F_Clover_Nf2.cpp:245
Force_F_CloverTerm
Force calculation for clover term of clover fermion.
Definition: force_F_CloverTerm.h:31
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
AForce_F::set_mode
virtual void set_mode(const std::string &mode)
in Force, setting the mode is optional when H is nonhermitian.
Definition: aforce_F.h:82
Force_F_Clover_Nf2::force_udiv1
void force_udiv1(Field &force, const Field &zeta, const Field &eta)
For recursive calculation of smeared force.
Definition: force_F_Clover_Nf2.cpp:266
Force_F_Clover_Nf2::m_fopr_c
Fopr_Clover * m_fopr_c
fermion operator
Definition: force_F_Clover_Nf2.h:43
Fopr_Clover::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: fopr_Clover.cpp:118
axpy
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:381
Fopr_Clover
Clover fermion operator.
Definition: fopr_Clover.h:43
Force_F_CloverTerm::force_udiv1
void force_udiv1(Field &force, const Field &zeta, const Field &eta)
For recursive calculation of smeared force.
Definition: force_F_CloverTerm.cpp:286
Force_F_Clover_Nf2::get_parameters
void get_parameters(Parameters &params) const
Getting parameters of clover fermion force.
Definition: force_F_Clover_Nf2.cpp:219
Fopr_Clover::set_config
void set_config(Field *U)
sets the gauge configuration.
Definition: fopr_Clover.cpp:195
Force_F_Clover_Nf2::set_parameters_impl
void set_parameters_impl(const Parameters &params)
Setting parameters of clover fermion force.
Definition: force_F_Clover_Nf2.cpp:138
copy
void copy(Field &y, const Field &x)
copy(y, x): y = x
Definition: field.cpp:213
Force_F_Clover_Nf2::m_zeta
Field_F * m_zeta
Definition: force_F_Clover_Nf2.h:53
Force_F_CloverTerm::set_config
void set_config(Field *U)
Setting gauge configuration.
Definition: force_F_CloverTerm.cpp:254
Force_F_Clover_Nf2::m_repr
std::string m_repr
gamma matrix representation
Definition: force_F_Clover_Nf2.h:40
Force_F_Clover_Nf2::class_name
static const std::string class_name
Definition: force_F_Clover_Nf2.h:33
Force_F_Clover_Nf2::m_staple
Staple_lex * m_staple
Definition: force_F_Clover_Nf2.h:47
Force_F_Clover_Nf2::tidyup
void tidyup()
Final clean-up.
Definition: force_F_Clover_Nf2.cpp:108
Force_F_Clover_Nf2::m_eta
Field_F * m_eta
Definition: force_F_Clover_Nf2.h:54
Force_F_CloverTerm::set_parameters
void set_parameters(const Parameters &params)
Setting parameters of clover fermion force.
Definition: force_F_CloverTerm.cpp:164
Parameters::fetch_int_vector
int fetch_int_vector(const string &key, vector< int > &value) const
Definition: parameters.cpp:429
Force_F_Clover_Nf2::m_force_w
Force_F_Wilson_Nf2 * m_force_w
Wilson fermion force.
Definition: force_F_Clover_Nf2.h:44
threadManager.h
force_F_Clover_Nf2.h
Parameters::set_int_vector
void set_int_vector(const string &key, const vector< int > &value)
Definition: parameters.cpp:45
Force_F_Clover_Nf2::m_force2
Field_G * m_force2
Definition: force_F_Clover_Nf2.h:50
CommonParameters::Vlevel
static Bridge::VerboseLevel Vlevel()
Definition: commonParameters.h:122
Force_F_Wilson_Nf2::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: force_F_Wilson_Nf2.cpp:118
Staple_lex
Staple construction.
Definition: staple_lex.h:39
AForce_F< Field >::m_U
Field_G * m_U
Gauge configuration.
Definition: aforce_F.h:42
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:195
AForce_F< Field >::init
virtual void init()
initializer.
Force_F_Clover_Nf2::force_udiv1_impl
void force_udiv1_impl(Field_G &force, const Field_F &zeta, const Field_F &eta)
Core implemetation of clover force calculation.
Definition: force_F_Clover_Nf2.cpp:282
Parameters::fetch_string
int fetch_string(const string &key, string &value) const
Definition: parameters.cpp:378
Force_F_Wilson_Nf2
Force for the standard Wilson fermion operator.
Definition: force_F_Wilson_Nf2.h:33
Field_F
Wilson-type fermion field.
Definition: field_F.h:37
Parameters::fetch_double
int fetch_double(const string &key, double &value) const
Definition: parameters.cpp:327
Force_F_Clover_Nf2::m_kappa
double m_kappa
hopping parameter
Definition: force_F_Clover_Nf2.h:37
Force_F_Clover_Nf2::set_parameters
void set_parameters(const Parameters &params)
Setting parameters of clover fermion force.
Definition: force_F_Clover_Nf2.cpp:127
Force_F_Clover_Nf2::m_Ndim
int m_Ndim
spacetime dimension
Definition: force_F_Clover_Nf2.h:36
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:242
Field
Container of Field-type object.
Definition: field.h:46
Force_F_Clover_Nf2::m_boundary
std::vector< int > m_boundary
boundary conditions
Definition: force_F_Clover_Nf2.h:39
Force_F_Clover_Nf2::m_cSW
double m_cSW
clover coefficient
Definition: force_F_Clover_Nf2.h:38
ThreadManager::get_thread_id
static int get_thread_id()
returns thread id.
Definition: threadManager.cpp:253
Field_G
SU(N) gauge field.
Definition: field_G.h:38
Force_F_Clover_Nf2::m_force1
Field_G * m_force1
Definition: force_F_Clover_Nf2.h:49
Force_F_Clover_Nf2::m_vl
Bridge::VerboseLevel m_vl
verbose level
Definition: force_F_Clover_Nf2.h:41
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
Force_F_Wilson_Nf2::set_config
void set_config(Field *U)
sets verbose level.
Definition: force_F_Wilson_Nf2.cpp:207
ThreadManager::assert_single_thread
static void assert_single_thread(const std::string &class_name)
assert currently running on single thread.
Definition: threadManager.cpp:372
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:572
Bridge::BridgeIO::get_verbose_level
static std::string get_verbose_level(const VerboseLevel vl)
Definition: bridgeIO.cpp:216