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