Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 using std::valarray;
21 
22 //- parameter entry
23 namespace {
24  void append_entry(Parameters& param)
25  {
26  param.Register_double("ct_tilde", 0.0);
27 
28  param.Register_string("verbose_level", "NULL");
29  }
30 
31 
32 #ifdef USE_PARAMETERS_FACTORY
33  bool init_param = ParametersFactory::Register("Source_Wall_SF", append_entry);
34 #endif
35 }
36 //- end
37 
38 //- parameters class
40 //- end
41 
42 const std::string Source_Wall_SF::class_name = "Source_Wall_SF";
43 
44 //====================================================================
46 {
47  const string str_vlevel = params.get_string("verbose_level");
48 
49  m_vl = vout.set_verbose_level(str_vlevel);
50 
51  //- fetch and check input parameters
52  double ct_tilde;
53 
54  int err = 0;
55  err += params.fetch_double("ct_tilde", ct_tilde);
56 
57  if (err) {
58  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
59  abort();
60  }
61 
62  set_parameters(ct_tilde);
63 }
64 
65 
66 //====================================================================
67 void Source_Wall_SF::set_parameters(double ct_tilde)
68 {
69  //- print input parameters
70  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
71  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
72 
73  //- range check
74  // NB. ct_tilde=0 is allowed.
75 
76  //- store values
77  m_ct_tilde = ct_tilde;
78 }
79 
80 
81 //====================================================================
82 void Source_Wall_SF::set_parameters(Field_G *U, double ct_tilde)
83 {
84  //- print input parameters
85  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
86  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
87 
88  //- range check
89  // NB. ct_tilde=0 is allowed.
90 
91  //- store values
92  m_U = U;
93  m_ct_tilde = ct_tilde;
94 }
95 
96 
97 //====================================================================
98 
103  double ct_tilde)
104 {
105  //- print input parameters
106  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
107  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
108 
109  //- range check
110  // NB. ct_tilde=0 is allowed.
111 
112  //- store values
113  dr_smear->set_config(U);
114  int Nsmear = dr_smear->get_Nsmear();
115  m_U = (Field_G *)dr_smear->getptr_smearedConfig(Nsmear);
116 
117  m_ct_tilde = ct_tilde;
118 }
119 
120 
121 //====================================================================
122 
137 void Source_Wall_SF::set_t0(Field_F& src, int ic, int id)
138 {
139  int Nvol = CommonParameters::Nvol();
140  int Ndim = CommonParameters::Ndim();
141 
142  valarray<int> Nsize(Ndim);
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 = 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  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  valarray<int> Nsize(Ndim);
202  Nsize[0] = CommonParameters::Nx();
203  Nsize[1] = CommonParameters::Ny();
204  Nsize[2] = CommonParameters::Nz();
205  Nsize[3] = CommonParameters::Nt();
206 
207  int m_Nc = CommonParameters::Nc();
208  int m_Nd = CommonParameters::Nd();
209 
210  assert(ic < m_Nc);
211  assert(id > m_Nd / 2 - 1);
212  assert(id < m_Nd);
213  assert(src.nvol() == Nvol);
214  assert(src.nex() == 1);
215 
216  Mat_SU_N u0(m_Nc);
217  src = 0.0;
218 
219  if (Communicator::ipe(3) == (NPEt - 1)) {
220  int t = Nsize[3] - 1;
221  for (int z = 0; z < Nsize[2]; ++z) {
222  for (int y = 0; y < Nsize[1]; ++y) {
223  for (int x = 0; x < Nsize[0]; ++x) {
224  int site = m_index.site(x, y, z, t);
225  u0 = m_U->mat(site, 3);
226  for (int ac = 0; ac < m_Nc; ++ac) {
227  src.set_ri(ac, id, site, 0, u0.r(ac, ic), u0.i(ac, ic));
228  }
229  }
230  }
231  }
232  src *= m_ct_tilde;
233  }
234 }
235 
236 
237 //====================================================================
238 //============================================================END=====
Bridge::VerboseLevel m_vl
static const std::string class_name
BridgeIO vout
Definition: bridgeIO.cpp:207
void Register_string(const string &, const string &)
Definition: parameters.cpp:352
static int NPEt()
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:38
int nvol() const
Definition: field.h:101
Class for parameters.
Definition: parameters.h:40
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:36
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:116
void set_parameters(const Parameters &params)
Index_lex m_index
int nex() const
Definition: field.h:102
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:26
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:123
void Register_double(const string &, const double)
Definition: parameters.cpp:324
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
string get_string(const string &key) const
Definition: parameters.cpp:85
Mat_SU_N mat(const int site, const int mn=0) const
Definition: field_G.h:110
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:191
double m_ct_tilde
Boundary O(a) improvement factor for the Wilson (clover) fermion.