Bridge++  Ver. 1.3.x
test_ShiftSolver_Wilson.cpp
Go to the documentation of this file.
1 
14 #include "test.h"
15 
16 #include "gaugeConfig.h"
17 
18 #include "fopr_Wilson.h"
19 
20 #include "index_lex.h"
21 #include "fprop_Wilson_Shift.h"
22 
23 #include "source.h"
24 
25 #include "randomNumbers_Mseries.h"
26 
27 //====================================================================
29 
40 namespace Test_ShiftSolver {
41  const std::string test_name = "ShiftSolver.Wilson";
42 
43  //- test-private parameters
44  namespace {
45  const std::string filename_input = "test_ShiftSolver_Wilson.yaml";
46  const std::string filename_output = "stdout";
47 
48  class Parameters_Test_ShiftSolver : public Parameters {
49  public:
50  Parameters_Test_ShiftSolver()
51  {
52  Register_string("gauge_config_status", "NULL");
53  Register_string("gauge_config_type_input", "NULL");
54  Register_string("config_filename_input", "NULL");
55 
56  Register_string("verbose_level", "NULL");
57 
58  Register_double("expected_result", 0.0);
59  }
60  };
61  }
62 
63  //- prototype declaration
64  int solve(void);
65 
66 #ifdef USE_TESTMANAGER_AUTOREGISTER
67  namespace {
68 #if defined(USE_GROUP_SU2)
69  // Nc=2 is not available.
70 #else
71  static const bool is_registered = TestManager::RegisterTest(
72  test_name,
73  solve
74  );
75 #endif
76  }
77 #endif
78 
79  //====================================================================
80  int solve(void)
81  {
82  // #### parameter setup ####
83  int Nc = CommonParameters::Nc();
84  int Nd = CommonParameters::Nd();
85  int Ndim = CommonParameters::Ndim();
86  int Nvol = CommonParameters::Nvol();
87 
88  unique_ptr<Parameters> params_test(new Parameters_Test_ShiftSolver);
89  unique_ptr<Parameters> params_wilson(ParametersFactory::New("Fopr.Wilson"));
90  unique_ptr<Parameters> params_solver(ParametersFactory::New("Fprop_Wilson_Shift"));
91  unique_ptr<Parameters> params_source(ParametersFactory::New("Source"));
92  unique_ptr<Parameters> params_all(new Parameters);
93 
94  params_all->Register_Parameters("Test_ShiftSolver", params_test);
95  params_all->Register_Parameters("Fopr_Wilson", params_wilson);
96  params_all->Register_Parameters("Fprop_Shift", params_solver);
97  params_all->Register_Parameters("Source", params_source);
98 
99  ParameterManager::read(filename_input, params_all);
100 
101  const string str_gconf_status = params_test->get_string("gauge_config_status");
102  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
103  const string readfile = params_test->get_string("config_filename_input");
104  const string str_vlevel = params_test->get_string("verbose_level");
105 
106  const bool do_check = params_test->is_set("expected_result");
107  const double expected_result = do_check ? params_test->get_double("expected_result") : 0.0;
108 
109  const string str_gmset_type = params_wilson->get_string("gamma_matrix_type");
110  const int Nshift = params_solver->get_int("number_of_shifts");
111  const string str_source_type = params_source->get_string("source_type");
112 
114 
115  //- print input parameters
116  vout.general(vl, " gconf_status = %s\n", str_gconf_status.c_str());
117  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
118  vout.general(vl, " readfile = %s\n", readfile.c_str());
119  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
120  vout.general(vl, " gmset_type = %s\n", str_gmset_type.c_str());
121  vout.general(vl, " Nshift = %d\n", Nshift);
122  vout.general(vl, " source_type = %s\n", str_source_type.c_str());
123  vout.general(vl, "\n");
124 
125  //- input parameter check
126  int err = 0;
127  err += ParameterCheck::non_NULL(str_gconf_status);
128 
129  if (err) {
130  vout.crucial(vl, "%s: Input parameters have not been set.\n", test_name.c_str());
131  exit(EXIT_FAILURE);
132  }
133 
134 
135  // #### Set up a gauge configuration ####
136  unique_ptr<Field_G> U(new Field_G(Nvol, Ndim));
137  unique_ptr<GaugeConfig> gconf_read(new GaugeConfig(str_gconf_read));
138 
139  if (str_gconf_status == "Continue") {
140  gconf_read->read_file(U, readfile);
141  } else if (str_gconf_status == "Cold_start") {
142  U->set_unit();
143  } else if (str_gconf_status == "Hot_start") {
144  int i_seed_noise = 1234567;
145  unique_ptr<RandomNumbers> rand(new RandomNumbers_Mseries(i_seed_noise));
146  U->set_random(rand);
147  } else {
148  vout.crucial(vl, "%s: unsupported gconf status \"%s\".\n", test_name.c_str(), str_gconf_status.c_str());
149  exit(EXIT_FAILURE);
150  }
151 
152 
153  // #### object setup ####
154  unique_ptr<Fopr> fopr_w(Fopr::New("Wilson", str_gmset_type));
155  fopr_w->set_parameters(*params_wilson);
156  fopr_w->set_config(U);
157 
158  unique_ptr<Source> source(Source::New(str_source_type));
159  source->set_parameters(*params_source);
160 
161  unique_ptr<Index_lex> index(new Index_lex);
162 
163  unique_ptr<Fprop_Wilson_Shift> fprop_shift(new Fprop_Wilson_Shift(fopr_w, index));
164  fprop_shift->set_parameters(*params_solver);
165 
166  unique_ptr<Timer> timer(new Timer(test_name));
167 
168 
169  // #### Execution main part ####
170  timer->start();
171 
172  Field_F b;
173  std::vector<Field_F> xq_shift(Nshift);
174 
175  double result;
176  {
177  int ispin = 0;
178  {
179  int icolor = 0;
180  // for(int ispin = 0; ispin < Nd; ++ispin){
181  // for(int icolor = 0; icolor < Nc; ++icolor){
182 
183  int idx = icolor + Nc * ispin;
184  source->set(b, idx);
185  result = fprop_shift->calc(&xq_shift, b);
186  }
187  }
188 
189  timer->report();
190 
191 
192  if (do_check) {
193  return Test::verify(result, expected_result);
194  } else {
195  vout.detailed(vl, "check skipped: expected_result not set.\n\n");
196  return EXIT_SKIP;
197  }
198  }
199 } // namespace Test_ShiftSolver
#define EXIT_SKIP
Definition: test.h:17
Random number generator base on M-series.
BridgeIO vout
Definition: bridgeIO.cpp:278
void detailed(const char *format,...)
Definition: bridgeIO.cpp:82
void general(const char *format,...)
Definition: bridgeIO.cpp:65
virtual void set_config(Field *)=0
setting pointer to the gauge configuration.
Test of multishift solver.
int get_int(const string &key) const
Definition: parameters.cpp:42
Class for parameters.
Definition: parameters.h:38
static Parameters * New(const std::string &realm)
void read_file(Field *U, const string &filename)
Definition: gaugeConfig.cpp:56
void set_random(RandomNumbers *rand)
Definition: field_G_imp.cpp:62
Wilson-type fermion field.
Definition: field_F.h:37
void set_unit()
Definition: field_G_imp.cpp:39
static bool RegisterTest(const std::string &key, const Test_function func)
Definition: testManager.h:80
SU(N) gauge field.
Definition: field_G.h:38
bool is_set(const string &) const
Definition: parameters.cpp:372
double get_double(const string &key) const
Definition: parameters.cpp:27
Lexical site index.
Definition: index_lex.h:34
virtual void set_parameters(const Parameters &)=0
int non_NULL(const std::string v)
Definition: checker.cpp:61
virtual void set(Field &, int)=0
void start()
Definition: timer.cpp:44
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
void Register_Parameters(const string &, Parameters *const)
Definition: parameters.cpp:358
const std::string test_name
int verify(const double result, const double expected, double eps)
Definition: test.cpp:27
Bridge::VerboseLevel vl
Definition: checker.cpp:18
VerboseLevel
Definition: bridgeIO.h:39
static void read(const std::string &params_file, Parameters *params)
GaugeConfig class for file I/O of gauge configuration.
Definition: gaugeConfig.h:61
void set_parameters(const Parameters &params)
Definition: timer.h:31
string get_string(const string &key) const
Definition: parameters.cpp:87
void report(const Bridge::VerboseLevel vl=Bridge::GENERAL)
Definition: timer.cpp:128
virtual void set_parameters(const Parameters &)=0
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:28
double calc(std::vector< Field_F > *, const Field_F &)