Bridge++  Ver. 1.1.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 "parameterManager_YAML.h"
15 #include "parameters_factory.h"
16 
17 #include "bridgeIO.h"
18 using Bridge::vout;
19 
20 #include "gaugeConfig.h"
21 
22 #include "fopr_Wilson.h"
23 
24 #include "index_lex.h"
25 #include "fprop_Wilson_Shift.h"
26 
27 #include "source.h"
28 
29 #ifdef USE_TEST
30 #include "test.h"
31 #endif
32 
33 #ifdef USE_TESTMANAGER_AUTOREGISTER
34 #include "testManager.h"
35 #endif
36 
37 //====================================================================
39 
48 namespace Test_ShiftSolver {
49  //- test-private parameters
50  namespace {
51  const std::string filename_input = "test_ShiftSolver.yaml";
52  const std::string filename_output = "stdout";
53 
54  class Parameters_Test_ShiftSolver : public Parameters {
55  public:
56  Parameters_Test_ShiftSolver()
57  {
58  Register_string("gauge_config_type_input", "NULL");
59  Register_string("config_filename_input", "NULL");
60 
61  Register_string("verbose_level", "NULL");
62 
63  Register_double("expected_result", 0.0);
64  }
65  };
66  }
67 
68  //- prototype declaration
69  int solve(void);
70 
71 #ifdef USE_TESTMANAGER_AUTOREGISTER
72  namespace {
73  static const bool is_registered = TestManager::RegisterTest(
74  "ShiftSolver",
75  solve
76  );
77  }
78 #endif
79 
80  //====================================================================
81  int solve(void)
82  {
83  // #### parameter setup ####
84  int Nc = CommonParameters::Nc();
85  int Nd = CommonParameters::Nd();
86  int Ndim = CommonParameters::Ndim();
87  int Nvol = CommonParameters::Nvol();
88 
89  Parameters *params_test = new Parameters_Test_ShiftSolver;
90  Parameters *params_wilson = ParametersFactory::New("Fopr.Wilson");
91  Parameters *params_solver = ParametersFactory::New("Fprop_Wilson_Shift");
92  Parameters *params_source = ParametersFactory::New("Source");
93 
94  Parameters *params_all = new Parameters;
95 
96  params_all->Register_Parameters("Test_ShiftSolver", params_test);
97  params_all->Register_Parameters("Fopr_Wilson", params_wilson);
98  params_all->Register_Parameters("Fprop_Shift", params_solver);
99  params_all->Register_Parameters("Source", params_source);
100 
101  ParameterManager_YAML params_manager;
102  params_manager.read_params(filename_input, params_all);
103 
104  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
105  const string readfile = params_test->get_string("config_filename_input");
106  const string str_vlevel = params_test->get_string("verbose_level");
107 #ifdef USE_TEST
108  const double expected_result = params_test->get_double("expected_result");
109 #endif
110 
111  const string str_gmset_type = params_wilson->get_string("gamma_matrix_type");
112  const int Nshift = params_solver->get_int("number_of_shifts");
113  const string str_source_type = params_source->get_string("source_type");
114 
116 
117  //- print input parameters
118  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
119  vout.general(vl, " readfile = %s\n", readfile.c_str());
120  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
121  vout.general(vl, " gmset_type = %s\n", str_gmset_type.c_str());
122  vout.general(vl, " Nshift = %d\n", Nshift);
123  vout.general(vl, " source_type = %s\n", str_source_type.c_str());
124  vout.general(vl, "\n");
125 
126  //- input parameter check
127  int err = 0;
128  err += ParameterCheck::non_NULL(str_gconf_read);
129  err += ParameterCheck::non_NULL(readfile);
130 
131  if (err) {
132  vout.crucial(vl, "Test_ShiftSolver: Input parameters have not been set.\n");
133  abort();
134  }
135 
136 
137  // #### object setup ####
138  Field_G *U = new Field_G(Nvol, Ndim);
139  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
140  gconf_read->read_file((Field *)U, readfile);
141  // gconf_read->set_cold((Field*)U);
142 
143  Fopr_Wilson *fopr_w = new Fopr_Wilson(str_gmset_type);
144  fopr_w->set_parameters(*params_wilson);
145  fopr_w->set_config(U);
146 
147  Source *source = Source::New(str_source_type);
148  source->set_parameters(*params_source);
149 
150  Index_lex *index = new Index_lex;
151 
152  Fprop_Wilson_Shift *fprop_shift = new Fprop_Wilson_Shift(fopr_w, index);
153  fprop_shift->set_parameters(*params_solver);
154 
155 
156  // #### Execution main part ####
157  Field_F b;
158  std::valarray<Field_F> xq_shift(Nshift);
159 
160  double result;
161  {
162  int ispin = 0;
163  {
164  int icolor = 0;
165  // for(int ispin = 0; ispin < Nd; ++ispin){
166  // for(int icolor = 0; icolor < Nc; ++icolor){
167 
168  int idx = icolor + Nc * ispin;
169  source->set(b, idx);
170  result = fprop_shift->calc(&xq_shift, b);
171  }
172  }
173 
174 
175  // #### tidy up ####
176  delete params_test;
177  delete params_wilson;
178  delete params_solver;
179  delete params_source;
180  delete params_all;
181 
182  delete U;
183  delete gconf_read;
184 
185  delete index; // added by s.motoki[12/06/05].
186  delete fprop_shift;
187  delete source;
188  delete fopr_w;
189 
190 
191 #ifdef USE_TEST
192  return Test::verify(expected_result, result);
193 
194 #else
195  return EXIT_SUCCESS;
196 #endif
197  }
198 } // namespace Test_ShiftSolver