Bridge++  Ver. 1.3.x
source_4spinor_Local.cpp
Go to the documentation of this file.
1 
14 #include "source_4spinor_Local.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_int_vector("source_position", std::vector<int>());
26 
27  param.Register_string("verbose_level", "NULL");
28  }
29 
30 
31 #ifdef USE_PARAMETERS_FACTORY
32  bool init_param = ParametersFactory::Register("Source_4spinor_Local", append_entry);
33 #endif
34 }
35 //- end
36 
37 //- parameters class
39 //- end
40 
41 const std::string Source_4spinor_Local::class_name = "Source_4spinor_Local";
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  std::vector<int> source_position;
52 
53  int err = 0;
54  err += params.fetch_int_vector("source_position", source_position);
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 
62  set_parameters(source_position);
63 }
64 
65 
66 //====================================================================
67 void Source_4spinor_Local::set_parameters(std::vector<int>& source_position)
68 {
69  int Ndim = CommonParameters::Ndim();
70 
71  std::vector<int> Lsize(Ndim);
72 
73  Lsize[0] = CommonParameters::Lx();
74  Lsize[1] = CommonParameters::Ly();
75  Lsize[2] = CommonParameters::Lz();
76  Lsize[3] = CommonParameters::Lt();
77 
78  //- print input parameters
79  vout.general(m_vl, "Source for 4-spinor field - local:\n");
80  for (int mu = 0; mu < Ndim; ++mu) {
81  vout.general(m_vl, " source_position[%d] = %d\n",
82  mu, source_position[mu]);
83  }
84 
85  //- range check
86  int err = 0;
87  for (int mu = 0; mu < Ndim; ++mu) {
88  // NB. Lsize[mu] > abs(source_position[mu])
89  err += ParameterCheck::non_negative(Lsize[mu] - abs(source_position[mu]));
90  }
91 
92  if (err) {
93  vout.crucial(m_vl, "%s: parameter range check failed.\n", class_name.c_str());
94  exit(EXIT_FAILURE);
95  }
96 
97  assert(source_position.size() == Ndim);
98 
99  //- store values
100  m_source_position.resize(Ndim);
101  for (int mu = 0; mu < Ndim; ++mu) {
102  m_source_position[mu] = (source_position[mu] + Lsize[mu]) % Lsize[mu];
103  }
104 }
105 
106 
107 //====================================================================
108 void Source_4spinor_Local::set(Field_F& src, int ic, int id)
109 {
110  int Nvol = CommonParameters::Nvol();
111  int Ndim = CommonParameters::Ndim();
112 
113  std::vector<int> Nsz(Ndim);
114 
115  Nsz[0] = CommonParameters::Nx();
116  Nsz[1] = CommonParameters::Ny();
117  Nsz[2] = CommonParameters::Nz();
118  Nsz[3] = CommonParameters::Nt();
119 
120  assert(ic < CommonParameters::Nc());
121  assert(id < CommonParameters::Nd());
122  assert(src.nvol() == Nvol);
123  assert(src.nex() == 1);
124 
125  src.set(0.0);
126 
127  std::vector<int> site_src(4);
128  std::vector<int> node_src(4);
129  for (int mu = 0; mu < Ndim; ++mu) {
130  site_src[mu] = m_source_position[mu] % Nsz[mu];
131  node_src[mu] = m_source_position[mu] / Nsz[mu];
132  }
133 
134  if (node_src[0] == Communicator::ipe(0)) {
135  if (node_src[1] == Communicator::ipe(1)) {
136  if (node_src[2] == Communicator::ipe(2)) {
137  if (node_src[3] == Communicator::ipe(3)) {
138  int site = m_index.site(site_src[0], site_src[1],
139  site_src[2], site_src[3]);
140  src.set_ri(ic, id, site, 0, 1.0, 0.0);
141  }
142  }
143  }
144  }
145 }
146 
147 
148 //====================================================================
149 //============================================================END=====
void Register_int_vector(const string &, const std::vector< int > &)
Definition: parameters.cpp:344
BridgeIO vout
Definition: bridgeIO.cpp:278
static const std::string class_name
void Register_string(const string &, const string &)
Definition: parameters.cpp:351
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(Field_F &src, int ic, int id)
Wilson-type fermion field.
Definition: field_F.h:37
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
Bridge::VerboseLevel m_vl
int nex() const
Definition: field.h:117
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
static bool Register(const std::string &realm, const creator_callback &cb)
int non_negative(const int v)
Definition: checker.cpp:21
string get_string(const string &key) const
Definition: parameters.cpp:87
std::vector< int > m_source_position
void set_parameters(const Parameters &params)
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:28
int fetch_int_vector(const string &key, std::vector< int > &val) const
Definition: parameters.cpp:176