Bridge++  Ver.2.1.3
force_F_Wilson_SF.cpp
Go to the documentation of this file.
1 
12 
13 const std::string Force_F_Wilson_SF::class_name = "Force_F_Wilson_SF";
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 
45  const int Nvol = CommonParameters::Nvol();
47 
48  m_boundary.resize(m_Ndim);
49 
50  set_parameters_impl(params);
51 
52  m_fopr_w = new Fopr_Wilson_SF(params);
53 
54  m_force1 = new Field_G(Nvol, m_Ndim);
55 
56  m_eta = new Field_F(Nvol, 1);
57  m_zeta = new Field_F(Nvol, 1);
58 
59  m_eta2 = new Field_F(Nvol, 1);
60  m_eta3 = new Field_F(Nvol, 1);
61 
63  vout.general(m_vl, "%s: construction finished.\n",
64  class_name.c_str());
65 
66 }
67 
68 //====================================================================
70 {
72 
74 
75  vout.general(m_vl, "%s: construction (obsolete)\n",
76  class_name.c_str());
78 
79  m_repr = "Dirac"; // default gamma-matrix type
80 
81  const int Nvol = CommonParameters::Nvol();
83 
84  m_boundary.resize(m_Ndim);
85 
86  m_fopr_w = new Fopr_Wilson_SF();
87 
88  m_force1 = new Field_G(Nvol, m_Ndim);
89 
90  m_eta = new Field_F(Nvol, 1);
91  m_zeta = new Field_F(Nvol, 1);
92 
93  m_eta2 = new Field_F(Nvol, 1);
94  m_eta3 = new Field_F(Nvol, 1);
95 
97  vout.general(m_vl, "%s: construction finished.\n",
98  class_name.c_str());
99 
100 }
101 
102 //====================================================================
104 {
105  delete m_fopr_w;
106 
107  delete m_force1;
108 
109  delete m_eta;
110  delete m_zeta;
111  delete m_eta2;
112  delete m_eta3;
113 }
114 
115 //====================================================================
117 {
118  set_parameters_impl(params);
119 
120  m_fopr_w->set_parameters(params);
121 }
122 
123 //====================================================================
125 {
126  std::string vlevel;
127  if (!params.fetch_string("verbose_level", vlevel)) {
128  m_vl = vout.set_verbose_level(vlevel);
129  }
130 
131  //- fetch and check input parameters
132  double kappa;
133  std::vector<int> bc;
134 
135  int err = 0;
136  err += params.fetch_double("hopping_parameter", kappa);
137  err += params.fetch_int_vector("boundary_condition", bc);
138 
139  if (err) {
140  vout.crucial(m_vl, "Error at %s: input parameter not found.\n",
141  class_name.c_str());
142  exit(EXIT_FAILURE);
143  }
144 
145  set_parameters_impl(kappa, bc);
146 }
147 
148 
149 //====================================================================
150 void Force_F_Wilson_SF::set_parameters(const double kappa,
151  const std::vector<int> bc)
152 {
153  set_parameters_impl(kappa, bc);
154 
155  //- propagate parameters
157 }
158 
159 
160 //====================================================================
162  const std::vector<int> bc)
163 {
164 #pragma omp barrier
165 
166  assert(bc.size() == m_Ndim);
167 
168  int ith = ThreadManager::get_thread_id();
169  if (ith == 0) {
170  m_kappa = kappa;
171  m_boundary = bc;
172  }
173 #pragma omp barrier
174 
175  vout.general(m_vl, "%s: parameters\n", class_name.c_str());
176  vout.general(m_vl, " kappa = %12.8f\n", m_kappa);
177  for (int mu = 0; mu < m_Ndim; ++mu) {
178  vout.general(m_vl, " boundary[%d] = %2d\n", mu, m_boundary[mu]);
179  }
180 
181 }
182 
183 
184 //====================================================================
186 {
187  params.set_double("hopping_parameter", m_kappa);
188  params.set_int_vector("boundary_condition", m_boundary);
189  params.set_string("gamma_matrix_type", m_repr);
190 
191  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
192 }
193 
194 
195 //====================================================================
197 {
198  int ith = ThreadManager::get_thread_id();
199  if (ith == 0) m_U = (Field_G *)U;
200 #pragma omp barrier
201 
202  m_fopr_w->set_config(U);
203 }
204 
205 //====================================================================
206 void Force_F_Wilson_SF::force_udiv(Field& force_, const Field& eta_)
207 {
208 #pragma omp barrier
209 
210  copy(*m_eta, eta_);
211 #pragma omp barrier
212 
213  m_fopr_w->set_mode("H");
214  m_fopr_w->mult(*m_zeta, *m_eta);
215 
217 
219 #pragma omp barrier
220 
221  copy(force_, *m_force1);
222 #pragma omp barrier
223 
225 
227 #pragma omp barrier
228 
229  axpy(force_, 1.0, *m_force1);
230 #pragma omp barrier
231 
232 }
233 
234 
235 //====================================================================
237  const Field& zeta_,
238  const Field& eta_)
239 {
240 #pragma omp barrier
241 
242  copy(*m_zeta, zeta_);
243  copy(*m_eta, eta_);
244 
246 
248  // added [11 Jan 2026 H.Matsufuru]
249 #pragma omp barrier
250 
251  copy(force_, *m_force1);
252 #pragma omp barrier
253 }
254 
255 
256 //====================================================================
258  const Field_F& zeta,
259  const Field_F& eta)
260 {
261 #pragma omp barrier
262 
263  force.set(0.0); // this may not be necessary
264 #pragma omp barrier
265 
266  for (int mu = 0; mu < m_Ndim; ++mu) {
267 
268  m_fopr_w->mult_gm5p(mu, *m_eta2, eta);
269 
270  mult_Field_Gd(*m_eta3, 0, *m_U, mu, *m_eta2, 0);
271 
272  tensorProd_Field_F(force, mu, *m_zeta, *m_eta3);
273  }
274 
275  scal(force, -m_kappa);
276 #pragma omp barrier
277 }
278 
279 //============================================================END=====
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
Fopr_Wilson_SF::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: fopr_Wilson_SF.cpp:303
CommonParameters::Ndim
static int Ndim()
Definition: commonParameters.h:117
Fopr_Wilson_SF::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: fopr_Wilson_SF.cpp:120
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
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
force_F_Wilson_SF.h
Bridge::BridgeIO::increase_indent
void increase_indent()
Definition: bridgeIO.cpp:508
Fopr_Wilson_SF::set_config
void set_config(Field *U)
sets the gauge configuration.
Definition: fopr_Wilson_SF.cpp:211
Force_F_Wilson_SF::m_zeta
Field_F * m_zeta
Definition: force_F_Wilson_SF.h:47
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
Force_F_Wilson_SF::init
void init()
initializer.
Definition: force_F_Wilson_SF.cpp:69
axpy
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:381
mult_Field_Gd
void mult_Field_Gd(Field_F &y, const int ex, const Field_G &u, int ex1, const Field_F &x, int ex2)
Definition: field_F_imp.cpp:76
Force_F_Wilson_SF::m_eta2
Field_F * m_eta2
Definition: force_F_Wilson_SF.h:49
copy
void copy(Field &y, const Field &x)
copy(y, x): y = x
Definition: field.cpp:213
tensorProd_Field_F
void tensorProd_Field_F(Field_G &u, const Field_F &v1, const Field_F &v2)
Definition: tensorProd.cpp:35
Force_F_Wilson_SF::m_boundary
std::vector< int > m_boundary
Definition: force_F_Wilson_SF.h:38
Fopr_Wilson_SF::mult_gm5p
void mult_gm5p(const int mu, Field &v, const Field &w)
Definition: fopr_Wilson_SF.cpp:367
Force_F_Wilson_SF::m_repr
std::string m_repr
Definition: force_F_Wilson_SF.h:39
Force_F_Wilson_SF::force_udiv1
void force_udiv1(Field &force, const Field &zeta, const Field &eta)
Definition: force_F_Wilson_SF.cpp:236
Force_F_Wilson_SF::set_config
void set_config(Field *U)
sets verbose level.
Definition: force_F_Wilson_SF.cpp:196
Force_F_Wilson_SF::m_force1
Field_G * m_force1
Definition: force_F_Wilson_SF.h:44
Force_F_Wilson_SF::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: force_F_Wilson_SF.cpp:116
Parameters::fetch_int_vector
int fetch_int_vector(const string &key, vector< int > &value) const
Definition: parameters.cpp:429
Fopr_Wilson_SF::mult
void mult(Field &v, const Field &f)
multiplies fermion operator to a given field.
Definition: fopr_Wilson_SF.cpp:225
threadManager.h
Force_F_Wilson_SF::m_fopr_w
Fopr_Wilson_SF * m_fopr_w
Definition: force_F_Wilson_SF.h:42
Force_F_Wilson_SF::m_kappa
double m_kappa
Definition: force_F_Wilson_SF.h:37
Force_F_Wilson_SF::m_eta3
Field_F * m_eta3
Definition: force_F_Wilson_SF.h:50
Force_F_Wilson_SF::set_parameters_impl
void set_parameters_impl(const Parameters &params)
Definition: force_F_Wilson_SF.cpp:124
Parameters::set_int_vector
void set_int_vector(const string &key, const vector< int > &value)
Definition: parameters.cpp:45
Field_SF::set_boundary_spatial_link_zero
void set_boundary_spatial_link_zero(Field_G &u)
Definition: field_SF.cpp:151
CommonParameters::Vlevel
static Bridge::VerboseLevel Vlevel()
Definition: commonParameters.h:122
Force_F_Wilson_SF::class_name
static const std::string class_name
Definition: force_F_Wilson_SF.h:33
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
Force_F_Wilson_SF::m_Ndim
int m_Ndim
Definition: force_F_Wilson_SF.h:36
Force_F_Wilson_SF::m_vl
Bridge::VerboseLevel m_vl
Definition: force_F_Wilson_SF.h:40
Force_F_Wilson_SF::force_udiv1_impl
void force_udiv1_impl(Field_G &force, const Field_F &zeta, const Field_F &eta)
Definition: force_F_Wilson_SF.cpp:257
scal
void scal(Field &x, const double a)
scal(x, a): x = a * x
Definition: field.cpp:262
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
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:242
Field
Container of Field-type object.
Definition: field.h:46
Force_F_Wilson_SF::m_eta
Field_F * m_eta
Definition: force_F_Wilson_SF.h:46
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_SF::tidyup
void tidyup()
finalizer.
Definition: force_F_Wilson_SF.cpp:103
Force_F_Wilson_SF::force_udiv
void force_udiv(Field &force, const Field &eta)
Definition: force_F_Wilson_SF.cpp:206
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
Fopr_Wilson_SF
Wilson fermion operator with SF BC.
Definition: fopr_Wilson_SF.h:51
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_Wilson_SF::get_parameters
void get_parameters(Parameters &params) const
Definition: force_F_Wilson_SF.cpp:185
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