Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_Rational_Inverse.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_Clover.h"
23 #include "fopr_Rational.h"
24 
25 #include "source.h"
26 
27 #ifdef USE_TEST
28 #include "test.h"
29 #endif
30 
31 #ifdef USE_TESTMANAGER_AUTOREGISTER
32 #include "testManager.h"
33 #endif
34 
35 //====================================================================
37 
46 namespace Test_Rational {
47  //- test-private parameters
48  namespace {
49  const std::string filename_input = "test_Rational_Inverse.yaml";
50  const std::string filename_output = "stdout";
51 
52  class Parameters_Test_Rational : public Parameters {
53  public:
54  Parameters_Test_Rational()
55  {
56  Register_string("gauge_config_type_input", "NULL");
57  Register_string("config_filename_input", "NULL");
58 
59  Register_string("verbose_level", "NULL");
60 
61  Register_double("expected_result", 0.0);
62  }
63  };
64  }
65 
66  //- prototype declaration
67  int inverse(void);
68 
69 #ifdef USE_TESTMANAGER_AUTOREGISTER
70  namespace {
71  static const bool is_registered = TestManager::RegisterTest(
72  "Rational.Inverse",
73  inverse
74  );
75  }
76 #endif
77 
78  //====================================================================
79  int inverse(void)
80  {
81  // ##### parameter setup #####
82  int Ndim = CommonParameters::Ndim();
83  int Nc = CommonParameters::Nc();
84  int Nd = CommonParameters::Nd();
85  int Nvol = CommonParameters::Nvol();
86  int NinF = 2 * Nc * Nd;
87 
88  Parameters *params_test = new Parameters_Test_Rational;
89  Parameters *params_clover = ParametersFactory::New("Fopr.Clover");
90  Parameters *params_rational = ParametersFactory::New("Fopr.Rational");
91  Parameters *params_source = ParametersFactory::New("Source");
92 
93  Parameters *params_all = new Parameters;
94 
95  params_all->Register_Parameters("Test_Rational", params_test);
96  params_all->Register_Parameters("Fopr_Clover", params_clover);
97  params_all->Register_Parameters("Fopr_Rational", params_rational);
98  params_all->Register_Parameters("Source", params_source);
99 
100  ParameterManager_YAML params_manager;
101  params_manager.read_params(filename_input, params_all);
102 
103  const string str_gconf_read = params_test->get_string("gauge_config_type_input");
104  const string readfile = params_test->get_string("config_filename_input");
105  const string str_vlevel = params_test->get_string("verbose_level");
106 #ifdef USE_TEST
107  const double expected_result = params_test->get_double("expected_result");
108 #endif
109 
110  const string str_gmset_type = params_clover->get_string("gamma_matrix_type");
111  const string str_source_type = params_source->get_string("source_type");
112 
114 
115  //- print input parameters
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, " source_type = %s\n", str_source_type.c_str());
121  vout.general(vl, "\n");
122 
123  //- input parameter check
124  int err = 0;
125  err += ParameterCheck::non_NULL(str_gconf_read);
126  err += ParameterCheck::non_NULL(readfile);
127 
128  if (err) {
129  vout.crucial(vl, "Test_Rational: Input parameters have not been set.\n");
130  abort();
131  }
132 
133 
134  // #### object setup ####
135  Field_G *U = new Field_G(Nvol, Ndim);
136  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
137  gconf_read->read_file((Field *)U, readfile);
138  // gconf_read->set_cold((Field*)U);
139 
140  Fopr_Clover *fopr_c = new Fopr_Clover(str_gmset_type);
141  fopr_c->set_parameters(*params_clover);
142  fopr_c->set_config(U);
143 
144  Fopr_Rational *fopr_r = new Fopr_Rational((Fopr *)fopr_c);
145  fopr_r->set_parameters(*params_rational);
146 
147  Source *source = Source::New(str_source_type);
148  source->set_parameters(*params_source);
149 
150 
151  // #### Execution main part ####
152  Field xq(NinF, Nvol, 1), b(NinF, Nvol, 1);
153  Field v(NinF, Nvol, 1), w(NinF, Nvol, 1);
154  Field_F b2;
155 
156  double vv;
157  {
158  int ispin = 0;
159  {
160  int icolor = 0;
161  //for(int ispin = 0; ispin < Nd; ++ispin){
162  // for(int icolor = 0; icolor < Nc; ++icolor){
163 
164  int idx = icolor + Nc * ispin;
165  source->set(b2, idx);
166 
167  b = (Field)b2;
168 
169  v = fopr_r->mult(b);
170 
171  fopr_c->set_mode("DdagD");
172  w = fopr_c->mult(v);
173 
174  v = fopr_r->mult(w);
175  v -= b;
176  vv = v.norm2();
177 
178  vout.general(vl, " standard norm2 = %.8e\n", vv);
179  }
180  }
181 
182  double result = vv;
183 
184 
185  // ##### tidy up #####
186  delete params_test;
187  delete params_clover;
188  delete params_rational;
189  delete params_source;
190  delete params_all;
191 
192  delete U;
193  delete gconf_read;
194 
195  delete source;
196  delete fopr_r;
197  delete fopr_c;
198 
199 
200 #ifdef USE_TEST
201  return Test::verify(expected_result, result);
202 
203 #else
204  return EXIT_SUCCESS;
205 #endif
206  }
207 } // namespace Test_Rational