Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_Spectrum_Wilson_2ptFunction_eo.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 #include "staples.h"
22 
23 #include "randomNumbers_Mseries.h"
24 
25 #include "fopr_Wilson.h"
26 #include "fopr_Wilson_eo.h"
27 #include "fprop_Standard_eo.h"
28 
29 #include "gaugeFixing.h"
30 #include "gammaMatrixSet.h"
31 #include "solver.h"
32 #include "source.h"
33 
34 #include "corr2pt_4spinor.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 
55 namespace Test_Spectrum_Wilson {
56  //- test-private parameters
57  namespace {
58  const std::string filename_input = "test_Spectrum_Wilson_Hadron2ptFunction.yaml";
59  const std::string filename_output = "stdout";
60 
61  class Parameters_Test_Spectrum_Wilson : public Parameters {
62  public:
63  Parameters_Test_Spectrum_Wilson()
64  {
65  Register_string("gauge_config_type_input", "NULL");
66  Register_string("config_filename_input", "NULL");
67 
68  Register_string("verbose_level", "NULL");
69 
70  Register_double("expected_result", 0.0);
71  }
72  };
73  }
74 
75  //- prototype declaration
76  int hadron_2ptFunction_eo(void);
77 
78 #ifdef USE_TESTMANAGER_AUTOREGISTER
79  namespace {
80  static const bool is_registered = TestManager::RegisterTest(
81  "Spectrum.Wilson.Hadron2ptFunction_eo",
83  );
84  }
85 #endif
86 
87  //====================================================================
89  {
90  // #### parameter setup ####
91  int Nc = CommonParameters::Nc();
92  int Nd = CommonParameters::Nd();
93  int Nvol = CommonParameters::Nvol();
94  int Ndim = CommonParameters::Ndim();
95 
96  Parameters *params_test = new Parameters_Test_Spectrum_Wilson;
97  Parameters *params_gfix = ParametersFactory::New("GaugeFixing");
98  Parameters *params_wilson = ParametersFactory::New("Fopr.Wilson");
99  Parameters *params_solver = ParametersFactory::New("Solver");
100  Parameters *params_source = ParametersFactory::New("Source");
101 
102  Parameters *params_all = new Parameters;
103 
104  params_all->Register_Parameters("Test_Spectrum_Wilson", params_test);
105  params_all->Register_Parameters("GaugeFixing", params_gfix);
106  params_all->Register_Parameters("Fopr_Wilson", params_wilson);
107  params_all->Register_Parameters("Solver", params_solver);
108  params_all->Register_Parameters("Source", params_source);
109 
110  ParameterManager_YAML params_manager;
111  params_manager.read_params(filename_input, params_all);
112 
113  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
114  const string readfile = params_test->get_string("config_filename_input");
115  const string str_vlevel = params_test->get_string("verbose_level");
116 #ifdef USE_TEST
117  const double expected_result = params_test->get_double("expected_result");
118 #endif
119 
120  const string str_gfix_type = params_gfix->get_string("gauge_fixing_type");
121  const string str_gmset_type = params_wilson->get_string("gamma_matrix_type");
122  const string str_solver_type = params_solver->get_string("solver_type");
123  const string str_source_type = params_source->get_string("source_type");
124 
126 
127  //- print input parameters
128  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
129  vout.general(vl, " readfile = %s\n", readfile.c_str());
130  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
131  vout.general(vl, " gfix_type = %s\n", str_gfix_type.c_str());
132  vout.general(vl, " gmset_type = %s\n", str_gmset_type.c_str());
133  vout.general(vl, " solver_type = %s\n", str_solver_type.c_str());
134  vout.general(vl, " source_type = %s\n", str_source_type.c_str());
135 
136  //- input parameter check
137  int err = 0;
138  err += ParameterCheck::non_NULL(str_gconf_read);
139  err += ParameterCheck::non_NULL(readfile);
140 
141  if (err) {
142  vout.crucial(vl, "Test_Spectrum_Wilson: Input parameters have not been set.\n");
143  abort();
144  }
145 
146 
147  // #### Set up a gauge configuration ####
148  Field_G *U = new Field_G(Nvol, Ndim);
149  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
150  gconf_read->read_file((Field *)U, readfile);
151  // gconf_read->set_cold((Field*)U);
152 
153 
154  // #### Gauge fixing ####
155  Staples *staple = new Staples;
156  Field_G *Ufix = new Field_G(Nvol, Ndim);
157 
158  int ndelay = 1000;
159  RandomNumbers *rand = new RandomNumbers_Mseries(ndelay);
160 
161  GaugeFixing *gfix = GaugeFixing::New(str_gfix_type, rand);
162  gfix->set_parameters(*params_gfix);
163 
164  double plaq = staple->plaquette(*U);
165  vout.general(vl, "plaq(original) = %18.14f\n", plaq);
166 
167  gfix->fix(*Ufix, *U);
168 
169  double plaq2 = staple->plaquette(*Ufix);
170  vout.general(vl, "plaq(fixed) = %18.14f\n", plaq2);
171  vout.general(vl, "plaq(diff) = %18.10e\n", plaq - plaq2);
172 
173 
174  // #### object setup #####
175  GammaMatrixSet *gmset = GammaMatrixSet::New(str_gmset_type);
176 
177  // NB. Fopr_Wilson is used only for check of diff2 below.
178  Fopr_Wilson *fopr_w = new Fopr_Wilson(str_gmset_type);
179  fopr_w->set_parameters(*params_wilson);
180  fopr_w->set_config(Ufix);
181 
182  Fopr_Wilson_eo *fopr_w_eo = new Fopr_Wilson_eo(str_gmset_type);
183  fopr_w_eo->set_parameters(*params_wilson);
184  fopr_w_eo->set_config(Ufix);
185 
186  Solver *solver = Solver::New(str_solver_type, fopr_w_eo);
187  solver->set_parameters(*params_solver);
188 
189  Fprop *fprop_eo = new Fprop_Standard_eo(solver);
190 
191  Source *source = Source::New(str_source_type);
192  source->set_parameters(*params_source);
193 
194 
195  // #### Execution main part ####
196  std::valarray<Field_F> sq(Nc * Nd);
197  for (int i = 0; i < Nc * Nd; ++i) {
198  sq[i] = 0.0;
199  }
200 
201  Field_F b;
202  b = 0.0;
203 
204  int Nconv;
205  double diff;
206 
207  vout.general(vl, "\n");
208  vout.general(vl, "Solving quark propagator:\n");
209  vout.general(vl, " color spin Nconv diff diff2\n");
210 
211  for (int ispin = 0; ispin < Nd; ++ispin) {
212  for (int icolor = 0; icolor < Nc; ++icolor) {
213  int idx = icolor + Nc * ispin;
214  source->set(b, idx);
215 
216  fprop_eo->invert_D(sq[idx], b, Nconv, diff);
217 
218  Field_F y(b);
219  fopr_w->set_mode("D");
220  y -= (Field_F)fopr_w->mult(sq[idx]);
221  double diff2 = y.norm();
222 
223  vout.general(vl, " %2d %2d %6d %12.4e %12.4e\n",
224  icolor, ispin, Nconv, diff, diff2);
225  }
226  }
227 
228  vout.general(vl, "\n");
229  vout.general(vl, "2-point correlator:\n");
230 
231  Corr2pt_4spinor corr(gmset);
232  double result = corr.meson_all(sq, sq);
233 
234 
235  // #### tidy up ####
236  delete gconf_read;
237  delete U;
238  delete Ufix;
239 
240  delete rand;
241  delete staple;
242 
243  delete fopr_w;
244  delete fopr_w_eo;
245  delete fprop_eo;
246 
247  delete gfix;
248  delete gmset;
249  delete solver;
250  delete source;
251 
252  delete params_test;
253  delete params_gfix;
254  delete params_wilson;
255  delete params_solver;
256  delete params_source;
257  delete params_all;
258 
259 
260 #ifdef USE_TEST
261  return Test::verify(expected_result, result);
262 
263 #else
264  return EXIT_SUCCESS;
265 #endif
266  }
267 } // namespace Test_Spectrum_Wilson