Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
source_Staggered_Wall.cpp
Go to the documentation of this file.
1 
14 #include "source_Staggered_Wall.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 using Bridge::vout;
21 
22 //- parameter entry
23 namespace {
24  void append_entry(Parameters& param)
25  {
26  param.Register_int("source_position", 0);
27 
28  param.Register_string("verbose_level", "NULL");
29  }
30 
31 
32 #ifdef USE_PARAMETERS_FACTORY
33  bool init_param = ParametersFactory::Register("Source_Staggered_Wall", 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  int source_position;
51 
52  int err = 0;
53  err += params.fetch_int("source_position", source_position);
54 
55  if (err) {
56  vout.crucial(m_vl, "Source_Staggered_Wall: fetch error, input parameter not found.\n");
57  abort();
58  }
59 
60 
61  set_parameters(source_position);
62 }
63 
64 
65 //====================================================================
66 void Source_Staggered_Wall::set_parameters(const int source_position)
67 {
68  int Lt = CommonParameters::Lt();
69 
70  //- print input parameters
71  vout.general(m_vl, "Source for staggered spinor field - Wall:\n");
72  vout.general(m_vl, " source_position[t] = %d\n", source_position);
73 
74  //- range check
75  int err = 0;
76  // NB. Lt > abs(source_position)
77  err += ParameterCheck::non_negative(Lt - abs(source_position));
78 
79  if (err) {
80  vout.crucial(m_vl, "Source_Staggered_Wall: parameter range check failed.\n");
81  abort();
82  }
83 
84  //- store values
85  m_t_src = source_position;
86 
87  //- post-process
88  init();
89 }
90 
91 
92 //====================================================================
94 {
95  int Nvol = CommonParameters::Nvol();
96 
97  int Nx = CommonParameters::Nx();
98  int Ny = CommonParameters::Ny();
99  int Nz = CommonParameters::Nz();
100  int Nt = CommonParameters::Nt();
101 
102  int ipex = Communicator::ipe(0);
103  int ipey = Communicator::ipe(1);
104  int ipez = Communicator::ipe(2);
105  int ipet = Communicator::ipe(3);
106 
107  src_wall_1.reset(1, Nvol, 1);
108  src_wall_2.reset(1, Nvol, 1);
109  src_wall_1 = 0.0;
110  src_wall_2 = 0.0;
111 
112  int tl_src = m_t_src % Nt;
113  int ex = 0;
114  if (m_t_src / Nt == ipet) {
115  for (int z = 0; z < Nz; ++z) {
116  int z2 = z + ipez * Nz;
117  for (int y = 0; y < Ny; ++y) {
118  int y2 = y + ipey * Ny;
119  for (int x = 0; x < Nx; ++x) {
120  int x2 = x + ipex * Nx;
121 
122  int site = m_index.site(x, y, z, tl_src);
123 
124  if (((x2 + y2 + z2) % 2) == 0) {
125  src_wall_1.set(0, site, ex, 1.0);
126  src_wall_2.set(0, site, ex, 1.0);
127  } else {
128  src_wall_1.set(0, site, ex, 1.0);
129  src_wall_2.set(0, site, ex, -1.0);
130  }
131  }
132  }
133  }
134  }
135 }
136 
137 
138 //====================================================================
140  const int ic, const int i_src)
141 {
142  int Nvol = CommonParameters::Nvol();
143 
144  src = 0.0;
145 
146  int ex = 0;
147  if (i_src == 0) {
148  for (int site = 0; site < Nvol; ++site) {
149  src.set_r(ic, site, ex, src_wall_1.cmp(0, site, ex));
150  }
151  } else if (i_src == 1) {
152  for (int site = 0; site < Nvol; ++site) {
153  src.set_r(ic, site, ex, src_wall_2.cmp(0, site, ex));
154  }
155  } else {
156  vout.general(m_vl, "Source_Staggered_Wall: illegal source index.\n");
157  abort();
158  }
159 }
160 
161 
162 //====================================================================
163 //============================================================END=====