Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_HotStart_Eigenvalue.cpp
Go to the documentation of this file.
1 
14 #include "test.h"
15 
16 #include "gaugeConfig.h"
17 
18 #include "eigen_QR_Cmplx.h"
19 
20 #include <valarray>
21 
22 #include "randomNumbers_Mseries.h"
23 
24 //====================================================================
26 
31 namespace Test_HotStart {
32  const std::string test_name = "HotStart.Eigenvalue";
33 
34  //- test-private parameters
35  namespace {
36  const std::string filename_input = "test_HotStart_Eigenvalue.yaml";
37  const std::string filename_output = "stdout";
38 
39  class Parameters_Test_HotStart : public Parameters {
40  public:
41  Parameters_Test_HotStart()
42  {
43  Register_string("verbose_level", "NULL");
44 
45  Register_double("expected_result", 0.0);
46  }
47  };
48  }
49 
50  //- prototype declaration
51  int eigenvalue(void);
52 
53 #ifdef USE_TESTMANAGER_AUTOREGISTER
54  namespace {
55 #if defined(USE_GROUP_SU2)
56  // Nc=2 is not available.
57 #else
58  static const bool is_registered = TestManager::RegisterTest(
59  test_name,
61  );
62 #endif
63  }
64 #endif
65 
66  //====================================================================
67  int eigenvalue(void)
68  {
69  int Nc = CommonParameters::Nc();
70  int Nvol = CommonParameters::Nvol();
71  int Ndim = CommonParameters::Ndim();
72 
73  const double pi = 4.0 * atan(1.0);
74 
75  Parameters *params_test = new Parameters_Test_HotStart;
76  Parameters *params_all = new Parameters;
77 
78  params_all->Register_Parameters("Test_HotStart", params_test);
79 
80  ParameterManager_YAML params_manager;
81  params_manager.read_params(filename_input, params_all);
82 
83  const string str_vlevel = params_test->get_string("verbose_level");
84 
85  const bool do_check = params_test->is_set("expected_result");
86  const double expected_result = do_check ? params_test->get_double("expected_result") : 0.0;
87 
89 
90 
91  // #### Set up a gauge configuration ####
92  Field_G *U = new Field_G(Nvol, Ndim);
93 
94  RandomNumbers_Mseries rand(1234567);
95  U->set_random(&rand);
96 
97 
98  // #### object setup #####
99  Timer *timer = new Timer(test_name);
100 
101 
102  // #### Execution main part ####
103  timer->start();
104 
105  double av = 0.0;
106  double va = 0.0;
107  Eigen_QR_Cmplx eigen_qr(Nc);
108  std::valarray<double> vec(2 * Nc);
109 
110  for (int site = 0; site < Nvol; ++site) {
111  for (int mu = 0; mu < Ndim; ++mu) {
112  vec = eigen_qr.solve(U->ptr(0, site, mu));
113  for (int icolor = 0; icolor < Nc; ++icolor) {
114  double arg = atan2(vec[2 * icolor + 1], vec[2 * icolor]);
115 
116  vout.detailed(vl, "%10.8f\n", arg);
117 
118  av += arg;
119  va += arg * arg;
120  }
121  }
122  }
123 
124  double av_all = Communicator::reduce_sum(av);
125  double va_all = Communicator::reduce_sum(va);
126  int Nval = CommonParameters::Lvol() * Ndim * Nc;
127 
128  av = av_all / Nval;
129  va = va_all / Nval - av * av;
130 
131  va = sqrt(va);
132 
133  vout.general(vl, "\n");
134  vout.general(vl, "Random SU(%d):\n", Nc);
135  vout.general(vl, " # of eigenvalue = %10d\n", Nval);
136  vout.general(vl, " ave = %23.16e\n", av);
137  vout.general(vl, " var = %23.16e\n", va);
138  // vout.general(vl, " var(expected) = %23.16e\n", pi/sqrt(3));
139  vout.general(vl, " var(expected) = %23.16e\n", pi / sqrt(3.0));
140 
141  double result = av;
142 
143  timer->report();
144 
145 
146  // ##### tidy up #####
147  delete params_test;
148  delete params_all;
149 
150  delete timer;
151 
152  delete U;
153 
154 
155  if (do_check) {
156  return Test::verify(expected_result, result);
157  } else {
158  vout.detailed(vl, "check skipped: expected_result not set.\n\n");
159  return EXIT_SKIP;
160  }
161  }
162 } // namespace Test_HotStart
#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
double * ptr(const int jin, const int site, const int jex)
Definition: field.h:118
const std::string test_name
Class for parameters.
Definition: parameters.h:40
std::valarray< double > solve(const double *matrix)
static int Lvol()
void set_random(RandomNumbers *rand)
Definition: field_G_imp.cpp:62
static bool RegisterTest(const std::string &key, const Test_function func)
Definition: testManager.h:79
SU(N) gauge field.
Definition: field_G.h:36
bool is_set(const string &) const
Definition: parameters.cpp:366
double get_double(const string &key) const
Definition: parameters.cpp:25
void start()
Definition: timer.cpp:44
void Register_Parameters(const string &, Parameters *const)
Definition: parameters.cpp:359
Bridge::VerboseLevel vl
Definition: checker.cpp:18
VerboseLevel
Definition: bridgeIO.h:25
static int reduce_sum(int count, double *recv_buf, double *send_buf, int pattern=0)
make a global sum of an array of double over the communicator. pattern specifies the dimensions to be...
Parameter manager with YAML parser.
Definition: timer.h:31
int verify(const double expected, const double result)
Definition: test.cpp:27
string get_string(const string &key) const
Definition: parameters.cpp:85
void report(const Bridge::VerboseLevel vl=Bridge::GENERAL)
Definition: timer.cpp:128
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:191