Bridge++  Ver. 1.1.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 //====================================================================
44 {
45  const string str_vlevel = params.get_string("verbose_level");
46 
47  m_vl = vout.set_verbose_level(str_vlevel);
48 
49  //- fetch and check input parameters
50  double ct_tilde;
51 
52  int err = 0;
53  err += params.fetch_double("ct_tilde", ct_tilde);
54 
55  if (err) {
56  vout.crucial(m_vl, "Source_Wall_SF: fetch error, input parameter not found.\n");
57  abort();
58  }
59 
60  set_parameters(ct_tilde);
61 }
62 
63 
64 //====================================================================
65 void Source_Wall_SF::set_parameters(double ct_tilde)
66 {
67  //- print input parameters
68  vout.general(m_vl, "Parameters of Source_Wall_SF:\n");
69  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
70 
71  //- range check
72  // NB. ct_tilde=0 is allowed.
73 
74  //- store values
75  m_ct_tilde = ct_tilde;
76 }
77 
78 
79 //====================================================================
80 void Source_Wall_SF::set_parameters(Field_G *U, double ct_tilde)
81 {
82  //- print input parameters
83  vout.general(m_vl, "Parameters of Source_Wall_SF:\n");
84  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
85 
86  //- range check
87  // NB. ct_tilde=0 is allowed.
88 
89  //- store values
90  m_U = U;
91  m_ct_tilde = ct_tilde;
92 }
93 
94 
95 //====================================================================
96 
101  double ct_tilde)
102 {
103  //- print input parameters
104  vout.general(m_vl, "Parameters of Source_Wall_SF:\n");
105  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
106 
107  //- range check
108  // NB. ct_tilde=0 is allowed.
109 
110  //- store values
111  dr_smear->set_config(U);
112  int Nsmear = dr_smear->get_Nsmear();
113  m_U = (Field_G *)dr_smear->getptr_smearedConfig(Nsmear);
114 
115  m_ct_tilde = ct_tilde;
116 }
117 
118 
119 //====================================================================
120 
135 void Source_Wall_SF::set_t0(Field_F& src, int ic, int id)
136 {
137  int Nvol = CommonParameters::Nvol();
138  int Ndim = CommonParameters::Ndim();
139 
140  valarray<int> Nsize(Ndim);
141  Nsize[0] = CommonParameters::Nx();
142  Nsize[1] = CommonParameters::Ny();
143  Nsize[2] = CommonParameters::Nz();
144  Nsize[3] = CommonParameters::Nt();
145 
146  int m_Nc = CommonParameters::Nc();
147  int m_Nd = CommonParameters::Nd();
148 
149  assert(ic < m_Nc);
150  assert(id < m_Nd / 2);
151  assert(src.nvol() == Nvol);
152  assert(src.nex() == 1);
153 
154  Mat_SU_N u0dag(m_Nc);
155  src = 0.0;
156 
157  if (Communicator::ipe(3) == 0) {
158  int t = 1;
159  for (int z = 0; z < Nsize[2]; ++z) {
160  for (int y = 0; y < Nsize[1]; ++y) {
161  for (int x = 0; x < Nsize[0]; ++x) {
162  int site = m_index.site(x, y, z, t);
163  int site0 = m_index.site(x, y, z, t - 1);
164 
165  u0dag = m_U->mat_dag(site0, 3);
166 
167  for (int ac = 0; ac < m_Nc; ++ac) {
168  src.set_ri(ac, id, site, 0, u0dag.r(ac, ic), u0dag.i(ac, ic));
169  }
170  }
171  }
172  }
173  src *= m_ct_tilde;
174  }
175 }
176 
177 
178 //====================================================================
179 
193 void Source_Wall_SF::set_tT(Field_F& src, int ic, int id)
194 {
195  int NPEt = CommonParameters::NPEt();
196  int Nvol = CommonParameters::Nvol();
197  int Ndim = CommonParameters::Ndim();
198 
199  valarray<int> Nsize(Ndim);
200  Nsize[0] = CommonParameters::Nx();
201  Nsize[1] = CommonParameters::Ny();
202  Nsize[2] = CommonParameters::Nz();
203  Nsize[3] = CommonParameters::Nt();
204 
205  int m_Nc = CommonParameters::Nc();
206  int m_Nd = CommonParameters::Nd();
207 
208  assert(ic < m_Nc);
209  assert(id > m_Nd / 2 - 1);
210  assert(id < m_Nd);
211  assert(src.nvol() == Nvol);
212  assert(src.nex() == 1);
213 
214  Mat_SU_N u0(m_Nc);
215  src = 0.0;
216 
217  if (Communicator::ipe(3) == (NPEt - 1)) {
218  int t = Nsize[3] - 1;
219  for (int z = 0; z < Nsize[2]; ++z) {
220  for (int y = 0; y < Nsize[1]; ++y) {
221  for (int x = 0; x < Nsize[0]; ++x) {
222  int site = m_index.site(x, y, z, t);
223  u0 = m_U->mat(site, 3);
224  for (int ac = 0; ac < m_Nc; ++ac) {
225  src.set_ri(ac, id, site, 0, u0.r(ac, ic), u0.i(ac, ic));
226  }
227  }
228  }
229  }
230  src *= m_ct_tilde;
231  }
232 }
233 
234 
235 //====================================================================
236 //============================================================END=====