Bridge++  Ver.2.1.3
force_F_Clover_Nf2_Isochemical.cpp
Go to the documentation of this file.
1 
12 
14  = "Force_F_Clover_Nf2_Isochemical";
15 
16 //====================================================================
18 {
20 
21  std::string vlevel;
22  if (!params.fetch_string("verbose_level", vlevel)) {
23  m_vl = vout.set_verbose_level(vlevel);
24  } else {
26  }
27 
28  // vout.general(m_vl, "%s: construction\n", class_name.c_str());
29  vout.crucial(m_vl, "%s: construction\n", class_name.c_str());
31 
32  std::string repr;
33  if (!params.fetch_string("gamma_matrix_type", repr)) {
34  m_repr = repr;
35  } else {
36  m_repr = "Dirac"; // default gamma-matrix type
37  vout.general(m_vl, "gamma_matrix_type is not given: defalt = %s\n",
38  m_repr.c_str());
39  }
40 
41  if ((m_repr != "Dirac") && (m_repr != "Chiral")) {
42  vout.crucial("Error at %s: unsupported gamma-matrix type: %s\n",
43  class_name.c_str(), m_repr.c_str());
44  exit(EXIT_FAILURE);
45  }
46 
48  const int Nvol = CommonParameters::Nvol();
49 
50  m_boundary.resize(m_Ndim);
51 
52  set_parameters_impl(params);
53 
54  m_fopr_c = new Fopr_Clover_Chemical(params);
56  m_force_csw = new Force_F_CloverTerm(params);
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  vout.crucial(m_vl, "%s: construction finished.\n",
67  class_name.c_str());
68 
69 }
70 
71 //====================================================================
72 void Force_F_Clover_Nf2_Isochemical::init(const 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 
85  const int Nvol = CommonParameters::Nvol();
86 
90 
91  m_boundary.resize(m_Ndim);
92 
93  m_force1 = new Field_G(Nvol, m_Ndim);
94  m_force2 = new Field_G(Nvol, m_Ndim);
95 
96  m_eta = new Field_F(Nvol, 1);
97  m_zeta = new Field_F(Nvol, 1);
98 
100  vout.general(m_vl, "%s: construction finished.\n",
101  class_name.c_str());
102 
103 }
104 
105 //====================================================================
107 {
109 
110  delete m_force_csw;
111  delete m_force_w;
112  delete m_fopr_c;
113 
114  delete m_force1;
115  delete m_force2;
116 
117  delete m_eta;
118  delete m_zeta;
119 }
120 
121 
122 //====================================================================
124 {
125  set_parameters_impl(params);
126 
127  m_fopr_c->set_parameters(params);
128  m_force_w->set_parameters(params);
129  m_force_csw->set_parameters(params);
130 }
131 
132 
133 //====================================================================
135  const Parameters& params)
136 {
137 #pragma omp barrier
138 
139  int ith = ThreadManager::get_thread_id();
140  if (ith == 0) {
141  std::string vlevel;
142  if (!params.fetch_string("verbose_level", vlevel)) {
143  m_vl = vout.set_verbose_level(vlevel);
144  }
145  }
146 #pragma omp barrier
147 
148  //- fetch and check input parameters
149  double kappa, cSW, mu;
150  std::vector<int> bc;
151 
152  int err = 0;
153  err += params.fetch_double("hopping_parameter", kappa);
154  err += params.fetch_double("clover_coefficient", cSW);
155  err += params.fetch_double("chemical_potential", mu);
156  err += params.fetch_int_vector("boundary_condition", bc);
157 
158  if (err) {
159  vout.crucial(m_vl, "Error at %s: input parameter not found.\n",
160  class_name.c_str());
161  exit(EXIT_FAILURE);
162  }
163 
164  set_parameters_impl(kappa, cSW, mu, bc);
165 
166 }
167 
168 
169 //====================================================================
171 {
172  params.set_double("hopping_parameter", m_kappa);
173  params.set_double("clover_coefficient", m_cSW);
174  params.set_double("chemical_potential", m_mu);
175  params.set_int_vector("boundary_condition", m_boundary);
176  params.set_string("gamma_matrix_type", m_repr);
177 
178  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
179 }
180 
181 
182 //====================================================================
184  const double kappa,
185  const double cSW,
186  const double mu,
187  const std::vector<int> bc)
188 {
189  set_parameters_impl(kappa, cSW, mu, bc);
190 
191  Parameters params;
192  get_parameters(params);
193  m_fopr_c->set_parameters(params);
194  m_force_w->set_parameters(params);
195  m_force_csw->set_parameters(params);
196 }
197 
198 //====================================================================
200  const double kappa,
201  const double cSW,
202  const double mu,
203  const std::vector<int> bc)
204 {
205 #pragma omp barrier
206 
207  const int Ndim = CommonParameters::Ndim();
208  assert(bc.size() == Ndim);
209 
210  int ith = ThreadManager::get_thread_id();
211 
212  if (ith == 0) {
213  m_kappa = kappa;
214  m_cSW = cSW;
215  m_mu = mu;
216 
217  m_boundary.resize(Ndim);
218  m_boundary = bc;
219  }
220 #pragma omp barrier
221 
222  //- print input parameters
223  vout.general(m_vl, "%s:\n", class_name.c_str());
224  vout.general(m_vl, " kappa = %12.8f\n", m_kappa);
225  vout.general(m_vl, " cSW = %12.8f\n", m_cSW);
226  vout.general(m_vl, " mu = %12.8f\n", m_mu);
227  for (int dir = 0; dir < Ndim; ++dir) {
228  vout.general(m_vl, " boundary[%d] = %2d\n", dir, m_boundary[dir]);
229  }
230 }
231 
232 
233 //====================================================================
235 {
236 #pragma omp barrier
237 
238  int ith = ThreadManager::get_thread_id();
239  if (ith == 0) m_U = (Field_G *)U;
240 #pragma omp barrier
241 
242  m_fopr_c->set_config(U);
243  m_force_w->set_config(U);
245 }
246 
247 //====================================================================
248 void Force_F_Clover_Nf2_Isochemical::set_mode(const std::string& mode)
249 {
250 #pragma omp barrier
251 
252  int ith = ThreadManager::get_thread_id();
253  if (ith == 0) m_mode = mode;
254 #pragma omp barrier
255 
256  m_fopr_c->set_mode(mode);
257  m_force_w->set_mode(mode);
258 
259 }
260 
261 //====================================================================
263  const Field& eta_)
264 {
265 #pragma omp barrier
266 
267  copy(*m_eta, eta_);
268 #pragma omp barrier
269 
270  m_fopr_c->H(*m_zeta, *m_eta);
271 
272  set_mode("H");
274  copy(force_, *m_force1);
275 #pragma omp barrier
276 
277  set_mode("Hdag");
279 
280  axpy(force_, 1.0, *m_force1);
281 #pragma omp barrier
282 }
283 
284 
285 //====================================================================
287  const Field& zeta_,
288  const Field& eta_)
289 {
290 #pragma omp barrier
291 
292  copy(*m_eta, eta_);
293  copy(*m_zeta, zeta_);
294 #pragma omp barrier
295 
297 
298  copy(force_, *m_force1);
299 #pragma omp barrier
300 }
301 
302 
303 //====================================================================
305  Field_G& force,
306  const Field_F& zeta,
307  const Field_F& eta)
308 {
309 #pragma omp barrier
310 
311  force.set(0.0);
312 #pragma omp barrier
313 
315  m_force_w->force_udiv1(force, zeta, eta);
316 
317  m_force_csw->force_udiv1(*m_force2, zeta, eta);
318 
319  axpy(force, 1.0, *m_force2);
320 #pragma omp barrier
321 }
322 
323 
324 //============================================================END=====
Force_F_Clover_Nf2_Isochemical::m_zeta
Field_F * m_zeta
Definition: force_F_Clover_Nf2_Isochemical.h:50
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
Force_F_Clover_Nf2_Isochemical::tidyup
void tidyup()
Final clean-up.
Definition: force_F_Clover_Nf2_Isochemical.cpp:106
CommonParameters::Ndim
static int Ndim()
Definition: commonParameters.h:117
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
Fopr_Clover_Chemical
AFopr_Clover_Chemical< Field > Fopr_Clover_Chemical
Definition: fopr_Clover_Chemical.h:19
Parameters::set_double
void set_double(const string &key, const double value)
Definition: parameters.cpp:33
Force_F_Wilson_Nf2_Isochemical::set_config
void set_config(Field *U)
sets verbose level.
Definition: force_F_Wilson_Nf2_Isochemical.cpp:207
Bridge::BridgeIO::decrease_indent
void decrease_indent()
Definition: bridgeIO.cpp:518
Force_F_Clover_Nf2_Isochemical::m_cSW
double m_cSW
clover coefficient
Definition: force_F_Clover_Nf2_Isochemical.h:38
Force_F_Clover_Nf2_Isochemical::set_mode
void set_mode(const std::string &mode)
in Force, setting the mode is optional when H is nonhermitian.
Definition: force_F_Clover_Nf2_Isochemical.cpp:248
Bridge::BridgeIO::increase_indent
void increase_indent()
Definition: bridgeIO.cpp:508
Force_F_Clover_Nf2_Isochemical::m_eta
Field_F * m_eta
Definition: force_F_Clover_Nf2_Isochemical.h:51
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
Force_F_Clover_Nf2_Isochemical::set_parameters_impl
void set_parameters_impl(const Parameters &params)
Definition: force_F_Clover_Nf2_Isochemical.cpp:134
Force_F_Clover_Nf2_Isochemical::m_mode
std::string m_mode
mult mode
Definition: force_F_Clover_Nf2_Isochemical.h:44
axpy
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:381
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_Isochemical::m_boundary
std::vector< int > m_boundary
boundary conditions
Definition: force_F_Clover_Nf2_Isochemical.h:40
Force_F_Clover_Nf2_Isochemical::force_udiv1
void force_udiv1(Field &force, const Field &zeta, const Field &eta)
For recursive calculation of smeared force.
Definition: force_F_Clover_Nf2_Isochemical.cpp:286
copy
void copy(Field &y, const Field &x)
copy(y, x): y = x
Definition: field.cpp:213
Force_F_Wilson_Nf2_Isochemical::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_Isochemical.cpp:120
Force_F_CloverTerm::set_config
void set_config(Field *U)
Setting gauge configuration.
Definition: force_F_CloverTerm.cpp:254
Force_F_Clover_Nf2_Isochemical::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_Isochemical.cpp:304
Force_F_Wilson_Nf2_Isochemical
Force for the Wilson fermion operator with isospin chemical potential.
Definition: force_F_Wilson_Nf2_Isochemical.h:32
Force_F_Clover_Nf2_Isochemical::m_kappa
double m_kappa
hopping parameter
Definition: force_F_Clover_Nf2_Isochemical.h:37
Force_F_Clover_Nf2_Isochemical::m_fopr_c
Fopr_Clover_Chemical * m_fopr_c
fermion operator
Definition: force_F_Clover_Nf2_Isochemical.h:46
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
AFopr_Clover_Chemical::set_config
void set_config(Field *U)
sets the gauge configuration.
Definition: afopr_Clover_Chemical-tmpl.h:234
threadManager.h
AFopr_Clover_Chemical::H
void H(AFIELD &, const AFIELD &)
Definition: afopr_Clover_Chemical-tmpl.h:388
Force_F_Clover_Nf2_Isochemical::m_Ndim
int m_Ndim
spacetime dimension
Definition: force_F_Clover_Nf2_Isochemical.h:36
Parameters::set_int_vector
void set_int_vector(const string &key, const vector< int > &value)
Definition: parameters.cpp:45
Force_F_Clover_Nf2_Isochemical::class_name
static const std::string class_name
Definition: force_F_Clover_Nf2_Isochemical.h:33
Force_F_Clover_Nf2_Isochemical::set_parameters
void set_parameters(const Parameters &params)
Setting parameters of clover fermion force.
Definition: force_F_Clover_Nf2_Isochemical.cpp:123
CommonParameters::Vlevel
static Bridge::VerboseLevel Vlevel()
Definition: commonParameters.h:122
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.
AFopr_Clover_Chemical::set_mode
void set_mode(const std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: afopr_Clover_Chemical-tmpl.h:248
AFopr_Clover_Chemical::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: afopr_Clover_Chemical-tmpl.h:145
Force_F_Clover_Nf2_Isochemical::m_vl
Bridge::VerboseLevel m_vl
Definition: force_F_Clover_Nf2_Isochemical.h:41
Force_F_Wilson_Nf2_Isochemical::force_udiv1
void force_udiv1(Field &force, const Field &zeta, const Field &eta)
Definition: force_F_Wilson_Nf2_Isochemical.cpp:255
Force_F_Clover_Nf2_Isochemical::m_repr
std::string m_repr
gamma matrix representation
Definition: force_F_Clover_Nf2_Isochemical.h:43
Parameters::fetch_string
int fetch_string(const string &key, string &value) const
Definition: parameters.cpp:378
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_Isochemical::m_force_csw
Force_F_CloverTerm * m_force_csw
Clover term force.
Definition: force_F_Clover_Nf2_Isochemical.h:48
Force_F_Clover_Nf2_Isochemical::get_parameters
void get_parameters(Parameters &params) const
Getting parameters of clover fermion force.
Definition: force_F_Clover_Nf2_Isochemical.cpp:170
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:242
Force_F_Clover_Nf2_Isochemical::set_config
void set_config(Field *U)
Setting gauge configuration.
Definition: force_F_Clover_Nf2_Isochemical.cpp:234
Force_F_Clover_Nf2_Isochemical::force_udiv
void force_udiv(Field &force, const Field &eta)
For recursive calculation of smeared force.
Definition: force_F_Clover_Nf2_Isochemical.cpp:262
Field
Container of Field-type object.
Definition: field.h:46
force_F_Clover_Nf2_Isochemical.h
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_Wilson_Nf2_Isochemical::set_mode
void set_mode(const std::string &mode)
in Force, setting the mode is optional when H is nonhermitian.
Definition: force_F_Wilson_Nf2_Isochemical.cpp:214
Force_F_Clover_Nf2_Isochemical::m_force_w
Force_F_Wilson_Nf2_Isochemical * m_force_w
Wilson fermion force.
Definition: force_F_Clover_Nf2_Isochemical.h:47
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
Force_F_Clover_Nf2_Isochemical::m_force1
Field_G * m_force1
Definition: force_F_Clover_Nf2_Isochemical.h:53
ThreadManager::assert_single_thread
static void assert_single_thread(const std::string &class_name)
assert currently running on single thread.
Definition: threadManager.cpp:372
Force_F_Clover_Nf2_Isochemical::m_force2
Field_G * m_force2
Definition: force_F_Clover_Nf2_Isochemical.h:54
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:572
Force_F_Clover_Nf2_Isochemical::m_mu
double m_mu
Isospin chemical potential.
Definition: force_F_Clover_Nf2_Isochemical.h:39
Bridge::BridgeIO::get_verbose_level
static std::string get_verbose_level(const VerboseLevel vl)
Definition: bridgeIO.cpp:216