Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_HMC_Domainwall_Leapfrog_Nf2.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 "action_G_Plaq.h"
23 #include "action_G_Rectangle.h"
24 
25 #include "fopr_Domainwall.h"
26 #include "force_F_Domainwall.h"
27 
28 #include "randomNumbers_Mseries.h"
29 
30 #include "director_Smear.h"
31 #include "fopr_Smeared.h"
32 #include "force_F_Smeared.h"
33 
34 #include "action_F_Standard_lex.h"
35 #include "fprop_Standard_lex.h"
36 
37 #include "forceSmear.h"
38 #include "projection.h"
39 #include "smear.h"
40 #include "solver.h"
41 
42 #include "hmc_Leapfrog.h"
43 
44 #ifdef USE_TEST
45 #include "test.h"
46 #endif
47 
48 #ifdef USE_TESTMANAGER_AUTOREGISTER
49 #include "testManager.h"
50 #endif
51 
52 //====================================================================
54 
64 namespace Test_HMC_Domainwall {
65  //- test-private parameters
66  namespace {
67  const std::string filename_input = "test_HMC_Domainwall_Leapfrog_Nf2.yaml";
68  const std::string filename_output = "stdout";
69 
70  class Parameters_Test_HMC_Domainwall : public Parameters {
71  public:
72  Parameters_Test_HMC_Domainwall()
73  {
74  Register_string("gauge_config_status", "NULL");
75 
76  Register_string("gauge_config_type_input", "NULL");
77  Register_string("config_filename_input", "NULL");
78 
79  Register_string("gauge_config_type_output", "NULL");
80  Register_string("config_filename_output", "NULL");
81 
82  Register_int("trajectory_number", 0);
83  Register_int("trajectory_number_step", 0);
84  Register_int("save_config_interval", 0);
85 
86  Register_string("verbose_level", "NULL");
87 
88  Register_double("expected_result", 0.0);
89  }
90  };
91  }
92 
93  //- prototype declaration
94  int leapfrog_Nf2(void);
95 
96 #ifdef USE_TESTMANAGER_AUTOREGISTER
97  namespace {
98  static const bool is_registered = TestManager::RegisterTest(
99  "HMC.Domainwall.Leapfrog_Nf2",
100  leapfrog_Nf2
101  );
102  }
103 #endif
104 
105  //====================================================================
106  int leapfrog_Nf2(void)
107  {
108  // ##### parameter setup #####
109  int Nc = CommonParameters::Nc();
110  int Nvol = CommonParameters::Nvol();
111  int Ndim = CommonParameters::Ndim();
112 
113  Parameters *params_test = new Parameters_Test_HMC_Domainwall;
114  Parameters *params_action_G = ParametersFactory::New("Action.G_Rectangle");
115  Parameters *params_proj = ParametersFactory::New("Projection");
116  Parameters *params_smear = ParametersFactory::New("Smear");
117  Parameters *params_dr_smear = ParametersFactory::New("Director_Smear");
118  Parameters *params_dwall = ParametersFactory::New("Fopr.Domainwall");
119  Parameters *params_solver_MD = ParametersFactory::New("Solver");
120  Parameters *params_solver_H = ParametersFactory::New("Solver");
121  Parameters *params_hmc = ParametersFactory::New("HMC.Leapfrog");
122 
123  Parameters *params_all = new Parameters;
124 
125  params_all->Register_Parameters("Test_HMC_Domainwall", params_test);
126  params_all->Register_Parameters("Action_G_Rectangle", params_action_G);
127  params_all->Register_Parameters("Fopr_Domainwall", params_dwall);
128  params_all->Register_Parameters("Projection", params_proj);
129  params_all->Register_Parameters("Smear", params_smear);
130  params_all->Register_Parameters("Director_Smear", params_dr_smear);
131  params_all->Register_Parameters("Solver_MD", params_solver_MD);
132  params_all->Register_Parameters("Solver_H", params_solver_H);
133  params_all->Register_Parameters("HMC_Leapfrog", params_hmc);
134 
135  ParameterManager_YAML params_manager;
136  params_manager.read_params(filename_input, params_all);
137 
138  const string str_gconf_status = params_test->get_string("gauge_config_status");
139  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
140  const string readfile = params_test->get_string("config_filename_input");
141  const string str_gconf_write = params_test->get_string("gauge_config_type_output");
142  const string writefile = params_test->get_string("config_filename_output");
143  int iconf = params_test->get_int("trajectory_number");
144  int Ntraj = params_test->get_int("trajectory_number_step");
145  const int i_save_conf = params_test->get_int("save_config_interval");
146  const string str_vlevel = params_test->get_string("verbose_level");
147 #ifdef USE_TEST
148  const double expected_result = params_test->get_double("expected_result");
149 #endif
150 
151  const string str_gmset_type = params_dwall->get_string("gamma_matrix_type");
152  const string str_proj_type = params_proj->get_string("projection_type");
153  const string str_smear_type = params_smear->get_string("smear_type");
154  const string str_solver_MD_type = params_solver_MD->get_string("solver_type");
155  const string str_solver_H_type = params_solver_H->get_string("solver_type");
156 
158 
159  //- print input parameters
160  vout.general(vl, " gconf_status = %s\n", str_gconf_status.c_str());
161  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
162  vout.general(vl, " readfile = %s\n", readfile.c_str());
163  vout.general(vl, " gconf_write = %s\n", str_gconf_write.c_str());
164  vout.general(vl, " writefile = %s\n", writefile.c_str());
165  vout.general(vl, " iconf = %d\n", iconf);
166  vout.general(vl, " Ntraj = %d\n", Ntraj);
167  vout.general(vl, " i_save_conf = %d\n", i_save_conf);
168  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
169 
170  vout.general(vl, " gmset_type = %s\n", str_gmset_type.c_str());
171  vout.general(vl, " proj_type = %s\n", str_proj_type.c_str());
172  vout.general(vl, " smear_type = %s\n", str_smear_type.c_str());
173  vout.general(vl, " solver_MD_type = %s\n", str_solver_MD_type.c_str());
174  vout.general(vl, " solver_H_type = %s\n", str_solver_H_type.c_str());
175  vout.general(vl, "\n");
176 
177  //- input parameter check
178  int err = 0;
179  err += ParameterCheck::non_NULL(str_gconf_read);
180  err += ParameterCheck::non_NULL(readfile);
181  err += ParameterCheck::non_NULL(str_gconf_write);
182  err += ParameterCheck::non_NULL(writefile);
183  err += ParameterCheck::non_zero(iconf);
184  err += ParameterCheck::non_zero(Ntraj);
185  err += ParameterCheck::non_zero(i_save_conf);
186 
187  if (err) {
188  vout.crucial(vl, "Test_HMC_Domainwall: Input parameters have not been set.\n");
189  abort();
190  }
191 
192 
193  // ##### object setup #####
194  Field_G *U = new Field_G(Nvol, Ndim);
195  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
196 
197  if (str_gconf_status == "Continue") {
198  gconf_read->read_file((Field *)U, readfile);
199  } else if (str_gconf_status == "Start_cold") {
200  gconf_read->set_cold((Field *)U);
201  } else {
202  vout.crucial(vl, "Test_HMC_Domainwall: unsupported gconf status \"%s\".\n", str_gconf_status.c_str());
203  abort();
204  }
205 
206 
207  Action_G_Rectangle *action_G = new Action_G_Rectangle;
208  action_G->set_parameters(*params_action_G);
209 
210 
211  Projection *proj = Projection::New(str_proj_type);
212  Smear *smear = Smear::New(str_smear_type, proj);
213  smear->set_parameters(*params_smear);
214 
215  ForceSmear *force_smear = ForceSmear::New(str_smear_type, proj);
216  force_smear->set_parameters(*params_smear);
217 
218  Director_Smear *dr_smear = new Director_Smear((Smear *)smear);
219  dr_smear->set_parameters(*params_dr_smear);
220 
221 
222  Fopr_Wilson *fopr_w = new Fopr_Wilson;
223  Fopr_Domainwall *fopr_dw = new Fopr_Domainwall(fopr_w);
224  Force_F_Domainwall *force_fopr_dw = new Force_F_Domainwall();
225  fopr_dw->set_parameters(*params_dwall);
226  force_fopr_dw->set_parameters(*params_dwall);
227 
228  Fopr_Smeared *fopr_smear = new Fopr_Smeared((Fopr *)fopr_dw, dr_smear);
229  Force_F_Smeared *force_fopr_smear = new Force_F_Smeared(
230  (Force *)force_fopr_dw, (ForceSmear *)force_smear, dr_smear);
231 
232 
233  Solver *solver_MD = Solver::New(str_solver_MD_type, fopr_smear);
234  solver_MD->set_parameters(*params_solver_MD);
235  Fprop *fprop_MD = new Fprop_Standard_lex(solver_MD);
236 
237  Solver *solver_H = Solver::New(str_solver_H_type, fopr_smear);
238  solver_H->set_parameters(*params_solver_H);
239  Fprop *fprop_H = new Fprop_Standard_lex(solver_H);
240 
241  Action_F_Standard_lex *action_F
242  = new Action_F_Standard_lex((Fopr *)fopr_smear, (Force *)force_fopr_smear,
243  fprop_MD, fprop_H);
244 
245 
246  valarray<Action *> actions(2);
247  actions[0] = (Action *)action_G;
248  actions[1] = (Action *)action_F;
249 
250  valarray<Director *> directors(1);
251  directors[0] = (Director *)dr_smear;
252 
253  RandomNumbers *rand = new RandomNumbers_Mseries(iconf);
254 
255  HMC_Leapfrog hmc(actions, directors, rand);
256  hmc.set_parameters(*params_hmc);
257 
258 
259  // #### Execution main part ####
260  vout.general(vl, "HMC: Ntraj = %d\n", Ntraj);
261 
262  double result = 0.0;
263  for (int traj = 0; traj < Ntraj; ++traj) {
264  vout.general(vl, "\n");
265  vout.general(vl, "traj = %d\n", traj);
266 
267  result = hmc.update(*U);
268  }
269 
270 
271  // ##### tidy up #####
272  delete params_test;
273  delete params_action_G;
274  delete params_dwall;
275  delete params_proj;
276  delete params_smear;
277  delete params_dr_smear;
278  delete params_solver_MD;
279  delete params_solver_H;
280  delete params_hmc;
281  delete params_all;
282 
283  delete U;
284  delete gconf_read;
285 
286  delete rand;
287 
288  delete action_G;
289  delete action_F;
290 
291  delete force_fopr_dw;
292  delete fopr_dw;
293  delete fopr_w;
294 
295  delete proj;
296  delete smear;
297  delete force_smear;
298  delete dr_smear;
299  delete fopr_smear;
300  delete force_fopr_smear;
301 
302  delete solver_MD;
303  delete fprop_MD;
304  delete solver_H;
305  delete fprop_H;
306 
307 
308 #ifdef USE_TEST
309  return Test::verify(expected_result, result);
310 
311 #else
312  return EXIT_SUCCESS;
313 #endif
314  }
315 } // namespace Test_HMC_Domainwall