Bridge++  Ver. 1.3.x
smear_APE.cpp
Go to the documentation of this file.
1 
14 #include "smear_APE.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 
21 #ifdef USE_FACTORY
22 namespace {
23  Smear *create_object(Projection *proj)
24  {
25  return new Smear_APE(proj);
26  }
27 
28 
29  bool init = Smear::Factory::Register("APE", create_object);
30 }
31 #endif
32 
33 //- parameter entry
34 namespace {
35  void append_entry(Parameters& param)
36  {
37  param.Register_double("rho_uniform", 0.0);
38  // Register_double_vector("rho", std::vector<double>());
39  // anisotropic setup is not supported in this version.
40 
41  param.Register_string("verbose_level", "NULL");
42  }
43 
44 
45 #ifdef USE_PARAMETERS_FACTORY
46  bool init_param = ParametersFactory::Register("Smear.APE", append_entry);
47 #endif
48 }
49 //- end
50 
51 //- parameters class
53 //- end
54 
55 const std::string Smear_APE::class_name = "Smear_APE";
56 
57 //====================================================================
59 {
60  const string str_vlevel = params.get_string("verbose_level");
61 
62  m_vl = vout.set_verbose_level(str_vlevel);
63 
64  //- fetch and check input parameters
65  double rho1;
66 
67  int err = 0;
68  err += params.fetch_double("rho_uniform", rho1);
69 
70  if (err) {
71  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
72  exit(EXIT_FAILURE);
73  }
74 
75 
76  set_parameters(rho1);
77 }
78 
79 
80 //====================================================================
81 void Smear_APE::set_parameters(const double rho1)
82 {
83  //- print input parameters
84  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
85  vout.general(m_vl, " rho = %8.4f\n", rho1);
86 
87  //- range check
88  // NB. rho == 0 is allowed.
89 
90  //- store values
91  // m_rho.resize(m_Ndim * m_Ndim); // already resized in init.
92  for (int mu = 0; mu < m_Ndim; ++mu) {
93  for (int nu = 0; nu < m_Ndim; ++nu) {
94  m_rho[mu + nu * m_Ndim] = rho1;
95  }
96  }
97 }
98 
99 
100 //====================================================================
101 void Smear_APE::set_parameters(const std::vector<double>& rho)
102 {
103  //- print input parameters
104  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
105  for (int mu = 0; mu < m_Ndim; ++mu) {
106  vout.general(m_vl, " rho[%d] = %8.4f\n", mu, rho[mu]);
107  }
108 
109  // range check
110  // NB. rho == 0 is allowed.
111  assert(rho.size() == m_Ndim * m_Ndim);
112 
113  //- store values
114  // m_rho.resize(m_Ndim * m_Ndim); // already resized in init.
115  for (int mu = 0; mu < m_Ndim; ++mu) {
116  for (int nu = 0; nu < m_Ndim; ++nu) {
117  m_rho[mu + nu * m_Ndim] = rho[mu + nu * m_Ndim];
118  }
119  }
120 }
121 
122 
123 //====================================================================
124 void Smear_APE::smear(Field_G& Usmear, const Field_G& U)
125 {
126  int Nvol = CommonParameters::Nvol();
127 
128  assert(U.nvol() == Nvol);
129  assert(U.nex() == m_Ndim);
130  assert(Usmear.nvol() == Nvol);
131  assert(Usmear.nex() == m_Ndim);
132 
133  Field_G c_tmp(Nvol, 1), u_tmp(Nvol, 1), u_tmp2(Nvol, 1);
134 
135  Staples staple;
136 
137  Usmear.set(0.0);
138 
139  for (int mu = 0; mu < m_Ndim; ++mu) {
140  c_tmp.set(0.0);
141  u_tmp.setpart_ex(0, U, mu);
142 
143  for (int nu = 0; nu < m_Ndim; ++nu) {
144  if (nu != mu) {
145  double rho = m_rho[mu + m_Ndim * nu];
146  staple.upper(u_tmp2, U, mu, nu);
147  c_tmp.addpart_ex(0, u_tmp2, 0, rho);
148 
149  staple.lower(u_tmp2, U, mu, nu);
150  c_tmp.addpart_ex(0, u_tmp2, 0, rho);
151  }
152  }
153 
154  double rho0 = m_rho[mu + m_Ndim * mu];
155  m_proj->project(u_tmp2, rho0, c_tmp, u_tmp);
156  Usmear.setpart_ex(mu, u_tmp2, 0);
157  }
158 }
159 
160 
161 //====================================================================
162 //============================================================END=====
BridgeIO vout
Definition: bridgeIO.cpp:278
void Register_string(const string &, const string &)
Definition: parameters.cpp:351
Staple construction.
Definition: staples.h:40
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:155
void general(const char *format,...)
Definition: bridgeIO.cpp:65
int nvol() const
Definition: field.h:116
Class for parameters.
Definition: parameters.h:38
void set_parameters(const Parameters &params)
Setting parameters with Parameters object.
Definition: smear_APE.cpp:58
void smear(Field_G &Usmear, const Field_G &U)
Smearing of a given gauge field.
Definition: smear_APE.cpp:124
Projection * m_proj
projector to group element.
Definition: smear_APE.h:59
SU(N) gauge field.
Definition: field_G.h:38
APE type smearing of link variables.
Definition: smear_APE.h:51
static const std::string class_name
Definition: smear_APE.h:54
int nex() const
Definition: field.h:117
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
base class for projection operator into gauge group.
Definition: projection.h:31
std::valarray< double > m_rho
smearing parameter
Definition: smear_APE.h:58
void lower(Field_G &, const Field_G &, const int mu, const int nu)
constructs lower staple in mu-nu plane.
Definition: staples.cpp:152
static bool Register(const std::string &realm, const creator_callback &cb)
int m_Ndim
spacetime dimension
Definition: smear_APE.h:57
void Register_double(const string &, const double)
Definition: parameters.cpp:323
base class for smearing of link variables.
Definition: smear.h:36
virtual void project(Field_G &v, double alpha, const Field_G &C, const Field_G &U)=0
projection V = P[alpha, C, U]
void setpart_ex(int ex, const Field &w, int exw)
Definition: field.h:177
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
string get_string(const string &key) const
Definition: parameters.cpp:87
void staple(Field_G &, const Field_G &, const Field_G &, int mu, int nu)
Staple construction.
Bridge::VerboseLevel m_vl
Definition: smear.h:39
void upper(Field_G &, const Field_G &, const int mu, const int nu)
constructs upper staple in mu-nu plane.
Definition: staples.cpp:128
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:28