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