Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
smear_APE_SF.cpp
Go to the documentation of this file.
1 
14 #include "smear_APE_SF.h"
15 
16 
17 
18 #ifdef USE_FACTORY
19 namespace {
20  Smear *create_object(Projection *proj)
21  {
22  return new Smear_APE_SF(proj);
23  }
24 
25 
26  bool init = Smear::Factory::Register("APE_SF", create_object);
27 }
28 #endif
29 
30 
31 
32 const std::string Smear_APE_SF::class_name = "Smear_APE_SF";
33 
34 //====================================================================
36 {
37  const string str_vlevel = params.get_string("verbose_level");
38 
39  m_vl = vout.set_verbose_level(str_vlevel);
40 
41  //- fetch and check input parameters
42  double rho1;
43  std::vector<double> phi, phipr;
44 
45  int err = 0;
46  err += params.fetch_double("rho_uniform", rho1);
47  err += params.fetch_double_vector("phi", phi);
48  err += params.fetch_double_vector("phipr", phipr);
49 
50  if (err) {
51  vout.crucial(m_vl, "Error at %s: input parameter not found.\n", class_name.c_str());
52  exit(EXIT_FAILURE);
53  }
54 
55  set_parameters(rho1, &phi[0], &phipr[0]);
56 }
57 
58 
59 //====================================================================
60 void Smear_APE_SF::set_parameters(const double rho1,
61  double *phi, double *phipr)
62 {
63  //- print input parameters
64  vout.general(m_vl, "%s:\n", class_name.c_str());
65  vout.general(m_vl, " rho = %8.4f\n", rho1);
66 
67  vout.general(m_vl, " phi1 = %12.6f\n", phi[0]);
68  vout.general(m_vl, " phi2 = %12.6f\n", phi[1]);
69  vout.general(m_vl, " phi3 = %12.6f\n", phi[2]);
70  vout.general(m_vl, " phipr1= %12.6f\n", phipr[0]);
71  vout.general(m_vl, " phipr2= %12.6f\n", phipr[1]);
72  vout.general(m_vl, " phipr3= %12.6f\n", phipr[2]);
73 
74  //- range check
75  // NB. rho == 0 is allowed.
76  // NB. phi,phipr == 0 is allowed.
77 
78  //- store values
79  // m_rho.resize(m_Ndim * m_Ndim); // already resized in init.
80  for (int mu = 0; mu < m_Ndim; ++mu) {
81  for (int nu = 0; nu < m_Ndim; ++nu) {
82  m_rho[mu + nu * m_Ndim] = rho1;
83  }
84  }
85 
86  for (int i = 0; i < 3; ++i) {
87  m_phi[i] = phi[i];
88  m_phipr[i] = phipr[i];
89  }
90 }
91 
92 
93 //====================================================================
94 void Smear_APE_SF::set_parameters(const std::vector<double>& rho, double *phi, double *phipr)
95 {
96  //- print input parameters
97  vout.general(m_vl, "%s:\n", class_name.c_str());
98  for (int mu = 0; mu < m_Ndim; ++mu) {
99  vout.general(m_vl, " rho[%d] = %8.4f\n", mu, rho[mu]);
100  }
101 
102  vout.general(m_vl, " phi1 = %12.6f\n", phi[0]);
103  vout.general(m_vl, " phi2 = %12.6f\n", phi[1]);
104  vout.general(m_vl, " phi3 = %12.6f\n", phi[2]);
105  vout.general(m_vl, " phipr1= %12.6f\n", phipr[0]);
106  vout.general(m_vl, " phipr2= %12.6f\n", phipr[1]);
107  vout.general(m_vl, " phipr3= %12.6f\n", phipr[2]);
108 
109  //- range check
110  // NB. rho == 0 is allowed.
111  // NB. phi,phipr == 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  for (int i = 0; i < 3; ++i) {
123  m_phi[i] = phi[i];
124  m_phipr[i] = phipr[i];
125  }
126 }
127 
128 
129 //====================================================================
130 void Smear_APE_SF::smear(Field_G& Usmear, const Field_G& U)
131 {
132  int Nvol = CommonParameters::Nvol();
133 
134  assert(U.nvol() == Nvol);
135  assert(U.nex() == m_Ndim);
136  assert(Usmear.nvol() == Nvol);
137  assert(Usmear.nex() == m_Ndim);
138 
139  Field_G c_tmp(Nvol, 1), u_tmp(Nvol, 1);
140  Field_G_SF u_tmp2(Nvol, 1);
141 
142  Staple_SF staple;
143  staple.set_parameters(m_phi, m_phipr);
144 
145  Field_G_SF set_wk(m_phi, m_phipr);
146 
147  Usmear.set(0.0);
148 
149  for (int mu = 0; mu < m_Ndim; ++mu) {
150  c_tmp.set(0.0);
151  u_tmp.setpart_ex(0, U, mu);
152 
153  for (int nu = 0; nu < m_Ndim; ++nu) {
154  if (nu != mu) {
155  double rho = m_rho[mu + m_Ndim * nu];
156  staple.upper(u_tmp2, U, mu, nu);
157  c_tmp.addpart_ex(0, u_tmp2, 0, rho);
158 
159  staple.lower(u_tmp2, U, mu, nu);
160  c_tmp.addpart_ex(0, u_tmp2, 0, rho);
161  }
162  }
163 
164  double rho0 = m_rho[mu + m_Ndim * mu];
165  // vout.general(m_vl,"mu=%d\n",mu);
166  m_proj->project(u_tmp2, rho0, c_tmp, u_tmp);
167  if (mu != 3) set_wk.set_boundary_wk(u_tmp2);
168  Usmear.setpart_ex(mu, u_tmp2, 0);
169 
170  /* For a debugging
171  for(int site = 0; site < Nvol; ++site){
172  vout.general(m_vl,"site smeared=%d\n",site);
173  for(int ll=0; ll<9; ++ll){
174  vout.general(m_vl,"(%lf %lf)\n",u_tmp2.cmp_r(ll,site,0),u_tmp2.cmp_i(ll,site,0));
175  }
176  }
177  */
178  }
179 }
180 
181 
182 //====================================================================
183 //============================================================END=====
SU(N) gauge field class in which a few functions are added for the SF.
Definition: field_G_SF.h:33
BridgeIO vout
Definition: bridgeIO.cpp:495
int fetch_double_vector(const string &key, vector< double > &value) const
Definition: parameters.cpp:275
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:164
Projection * m_proj
Definition: smear_APE_SF.h:43
void general(const char *format,...)
Definition: bridgeIO.cpp:195
int fetch_double(const string &key, double &value) const
Definition: parameters.cpp:211
Staple construction.
Definition: staple_SF.h:38
APE type smearing of link variables.
Definition: smear_APE_SF.h:35
int nvol() const
Definition: field.h:116
Class for parameters.
Definition: parameters.h:46
double m_phi[3]
SF boundary condition at t=0.
Definition: smear_APE_SF.h:46
static const std::string class_name
Definition: smear_APE_SF.h:38
void set_parameters(const Parameters &params)
Definition: staple_SF.cpp:39
void upper(Field_G_SF &, const Field_G &, const int, const int)
Definition: staple_SF.cpp:818
SU(N) gauge field.
Definition: field_G.h:38
void set_boundary_wk(const Mat_SU_N &U)
Set the boundary spatial link at t=0 for SF bc.
Definition: field_G_SF.cpp:29
int nex() const
Definition: field.h:117
void crucial(const char *format,...)
Definition: bridgeIO.cpp:178
base class for projection operator into gauge group.
Definition: projection.h:31
void set_parameters(const Parameters &params)
double m_phipr[3]
SF boundary condition at t=Nt.
Definition: smear_APE_SF.h:48
std::valarray< double > m_rho
Definition: smear_APE_SF.h:42
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 lower(Field_G_SF &, const Field_G &, const int, const int)
Definition: staple_SF.cpp:846
void setpart_ex(int ex, const Field &w, int exw)
Definition: field.h:186
string get_string(const string &key) const
Definition: parameters.cpp:116
Bridge::VerboseLevel m_vl
Definition: smear.h:39
void smear(Field_G &Usmear, const Field_G &U)
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:131