Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_ShiftSolver.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 
38 namespace Test_ShiftSolver {
39  const std::string test_name = "ShiftSolver";
40 
41  //- test-private parameters
42  namespace {
43  const std::string filename_input = "test_ShiftSolver.yaml";
44  const std::string filename_output = "stdout";
45 
46  class Parameters_Test_ShiftSolver : public Parameters {
47  public:
48  Parameters_Test_ShiftSolver()
49  {
50  Register_string("gauge_config_status", "NULL");
51  Register_string("gauge_config_type_input", "NULL");
52  Register_string("config_filename_input", "NULL");
53 
54  Register_string("verbose_level", "NULL");
55 
56  Register_double("expected_result", 0.0);
57  }
58  };
59  }
60 
61  //- prototype declaration
62  int solve(void);
63 
64 #ifdef USE_TESTMANAGER_AUTOREGISTER
65  namespace {
66 #if defined(USE_GROUP_SU2)
67  // Nc=2 is not available.
68 #else
69  static const bool is_registered = TestManager::RegisterTest(
70  test_name,
71  solve
72  );
73 #endif
74  }
75 #endif
76 
77  //====================================================================
78  int solve(void)
79  {
80  // #### parameter setup ####
81  int Nc = CommonParameters::Nc();
82  int Nd = CommonParameters::Nd();
83  int Ndim = CommonParameters::Ndim();
84  int Nvol = CommonParameters::Nvol();
85 
86  Parameters *params_test = new Parameters_Test_ShiftSolver;
87  Parameters *params_wilson = ParametersFactory::New("Fopr.Wilson");
88  Parameters *params_solver = ParametersFactory::New("Fprop_Wilson_Shift");
89  Parameters *params_source = ParametersFactory::New("Source");
90  Parameters *params_all = new Parameters;
91 
92  params_all->Register_Parameters("Test_ShiftSolver", params_test);
93  params_all->Register_Parameters("Fopr_Wilson", params_wilson);
94  params_all->Register_Parameters("Fprop_Shift", params_solver);
95  params_all->Register_Parameters("Source", params_source);
96 
97  ParameterManager_YAML params_manager;
98  params_manager.read_params(filename_input, params_all);
99 
100  const string str_gconf_status = params_test->get_string("gauge_config_status");
101  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
102  const string readfile = params_test->get_string("config_filename_input");
103  const string str_vlevel = params_test->get_string("verbose_level");
104 
105  const bool do_check = params_test->is_set("expected_result");
106  const double expected_result = do_check ? params_test->get_double("expected_result") : 0.0;
107 
108  const string str_gmset_type = params_wilson->get_string("gamma_matrix_type");
109  const int Nshift = params_solver->get_int("number_of_shifts");
110  const string str_source_type = params_source->get_string("source_type");
111 
113 
114  //- print input parameters
115  vout.general(vl, " gconf_status = %s\n", str_gconf_status.c_str());
116  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
117  vout.general(vl, " readfile = %s\n", readfile.c_str());
118  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
119  vout.general(vl, " gmset_type = %s\n", str_gmset_type.c_str());
120  vout.general(vl, " Nshift = %d\n", Nshift);
121  vout.general(vl, " source_type = %s\n", str_source_type.c_str());
122  vout.general(vl, "\n");
123 
124  //- input parameter check
125  int err = 0;
126  err += ParameterCheck::non_NULL(str_gconf_status);
127 
128  if (err) {
129  vout.crucial(vl, "%s: Input parameters have not been set.\n", test_name.c_str());
130  abort();
131  }
132 
133 
134  // #### Set up a gauge configuration ####
135  Field_G *U = new Field_G(Nvol, Ndim);
136  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
137 
138  if (str_gconf_status == "Continue") {
139  gconf_read->read_file((Field *)U, readfile);
140  } else if (str_gconf_status == "Cold_start") {
141  U->set_unit();
142  } else if (str_gconf_status == "Hot_start") {
143  RandomNumbers_Mseries rand(1234567);
144  U->set_random(&rand);
145  } else {
146  vout.crucial(vl, "%s: unsupported gconf status \"%s\".\n", test_name.c_str(), str_gconf_status.c_str());
147  abort();
148  }
149 
150 
151  // #### object setup ####
152  Fopr_Wilson *fopr_w = new Fopr_Wilson(str_gmset_type);
153  fopr_w->set_parameters(*params_wilson);
154  fopr_w->set_config(U);
155 
156  Source *source = Source::New(str_source_type);
157  source->set_parameters(*params_source);
158 
159  Index_lex *index = new Index_lex;
160 
161  Fprop_Wilson_Shift *fprop_shift = new Fprop_Wilson_Shift(fopr_w, index);
162  fprop_shift->set_parameters(*params_solver);
163 
164  Timer *timer = new Timer(test_name);
165 
166 
167  // #### Execution main part ####
168  timer->start();
169 
170  Field_F b;
171  std::valarray<Field_F> xq_shift(Nshift);
172 
173  double result;
174  {
175  int ispin = 0;
176  {
177  int icolor = 0;
178  // for(int ispin = 0; ispin < Nd; ++ispin){
179  // for(int icolor = 0; icolor < Nc; ++icolor){
180 
181  int idx = icolor + Nc * ispin;
182  source->set(b, idx);
183  result = fprop_shift->calc(&xq_shift, b);
184  }
185  }
186 
187  timer->report();
188 
189 
190  // #### tidy up ####
191  delete params_test;
192  delete params_wilson;
193  delete params_solver;
194  delete params_source;
195  delete params_all;
196 
197  delete timer;
198 
199  delete U;
200  delete gconf_read;
201 
202  delete index; // added by s.motoki[12/06/05].
203  delete fprop_shift;
204  delete source;
205  delete fopr_w;
206 
207 
208  if (do_check) {
209  return Test::verify(expected_result, result);
210  } else {
211  vout.detailed(vl, "check skipped: expected_result not set.\n\n");
212  return EXIT_SKIP;
213  }
214  }
215 } // namespace Test_ShiftSolver
#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
Container of Field-type object.
Definition: field.h:37
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
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:79
SU(N) gauge field.
Definition: field_G.h:36
void set_config(Field *U)
setting pointer to the gauge configuration.
Definition: fopr_Wilson.cpp:87
bool is_set(const string &) const
Definition: parameters.cpp:366
double get_double(const string &key) const
Definition: parameters.cpp:25
void set_parameters(const Parameters &params)
Definition: fopr_Wilson.cpp:48
Lexical site index.
Definition: index_lex.h:34
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:26
void Register_Parameters(const string &, Parameters *const)
Definition: parameters.cpp:359
const std::string test_name
Bridge::VerboseLevel vl
Definition: checker.cpp:18
VerboseLevel
Definition: bridgeIO.h:25
Parameter manager with YAML parser.
GaugeConfig class for file I/O of gauge configuration.
Definition: gaugeConfig.h:56
void set_parameters(const Parameters &params)
Definition: timer.h:31
int verify(const double expected, const double result)
Definition: test.cpp:27
void read_file(Field *u, const string &filename)
Definition: gaugeConfig.cpp:85
Base class of sources for a linear solver.
Definition: source.h:36
string get_string(const string &key) const
Definition: parameters.cpp:85
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:191
double calc(std::valarray< Field_F > *, const Field_F &)