Bridge++  Ver. 1.1.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 "parameterManager_YAML.h"
15 #include "parameters_factory.h"
16 
17 #include "bridgeIO.h"
18 using Bridge::vout;
19 
20 #include "gaugeConfig.h"
21 
22 #include "fopr_Clover.h"
23 #include "fopr_Rational.h"
24 
25 #include "director_Smear.h"
26 #include "fopr_Smeared.h"
27 
28 #include "projection.h"
29 #include "smear.h"
30 #include "source.h"
31 
32 #ifdef USE_TEST
33 #include "test.h"
34 #endif
35 
36 #ifdef USE_TESTMANAGER_AUTOREGISTER
37 #include "testManager.h"
38 #endif
39 
40 //====================================================================
42 
51 namespace Test_Rational {
52  //- test-private parameters
53  namespace {
54  const std::string filename_input = "test_Rational_Smeared.yaml";
55  const std::string filename_output = "stdout";
56 
57  class Parameters_Test_Rational : public Parameters {
58  public:
59  Parameters_Test_Rational()
60  {
61  Register_string("gauge_config_type_input", "NULL");
62  Register_string("config_filename_input", "NULL");
63 
64  Register_string("verbose_level", "NULL");
65 
66  Register_double("expected_result", 0.0);
67  }
68  };
69  }
70 
71  //- prototype declaration
72  int smeared_rational(void);
73 
74 #ifdef USE_TESTMANAGER_AUTOREGISTER
75  namespace {
76  static const bool is_registered = TestManager::RegisterTest(
77  "Rational.Smeared_Rational",
79  );
80  }
81 #endif
82 
83  //====================================================================
84  int smeared_rational(void)
85  {
86  // ##### parameter setup #####
87  int Ndim = CommonParameters::Ndim();
88  int Nc = CommonParameters::Nc();
89  int Nd = CommonParameters::Nd();
90  int Nvol = CommonParameters::Nvol();
91  int NinF = 2 * Nc * Nd;
92 
93  Parameters *params_test = new Parameters_Test_Rational;
94  Parameters *params_clover = ParametersFactory::New("Fopr.Clover");
95  Parameters *params_proj = ParametersFactory::New("Projection");
96  Parameters *params_smear = ParametersFactory::New("Smear");
97  Parameters *params_dr_smear = ParametersFactory::New("Director_Smear");
98  Parameters *params_rational = ParametersFactory::New("Fopr.Rational");
99  Parameters *params_source = ParametersFactory::New("Source");
100 
101  Parameters *params_all = new Parameters;
102 
103  params_all->Register_Parameters("Test_Rational", params_test);
104  params_all->Register_Parameters("Fopr_Clover", params_clover);
105  params_all->Register_Parameters("Projection", params_proj);
106  params_all->Register_Parameters("Smear", params_smear);
107  params_all->Register_Parameters("Director_Smear", params_dr_smear);
108  params_all->Register_Parameters("Fopr_Rational", params_rational);
109  params_all->Register_Parameters("Source", params_source);
110 
111  ParameterManager_YAML params_manager;
112  params_manager.read_params(filename_input, params_all);
113 
114  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
115  const string readfile = params_test->get_string("config_filename_input");
116  const string str_vlevel = params_test->get_string("verbose_level");
117 #ifdef USE_TEST
118  const double expected_result = params_test->get_double("expected_result");
119 #endif
120 
121  const string str_gmset_type = params_clover->get_string("gamma_matrix_type");
122  const string str_proj_type = params_proj->get_string("projection_type");
123  const string str_smear_type = params_smear->get_string("smear_type");
124  const string str_source_type = params_source->get_string("source_type");
125 
127 
128  //- print input parameters
129  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
130  vout.general(vl, " readfile = %s\n", readfile.c_str());
131  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
132  vout.general(vl, " gmset_type = %s\n", str_gmset_type.c_str());
133  vout.general(vl, " proj_type = %s\n", str_proj_type.c_str());
134  vout.general(vl, " smear_type = %s\n", str_smear_type.c_str());
135  vout.general(vl, " source_type = %s\n", str_source_type.c_str());
136  vout.general(vl, "\n");
137 
138  //- input parameter check
139  int err = 0;
140  err += ParameterCheck::non_NULL(str_gconf_read);
141  err += ParameterCheck::non_NULL(readfile);
142 
143  if (err) {
144  vout.crucial(vl, "Test_Rational: Input parameters have not been set.\n");
145  abort();
146  }
147 
148 
149  // ##### object setup #####
150  Field_G *U = new Field_G(Nvol, Ndim);
151  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
152  gconf_read->read_file((Field *)U, readfile);
153  // gconf_read->set_cold((Field*)U);
154 
155  Fopr_Clover *fopr_c = new Fopr_Clover(str_gmset_type);
156  fopr_c->set_parameters(*params_clover);
157 
158  Projection *proj = Projection::New(str_proj_type);
159  Smear *smear = Smear::New(str_smear_type, proj);
160  smear->set_parameters(*params_smear);
161 
162  Director_Smear *dr_smear = new Director_Smear((Smear *)smear);
163  dr_smear->set_parameters(*params_dr_smear);
164 
165  Fopr_Rational *fopr_r = new Fopr_Rational((Fopr *)fopr_c);
166  fopr_r->set_parameters(*params_rational);
167 
168  Source *source = Source::New(str_source_type);
169  source->set_parameters(*params_source);
170 
171  //- Smeared-rational
172  Fopr_Smeared fopr_smear_1((Fopr *)fopr_c, dr_smear);
173  Fopr_Smeared fopr_smear_2((Fopr *)fopr_r, dr_smear);
174  fopr_smear_1.set_config(U);
175  fopr_smear_2.set_config(U);
176 
177  //- Rational-smeared
178  Fopr_Rational fopr_r_smear_1((Fopr *)&fopr_smear_1);
179  fopr_r_smear_1.set_parameters(*params_rational);
180  fopr_r_smear_1.set_config(U);
181 
182 
183  // #### Execution main part ####
184  Field xq(NinF, Nvol, 1), b(NinF, Nvol, 1);
185  Field v(NinF, Nvol, 1), w(NinF, Nvol, 1);
186  Field_F b2;
187 
188  vout.general(vl, "Consistency check of smeared-rational and rational-smeared.\n");
189 
190  vout.general(vl, "Smeared-rational:\n");
191 
192  {
193  int ispin = 0;
194  {
195  int icolor = 0;
196  //for(int ispin = 0; ispin < Nd; ++ispin){
197  // for(int icolor = 0; icolor < Nc; ++icolor){
198 
199  int idx = icolor + Nc * ispin;
200  source->set(b2, idx);
201 
202  b = (Field)b2;
203 
204  v = fopr_smear_2.mult(b);
205 
206  fopr_smear_1.set_mode("DdagD");
207  w = fopr_smear_1.mult(v);
208 
209  v = fopr_smear_2.mult(w);
210 
211  v -= b;
212  double vv = v.norm2();
213 
214  vout.general(vl, " standard norm2 = %.8e\n", vv);
215  }
216  }
217 
218  vout.general(vl, "Rational-smeared:\n");
219 
220  double vv;
221  {
222  int ispin = 0;
223  {
224  int icolor = 0;
225  //for(int ispin = 0; ispin < Nd; ++ispin){
226  // for(int icolor = 0; icolor < Nc; ++icolor){
227 
228  int idx = icolor + Nc * ispin;
229  source->set(b2, idx);
230 
231  b = (Field)b2;
232 
233  v = fopr_r_smear_1.mult(b);
234 
235  fopr_smear_1.set_mode("DdagD");
236  w = fopr_smear_1.mult(v);
237 
238  v = fopr_r_smear_1.mult(w);
239 
240  v -= b;
241  vv = v.norm2();
242 
243  vout.general(vl, " standard norm2 = %.8e\n", vv);
244  }
245  }
246 
247  double result = vv;
248 
249 
250  // #### tydy up ####
251  delete params_test;
252  delete params_clover;
253  delete params_proj;
254  delete params_smear;
255  delete params_dr_smear;
256  delete params_rational;
257  delete params_all;
258 
259  delete U;
260  delete gconf_read;
261 
262  delete source;
263  delete fopr_r;
264  delete dr_smear;
265  delete smear;
266  delete proj;
267  delete fopr_c;
268 
269 
270 #ifdef USE_TEST
271  return Test::verify(expected_result, result);
272 
273 #else
274  return EXIT_SUCCESS;
275 #endif
276  }
277 } // namespace Test_Rational