Bridge++  Version 1.4.4
 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 
17 
18 const std::string Source_Wall_SF::class_name = "Source_Wall_SF";
19 
20 //====================================================================
22 {
23  const string str_vlevel = params.get_string("verbose_level");
24 
25  m_vl = vout.set_verbose_level(str_vlevel);
26 
27  //- fetch and check input parameters
28  double ct_tilde;
29 
30  int err = 0;
31  err += params.fetch_double("ct_tilde", ct_tilde);
32 
33  if (err) {
34  vout.crucial(m_vl, "Error at %s: input parameter not found.\n", class_name.c_str());
35  exit(EXIT_FAILURE);
36  }
37 
38  set_parameters(ct_tilde);
39 }
40 
41 
42 //====================================================================
43 void Source_Wall_SF::set_parameters(double ct_tilde)
44 {
45  //- print input parameters
46  vout.general(m_vl, "%s:\n", class_name.c_str());
47  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
48 
49  //- range check
50  // NB. ct_tilde=0 is allowed.
51 
52  //- store values
53  m_ct_tilde = ct_tilde;
54 }
55 
56 
57 //====================================================================
58 void Source_Wall_SF::set_parameters(Field_G *U, double ct_tilde)
59 {
60  //- print input parameters
61  vout.general(m_vl, "%s:\n", class_name.c_str());
62  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
63 
64  //- range check
65  // NB. ct_tilde=0 is allowed.
66 
67  //- store values
68  m_U = U;
69  m_ct_tilde = ct_tilde;
70 }
71 
72 
73 //====================================================================
74 
79  double ct_tilde)
80 {
81  //- print input parameters
82  vout.general(m_vl, "%s:\n", class_name.c_str());
83  vout.general(m_vl, " ct_tilde = %10.6f\n", ct_tilde);
84 
85  //- range check
86  // NB. ct_tilde=0 is allowed.
87 
88  //- store values
89  dr_smear->set_config(U);
90  int Nsmear = dr_smear->get_Nsmear();
91  m_U = (Field_G *)dr_smear->getptr_smearedConfig(Nsmear);
92 
93  m_ct_tilde = ct_tilde;
94 }
95 
96 
97 //====================================================================
98 
113 void Source_Wall_SF::set_t0(Field_F& src, int ic, int id)
114 {
115  int Nvol = CommonParameters::Nvol();
116  int Ndim = CommonParameters::Ndim();
117 
118  std::vector<int> Nsize(Ndim);
119 
120  Nsize[0] = CommonParameters::Nx();
121  Nsize[1] = CommonParameters::Ny();
122  Nsize[2] = CommonParameters::Nz();
123  Nsize[3] = CommonParameters::Nt();
124 
125  int m_Nc = CommonParameters::Nc();
126  int m_Nd = CommonParameters::Nd();
127 
128  assert(ic < m_Nc);
129  assert(id < m_Nd / 2);
130  assert(src.nvol() == Nvol);
131  assert(src.nex() == 1);
132 
133  Mat_SU_N u0dag(m_Nc);
134  src.set(0.0);
135 
136  if (Communicator::ipe(3) == 0) {
137  int t = 1;
138  for (int z = 0; z < Nsize[2]; ++z) {
139  for (int y = 0; y < Nsize[1]; ++y) {
140  for (int x = 0; x < Nsize[0]; ++x) {
141  int site = m_index.site(x, y, z, t);
142  int site0 = m_index.site(x, y, z, t - 1);
143 
144  u0dag = m_U->mat_dag(site0, 3);
145 
146  for (int ac = 0; ac < m_Nc; ++ac) {
147  src.set_ri(ac, id, site, 0, u0dag.r(ac, ic), u0dag.i(ac, ic));
148  }
149  }
150  }
151  }
152  scal(src, m_ct_tilde);
153  }
154 }
155 
156 
157 //====================================================================
158 
172 void Source_Wall_SF::set_tT(Field_F& src, int ic, int id)
173 {
174  int NPEt = CommonParameters::NPEt();
175  int Nvol = CommonParameters::Nvol();
176  int Ndim = CommonParameters::Ndim();
177 
178  std::vector<int> Nsize(Ndim);
179 
180  Nsize[0] = CommonParameters::Nx();
181  Nsize[1] = CommonParameters::Ny();
182  Nsize[2] = CommonParameters::Nz();
183  Nsize[3] = CommonParameters::Nt();
184 
185  int m_Nc = CommonParameters::Nc();
186  int m_Nd = CommonParameters::Nd();
187 
188  assert(ic < m_Nc);
189  assert(id > m_Nd / 2 - 1);
190  assert(id < m_Nd);
191  assert(src.nvol() == Nvol);
192  assert(src.nex() == 1);
193 
194  Mat_SU_N u0(m_Nc);
195  src.set(0.0);
196 
197  if (Communicator::ipe(3) == (NPEt - 1)) {
198  int t = Nsize[3] - 1;
199  for (int z = 0; z < Nsize[2]; ++z) {
200  for (int y = 0; y < Nsize[1]; ++y) {
201  for (int x = 0; x < Nsize[0]; ++x) {
202  int site = m_index.site(x, y, z, t);
203  u0 = m_U->mat(site, 3);
204  for (int ac = 0; ac < m_Nc; ++ac) {
205  src.set_ri(ac, id, site, 0, u0.r(ac, ic), u0.i(ac, ic));
206  }
207  }
208  }
209  }
210  scal(src, m_ct_tilde);
211  }
212 }
213 
214 
215 //====================================================================
216 //============================================================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:495
static int NPEt()
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:164
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:195
int fetch_double(const string &key, double &value) const
Definition: parameters.cpp:211
int nvol() const
Definition: field.h:116
Class for parameters.
Definition: parameters.h:46
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:178
Manager of smeared configurations.
Mat_SU_N mat_dag(const int site, const int mn=0) const
Definition: field_G.h:126
string get_string(const string &key) const
Definition: parameters.cpp:116
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:131
double m_ct_tilde
Boundary O(a) improvement factor for the Wilson (clover) fermion.