Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_HMC_Quenched_Leapfrog.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 "randomNumbers_Mseries.h"
26 
27 #include "hmc_Leapfrog.h"
28 
29 #ifdef USE_TEST
30 #include "test.h"
31 #endif
32 
33 #ifdef USE_TESTMANAGER_AUTOREGISTER
34 #include "testManager.h"
35 #endif
36 
37 //====================================================================
39 
47 namespace Test_HMC_Quenched {
48  //- test-private parameters
49  namespace {
50  const std::string filename_input = "test_HMC_Quenched_Leapfrog.yaml";
51  const std::string filename_output = "stdout";
52 
53  class Parameters_Test_HMC_Quenched : public Parameters {
54  public:
55  Parameters_Test_HMC_Quenched()
56  {
57  Register_string("gauge_config_status", "NULL");
58 
59  Register_string("gauge_config_type_input", "NULL");
60  Register_string("config_filename_input", "NULL");
61 
62  Register_string("gauge_config_type_output", "NULL");
63  Register_string("config_filename_output", "NULL");
64 
65  Register_int("trajectory_number", 0);
66  Register_int("trajectory_number_step", 0);
67  Register_int("save_config_interval", 0);
68 
69  Register_string("verbose_level", "NULL");
70 
71  Register_double("expected_result", 0.0);
72  }
73  };
74  }
75 
76  //- prototype declaration
77  int leapfrog(void);
78 
79 #ifdef USE_TESTMANAGER_AUTOREGISTER
80  namespace {
81  static const bool is_registered = TestManager::RegisterTest(
82  "HMC.Quenched.Leapfrog",
83  leapfrog
84  );
85  }
86 #endif
87 
88  //====================================================================
89  int leapfrog(void)
90  {
91  // #### parameter setup ####
92  int Nc = CommonParameters::Nc();
93  int Nvol = CommonParameters::Nvol();
94  int Ndim = CommonParameters::Ndim();
95  int NinG = 2 * Nc * Nc;
96 
97  Parameters *params_test = new Parameters_Test_HMC_Quenched;
98  Parameters *params_action_G = ParametersFactory::New("Action.G_Rectangle");
99  Parameters *params_hmc = ParametersFactory::New("HMC.Leapfrog");
100 
101  Parameters *params_all = new Parameters;
102 
103  params_all->Register_Parameters("Test_HMC_Quenched", params_test);
104  params_all->Register_Parameters("Action_G_Rectangle", params_action_G);
105  params_all->Register_Parameters("HMC_Leapfrog", params_hmc);
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_gconf_write = params_test->get_string("gauge_config_type_output");
114  const string writefile = params_test->get_string("config_filename_output");
115  int iconf = params_test->get_int("trajectory_number");
116  int Ntraj = params_test->get_int("trajectory_number_step");
117  const int i_save_conf = params_test->get_int("save_config_interval");
118  const string str_vlevel = params_test->get_string("verbose_level");
119 #ifdef USE_TEST
120  const double expected_result = params_test->get_double("expected_result");
121 #endif
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, " gconf_write = %s\n", str_gconf_write.c_str());
130  vout.general(vl, " writefile = %s\n", writefile.c_str());
131  vout.general(vl, " iconf = %d\n", iconf);
132  vout.general(vl, " Ntraj = %d\n", Ntraj);
133  vout.general(vl, " i_save_conf = %d\n", i_save_conf);
134  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
135  vout.general(vl, "\n");
136 
137  //- input parameter check
138  int err = 0;
139  err += ParameterCheck::non_NULL(str_gconf_read);
140  err += ParameterCheck::non_NULL(readfile);
141  err += ParameterCheck::non_NULL(str_gconf_write);
142  err += ParameterCheck::non_NULL(writefile);
143  err += ParameterCheck::non_zero(iconf);
144  err += ParameterCheck::non_zero(Ntraj);
145  err += ParameterCheck::non_zero(i_save_conf);
146 
147  if (err) {
148  vout.crucial(vl, "Test_HMC_Quenched: Input parameters have not been set.\n");
149  abort();
150  }
151 
152 
153  // #### object setup ####
154  Field_G *U = new Field_G(Nvol, Ndim);
155  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
156 
157  if (str_gconf_status == "Continue") {
158  gconf_read->read_file((Field *)U, readfile);
159  } else if (str_gconf_status == "Start_cold") {
160  gconf_read->set_cold((Field *)U);
161  } else {
162  vout.crucial(vl, "Test_HMC_Quenched: unsupported gconf status \"%s\".\n", str_gconf_status.c_str());
163  abort();
164  }
165 
166 
167  Action_G_Rectangle *action_G = new Action_G_Rectangle;
168  action_G->set_parameters(*params_action_G);
169 
170  RandomNumbers *rand = new RandomNumbers_Mseries(iconf);
171 
172  std::valarray<Action *> actions(1);
173  actions[0] = (Action *)action_G;
174 
175  HMC_Leapfrog hmc(actions, (RandomNumbers *)rand);
176  hmc.set_parameters(*params_hmc);
177 
178 
179  // #### Execution main part ####
180  vout.general(vl, "HMC: Ntraj = %d\n", Ntraj);
181 
182  double result = 0.0;
183  for (int traj = 0; traj < Ntraj; ++traj) {
184  vout.general(vl, "\n");
185  vout.general(vl, "traj = %d\n", traj);
186 
187  result = hmc.update(*U);
188  }
189 
190 
191  // #### tidy up ####
192  delete params_test;
193  delete params_action_G;
194  delete params_hmc;
195  delete params_all;
196 
197  delete U;
198  delete gconf_read;
199 
200  delete rand;
201  delete action_G;
202 
203 
204 #ifdef USE_TEST
205  return Test::verify(expected_result, result);
206 
207 #else
208  return EXIT_SUCCESS;
209 #endif
210  }
211 } // namespace Test_HMC_Quenched