Bridge++  Ver. 1.3.x
test_HotStart_Determinant.cpp
Go to the documentation of this file.
1 
14 #include "test.h"
15 
16 #include "gaugeConfig.h"
17 
18 #include "decompose_LUP_Cmplx.h"
19 
20 #include "randomNumbers_Mseries.h"
21 
22 //====================================================================
24 
31 namespace Test_HotStart {
32  const std::string test_name = "HotStart.Determinant";
33 
34  //- test-private parameters
35  namespace {
36  const std::string filename_input = "test_HotStart_Determinant.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 determinant(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 determinant(void)
68  {
69  // ##### parameter setup #####
70  int Nc = CommonParameters::Nc();
71  int Nvol = CommonParameters::Nvol();
72  int Ndim = CommonParameters::Ndim();
73 
74  unique_ptr<Parameters> params_test(new Parameters_Test_HotStart);
75  unique_ptr<Parameters> params_all(new Parameters);
76 
77  params_all->Register_Parameters("Test_HotStart", params_test);
78 
79  ParameterManager::read(filename_input, params_all);
80 
81  const string str_vlevel = params_test->get_string("verbose_level");
82 
83  const bool do_check = params_test->is_set("expected_result");
84  const double expected_result = do_check ? params_test->get_double("expected_result") : 0.0;
85 
87 
88 
89  // #### Set up a gauge configuration ####
90  unique_ptr<Field_G> U(new Field_G(Nvol, Ndim));
91 
92  int i_seed_noise = 1234567;
93  unique_ptr<RandomNumbers> rand(new RandomNumbers_Mseries(i_seed_noise));
94  U->set_random(rand);
95 
96 
97  // #### object setup #####
98  unique_ptr<Timer> timer(new Timer(test_name));
99 
100 
101  // #### Execution main part ####
102  timer->start();
103 
104  Mat_SU_N link(Nc);
105 
106  double re_av = 0.0;
107  double re_va = 0.0;
108  double im_av = 0.0;
109  double im_va = 0.0;
110 
111  Decompose_LUP_Cmplx lup(Nc);
112  for (int site = 0; site < Nvol; ++site) {
113  for (int mu = 0; mu < Ndim; ++mu) {
114  lup.set_matrix(U->ptr(0, site, mu));
115 
116  dcomplex det = lup.determinant();
117 
118  re_av += real(det);
119  re_va += real(det) * real(det);
120  im_av += imag(det);
121  im_va += imag(det) * imag(det);
122  }
123  }
124 
125  double re_av_all = Communicator::reduce_sum(re_av);
126  double re_va_all = Communicator::reduce_sum(re_va);
127  double im_av_all = Communicator::reduce_sum(im_av);
128  double im_va_all = Communicator::reduce_sum(im_va);
129 
130  int Nlink = CommonParameters::Lvol() * Ndim;
131 
132  re_av = re_av_all / Nlink;
133  im_av = im_av_all / Nlink;
134  re_va = re_va_all / Nlink - re_av * re_av;
135  im_va = im_va_all / Nlink - im_av * im_av;
136 
137  re_va = sqrt(re_va);
138  im_va = sqrt(im_va);
139 
140  vout.general(vl, "\n");
141  vout.general(vl, "Random SU(%d):\n", Nc);
142  vout.general(vl, " number of matrix = %10d\n", Nlink);
143  vout.general(vl, " ave Re(det) = %23.16e\n", re_av);
144  vout.general(vl, " var Re(det) = %23.16e\n", re_va);
145  vout.general(vl, " ave Im(det) = %23.16e\n", im_av);
146  vout.general(vl, " var Im(det) = %23.16e\n", im_va);
147 
148  double result = re_av;
149 
150  timer->report();
151 
152 
153  if (do_check) {
154  return Test::verify(result, expected_result);
155  } else {
156  vout.detailed(vl, "check skipped: expected_result not set.\n\n");
157  return EXIT_SKIP;
158  }
159  }
160 } // namespace Test_HotStart
#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
const double * ptr(const int jin, const int site, const int jex) const
Definition: field.h:133
void general(const char *format,...)
Definition: bridgeIO.cpp:65
const std::string test_name
Class for parameters.
Definition: parameters.h:38
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: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
Test of hot start.
void start()
Definition: timer.cpp:44
void Register_Parameters(const string &, Parameters *const)
Definition: parameters.cpp:358
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
void set_matrix(const double *mat)
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...
static void read(const std::string &params_file, 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
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:28