Bridge++  Ver. 1.3.x
source_Wall_SF.cpp
Go to the documentation of this file.
1 
14 #include "source_Wall_SF.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 
21 //- parameter entry
22 namespace {
23  void append_entry(Parameters& param)
24  {
25  param.Register_double("ct_tilde", 0.0);
26 
27  param.Register_string("verbose_level", "NULL");
28  }
29 
30 
31 #ifdef USE_PARAMETERS_FACTORY
32  bool init_param = ParametersFactory::Register("Source_Wall_SF", append_entry);
33 #endif
34 }
35 //- end
36 
37 //- parameters class
39 //- end
40 
41 const std::string Source_Wall_SF::class_name = "Source_Wall_SF";
42 
43 //====================================================================
45 {
46  const string str_vlevel = params.get_string("verbose_level");
47 
48  m_vl = vout.set_verbose_level(str_vlevel);
49 
50  //- fetch and check input parameters
51  double ct_tilde;
52 
53  int err = 0;
54  err += params.fetch_double("ct_tilde", ct_tilde);
55 
56  if (err) {
57  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
58  exit(EXIT_FAILURE);
59  }
60 
61  set_parameters(ct_tilde);
62 }
63 
64 
65 //====================================================================
66 void Source_Wall_SF::set_parameters(double ct_tilde)
67 {
68  //- print input parameters
69  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
70  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
71 
72  //- range check
73  // NB. ct_tilde=0 is allowed.
74 
75  //- store values
76  m_ct_tilde = ct_tilde;
77 }
78 
79 
80 //====================================================================
81 void Source_Wall_SF::set_parameters(Field_G *U, double ct_tilde)
82 {
83  //- print input parameters
84  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
85  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
86 
87  //- range check
88  // NB. ct_tilde=0 is allowed.
89 
90  //- store values
91  m_U = U;
92  m_ct_tilde = ct_tilde;
93 }
94 
95 
96 //====================================================================
97 
102  double ct_tilde)
103 {
104  //- print input parameters
105  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
106  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
107 
108  //- range check
109  // NB. ct_tilde=0 is allowed.
110 
111  //- store values
112  dr_smear->set_config(U);
113  int Nsmear = dr_smear->get_Nsmear();
114  m_U = (Field_G *)dr_smear->getptr_smearedConfig(Nsmear);
115 
116  m_ct_tilde = ct_tilde;
117 }
118 
119 
120 //====================================================================
121 
136 void Source_Wall_SF::set_t0(Field_F& src, int ic, int id)
137 {
138  int Nvol = CommonParameters::Nvol();
139  int Ndim = CommonParameters::Ndim();
140 
141  std::vector<int> Nsize(Ndim);
142 
143  Nsize[0] = CommonParameters::Nx();
144  Nsize[1] = CommonParameters::Ny();
145  Nsize[2] = CommonParameters::Nz();
146  Nsize[3] = CommonParameters::Nt();
147 
148  int m_Nc = CommonParameters::Nc();
149  int m_Nd = CommonParameters::Nd();
150 
151  assert(ic < m_Nc);
152  assert(id < m_Nd / 2);
153  assert(src.nvol() == Nvol);
154  assert(src.nex() == 1);
155 
156  Mat_SU_N u0dag(m_Nc);
157  src.set(0.0);
158 
159  if (Communicator::ipe(3) == 0) {
160  int t = 1;
161  for (int z = 0; z < Nsize[2]; ++z) {
162  for (int y = 0; y < Nsize[1]; ++y) {
163  for (int x = 0; x < Nsize[0]; ++x) {
164  int site = m_index.site(x, y, z, t);
165  int site0 = m_index.site(x, y, z, t - 1);
166 
167  u0dag = m_U->mat_dag(site0, 3);
168 
169  for (int ac = 0; ac < m_Nc; ++ac) {
170  src.set_ri(ac, id, site, 0, u0dag.r(ac, ic), u0dag.i(ac, ic));
171  }
172  }
173  }
174  }
175  scal(src, m_ct_tilde);
176  }
177 }
178 
179 
180 //====================================================================
181 
195 void Source_Wall_SF::set_tT(Field_F& src, int ic, int id)
196 {
197  int NPEt = CommonParameters::NPEt();
198  int Nvol = CommonParameters::Nvol();
199  int Ndim = CommonParameters::Ndim();
200 
201  std::vector<int> Nsize(Ndim);
202 
203  Nsize[0] = CommonParameters::Nx();
204  Nsize[1] = CommonParameters::Ny();
205  Nsize[2] = CommonParameters::Nz();
206  Nsize[3] = CommonParameters::Nt();
207 
208  int m_Nc = CommonParameters::Nc();
209  int m_Nd = CommonParameters::Nd();
210 
211  assert(ic < m_Nc);
212  assert(id > m_Nd / 2 - 1);
213  assert(id < m_Nd);
214  assert(src.nvol() == Nvol);
215  assert(src.nex() == 1);
216 
217  Mat_SU_N u0(m_Nc);
218  src.set(0.0);
219 
220  if (Communicator::ipe(3) == (NPEt - 1)) {
221  int t = Nsize[3] - 1;
222  for (int z = 0; z < Nsize[2]; ++z) {
223  for (int y = 0; y < Nsize[1]; ++y) {
224  for (int x = 0; x < Nsize[0]; ++x) {
225  int site = m_index.site(x, y, z, t);
226  u0 = m_U->mat(site, 3);
227  for (int ac = 0; ac < m_Nc; ++ac) {
228  src.set_ri(ac, id, site, 0, u0.r(ac, ic), u0.i(ac, ic));
229  }
230  }
231  }
232  }
233  scal(src, m_ct_tilde);
234  }
235 }
236 
237 
238 //====================================================================
239 //============================================================END=====
void scal(Field &x, const double a)
scal(x, a): x = a * x
Definition: field.cpp:282
Bridge::VerboseLevel m_vl
static const std::string class_name
BridgeIO vout
Definition: bridgeIO.cpp:278
void Register_string(const string &, const string &)
Definition: parameters.cpp:351
static int NPEt()
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:155
int site(const int &x, const int &y, const int &z, const int &t) const
Definition: index_lex.h:53
void general(const char *format,...)
Definition: bridgeIO.cpp:65
int nvol() const
Definition: field.h:116
Class for parameters.
Definition: parameters.h:38
static int ipe(const int dir)
logical coordinate of current proc.
void set_tT(Field_F &src, int ic, int id)
Set the 3D wall source at t=T-1.
Wilson-type fermion field.
Definition: field_F.h:37
SU(N) gauge field.
Definition: field_G.h:38
Field * getptr_smearedConfig(int i_smear)
get pointer to i-th smeared config (0th is original thin link)
void set_t0(Field_F &src, int ic, int id)
Set the 3D wall source at t=1.
void set_ri(const int cc, const int s, const int site, const int e, const double re, const double im)
Definition: field_F.h:117
void set_parameters(const Parameters &params)
Index_lex m_index
int nex() const
Definition: field.h:117
void set_config(Field *U)
set pointer to original thin link variable
int get_Nsmear()
get number of applied smearing operation
Field_G * m_U
Pointer to gauge field.
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
Manager of smeared configurations.
static bool Register(const std::string &realm, const creator_callback &cb)
Mat_SU_N mat_dag(const int site, const int mn=0) const
Definition: field_G.h:126
void Register_double(const string &, const double)
Definition: parameters.cpp:323
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
string get_string(const string &key) const
Definition: parameters.cpp:87
Mat_SU_N mat(const int site, const int mn=0) const
Definition: field_G.h:113
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:28
double m_ct_tilde
Boundary O(a) improvement factor for the Wilson (clover) fermion.