Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_Rational_Smeared.cpp
Go to the documentation of this file.
1 
14 #include "test.h"
15 
16 #include "gaugeConfig.h"
17 
18 #include "fopr_Clover.h"
19 #include "fopr_Rational.h"
20 
21 #include "director_Smear.h"
22 #include "fopr_Smeared.h"
23 
24 #include "projection.h"
25 #include "smear.h"
26 #include "source.h"
27 
28 #include "randomNumbers_Mseries.h"
29 
30 //====================================================================
32 
41 namespace Test_Rational {
42  const std::string test_name = "Rational.Smeared_Rational";
43 
44  //- test-private parameters
45  namespace {
46  const std::string filename_input = "test_Rational_Smeared.yaml";
47  const std::string filename_output = "stdout";
48 
49  class Parameters_Test_Rational : public Parameters {
50  public:
51  Parameters_Test_Rational()
52  {
53  Register_string("gauge_config_status", "NULL");
54  Register_string("gauge_config_type_input", "NULL");
55  Register_string("config_filename_input", "NULL");
56 
57  Register_string("verbose_level", "NULL");
58 
59  Register_double("expected_result", 0.0);
60  }
61  };
62  }
63 
64  //- prototype declaration
65  int smeared_rational(void);
66 
67 #ifdef USE_TESTMANAGER_AUTOREGISTER
68  namespace {
69 #if defined(USE_GROUP_SU2)
70  // Nc=2 is not available.
71 #else
72  static const bool is_registered = TestManager::RegisterTest(
73  test_name,
75  );
76 #endif
77  }
78 #endif
79 
80  //====================================================================
81  int smeared_rational(void)
82  {
83  // ##### parameter setup #####
84  int Ndim = CommonParameters::Ndim();
85  int Nc = CommonParameters::Nc();
86  int Nd = CommonParameters::Nd();
87  int Nvol = CommonParameters::Nvol();
88  int NinF = 2 * Nc * Nd;
89 
90  Parameters *params_test = new Parameters_Test_Rational;
91  Parameters *params_clover = ParametersFactory::New("Fopr.Clover");
92  Parameters *params_proj = ParametersFactory::New("Projection");
93  Parameters *params_smear = ParametersFactory::New("Smear");
94  Parameters *params_dr_smear = ParametersFactory::New("Director_Smear");
95  Parameters *params_rational = ParametersFactory::New("Fopr.Rational");
96  Parameters *params_source = ParametersFactory::New("Source");
97  Parameters *params_all = new Parameters;
98 
99  params_all->Register_Parameters("Test_Rational", params_test);
100  params_all->Register_Parameters("Fopr_Clover", params_clover);
101  params_all->Register_Parameters("Projection", params_proj);
102  params_all->Register_Parameters("Smear", params_smear);
103  params_all->Register_Parameters("Director_Smear", params_dr_smear);
104  params_all->Register_Parameters("Fopr_Rational", params_rational);
105  params_all->Register_Parameters("Source", params_source);
106 
107  ParameterManager_YAML params_manager;
108  params_manager.read_params(filename_input, params_all);
109 
110  const string str_gconf_status = params_test->get_string("gauge_config_status");
111  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
112  const string readfile = params_test->get_string("config_filename_input");
113  const string str_vlevel = params_test->get_string("verbose_level");
114 
115  const bool do_check = params_test->is_set("expected_result");
116  const double expected_result = do_check ? params_test->get_double("expected_result") : 0.0;
117 
118  const string str_gmset_type = params_clover->get_string("gamma_matrix_type");
119  const string str_proj_type = params_proj->get_string("projection_type");
120  const string str_smear_type = params_smear->get_string("smear_type");
121  const string str_source_type = params_source->get_string("source_type");
122 
124 
125  //- print input parameters
126  vout.general(vl, " gconf_status = %s\n", str_gconf_status.c_str());
127  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
128  vout.general(vl, " readfile = %s\n", readfile.c_str());
129  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
130  vout.general(vl, " gmset_type = %s\n", str_gmset_type.c_str());
131  vout.general(vl, " proj_type = %s\n", str_proj_type.c_str());
132  vout.general(vl, " smear_type = %s\n", str_smear_type.c_str());
133  vout.general(vl, " source_type = %s\n", str_source_type.c_str());
134  vout.general(vl, "\n");
135 
136  //- input parameter check
137  int err = 0;
138  err += ParameterCheck::non_NULL(str_gconf_status);
139 
140  if (err) {
141  vout.crucial(vl, "%s: Input parameters have not been set.\n", test_name.c_str());
142  abort();
143  }
144 
145 
146  // ##### Set up a gauge configuration ####
147  Field_G *U = new Field_G(Nvol, Ndim);
148  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
149 
150  if (str_gconf_status == "Continue") {
151  gconf_read->read_file((Field *)U, readfile);
152  } else if (str_gconf_status == "Cold_start") {
153  U->set_unit();
154  } else if (str_gconf_status == "Hot_start") {
155  RandomNumbers_Mseries rand(1234567);
156  U->set_random(&rand);
157  } else {
158  vout.crucial(vl, "%s: unsupported gconf status \"%s\".\n", test_name.c_str(), str_gconf_status.c_str());
159  abort();
160  }
161 
162 
163  // ##### object setup #####
164  Fopr_Clover *fopr_c = new Fopr_Clover(str_gmset_type);
165  fopr_c->set_parameters(*params_clover);
166 
167  Projection *proj = Projection::New(str_proj_type);
168  Smear *smear = Smear::New(str_smear_type, proj);
169  smear->set_parameters(*params_smear);
170 
171  Director_Smear *dr_smear = new Director_Smear((Smear *)smear);
172  dr_smear->set_parameters(*params_dr_smear);
173 
174  Fopr_Rational *fopr_r = new Fopr_Rational((Fopr *)fopr_c);
175  fopr_r->set_parameters(*params_rational);
176 
177  Source *source = Source::New(str_source_type);
178  source->set_parameters(*params_source);
179 
180  //- Smeared-rational
181  Fopr_Smeared fopr_smear_1((Fopr *)fopr_c, dr_smear);
182  Fopr_Smeared fopr_smear_2((Fopr *)fopr_r, dr_smear);
183  fopr_smear_1.set_config(U);
184  fopr_smear_2.set_config(U);
185 
186  //- Rational-smeared
187  Fopr_Rational fopr_r_smear_1((Fopr *)&fopr_smear_1);
188  fopr_r_smear_1.set_parameters(*params_rational);
189  fopr_r_smear_1.set_config(U);
190 
191  Timer *timer = new Timer(test_name);
192 
193 
194  // #### Execution main part ####
195  timer->start();
196 
197  Field xq(NinF, Nvol, 1), b(NinF, Nvol, 1);
198  Field v(NinF, Nvol, 1), w(NinF, Nvol, 1);
199  Field_F b2;
200 
201  vout.general(vl, "Consistency check of smeared-rational and rational-smeared.\n");
202 
203  vout.general(vl, "Smeared-rational:\n");
204 
205  {
206  int ispin = 0;
207  {
208  int icolor = 0;
209  //for(int ispin = 0; ispin < Nd; ++ispin){
210  // for(int icolor = 0; icolor < Nc; ++icolor){
211 
212  int idx = icolor + Nc * ispin;
213  source->set(b2, idx);
214 
215  b = (Field)b2;
216 
217  v = fopr_smear_2.mult(b);
218 
219  fopr_smear_1.set_mode("DdagD");
220  w = fopr_smear_1.mult(v);
221 
222  v = fopr_smear_2.mult(w);
223 
224  v -= b;
225  double vv = v.norm2();
226 
227  vout.general(vl, " standard norm2 = %.8e\n", vv);
228  }
229  }
230 
231  vout.general(vl, "Rational-smeared:\n");
232 
233  double vv;
234  {
235  int ispin = 0;
236  {
237  int icolor = 0;
238  //for(int ispin = 0; ispin < Nd; ++ispin){
239  // for(int icolor = 0; icolor < Nc; ++icolor){
240 
241  int idx = icolor + Nc * ispin;
242  source->set(b2, idx);
243 
244  b = (Field)b2;
245 
246  v = fopr_r_smear_1.mult(b);
247 
248  fopr_smear_1.set_mode("DdagD");
249  w = fopr_smear_1.mult(v);
250 
251  v = fopr_r_smear_1.mult(w);
252 
253  v -= b;
254  vv = v.norm2();
255 
256  vout.general(vl, " standard norm2 = %.8e\n", vv);
257  }
258  }
259 
260  double result = vv;
261 
262  timer->report();
263 
264 
265  // #### tydy up ####
266  delete params_test;
267  delete params_clover;
268  delete params_proj;
269  delete params_smear;
270  delete params_dr_smear;
271  delete params_rational;
272  delete params_source;
273  delete params_all;
274 
275  delete timer;
276 
277  delete U;
278  delete gconf_read;
279 
280  delete source;
281  delete fopr_r;
282  delete dr_smear;
283  delete smear;
284  delete proj;
285  delete fopr_c;
286 
287 
288  if (do_check) {
289  return Test::verify(expected_result, result);
290  } else {
291  vout.detailed(vl, "check skipped: expected_result not set.\n\n");
292  return EXIT_SKIP;
293  }
294  }
295 } // namespace Test_Rational
#define EXIT_SKIP
Definition: test.h:17
Random number generator base on M-series.
Fermion operator for rational approximation.
Definition: fopr_Rational.h:46
BridgeIO vout
Definition: bridgeIO.cpp:207
const std::string test_name
void read_params(const std::string &params_file, Parameters *params)
read parameters from file.
void detailed(const char *format,...)
Definition: bridgeIO.cpp:50
double norm2() const
Definition: field.cpp:469
void general(const char *format,...)
Definition: bridgeIO.cpp:38
Container of Field-type object.
Definition: field.h:37
virtual void set_parameters(const Parameters &)=0
const Field mult(const Field &f)
multiplies fermion operator to a given field and returns the resultant field.
Class for parameters.
Definition: parameters.h:40
static Parameters * New(const std::string &realm)
void set_random(RandomNumbers *rand)
Definition: field_G_imp.cpp:62
Wilson-type fermion field.
Definition: field_F.h:37
smeared fermion operator.
Definition: fopr_Smeared.h:40
void set_unit()
Definition: field_G_imp.cpp:39
static bool RegisterTest(const std::string &key, const Test_function func)
Definition: testManager.h:79
SU(N) gauge field.
Definition: field_G.h:36
bool is_set(const string &) const
Definition: parameters.cpp:366
double get_double(const string &key) const
Definition: parameters.cpp:25
void set_config(Field *U)
setting pointer to the gauge configuration.
Definition: fopr_Rational.h:80
int non_NULL(const std::string v)
Definition: checker.cpp:61
virtual void set(Field &, int)=0
void start()
Definition: timer.cpp:44
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
void Register_Parameters(const string &, Parameters *const)
Definition: parameters.cpp:359
base class for projection operator into gauge group.
Definition: projection.h:33
void mult(Field &v, const Field &f)
multiply smeared fermion operator
Definition: fopr_Smeared.h:61
Manager of smeared configurations.
void set_mode(std::string mode)
set the mode of fermion operator
Definition: fopr_Smeared.h:85
Bridge::VerboseLevel vl
Definition: checker.cpp:18
void set_parameters(const Parameters &params)
VerboseLevel
Definition: bridgeIO.h:25
void set_parameters(const Parameters &params)
set paramters, must be called before set_config
base class for smearing of link variables.
Definition: smear.h:36
Parameter manager with YAML parser.
GaugeConfig class for file I/O of gauge configuration.
Definition: gaugeConfig.h:56
Definition: timer.h:31
Base class of fermion operator family.
Definition: fopr.h:39
int verify(const double expected, const double result)
Definition: test.cpp:27
void read_file(Field *u, const string &filename)
Definition: gaugeConfig.cpp:85
Base class of sources for a linear solver.
Definition: source.h:36
string get_string(const string &key) const
Definition: parameters.cpp:85
void report(const Bridge::VerboseLevel vl=Bridge::GENERAL)
Definition: timer.cpp:128
void set_config(Field *U)
set pointer to original thin link variable
virtual void set_parameters(const Parameters &)=0
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:191
void set_parameters(const Parameters &params)
Definition: fopr_Clover.cpp:81