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