Bridge++  Ver.2.1.3
force_F_Wilson_Nf2_Isochemical.cpp
Go to the documentation of this file.
1 
12 
14  = "Force_F_Wilson_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_w = new Fopr_Wilson_Chemical(params);
55 
56  m_eta = new Field_F(Nvol, 1);
57  m_zeta = new Field_F(Nvol, 1);
58  m_eta2 = new Field_F(Nvol, 1);
59  m_eta3 = new Field_F(Nvol, 1);
60 
61  m_force1 = new Field_G(Nvol, m_Ndim);
62 
64  //vout.general(m_vl, "%s: construction finished.\n",
65  vout.crucial(m_vl, "%s: construction finished.\n",
66  class_name.c_str());
67 
68 }
69 
70 //====================================================================
71 void Force_F_Wilson_Nf2_Isochemical::init(const std::string repr)
72 {
74 
76 
77  vout.general(m_vl, "%s: construction (obsolete)\n",
78  class_name.c_str());
80 
81  m_repr = repr;
82 
84 
86  const int Nvol = CommonParameters::Nvol();
87 
88  m_boundary.resize(m_Ndim);
89 
90  m_eta = new Field_F(Nvol, 1);
91  m_zeta = new Field_F(Nvol, 1);
92  m_eta2 = new Field_F(Nvol, 1);
93  m_eta3 = new Field_F(Nvol, 1);
94 
95  m_force1 = new Field_G(Nvol, m_Ndim);
96 
98  vout.general(m_vl, "%s: construction finished.\n",
99  class_name.c_str());
100 
101 }
102 
103 //====================================================================
105 {
107 
108  delete m_fopr_w;
109 
110  delete m_eta;
111  delete m_zeta;
112  delete m_eta2;
113  delete m_eta3;
114 
115  delete m_force1;
116 
117 }
118 
119 //====================================================================
121  const Parameters& params)
122 {
123  set_parameters_impl(params);
124 
126  m_fopr_w->set_parameters(params);
128 }
129 
130 //====================================================================
132  const Parameters& params)
133 {
134  std::string vlevel;
135  if (!params.fetch_string("verbose_level", vlevel)) {
136  m_vl = vout.set_verbose_level(vlevel);
137  }
138 
139  //- fetch and check input parameters
140  double kappa, mu;
141  std::vector<int> bc;
142 
143  int err = 0;
144  err += params.fetch_double("hopping_parameter", kappa);
145  err += params.fetch_double("chemical_potential", mu);
146  err += params.fetch_int_vector("boundary_condition", bc);
147 
148  if (err) {
149  vout.crucial(m_vl, "Error at %s: input parameter not found.\n",
150  class_name.c_str());
151  exit(EXIT_FAILURE);
152  }
153 
154  set_parameters_impl(kappa, mu, bc);
155 
156 }
157 
158 
159 //====================================================================
161  const double kappa,
162  const double mu,
163  const std::vector<int> bc)
164 {
165  set_parameters_impl(kappa, mu, bc);
166 
167  Parameters params;
168  get_parameters(params);
169  m_fopr_w->set_parameters(params);
170 
171 }
172 
173 //====================================================================
175  const double kappa,
176  const double mu,
177  const std::vector<int> bc)
178 {
179 #pragma omp barrier
180 
181  assert(bc.size() == m_Ndim);
182 
183  int ith = ThreadManager::get_thread_id();
184 
185  if (ith == 0) {
186  m_kappa = kappa;
187  m_mu = mu;
188  m_exp_mu = exp(mu);
189 
190  m_boundary.resize(m_Ndim);
191  m_boundary = bc;
192  }
193 #pragma omp barrier
194 
195  //- print input parameters
196  vout.general(m_vl, "%s: parameters\n", class_name.c_str());
197  vout.general(m_vl, " kappa = %12.8f\n", m_kappa);
198  vout.general(m_vl, " mu = %12.8f\n", m_mu);
199  for (int dir = 0; dir < m_Ndim; ++dir) {
200  vout.general(m_vl, " boundary[%d] = %2d\n", dir, m_boundary[dir]);
201  }
202 
203 }
204 
205 
206 //====================================================================
208 {
209  m_U = (Field_G *)U;
210  m_fopr_w->set_config(U);
211 }
212 
213 //====================================================================
214 void Force_F_Wilson_Nf2_Isochemical::set_mode(const std::string& mode)
215 {
216  m_mode = mode;
217 }
218 
219 //====================================================================
221 {
222  params.set_double("hopping_parameter", m_kappa);
223  params.set_double("chemical_potential", m_mu);
224  params.set_int_vector("boundary_condition", m_boundary);
225 
226  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
227 }
228 
229 
230 //====================================================================
232 {
233 #pragma omp barrier
234 
235  copy(*m_eta, eta_);
236 #pragma omp barrier
237 
238  m_fopr_w->set_mode("H");
239  m_fopr_w->mult(*m_zeta, *m_eta);
240 
241  set_mode("H");
243  copy(force_, *m_force1);
244 #pragma omp barrier
245 
246  set_mode("Hdag");
248 
249  axpy(force_, 1.0, *m_force1);
250 #pragma omp barrier
251 }
252 
253 
254 //====================================================================
256  const Field& zeta_,
257  const Field& eta_)
258 {
259 #pragma omp barrier
260 
261  copy(*m_zeta, zeta_);
262  copy(*m_eta, eta_);
263 #pragma omp barrier
264 
266 
267  copy(force_, *m_force1);
268 #pragma omp barrier
269 }
270 
271 
272 //====================================================================
274  Field_G& force,
275  const Field_F& zeta,
276  const Field_F& eta)
277 {
278 #pragma omp barrier
279 
280  force.set(0.0);
281 #pragma omp barrier
282 
283  for (int dir = 0; dir < m_Ndim-1; ++dir) {
284  m_fopr_w->mult_gm5p(dir, *m_eta2, eta);
285 
286  mult_Field_Gd(*m_eta3, 0, *m_U, dir, *m_eta2, 0);
287  scal(*m_eta3, -m_kappa);
288 #pragma omp barrier
289 
290  tensorProd_Field_F(force, dir, zeta, *m_eta3);
291  }
292 
293  const int dir = m_Ndim - 1;
294 
295  m_fopr_w->mult_gm5p(dir, *m_eta2, eta);
296 
297  mult_Field_Gd(*m_eta3, 0, *m_U, dir, *m_eta2, 0);
298 
299  if (m_mode == "H") {
300  scal(*m_eta3, -(m_kappa * m_exp_mu));
301  } else if (m_mode == "Hdag") {
302  scal(*m_eta3, -(m_kappa / m_exp_mu));
303  } else {
304  vout.crucial(m_vl, "Error at %s: illegal mode.\n",
305  class_name.c_str());
306  exit(EXIT_FAILURE);
307  }
308 
309  tensorProd_Field_F(force, dir, zeta, *m_eta3);
310 
311 }
312 
313 //============================================================END=====
Force_F_Wilson_Nf2_Isochemical::m_eta2
Field_F * m_eta2
Definition: force_F_Wilson_Nf2_Isochemical.h:52
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
Force_F_Wilson_Nf2_Isochemical::m_mu
double m_mu
isospin chemical potential
Definition: force_F_Wilson_Nf2_Isochemical.h:40
Fopr_Wilson_Chemical
AFopr_Wilson_Chemical< Field > Fopr_Wilson_Chemical
Definition: fopr_Wilson_Chemical.h:19
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
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_Wilson_Nf2_Isochemical::m_repr
std::string m_repr
Definition: force_F_Wilson_Nf2_Isochemical.h:43
Bridge::BridgeIO::increase_indent
void increase_indent()
Definition: bridgeIO.cpp:508
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
Force_F_Wilson_Nf2_Isochemical::m_Ndim
int m_Ndim
Definition: force_F_Wilson_Nf2_Isochemical.h:38
Force_F_Wilson_Nf2_Isochemical::force_udiv1_impl
void force_udiv1_impl(Field_G &force, const Field_F &zeta, const Field_F &eta)
Definition: force_F_Wilson_Nf2_Isochemical.cpp:273
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_Nf2_Isochemical::tidyup
void tidyup()
Final clean-up.
Definition: force_F_Wilson_Nf2_Isochemical.cpp:104
Force_F_Wilson_Nf2_Isochemical::m_eta
Field_F * m_eta
Definition: force_F_Wilson_Nf2_Isochemical.h:50
AFopr_Wilson_Chemical::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: afopr_Wilson_Chemical-tmpl.h:143
Force_F_Wilson_Nf2_Isochemical::m_zeta
Field_F * m_zeta
Definition: force_F_Wilson_Nf2_Isochemical.h:51
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_Nf2_Isochemical.h
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_Wilson_Nf2_Isochemical::m_fopr_w
Fopr_Wilson_Chemical * m_fopr_w
Definition: force_F_Wilson_Nf2_Isochemical.h:46
Force_F_Wilson_Nf2_Isochemical::m_vl
Bridge::VerboseLevel m_vl
Definition: force_F_Wilson_Nf2_Isochemical.h:44
Force_F_Wilson_Nf2_Isochemical::get_parameters
void get_parameters(Parameters &params) const
Definition: force_F_Wilson_Nf2_Isochemical.cpp:220
Force_F_Wilson_Nf2_Isochemical::m_boundary
std::vector< int > m_boundary
Definition: force_F_Wilson_Nf2_Isochemical.h:42
Parameters::fetch_int_vector
int fetch_int_vector(const string &key, vector< int > &value) const
Definition: parameters.cpp:429
Force_F_Wilson_Nf2_Isochemical::force_udiv
void force_udiv(Field &force, const Field &eta)
Definition: force_F_Wilson_Nf2_Isochemical.cpp:231
Force_F_Wilson_Nf2_Isochemical::m_exp_mu
double m_exp_mu
exp(mu)
Definition: force_F_Wilson_Nf2_Isochemical.h:41
AFopr_Wilson_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_Wilson_Chemical-tmpl.h:241
AFopr_Wilson_Chemical::set_config
void set_config(Field *U)
sets the gauge configuration.
Definition: afopr_Wilson_Chemical-tmpl.h:227
Force_F_Wilson_Nf2_Isochemical::m_eta3
Field_F * m_eta3
Definition: force_F_Wilson_Nf2_Isochemical.h:53
Parameters::set_int_vector
void set_int_vector(const string &key, const vector< int > &value)
Definition: parameters.cpp:45
Force_F_Wilson_Nf2_Isochemical::m_mode
std::string m_mode
Definition: force_F_Wilson_Nf2_Isochemical.h:48
Force_F_Wilson_Nf2_Isochemical::m_kappa
double m_kappa
hopping parameter
Definition: force_F_Wilson_Nf2_Isochemical.h:39
Force_F_Wilson_Nf2_Isochemical::set_parameters_impl
void set_parameters_impl(const Parameters &params)
Definition: force_F_Wilson_Nf2_Isochemical.cpp:131
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.
Force_F_Wilson_Nf2_Isochemical::m_force1
Field_G * m_force1
Definition: force_F_Wilson_Nf2_Isochemical.h:55
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
AFopr_Wilson_Chemical::mult_gm5p
void mult_gm5p(const int mu, AFIELD &v, const AFIELD &w)
Definition: afopr_Wilson_Chemical-tmpl.h:370
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
tensorProd.h
Field
Container of Field-type object.
Definition: field.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_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
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
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
Force_F_Wilson_Nf2_Isochemical::class_name
static const std::string class_name
Definition: force_F_Wilson_Nf2_Isochemical.h:35
AFopr_Wilson_Chemical::mult
void mult(AFIELD &v, const AFIELD &w)
multiplies fermion operator to a given field.
Definition: afopr_Wilson_Chemical-tmpl.h:255