Bridge++  Ver.2.1.3
smear_APE.cpp
Go to the documentation of this file.
1 
10 #include "lib/Smear/smear_APE.h"
12 
13 #ifdef USE_FACTORY_AUTOREGISTER
14 namespace {
15  bool init = Smear_APE::register_factory();
16 }
17 #endif
18 
19 const std::string Smear_APE::class_name = "Smear_APE";
20 
21 //====================================================================
22 void Smear_APE::init(const Parameters& params)
23 {
25 
26  std::string vlevel;
27  if (!params.fetch_string("verbose_level", vlevel)) {
28  m_vl = vout.set_verbose_level(vlevel);
29  } else {
31  }
32 
33  vout.general(m_vl, "%s: construction\n", class_name.c_str());
35 
38 
39  m_rho.resize(m_Ndim * m_Ndim);
40  for(int i = 0; i < m_Ndim * m_Ndim; ++i){
41  m_rho[i] = 0.0;
42  }
43 
44  set_parameters(params);
45 
46  m_staple = new Staple_lex();
47 
48  m_ct = new Field_G(m_Nvol, 1);
49  m_ut1 = new Field_G(m_Nvol, 1);
50  m_ut2 = new Field_G(m_Nvol, 1);
51 
53  vout.general(m_vl, "%s: construction finished.\n",
54  class_name.c_str());
55 }
56 
57 
58 //====================================================================
60 {
62 
64 
65  vout.general(m_vl, "%s: construction (obsolete)\n", class_name.c_str());
67 
70 
71  m_rho.resize(m_Ndim * m_Ndim);
72  for(int i = 0; i < m_Ndim * m_Ndim; ++i){
73  m_rho[i] = 0.0;
74  }
75 
76  m_staple = new Staple_lex();
77 
78  m_ct = new Field_G(m_Nvol, 1);
79  m_ut1 = new Field_G(m_Nvol, 1);
80  m_ut2 = new Field_G(m_Nvol, 1);
81 
83  vout.general(m_vl, "%s: construction finished.\n",
84  class_name.c_str());
85 }
86 
87 
88 //====================================================================
90 {
92 
93  delete m_staple;
94 
95  delete m_ct;
96  delete m_ut1;
97  delete m_ut2;
98 }
99 
100 
101 //====================================================================
103 {
104  std::string vlevel;
105  if (!params.fetch_string("verbose_level", vlevel)) {
106  m_vl = vout.set_verbose_level(vlevel);
107  }
108 
109  //- fetch and check input parameters
110  double rho1;
111 
112  int err = 0;
113  err += params.fetch_double("rho_uniform", rho1);
114 
115  if (err) {
116  vout.crucial(m_vl, "Error at %s: input parameter not found.\n", class_name.c_str());
117  exit(EXIT_FAILURE);
118  }
119 
120  set_parameters(rho1);
121 
122 }
123 
124 
125 //====================================================================
126 void Smear_APE::set_parameters(const double rho1)
127 {
128  int ith = ThreadManager::get_thread_id();
129  if (ith == 0) {
130  for (int mu = 0; mu < m_Ndim; ++mu) {
131  for (int nu = 0; nu < m_Ndim; ++nu) {
132  m_rho[index(mu, nu)] = rho1;
133  }
134  }
135  }
136 #pragma omp barrier
137 
138  vout.general(m_vl, "%s: parameters\n", class_name.c_str());
139  vout.general(m_vl, " rho (uniform) = %8.4f\n", rho1);
140 
141 }
142 
143 
144 //====================================================================
145 void Smear_APE::set_parameters(const std::vector<double>& rho)
146 {
147  assert(rho.size() == m_Ndim * m_Ndim);
148 
149  int ith = ThreadManager::get_thread_id();
150  if (ith == 0) {
151  for (int mu = 0; mu < m_Ndim; ++mu) {
152  for (int nu = 0; nu < m_Ndim; ++nu) {
153  m_rho[index(mu, nu)] = rho[index(mu, nu)];
154  }
155  }
156  }
157 #pragma omp barrier
158 
159  vout.general(m_vl, "%s: parameters\n", class_name.c_str());
160  for (int mu = 0; mu < m_Ndim; ++mu) {
161  for (int nu = 0; nu < m_Ndim; ++nu) {
162  vout.general(m_vl, " rho(%d,%d) = %8.4f\n",
163  mu, nu, rho[index(mu,nu)]);
164  }
165  }
166 
167 }
168 
169 
170 //====================================================================
172 {
173  params.set_double_vector("rho", m_rho);
174 
175  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
176 }
177 
178 
179 //====================================================================
180 void Smear_APE::smear(Field_G& Usmear, const Field_G& U)
181 {
182 #pragma omp barrier
183 
184  assert(U.nvol() == m_Nvol);
185  assert(U.nex() == m_Ndim);
186  assert(Usmear.nvol() == m_Nvol);
187  assert(Usmear.nex() == m_Ndim);
188 
189  Usmear.set(0.0);
190 #pragma omp barrier
191 
192  for (int mu = 0; mu < m_Ndim; ++mu) {
193 
194  m_ct->set(0.0);
195  copy(*m_ut1, 0, U, mu);
196 #pragma omp barrier
197 
198  for (int nu = 0; nu < m_Ndim; ++nu) {
199  if (nu != mu) {
200 
201  double rho = m_rho[index(mu, nu)];
202  m_staple->upper(*m_ut2, U, mu, nu);
203  axpy(*m_ct, 0, rho, *m_ut2, 0);
204 #pragma omp barrier
205 
206  m_staple->lower(*m_ut2, U, mu, nu);
207  axpy(*m_ct, 0, rho, *m_ut2, 0);
208 #pragma omp barrier
209  }
210  }
211 
212  double rho0 = m_rho[index(mu, mu)];
213  m_proj->project(*m_ut2, rho0, *m_ct, *m_ut1);
214  copy(Usmear, mu, *m_ut2, 0);
215 #pragma omp barrier
216  }
217 }
218 
219 
220 //============================================================END=====
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
Smear_APE::m_vl
Bridge::VerboseLevel m_vl
Definition: smear_APE.h:47
CommonParameters::Ndim
static int Ndim()
Definition: commonParameters.h:117
Smear_APE::m_Ndim
int m_Ndim
spacetime dimension
Definition: smear_APE.h:44
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
Smear_APE::set_parameters
void set_parameters(const Parameters &params)
Setting parameters with Parameters object.
Definition: smear_APE.cpp:102
Bridge::BridgeIO::decrease_indent
void decrease_indent()
Definition: bridgeIO.cpp:518
Smear_APE::smear
void smear(Field_G &Usmear, const Field_G &U)
Smearing of a given gauge field.
Definition: smear_APE.cpp:180
Smear_APE::class_name
static const std::string class_name
Definition: smear_APE.h:41
Bridge::BridgeIO::increase_indent
void increase_indent()
Definition: bridgeIO.cpp:508
Field::nex
int nex() const
Definition: field.h:128
Smear_APE::m_staple
Staple_lex * m_staple
Definition: smear_APE.h:51
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
Smear_APE::m_Nvol
int m_Nvol
spacetime volume
Definition: smear_APE.h:45
Staple_lex::lower
void lower(Field_G &, const Field_G &, const int mu, const int nu)
constructs lower staple in mu-nu plane.
Definition: staple_lex.cpp:283
axpy
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:381
Parameters::set_double_vector
void set_double_vector(const string &key, const vector< double > &value)
Definition: parameters.cpp:42
copy
void copy(Field &y, const Field &x)
copy(y, x): y = x
Definition: field.cpp:213
Smear_APE::m_ut1
Field_G * m_ut1
Definition: smear_APE.h:54
Smear_APE::m_ct
Field_G * m_ct
Definition: smear_APE.h:53
threadManager.h
Field::nvol
int nvol() const
Definition: field.h:127
Smear_APE::init
void init()
Obsolete initial setup.
Definition: smear_APE.cpp:59
Smear_APE::m_proj
Projection * m_proj
projector to group element
Definition: smear_APE.h:49
Smear_APE::m_rho
std::vector< double > m_rho
smearing parameter
Definition: smear_APE.h:46
Staple_lex::upper
void upper(Field_G &, const Field_G &, const int mu, const int nu)
constructs upper staple in mu-nu plane.
Definition: staple_lex.cpp:260
Smear_APE::tidyup
void tidyup()
Final clean-up.
Definition: smear_APE.cpp:89
CommonParameters::Vlevel
static Bridge::VerboseLevel Vlevel()
Definition: commonParameters.h:122
Staple_lex
Staple construction.
Definition: staple_lex.h:39
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:195
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
smear_APE.h
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:242
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
Smear_APE::m_ut2
Field_G * m_ut2
Definition: smear_APE.h:55
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
Smear_APE::get_parameters
void get_parameters(Parameters &params) const
Getting parameters by Parameters object.
Definition: smear_APE.cpp:171
ThreadManager::assert_single_thread
static void assert_single_thread(const std::string &class_name)
assert currently running on single thread.
Definition: threadManager.cpp:372
AProjection::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]
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:572
Smear_APE::index
int index(const int mu, const int nu)
Definition: smear_APE.h:96
Bridge::BridgeIO::get_verbose_level
static std::string get_verbose_level(const VerboseLevel vl)
Definition: bridgeIO.cpp:216