Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_QuarkNumberSusceptibility_Clover_Isochemical.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 
23 #include "fprop_Standard_lex.h"
24 #include "noiseVector_Z2.h"
26 
27 #include "randomNumbers_Mseries.h"
28 
29 #include "director_Smear.h"
30 #include "fopr_Smeared.h"
31 
32 #include "projection.h"
33 #include "smear.h"
34 #include "solver.h"
35 
36 #ifdef USE_TEST
37 #include "test.h"
38 #endif
39 
40 #ifdef USE_TESTMANAGER_AUTOREGISTER
41 #include "testManager.h"
42 #endif
43 
44 //====================================================================
46 
57 namespace Test_QuarkNumSuscept {
58  // test-private parameters
59  namespace {
60  const std::string filename_input = "test_QuarkNumberSusceptibility_Clover_Isochemical.yaml";
61  const std::string filename_output = "stdout";
62 
63  class Parameters_Test_QuarkNumSuscept_Clover_Isochemical : public Parameters {
64  public:
65  Parameters_Test_QuarkNumSuscept_Clover_Isochemical()
66  {
67  Register_string("gauge_config_type_input", "NULL");
68  Register_string("config_filename_input", "NULL");
69 
70  Register_int("seed_for_noise", 0);
71  Register_int("number_of_noises", 0);
72 
73  Register_string("verbose_level", "NULL");
74 
75  Register_double("expected_result", 0.0);
76  }
77  };
78  }
79 
80  // prototype declaration
81  int quark_num_suscept(void);
82 
83 #ifdef USE_TESTMANAGER_AUTOREGISTER
84  namespace {
85  static const bool is_registered = TestManager::RegisterTest(
86  "QuarkNumberSusceptibility.Clover_Isochemical",
87  quark_num_suscept
88  );
89  }
90 #endif
91 
92  //====================================================================
94  {
95  // ##### parameter setup #####
96  int Nc = CommonParameters::Nc();
97  int Nvol = CommonParameters::Nvol();
98  int Ndim = CommonParameters::Ndim();
99  int NinG = 2 * Nc * Nc;
100 
101  Parameters *params_test = new Parameters_Test_QuarkNumSuscept_Clover_Isochemical;
102  Parameters *params_clover = ParametersFactory::New("Fopr.Clover_Isochemical");
103  Parameters *params_proj = ParametersFactory::New("Projection");
104  Parameters *params_smear = ParametersFactory::New("Smear");
105  Parameters *params_dr_smear = ParametersFactory::New("Director_Smear");
106  Parameters *params_solver = ParametersFactory::New("Solver");
107 
108  Parameters *params_all = new Parameters;
109 
110  params_all->Register_Parameters("Test_QuarkNumSuscept_Clover_Isochemical", params_test);
111  params_all->Register_Parameters("Fopr_Clover_Isochemical", params_clover);
112  params_all->Register_Parameters("Projection", params_proj);
113  params_all->Register_Parameters("Smear", params_smear);
114  params_all->Register_Parameters("Director_Smear", params_dr_smear);
115  params_all->Register_Parameters("Solver", params_solver);
116 
117  ParameterManager_YAML params_manager;
118  params_manager.read_params(filename_input, params_all);
119 
120  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
121  const string readfile = params_test->get_string("config_filename_input");
122  int i_seed_noise = params_test->get_int("seed_for_noise");
123  const string str_vlevel = params_test->get_string("verbose_level");
124 #ifdef USE_TEST
125  const double expected_result = params_test->get_double("expected_result");
126 #endif
127 
128  const string str_gmset_type = params_clover->get_string("gamma_matrix_type");
129  const string str_proj_type = params_proj->get_string("projection_type");
130  const string str_smear_type = params_smear->get_string("smear_type");
131  const string str_solver_type = params_solver->get_string("solver_type");
132 
134 
135  //- print input parameters
136  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
137  vout.general(vl, " readfile = %s\n", readfile.c_str());
138  vout.general(vl, " i_seed_noise = %d\n", i_seed_noise);
139  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
140  vout.general(vl, " gmset_type = %s\n", str_gmset_type.c_str());
141  vout.general(vl, " proj_type = %s\n", str_proj_type.c_str());
142  vout.general(vl, " smear_type = %s\n", str_smear_type.c_str());
143  vout.general(vl, " solver_type = %s\n", str_solver_type.c_str());
144 
145  //- input parameter check
146  int err = 0;
147  err += ParameterCheck::non_NULL(str_gconf_read);
148  err += ParameterCheck::non_NULL(readfile);
149  err += ParameterCheck::non_zero(i_seed_noise);
150 
151  if (err) {
152  vout.crucial(vl, "Test_QuarkNumSuscept: Input parameters have not been set.\n");
153  abort();
154  }
155 
156 
157  // ##### object setup #####
158  Field_G *U = new Field_G(Nvol, Ndim);
159  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
160  gconf_read->read_file((Field *)U, readfile);
161  // gconf->set_cold((Field*)U);
162 
163  Fopr_Clover_Isochemical *fopr_c = new Fopr_Clover_Isochemical(str_gmset_type);
164  fopr_c->set_parameters(*params_clover);
165 
166  Projection *proj = Projection::New(str_proj_type);
167  Smear *smear = Smear::New(str_smear_type, proj);
168  smear->set_parameters(*params_smear);
169  Director_Smear *dr_smear = new Director_Smear((Smear *)smear);
170  dr_smear->set_parameters(*params_dr_smear);
171 
172  Fopr_Smeared *fopr_smear = new Fopr_Smeared((Fopr *)fopr_c, dr_smear);
173  fopr_smear->set_config(U);
174 
175 
176  //- Random number is initialized with a parameter specified by iseed
177  RandomNumbers *rand = new RandomNumbers_Mseries(i_seed_noise);
178  NoiseVector *nv = new NoiseVector_Z2(rand);
179 
180  Solver *solver = Solver::New(str_solver_type, fopr_smear);
181  solver->set_parameters(*params_solver);
182  Fprop *fprop_lex = new Fprop_Standard_lex(solver);
183 
184  QuarkNumberSusceptibility_Wilson *quark_suscept
185  = new QuarkNumberSusceptibility_Wilson(fopr_smear, fprop_lex, nv);
186  quark_suscept->set_parameters(*params_test);
187 
188 
189  // #### Execution main part ####
190  double result = 0.0;
191  result = quark_suscept->measure();
192 
193 
194  // ##### tidy up #####
195  delete U;
196  delete gconf_read;
197 
198  delete rand;
199  delete nv;
200  delete quark_suscept;
201 
202  delete fopr_c;
203  delete fprop_lex;
204 
205  delete proj;
206  delete smear;
207  delete dr_smear;
208  delete fopr_smear;
209 
210  delete solver;
211 
212  delete params_test;
213  delete params_clover;
214  delete params_proj;
215  delete params_smear;
216  delete params_dr_smear;
217  delete params_all;
218 
219 
220 #ifdef USE_TEST
221  return Test::verify(expected_result, result);
222 
223 #else
224  return EXIT_SUCCESS;
225 #endif
226  }
227 } // namespace Test_QuarkNumSuscept