Bridge++  Ver. 2.0.2
forceSmear_HYP_SF.cpp
Go to the documentation of this file.
1 
14 #include "forceSmear_HYP_SF.h"
15 
16 #ifdef USE_FACTORY_AUTOREGISTER
17 namespace {
18  bool init = ForceSmear_HYP_SF::register_factory();
19 }
20 #endif
21 
22 const std::string ForceSmear_HYP_SF::class_name = "ForceSmear_HYP_SF";
23 
24 //====================================================================
26 {
27  std::string vlevel;
28  if (!params.fetch_string("verbose_level", vlevel)) {
29  m_vl = vout.set_verbose_level(vlevel);
30  }
31 
32  //- fetch and check input parameters
33  double alpha1, alpha2, alpha3;
34  std::vector<double> phi, phipr;
35 
36  int err = 0;
37  err += params.fetch_double("alpha1", alpha1);
38  err += params.fetch_double("alpha2", alpha2);
39  err += params.fetch_double("alpha3", alpha3);
40  err += params.fetch_double_vector("phi", phi);
41  err += params.fetch_double_vector("phipr", phipr);
42 
43  if (err) {
44  vout.crucial(m_vl, "Error at %s: input parameter not found.\n",
45  class_name.c_str());
46  exit(EXIT_FAILURE);
47  }
48 
49 
50  set_parameters(alpha1, alpha2, alpha3, phi, phipr);
51 }
52 
53 
54 //====================================================================
56 {
57  params.set_double("alpha1", m_alpha1);
58  params.set_double("alpha2", m_alpha2);
59  params.set_double("alpha3", m_alpha3);
60  params.set_double_vector("phi", m_phi);
61  params.set_double_vector("phipr", m_phipr);
62 
63  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
64 }
65 
66 
67 //====================================================================
68 void ForceSmear_HYP_SF::set_parameters(const double alpha1,
69  const double alpha2,
70  const double alpha3,
71  const std::vector<double>& phi,
72  const std::vector<double>& phipr)
73 {
74  //- print input parameters
75  vout.general(m_vl, "%s:\n", class_name.c_str());
76  vout.general(m_vl, " alpha1 = %10.6F\n", alpha1);
77  vout.general(m_vl, " alpha2 = %10.6F\n", alpha2);
78  vout.general(m_vl, " alpha3 = %10.6F\n", alpha3);
79 
80  vout.general(m_vl, " phi1 = %12.6f\n", phi[0]);
81  vout.general(m_vl, " phi2 = %12.6f\n", phi[1]);
82  vout.general(m_vl, " phi3 = %12.6f\n", phi[2]);
83  vout.general(m_vl, " phipr1= %12.6f\n", phipr[0]);
84  vout.general(m_vl, " phipr2= %12.6f\n", phipr[1]);
85  vout.general(m_vl, " phipr3= %12.6f\n", phipr[2]);
86 
87  //- range check
88  // NB. alpha1,alpha2,alpha3 == 0 is allowed.
89  // NB. phi,phipr == 0 is allowed.
90 
91  //- store values
92  m_alpha1 = alpha1;
93  m_alpha2 = alpha2;
94  m_alpha3 = alpha3;
95 
96  m_phi.resize(3);
97  m_phipr.resize(3);
98  for (int i = 0; i < 3; ++i) {
99  m_phi[i] = phi[i];
100  m_phipr[i] = phipr[i];
101  }
102 
103  //- propagate parameters
104  // set_wk.set_parameters(m_phi, m_phipr);
105 
106 
107  const int Lx = CommonParameters::Lx();
108  double Lx_inv = 1.0 / double(Lx);
109  double c0r = cos(phi[0] * Lx_inv);
110  double c0i = sin(phi[0] * Lx_inv);
111  double c1r = cos(phi[1] * Lx_inv);
112  double c1i = sin(phi[1] * Lx_inv);
113  double c2r = cos(phi[2] * Lx_inv);
114  double c2i = sin(phi[2] * Lx_inv);
115  m_wk.zero();
116  m_wk.set(0, 0, c0r, c0i);
117  m_wk.set(1, 1, c1r, c1i);
118  m_wk.set(2, 2, c2r, c2i);
119 
120  c0r = cos(phipr[0] * Lx_inv);
121  c0i = sin(phipr[0] * Lx_inv);
122  c1r = cos(phipr[1] * Lx_inv);
123  c1i = sin(phipr[1] * Lx_inv);
124  c2r = cos(phipr[2] * Lx_inv);
125  c2i = sin(phipr[2] * Lx_inv);
126 
127  m_wkpr.zero();
128  m_wkpr.set(0, 0, c0r, c0i);
129  m_wkpr.set(1, 1, c1r, c1i);
130  m_wkpr.set(2, 2, c2r, c2i);
131 }
132 
133 
134 //====================================================================
136 {
139 
140  m_U.resize(m_Ndim);
141 
142  m_v1.resize(size1());
143  m_v2.resize(size2());
144 
145  m_Sigma3.resize(size2());
146  m_Sigma2.resize(size1b());
147 
148  m_iTheta3.resize(m_Ndim);
149  m_iTheta2.resize(size2());
150  m_iTheta1.resize(size1b());
151 }
152 
153 
154 //====================================================================
155 
156 /*
157 Field ForceSmear_HYP_SF::force_udiv(const Field_G& Sigmap, const Field_G& U)
158 {
159  Field_G Sigma(Sigmap.nvol(), Sigmap.nex());
160 
161  force_udiv(Sigma, Sigmap, U);
162 
163  return Sigma;
164 }
165 */
166 
167 //====================================================================
168 void ForceSmear_HYP_SF::force_udiv(Field_G& Sigma, const Field_G& Sigmap, const Field_G& U)
169 {
170  assert(U.nvol() == m_Nvol);
171  assert(U.nex() == m_Ndim);
172  assert(Sigmap.nvol() == m_Nvol);
173  assert(Sigmap.nex() == m_Ndim);
174 
175  for (int mu = 0; mu < m_Ndim; ++mu) {
176  copy(m_U[mu], 0, U, mu);
177  if (mu != 3) Field_SF::set_boundary_wk(m_U[mu], m_wk);
178  }
179 
180  // vout.general(m_vl," smearing step-1\n");
181  smear_step1();
182  // vout.general(m_vl," smearing step-2\n");
183  smear_step2();
184 
185  Sigma.set(0.0);
186 
187  // vout.general(m_vl," smeared force step-3\n");
188  force_step3(Sigma, Sigmap);
189 
190  // vout.general(m_vl," smeared force step-2\n");
191  force_step2(Sigma);
192 
193  // vout.general(m_vl," smeared force step-1\n");
194  force_step1(Sigma);
195 
196  // vout.general(m_vl," smeared force finished\n");
197 }
198 
199 
200 //====================================================================
201 
213 void ForceSmear_HYP_SF::force_step3(Field_G& Sigma, const Field_G& Sigmap)
214 {
215  for (int mu = 0; mu < m_Ndim; ++mu) {
216  Field_G C;
217  C.set(0.0);
218 
219  for (int nu = 0; nu < m_Ndim; ++nu) {
220  if (nu == mu) continue;
221 
222  Field_G c_tmp;
223  staple(c_tmp, m_v2[idx2(mu, nu)], m_v2[idx2(nu, mu)], mu, nu);
224  axpy(C, 0, 1.0, c_tmp, 0);
225  }
226  scal(C, m_alpha1 / 6.0); // C *= m_alpha1 / 6.0;
227 
228  Field_G Sigmap_tmp;
229  copy(Sigmap_tmp, 0, Sigmap, mu);
230 
231  Field_G Xi;
233  m_alpha1, Sigmap_tmp, C, m_U[mu]);
234  axpy(Sigma, mu, 1.0, Xi, 0);
235  }
236 
237  for (int mu = 0; mu < m_Ndim; ++mu) {
238  for (int nu = 0; nu < m_Ndim; ++nu) {
239  if (nu == mu) continue;
240 
241  force_each(m_Sigma3[idx2(mu, nu)],
242  m_v2[idx2(mu, nu)], m_v2[idx2(nu, mu)],
243  m_iTheta3[mu], m_iTheta3[nu], mu, nu);
244 
245  scal(m_Sigma3[idx2(mu, nu)], m_alpha1 / 6.0);
246  if (mu != 3) Field_SF::set_boundary_zero(m_Sigma3[idx2(mu, nu)]);
247  }
248  }
249 }
250 
251 
252 //====================================================================
253 
265 {
266  for (int mu = 0; mu < m_Ndim; ++mu) {
267  for (int nu = 0; nu < m_Ndim; ++nu) {
268  if (nu == mu) continue;
269 
270  Field_G C;
271  C.set(0.0);
272 
273  for (int rho = 0; rho < m_Ndim; ++rho) {
274  if ((rho == mu) || (rho == nu)) continue;
275 
276  Field_G c_tmp;
277  staple(c_tmp, m_v1[idx1(mu, nu, rho)],
278  m_v1[idx1(rho, nu, mu)], mu, rho);
279  axpy(C, 0, 1.0, c_tmp, 0);
280  }
281  scal(C, m_alpha2 / 4.0); // C *= m_alpha2 / 4.0;
282 
283  Field_G Xi;
284  m_proj->force_recursive(Xi, m_iTheta2[idx2(mu, nu)],
285  m_alpha2, m_Sigma3[idx2(mu, nu)], C, m_U[mu]);
286  axpy(Sigma, mu, 1.0, Xi, 0);
287  }
288  }
289 
290  for (int mu = 0; mu < m_Ndim; ++mu) {
291  for (int nu = 0; nu < m_Ndim; ++nu) {
292  if (nu == mu) continue;
293 
294  for (int rho = 0; rho < m_Ndim; ++rho) {
295  if ((rho == mu) || (rho == nu)) continue;
296 
297  force_each(m_Sigma2[idx1b(mu, nu, rho)],
298  m_v1[idx1(mu, nu, rho)], m_v1[idx1(rho, nu, mu)],
299  m_iTheta2[idx2(mu, nu)], m_iTheta2[idx2(rho, nu)], mu, rho);
300  scal(m_Sigma2[idx1b(mu, nu, rho)], m_alpha2 / 4.0); // m_Sigma2[idx1b(mu, nu, rho)] *= m_alpha2 / 4.0;
301  if (mu != 3) Field_SF::set_boundary_zero(m_Sigma2[idx1b(mu, nu, rho)]);
302  }
303  }
304  }
305 }
306 
307 
308 //====================================================================
309 
320 {
321  for (int mu = 0; mu < m_Ndim; ++mu) {
322  for (int nu = 0; nu < m_Ndim; ++nu) {
323  if (nu == mu) continue;
324  for (int rho = 0; rho < m_Ndim; ++rho) {
325  if ((rho == mu) || (rho == nu)) continue;
326 
327  int sig = 6 - mu - nu - rho;
328 
329  Field_G C;
330  staple(C, m_U[mu], m_U[sig], mu, sig);
331  scal(C, m_alpha3 / 2.0); // C *= m_alpha3 / 2.0;
332 
333  Field_G Xi;
334  m_proj->force_recursive(Xi, m_iTheta1[idx1b(mu, nu, rho)],
335  m_alpha3, m_Sigma2[idx1b(mu, nu, rho)], C, m_U[mu]);
336  axpy(Sigma, mu, 1.0, Xi, 0);
337  }
338  }
339  }
340 
341  for (int mu = 0; mu < m_Ndim; ++mu) {
342  for (int nu = 0; nu < m_Ndim; ++nu) {
343  if (nu == mu) continue;
344 
345  for (int rho = 0; rho < m_Ndim; ++rho) {
346  if ((rho == mu) || (rho == nu)) continue;
347 
348  int sig = 6 - mu - nu - rho;
349 
350  Field_G Sigma_tmp;
351  force_each(Sigma_tmp, m_U[mu], m_U[sig],
352  m_iTheta1[idx1b(mu, nu, rho)], m_iTheta1[idx1b(sig, nu, rho)],
353  mu, sig);
354  scal(Sigma_tmp, m_alpha3 / 2.0); // Sigma_tmp *= m_alpha3 / 2.0;
355  axpy(Sigma, mu, 1.0, Sigma_tmp, 0);
356  }
357  }
358  }
359 
361 }
362 
363 
364 //====================================================================
365 
378  const Field_G& V_mu, const Field_G& V_nu,
379  const Field_G& iTheta_mu,
380  const Field_G& iTheta_nu,
381  const int mu, const int nu)
382 {
383  Sigma_mu.set(0.0);
384 
385  //- The 1st block
386  Field_G vt1;
387  m_shift.backward(vt1, V_nu, mu);
388  if (mu == 3) Field_SF::set_boundary_wkpr(vt1, m_wkpr);
389 
390  Field_G vt2;
391  m_shift.backward(vt2, V_mu, nu);
392  if (nu == 3) Field_SF::set_boundary_wkpr(vt2, m_wkpr);
393 
394  Field_G vt3;
395  mult_Field_Gnd(vt3, 0, vt1, 0, vt2, 0);
396  multadd_Field_Gnd(Sigma_mu, 0, vt3, 0, iTheta_nu, 0, 1.0);
397 
398  //- The 2nd block
399  mult_Field_Gdn(vt3, 0, iTheta_mu, 0, V_nu, 0);
400  mult_Field_Gdn(vt2, 0, vt1, 0, vt3, 0);
401  m_shift.forward(vt3, vt2, nu);
402  axpy(Sigma_mu, 1.0, vt3); // Sigma_mu += vt3;
403 
404  //- The 3rd block
405  mult_Field_Gdn(vt3, 0, V_mu, 0, iTheta_nu, 0);
406  mult_Field_Gdn(vt2, 0, vt1, 0, vt3, 0);
407  m_shift.forward(vt3, vt2, nu);
408  axpy(Sigma_mu, 1.0, vt3); // Sigma_mu += vt3;
409 
410  //- The 4th block
411  m_shift.backward(vt1, iTheta_nu, mu);
412  m_shift.backward(vt2, V_mu, nu);
413  if (nu == 3) Field_SF::set_boundary_wkpr(vt2, m_wkpr);
414  mult_Field_Gnd(vt3, 0, vt1, 0, vt2, 0);
415  multadd_Field_Gnd(Sigma_mu, 0, vt3, 0, V_nu, 0, 1.0);
416 
417  //- The 5th block
418  mult_Field_Gdd(vt2, 0, vt1, 0, V_mu, 0);
419  mult_Field_Gnn(vt3, 0, vt2, 0, V_nu, 0);
420  m_shift.forward(vt2, vt3, nu);
421  axpy(Sigma_mu, 1.0, vt2); // Sigma_mu += vt2;
422 
423  //- The 6th block
424  m_shift.backward(vt1, V_nu, mu);
425  if (mu == 3) Field_SF::set_boundary_wkpr(vt1, m_wkpr);
426  m_shift.backward(vt2, iTheta_mu, nu);
427  mult_Field_Gnd(vt3, 0, vt1, 0, vt2, 0);
428  multadd_Field_Gnd(Sigma_mu, 0, vt3, 0, V_nu, 0, 1.0);
429 }
430 
431 
432 //====================================================================
434 {
435  for (int mu = 0; mu < m_Ndim; ++mu) {
436  for (int nu = 0; nu < m_Ndim; ++nu) {
437  if (nu == mu) continue;
438 
439  for (int rho = nu + 1; rho < m_Ndim; ++rho) {
440  if (rho == mu) continue;
441 
442  int sig = 6 - mu - nu - rho;
443 
444  Field_G c1;
445  staple(c1, m_U[mu], m_U[sig], mu, sig);
446  scal(c1, m_alpha3 / 2.0); // c1 *= m_alpha3 / 2.0;
447  m_proj->project(m_v1[idx1(mu, nu, rho)], m_alpha3, c1, m_U[mu]);
448  if (mu != 3) Field_SF::set_boundary_wk(m_v1[idx1(mu, nu, rho)], m_wk);
449  }
450  }
451  }
452 }
453 
454 
455 //====================================================================
457 {
458  for (int mu = 0; mu < m_Ndim; ++mu) {
459  for (int nu = 0; nu < m_Ndim; ++nu) {
460  if (nu == mu) continue;
461 
462  Field_G c2;
463  c2.set(0.0);
464 
465  for (int rho = 0; rho < m_Ndim; ++rho) {
466  if ((rho != mu) && (rho != nu)) {
467  Field_G u_tmp;
468  staple(u_tmp, m_v1[idx1(mu, nu, rho)],
469  m_v1[idx1(rho, nu, mu)], mu, rho);
470  axpy(c2, 0, 1.0, u_tmp, 0);
471  }
472  }
473  scal(c2, m_alpha2 / 4.0); // c2 *= m_alpha2 / 4.0;
474  m_proj->project(m_v2[idx2(mu, nu)], m_alpha2, c2, m_U[mu]);
475  if (mu != 3) Field_SF::set_boundary_wk(m_v2[idx2(mu, nu)], m_wk);
476  }
477  }
478 }
479 
480 
481 //====================================================================
483  const Field_G& u_mu, const Field_G& u_nu,
484  const int mu, const int nu)
485 {
486  // upper direction
487  Field_G v1;
488 
489  m_shift.backward(v1, u_mu, nu);
490  if (nu == 3) Field_SF::set_boundary_wkpr(v1, m_wkpr);
491 
492  Field_G v2;
493  mult_Field_Gnn(v2, 0, u_nu, 0, v1, 0);
494 
495  m_shift.backward(v1, u_nu, mu);
496  if (mu == 3) Field_SF::set_boundary_wkpr(v1, m_wkpr);
497  mult_Field_Gnd(c, 0, v2, 0, v1, 0);
498 
499  // lower direction
500  m_shift.backward(v2, u_nu, mu);
501  if (mu == 3) Field_SF::set_boundary_wkpr(v2, m_wkpr);
502  mult_Field_Gnn(v1, 0, u_mu, 0, v2, 0);
503  mult_Field_Gdn(v2, 0, u_nu, 0, v1, 0);
504  m_shift.forward(v1, v2, nu);
505  axpy(c, 0, 1.0, v1, 0);
506 }
507 
508 
509 //============================================================END=====
ForceSmear_HYP_SF::m_wk
Mat_SU_N m_wk
SF boundary condition at t=0.
Definition: forceSmear_HYP_SF.h:56
Field_SF::set_boundary_wkpr
void set_boundary_wkpr(Field_G &u, const Mat_SU_N &wkpr)
Definition: field_SF.cpp:63
mult_Field_Gdn
void mult_Field_Gdn(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)
Definition: field_G_imp.cpp:134
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
ForceSmear_HYP_SF::force_step1
void force_step1(Field_G &)
Definition: forceSmear_HYP_SF.cpp:319
forceSmear_HYP_SF.h
ForceSmear_HYP_SF::m_alpha3
double m_alpha3
HYP smearing parameters.
Definition: forceSmear_HYP_SF.h:45
ShiftField_lex::forward
void forward(Field &, const Field &, const int mu)
Definition: shiftField_lex.cpp:79
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
ForceSmear_HYP_SF::m_iTheta2
std::vector< Field_G > m_iTheta2
Definition: forceSmear_HYP_SF.h:50
Parameters::set_double
void set_double(const string &key, const double value)
Definition: parameters.cpp:33
ForceSmear_HYP_SF::set_parameters
void set_parameters(const Parameters &params)
Definition: forceSmear_HYP_SF.cpp:25
ForceSmear_HYP_SF::m_proj
Projection * m_proj
Definition: forceSmear_HYP_SF.h:46
ForceSmear_HYP_SF::m_phi
std::vector< double > m_phi
SF boundary condition at t=0.
Definition: forceSmear_HYP_SF.h:53
ForceSmear_HYP_SF::init
void init()
Definition: forceSmear_HYP_SF.cpp:135
Field::nex
int nex() const
Definition: field.h:128
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
ForceSmear_HYP_SF::m_alpha2
double m_alpha2
Definition: forceSmear_HYP_SF.h:45
ForceSmear_HYP_SF::idx1b
int idx1b(const int mu, int nu, int rho)
Definition: forceSmear_HYP_SF.h:114
Field_SF::set_boundary_wk
void set_boundary_wk(Field_G &u, const Mat_SU_N &wk)
Definition: field_SF.cpp:32
axpy
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:380
Parameters::set_double_vector
void set_double_vector(const string &key, const vector< double > &value)
Definition: parameters.cpp:42
ForceSmear_HYP_SF::m_wkpr
Mat_SU_N m_wkpr
SF boundary condition at t=Nt.
Definition: forceSmear_HYP_SF.h:57
ForceSmear_HYP_SF::idx1
int idx1(const int mu, const int nu, const int rho)
Definition: forceSmear_HYP_SF.h:106
ForceSmear_HYP_SF::class_name
static const std::string class_name
Definition: forceSmear_HYP_SF.h:39
copy
void copy(Field &y, const Field &x)
copy(y, x): y = x
Definition: field.cpp:212
SU_N::Mat_SU_N::set
void set(int c, const double &re, const double &im)
Definition: mat_SU_N.h:137
Field_SF::set_boundary_zero
void set_boundary_zero(Field_G &u)
Definition: field_SF.cpp:96
ForceSmear_HYP_SF::size1
int size1()
Definition: forceSmear_HYP_SF.h:128
CommonParameters::Lx
static int Lx()
Definition: commonParameters.h:91
SU_N::Mat_SU_N::zero
Mat_SU_N & zero()
Definition: mat_SU_N.h:429
ForceSmear_HYP_SF::m_v2
std::vector< Field_G > m_v2
Definition: forceSmear_HYP_SF.h:48
ForceSmear_HYP_SF::size1b
int size1b()
Definition: forceSmear_HYP_SF.h:133
ForceSmear_HYP_SF::size2
int size2()
Definition: forceSmear_HYP_SF.h:138
ForceSmear_HYP_SF::m_Sigma3
std::vector< Field_G > m_Sigma3
Definition: forceSmear_HYP_SF.h:49
ForceSmear_HYP_SF::m_phipr
std::vector< double > m_phipr
SF boundary condition at t=Nt.
Definition: forceSmear_HYP_SF.h:54
ForceSmear_HYP_SF::m_shift
ShiftField_lex m_shift
Definition: forceSmear_HYP_SF.h:51
Field::nvol
int nvol() const
Definition: field.h:127
ForceSmear_HYP_SF::force_step3
void force_step3(Field_G &, const Field_G &)
Definition: forceSmear_HYP_SF.cpp:213
multadd_Field_Gnd
void multadd_Field_Gnd(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2, const double ff)
Definition: field_G_imp.cpp:335
ForceSmear_HYP_SF::m_Nvol
int m_Nvol
Definition: forceSmear_HYP_SF.h:44
Field_SF::set_boundary_spatial_link_zero
void set_boundary_spatial_link_zero(Field_G &u)
Definition: field_SF.cpp:151
ForceSmear_HYP_SF::force_each
void force_each(Field_G &, const Field_G &, const Field_G &, const Field_G &, const Field_G &, const int mu, const int nu)
Definition: forceSmear_HYP_SF.cpp:377
Projection::force_recursive
virtual void force_recursive(Field_G &Xi, Field_G &iTheta, const double alpha, const Field_G &Sigmap, const Field_G &C, const Field_G &U)=0
determination of fields for force calculation
ForceSmear_HYP_SF::m_Ndim
int m_Ndim
Definition: forceSmear_HYP_SF.h:44
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:133
mult_Field_Gnn
void mult_Field_Gnn(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)
Definition: field_G_imp.cpp:95
ShiftField_lex::backward
void backward(Field &, const Field &, const int mu)
Definition: shiftField_lex.cpp:59
ForceSmear_HYP_SF::m_iTheta3
std::vector< Field_G > m_iTheta3
Definition: forceSmear_HYP_SF.h:50
ForceSmear_HYP_SF::m_v1
std::vector< Field_G > m_v1
Definition: forceSmear_HYP_SF.h:48
ForceSmear_HYP_SF::smear_step1
void smear_step1()
Definition: forceSmear_HYP_SF.cpp:433
mult_Field_Gdd
void mult_Field_Gdd(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)
Definition: field_G_imp.cpp:212
ForceSmear_HYP_SF::m_Sigma2
std::vector< Field_G > m_Sigma2
Definition: forceSmear_HYP_SF.h:49
scal
void scal(Field &x, const double a)
scal(x, a): x = a * x
Definition: field.cpp:261
Parameters::fetch_string
int fetch_string(const string &key, string &value) const
Definition: parameters.cpp:378
Parameters::fetch_double
int fetch_double(const string &key, double &value) const
Definition: parameters.cpp:327
ForceSmear_HYP_SF::m_iTheta1
std::vector< Field_G > m_iTheta1
Definition: forceSmear_HYP_SF.h:50
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:180
ForceSmear_HYP_SF::idx2
int idx2(const int mu, int nu)
Definition: forceSmear_HYP_SF.h:122
ForceSmear_HYP_SF::get_parameters
void get_parameters(Parameters &params) const
Definition: forceSmear_HYP_SF.cpp:55
ForceSmear_HYP_SF::m_alpha1
double m_alpha1
Definition: forceSmear_HYP_SF.h:45
Field_G
SU(N) gauge field.
Definition: field_G.h:38
ForceSmear_HYP_SF::m_vl
Bridge::VerboseLevel m_vl
Definition: forceSmear_HYP_SF.h:42
Parameters::fetch_double_vector
int fetch_double_vector(const string &key, vector< double > &value) const
Definition: parameters.cpp:410
ForceSmear_HYP_SF::force_udiv
void force_udiv(Field_G &Sigma, const Field_G &Sigma_p, const Field_G &U)
Definition: forceSmear_HYP_SF.cpp:168
ForceSmear_HYP_SF::smear_step2
void smear_step2()
Definition: forceSmear_HYP_SF.cpp:456
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:200
mult_Field_Gnd
void mult_Field_Gnd(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)
Definition: field_G_imp.cpp:173
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:512
ForceSmear_HYP_SF::force_step2
void force_step2(Field_G &)
Definition: forceSmear_HYP_SF.cpp:264
Bridge::BridgeIO::get_verbose_level
static std::string get_verbose_level(const VerboseLevel vl)
Definition: bridgeIO.cpp:154
ForceSmear_HYP_SF::m_U
std::vector< Field_G > m_U
Definition: forceSmear_HYP_SF.h:47
ForceSmear_HYP_SF::staple
void staple(Field_G &, const Field_G &, const Field_G &, const int mu, const int nu)
Definition: forceSmear_HYP_SF.cpp:482
Projection::project
virtual void project(Field_G &v, const double alpha, const Field_G &C, const Field_G &U)=0
projection V = P[alpha, C, U]