Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_HMC_TMWilson_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_TMWilson.h"
26 #include "force_F_TMWilson_Nf2.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 
66 namespace Test_HMC_TMWilson {
67  //- test-private parameters
68  namespace {
69  const std::string filename_input = "test_HMC_TMWilson_Leapfrog_Nf2.yaml";
70  const std::string filename_output = "stdout";
71 
72  class Parameters_Test_HMC_TMWilson : public Parameters {
73  public:
74  Parameters_Test_HMC_TMWilson()
75  {
76  Register_string("gauge_config_status", "NULL");
77 
78  Register_string("gauge_config_type_input", "NULL");
79  Register_string("config_filename_input", "NULL");
80 
81  Register_string("gauge_config_type_output", "NULL");
82  Register_string("config_filename_output", "NULL");
83 
84  Register_int("trajectory_number", 0);
85  Register_int("trajectory_number_step", 0);
86  Register_int("save_config_interval", 0);
87 
88  Register_string("verbose_level", "NULL");
89 
90  Register_double("expected_result", 0.0);
91  }
92  };
93  }
94 
95  //- prototype declaration
96  int leapfrog_Nf2(void);
97 
98 #ifdef USE_TESTMANAGER_AUTOREGISTER
99  namespace {
100  static const bool is_registered = TestManager::RegisterTest(
101  "HMC.TMWilson.Leapfrog_Nf2",
102  leapfrog_Nf2
103  );
104  }
105 #endif
106 
107  //====================================================================
108  int leapfrog_Nf2(void)
109  {
110  // ##### parameter setup #####
111  int Nc = CommonParameters::Nc();
112  int Nd = CommonParameters::Nd();
113  int Nvol = CommonParameters::Nvol();
114  int Ndim = CommonParameters::Ndim();
115  int NinG = 2 * Nc * Nc;
116 
117  Parameters *params_test = new Parameters_Test_HMC_TMWilson;
118  Parameters *params_action_G = ParametersFactory::New("Action.G_Rectangle");
119  Parameters *params_tmwilson = ParametersFactory::New("Fopr.TMWilson");
120  Parameters *params_solver_MD = ParametersFactory::New("Solver");
121  Parameters *params_solver_H = ParametersFactory::New("Solver");
122  Parameters *params_hmc = ParametersFactory::New("HMC.Leapfrog");
123 
124  Parameters *params_all = new Parameters;
125 
126  params_all->Register_Parameters("Test_HMC_TMWilson", params_test);
127  params_all->Register_Parameters("Action_G_Rectangle", params_action_G);
128  params_all->Register_Parameters("Fopr_TMWilson", params_tmwilson);
129  params_all->Register_Parameters("Solver_MD", params_solver_MD);
130  params_all->Register_Parameters("Solver_H", params_solver_H);
131  params_all->Register_Parameters("HMC_Leapfrog", params_hmc);
132 
133  ParameterManager_YAML params_manager;
134  params_manager.read_params(filename_input, params_all);
135 
136  const string str_gconf_status = params_test->get_string("gauge_config_status");
137  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
138  const string readfile = params_test->get_string("config_filename_input");
139  const string str_gconf_write = params_test->get_string("gauge_config_type_output");
140  const string writefile = params_test->get_string("config_filename_output");
141  int iconf = params_test->get_int("trajectory_number");
142  int Ntraj = params_test->get_int("trajectory_number_step");
143  const int i_save_conf = params_test->get_int("save_config_interval");
144  const string str_vlevel = params_test->get_string("verbose_level");
145 #ifdef USE_TEST
146  const double expected_result = params_test->get_double("expected_result");
147 #endif
148 
149  const string str_gmset_type = params_tmwilson->get_string("gamma_matrix_type");
150  const string str_solver_MD_type = params_solver_MD->get_string("solver_type");
151  const string str_solver_H_type = params_solver_H->get_string("solver_type");
152 
154 
155  //- print input parameters
156  vout.general(vl, " gconf_status = %s\n", str_gconf_status.c_str());
157  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
158  vout.general(vl, " readfile = %s\n", readfile.c_str());
159  vout.general(vl, " gconf_write = %s\n", str_gconf_write.c_str());
160  vout.general(vl, " writefile = %s\n", writefile.c_str());
161  vout.general(vl, " iconf = %d\n", iconf);
162  vout.general(vl, " Ntraj = %d\n", Ntraj);
163  vout.general(vl, " i_save_conf = %d\n", i_save_conf);
164  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
165 
166  vout.general(vl, " gmset_type = %s\n", str_gmset_type.c_str());
167  vout.general(vl, " solver_MD_type = %s\n", str_solver_MD_type.c_str());
168  vout.general(vl, " solver_H_type = %s\n", str_solver_H_type.c_str());
169  vout.general(vl, "\n");
170 
171  //- input parameter check
172  int err = 0;
173  err += ParameterCheck::non_NULL(str_gconf_read);
174  err += ParameterCheck::non_NULL(readfile);
175  err += ParameterCheck::non_NULL(str_gconf_write);
176  err += ParameterCheck::non_NULL(writefile);
177  err += ParameterCheck::non_zero(iconf);
178  err += ParameterCheck::non_zero(Ntraj);
179  err += ParameterCheck::non_zero(i_save_conf);
180 
181  if (err) {
182  vout.crucial(vl, "Test_HMC_TMWilson: Input parameters have not been set.\n");
183  abort();
184  }
185 
186 
187  // ##### object setup #####
188  Field_G *U = new Field_G(Nvol, Ndim);
189  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
190 
191  if (str_gconf_status == "Continue") {
192  gconf_read->read_file((Field *)U, readfile);
193  } else if (str_gconf_status == "Start_cold") {
194  gconf_read->set_cold((Field *)U);
195  } else {
196  vout.crucial(vl, "Test_HMC_TMWilson: unsupported gconf status \"%s\".\n", str_gconf_status.c_str());
197  abort();
198  }
199 
200 
201  Action_G_Rectangle *action_G = new Action_G_Rectangle;
202  action_G->set_parameters(*params_action_G);
203 
204 
205  Fopr_TMWilson *fopr_tm = new Fopr_TMWilson(str_gmset_type);
206  Force_F_TMWilson_Nf2 *force_fopr_tm = new Force_F_TMWilson_Nf2(str_gmset_type);
207  fopr_tm->set_parameters(*params_tmwilson);
208  force_fopr_tm->set_parameters(*params_tmwilson);
209 
210 
211  Solver *solver_MD = Solver::New(str_solver_MD_type, fopr_tm);
212  solver_MD->set_parameters(*params_solver_MD);
213  Fprop *fprop_MD = new Fprop_Standard_lex(solver_MD);
214 
215  Solver *solver_H = Solver::New(str_solver_H_type, fopr_tm);
216  solver_H->set_parameters(*params_solver_H);
217  Fprop *fprop_H = new Fprop_Standard_lex(solver_H);
218 
219  Action_F_Standard_lex *action_F
220  = new Action_F_Standard_lex((Fopr *)fopr_tm, (Force *)force_fopr_tm,
221  fprop_MD, fprop_H);
222 
223 
224  valarray<Action *> actions(2);
225  actions[0] = (Action *)action_G;
226  actions[1] = (Action *)action_F;
227 
228  RandomNumbers *rand = new RandomNumbers_Mseries(iconf);
229 
230  HMC_Leapfrog hmc(actions, rand);
231  hmc.set_parameters(*params_hmc);
232 
233 
234  // #### Execution main part ####
235  vout.general(vl, "HMC: Ntraj = %d\n", Ntraj);
236 
237  double result = 0.0;
238  for (int traj = 0; traj < Ntraj; ++traj) {
239  vout.general(vl, "\n");
240  vout.general(vl, "traj = %d\n", traj);
241 
242  result = hmc.update(*U);
243  }
244 
245 
246  // ##### tidy up #####
247  delete params_test;
248  delete params_action_G;
249  delete params_tmwilson;
250  delete params_solver_MD;
251  delete params_solver_H;
252  delete params_hmc;
253  delete params_all;
254 
255  delete U;
256  delete gconf_read;
257 
258  delete rand;
259 
260  delete action_G;
261  delete action_F;
262 
263  delete fopr_tm;
264  delete force_fopr_tm;
265 
266  delete solver_MD;
267  delete fprop_MD;
268  delete solver_H;
269  delete fprop_H;
270 
271 
272 #ifdef USE_TEST
273  return Test::verify(expected_result, result);
274 
275 #else
276  return EXIT_SUCCESS;
277 #endif
278  }
279 } // namespace Test_HMC_TMWilson