Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_WilsonLoop.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 "wilsonLoop.h"
23 
25 #include "smear_APE_spatial.h"
26 
27 #ifdef USE_TEST
28 #include "test.h"
29 #endif
30 
31 #ifdef USE_TESTMANAGER_AUTOREGISTER
32 #include "testManager.h"
33 #endif
34 
35 //====================================================================
37 
44 namespace Test_WilsonLoop {
45  //- test-private parameters
46  namespace {
47  const std::string filename_input = "test_WilsonLoop.yaml";
48  const std::string filename_output = "stdout";
49 
50  class Parameters_Test_WilsonLoop : public Parameters {
51  public:
52  Parameters_Test_WilsonLoop()
53  {
54  Register_string("gauge_config_type_input", "NULL");
55  Register_string("config_filename_input", "NULL");
56 
57  Register_int("number_of_max_smearing", 0);
58  Register_int("number_of_smearing_step", 0);
59 
60  Register_string("verbose_level", "NULL");
61 
62  Register_double("expected_result", 0.0);
63  }
64  };
65  }
66 
67  //- prototype declaration
68  int wilsonloop(void);
69 
70 #ifdef USE_TESTMANAGER_AUTOREGISTER
71  namespace {
72  static const bool is_registered = TestManager::RegisterTest(
73  "WilsonLoop",
74  wilsonloop
75  );
76  }
77 #endif
78 
79  //====================================================================
80  int wilsonloop(void)
81  {
82  // #### parameter setup ####
83  int Nvol = CommonParameters::Nvol();
84  int Ndim = CommonParameters::Ndim();
85 
86  Parameters *params_test = new Parameters_Test_WilsonLoop;
87  Parameters *params_wilsonloop = ParametersFactory::New("WilsonLoop");
88  Parameters *params_smear = ParametersFactory::New("Smear.APE_Spatial");
89 
90  Parameters *params_all = new Parameters;
91 
92  params_all->Register_Parameters("Test_WilsonLoop", params_test);
93  params_all->Register_Parameters("WilsonLoop", params_wilsonloop);
94  params_all->Register_Parameters("Smear_APE_spatial", params_smear);
95 
96  ParameterManager_YAML params_manager;
97  params_manager.read_params(filename_input, params_all);
98 
99  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
100  const string readfile = params_test->get_string("config_filename_input");
101  const int Nsmear = params_test->get_int("number_of_max_smearing");
102  const int Nmeas = params_test->get_int("number_of_smearing_step");
103  const string str_vlevel = params_test->get_string("verbose_level");
104 #ifdef USE_TEST
105  const double expected_result = params_test->get_double("expected_result");
106 #endif
107 
109 
110  //- print input parameters
111  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
112  vout.general(vl, " readfile = %s\n", readfile.c_str());
113  vout.general(vl, " Nsmear = %d\n", Nsmear);
114  vout.general(vl, " Nmeas = %d\n", Nmeas);
115  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
116  vout.general(vl, "\n");
117 
118  //- input parameter check
119  int err = 0;
120  err += ParameterCheck::non_NULL(str_gconf_read);
121  err += ParameterCheck::non_NULL(readfile);
122 
123  if (err) {
124  vout.crucial(vl, "Test_WilsonLoop: Input parameters have not been set.\n");
125  abort();
126  }
127 
128 
129  // #### object setup #####
130  Field_G *U = new Field_G(Nvol, Ndim);
131  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
132  gconf_read->read_file((Field *)U, readfile);
133  // gconf_read->set_cold((Field*)U);
134 
136  wilsonloop.set_parameters(*params_wilsonloop);
137 
138  Projection *proj = new Projection_Maximum_SU_N();
139  Smear_APE_spatial *smear = new Smear_APE_spatial(proj);
140  smear->set_parameters(*params_smear);
141 
142 
143  // #### Execution main part ####
144  Field_G Uorg(Nvol, Ndim), Usmear(Nvol, Ndim);
145  Uorg = *U;
146  Usmear = *U;
147 
148  double result = 0.0;
149  for (int i_smear = 0; i_smear <= Nsmear; ++i_smear) {
150  vout.general(vl, "i_smear = %d\n", i_smear);
151 
152  if (i_smear > 0) smear->smear(Usmear, Uorg);
153 
154  if ((i_smear % Nmeas) == 0) {
155  result = wilsonloop.measure(Usmear);
156  }
157 
158  Uorg = Usmear;
159  }
160 
161 
162  // #### tydy up ####
163  delete params_test;
164  delete params_wilsonloop;
165  delete params_smear;
166  delete params_all;
167 
168  delete U;
169  delete gconf_read;
170  delete proj;
171  delete smear;
172 
173 
174 #ifdef USE_TEST
175  return Test::verify(expected_result, result);
176 
177 #else
178  return EXIT_SUCCESS;
179 #endif
180  }
181 } // namespace Test_WilsonLoop