Bridge++  Ver. 1.2.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 "test.h"
15 
16 #include "gaugeConfig.h"
17 
19 #include "fprop_Standard_lex.h"
20 #include "noiseVector_Z2.h"
22 
23 #include "randomNumbers_Mseries.h"
24 
25 #include "director_Smear.h"
26 #include "fopr_Smeared.h"
27 
28 #include "projection.h"
29 #include "smear.h"
30 #include "solver.h"
31 
32 //====================================================================
34 
45 namespace Test_QuarkNumSuscept {
46  const std::string test_name = "QuarkNumberSusceptibility.Clover_Isochemical";
47 
48  // test-private parameters
49  namespace {
50  const std::string filename_input = "test_QuarkNumberSusceptibility_Clover_Isochemical.yaml";
51  const std::string filename_output = "stdout";
52 
53  class Parameters_Test_QuarkNumSuscept_Clover_Isochemical : public Parameters {
54  public:
55  Parameters_Test_QuarkNumSuscept_Clover_Isochemical()
56  {
57  Register_string("gauge_config_status", "NULL");
58  Register_string("gauge_config_type_input", "NULL");
59  Register_string("config_filename_input", "NULL");
60 
61  Register_int("seed_for_noise", 0);
62  Register_int("number_of_noises", 0);
63 
64  Register_string("verbose_level", "NULL");
65 
66  Register_double("expected_result", 0.0);
67  }
68  };
69  }
70 
71  // prototype declaration
72  int quark_num_suscept(void);
73 
74 #ifdef USE_TESTMANAGER_AUTOREGISTER
75  namespace {
76 #if defined(USE_GROUP_SU2)
77  // Nc=2 is not available.
78 #else
79  static const bool is_registered = TestManager::RegisterTest(
80  test_name,
82  );
83 #endif
84  }
85 #endif
86 
87  //====================================================================
89  {
90  // ##### parameter setup #####
91  int Nc = CommonParameters::Nc();
92  int Nvol = CommonParameters::Nvol();
93  int Ndim = CommonParameters::Ndim();
94 
95  Parameters *params_test = new Parameters_Test_QuarkNumSuscept_Clover_Isochemical;
96  Parameters *params_clover = ParametersFactory::New("Fopr.Clover_Isochemical");
97  Parameters *params_proj = ParametersFactory::New("Projection");
98  Parameters *params_smear = ParametersFactory::New("Smear");
99  Parameters *params_dr_smear = ParametersFactory::New("Director_Smear");
100  Parameters *params_solver = ParametersFactory::New("Solver");
101  Parameters *params_all = new Parameters;
102 
103  params_all->Register_Parameters("Test_QuarkNumSuscept_Clover_Isochemical", params_test);
104  params_all->Register_Parameters("Fopr_Clover_Isochemical", params_clover);
105  params_all->Register_Parameters("Projection", params_proj);
106  params_all->Register_Parameters("Smear", params_smear);
107  params_all->Register_Parameters("Director_Smear", params_dr_smear);
108  params_all->Register_Parameters("Solver", params_solver);
109 
110  ParameterManager_YAML params_manager;
111  params_manager.read_params(filename_input, params_all);
112 
113  const string str_gconf_status = params_test->get_string("gauge_config_status");
114  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
115  const string readfile = params_test->get_string("config_filename_input");
116  int i_seed_noise = params_test->get_int("seed_for_noise");
117  const string str_vlevel = params_test->get_string("verbose_level");
118 
119  const bool do_check = params_test->is_set("expected_result");
120  const double expected_result = do_check ? params_test->get_double("expected_result") : 0.0;
121 
122  const string str_gmset_type = params_clover->get_string("gamma_matrix_type");
123  const string str_proj_type = params_proj->get_string("projection_type");
124  const string str_smear_type = params_smear->get_string("smear_type");
125  const string str_solver_type = params_solver->get_string("solver_type");
126 
128 
129  //- print input parameters
130  vout.general(vl, " gconf_status = %s\n", str_gconf_status.c_str());
131  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
132  vout.general(vl, " readfile = %s\n", readfile.c_str());
133  vout.general(vl, " i_seed_noise = %d\n", i_seed_noise);
134  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
135  vout.general(vl, " gmset_type = %s\n", str_gmset_type.c_str());
136  vout.general(vl, " proj_type = %s\n", str_proj_type.c_str());
137  vout.general(vl, " smear_type = %s\n", str_smear_type.c_str());
138  vout.general(vl, " solver_type = %s\n", str_solver_type.c_str());
139 
140  //- input parameter check
141  int err = 0;
142  err += ParameterCheck::non_NULL(str_gconf_status);
143  err += ParameterCheck::non_zero(i_seed_noise);
144 
145  if (err) {
146  vout.crucial(vl, "%s: Input parameters have not been set.\n", test_name.c_str());
147  abort();
148  }
149 
150 
151  // ##### Set up a gauge configuration ####
152  Field_G *U = new Field_G(Nvol, Ndim);
153  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
154 
155  if (str_gconf_status == "Continue") {
156  gconf_read->read_file((Field *)U, readfile);
157  } else if (str_gconf_status == "Cold_start") {
158  U->set_unit();
159  } else if (str_gconf_status == "Hot_start") {
160  RandomNumbers_Mseries rand(1234567);
161  U->set_random(&rand);
162  } else {
163  vout.crucial(vl, "%s: unsupported gconf status \"%s\".\n", test_name.c_str(), str_gconf_status.c_str());
164  abort();
165  }
166 
167 
168  // ##### object setup #####
169  Fopr_Clover_Isochemical *fopr_c = new Fopr_Clover_Isochemical(str_gmset_type);
170  fopr_c->set_parameters(*params_clover);
171 
172  Projection *proj = Projection::New(str_proj_type);
173  Smear *smear = Smear::New(str_smear_type, proj);
174  smear->set_parameters(*params_smear);
175  Director_Smear *dr_smear = new Director_Smear((Smear *)smear);
176  dr_smear->set_parameters(*params_dr_smear);
177 
178  Fopr_Smeared *fopr_smear = new Fopr_Smeared((Fopr *)fopr_c, dr_smear);
179  fopr_smear->set_config(U);
180 
181 
182  //- Random number is initialized with a parameter specified by iseed
183  RandomNumbers *rand = new RandomNumbers_Mseries(i_seed_noise);
184  NoiseVector *nv = new NoiseVector_Z2(rand);
185 
186  Solver *solver = Solver::New(str_solver_type, fopr_smear);
187  solver->set_parameters(*params_solver);
188  Fprop *fprop_lex = new Fprop_Standard_lex(solver);
189 
190  QuarkNumberSusceptibility_Wilson *quark_suscept
191  = new QuarkNumberSusceptibility_Wilson(fopr_smear, fprop_lex, nv);
192  quark_suscept->set_parameters(*params_test);
193 
194  Timer *timer = new Timer(test_name);
195 
196 
197  // #### Execution main part ####
198  timer->start();
199 
200  double result = 0.0;
201  result = quark_suscept->measure();
202 
203  timer->report();
204 
205 
206  // ##### tidy up #####
207  delete params_test;
208  delete params_clover;
209  delete params_proj;
210  delete params_smear;
211  delete params_dr_smear;
212  delete params_solver;
213  delete params_all;
214 
215  delete U;
216  delete gconf_read;
217 
218  delete fopr_c;
219 
220  delete proj;
221  delete smear;
222  delete dr_smear;
223  delete fopr_smear;
224 
225  delete rand;
226  delete nv;
227  delete solver;
228  delete fprop_lex;
229  delete quark_suscept;
230 
231  delete timer;
232 
233 
234  if (do_check) {
235  return Test::verify(expected_result, result);
236  } else {
237  vout.detailed(vl, "check skipped: expected_result not set.\n\n");
238  return EXIT_SKIP;
239  }
240  }
241 } // namespace Test_QuarkNumSuscept
#define EXIT_SKIP
Definition: test.h:17
Random number generator base on M-series.
BridgeIO vout
Definition: bridgeIO.cpp:207
void read_params(const std::string &params_file, Parameters *params)
read parameters from file.
void detailed(const char *format,...)
Definition: bridgeIO.cpp:50
void general(const char *format,...)
Definition: bridgeIO.cpp:38
Definition: fprop.h:20
Container of Field-type object.
Definition: field.h:37
virtual void set_parameters(const Parameters &)=0
int get_int(const string &key) const
Definition: parameters.cpp:40
Class for parameters.
Definition: parameters.h:40
static Parameters * New(const std::string &realm)
void set_random(RandomNumbers *rand)
Definition: field_G_imp.cpp:62
virtual void set_parameters(const Parameters &params)=0
smeared fermion operator.
Definition: fopr_Smeared.h:40
void set_unit()
Definition: field_G_imp.cpp:39
static bool RegisterTest(const std::string &key, const Test_function func)
Definition: testManager.h:79
SU(N) gauge field.
Definition: field_G.h:36
bool is_set(const string &) const
Definition: parameters.cpp:366
double get_double(const string &key) const
Definition: parameters.cpp:25
Quark number susceptibility for the Wilson-type fermion.
void set_parameters(const Parameters &params)
double measure()
measure tr1 = Tr[D1*Sq], tr2 = Tr[D2*Sq], tr3 = Tr[D1*Sq*D1*Sq].
int non_NULL(const std::string v)
Definition: checker.cpp:61
void start()
Definition: timer.cpp:44
Get quark propagator for Fopr with lexical site index.
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
void Register_Parameters(const string &, Parameters *const)
Definition: parameters.cpp:359
base class for projection operator into gauge group.
Definition: projection.h:33
Manager of smeared configurations.
Base class for noise vector generator.
Definition: noiseVector.h:32
Base class for linear solver class family.
Definition: solver.h:37
Base class of random number generators.
Definition: randomNumbers.h:40
Bridge::VerboseLevel vl
Definition: checker.cpp:18
VerboseLevel
Definition: bridgeIO.h:25
void set_parameters(const Parameters &params)
set paramters, must be called before set_config
int non_zero(const double v)
Definition: checker.cpp:31
base class for smearing of link variables.
Definition: smear.h:36
Parameter manager with YAML parser.
GaugeConfig class for file I/O of gauge configuration.
Definition: gaugeConfig.h:56
Definition: timer.h:31
Base class of fermion operator family.
Definition: fopr.h:39
int verify(const double expected, const double result)
Definition: test.cpp:27
void read_file(Field *u, const string &filename)
Definition: gaugeConfig.cpp:85
Z2 Noise vector for trance calculation.
string get_string(const string &key) const
Definition: parameters.cpp:85
void report(const Bridge::VerboseLevel vl=Bridge::GENERAL)
Definition: timer.cpp:128
void set_config(Field *U)
set pointer to original thin link variable
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:191