Bridge++  Ver. 1.3.x
test_RandomNumbers_MT19937_GaussianField.cpp
Go to the documentation of this file.
1 
14 #include "test.h"
15 
16 #include "randomNumbers_MT19937.h"
17 
18 //====================================================================
20 
30  const std::string test_name = "RandomNumbers.MT19937.GaussianField";
31 
32  //- test-private parameters
33  namespace {
34  const std::string filename_input = "test_RandomNumbers_MT19937_GaussianField.yaml";
35  const std::string filename_output = "stdout";
36 
37  class Parameters_Test_RandomNumbers : public Parameters {
38  public:
39  Parameters_Test_RandomNumbers()
40  {
41  Register_int("seed", 0);
42 
43  Register_string("verbose_level", "NULL");
44 
45  Register_double("expected_result", 0.0);
46  }
47  };
48  }
49 
50  //- prototype declaration
51  int gaussian_field(void);
52 
53 #ifdef USE_TESTMANAGER_AUTOREGISTER
54  namespace {
55  static const bool is_registered = TestManager::RegisterTest(
56  test_name,
58  );
59  }
60 #endif
61 
62  //====================================================================
63  int gaussian_field(void)
64  {
65  // #### parameter setup ####
66  unique_ptr<Parameters> params_test(new Parameters_Test_RandomNumbers);
67  unique_ptr<Parameters> params_all(new Parameters);
68 
69  params_all->Register_Parameters("Test_RandomNumbers", params_test);
70 
71  ParameterManager::read(filename_input, params_all);
72 
73  int iseed = params_test->get_int("seed");
74  const string str_vlevel = params_test->get_string("verbose_level");
75 
76  const bool do_check = params_test->is_set("expected_result");
77  const double expected_result = do_check ? params_test->get_double("expected_result") : 0.0;
78 
80 
81  //- print input parameters
82  vout.general(vl, " iseed = %d\n", iseed);
83  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
84  vout.general(vl, "\n");
85 
86 
87  // #### object setup ####
89  unique_ptr<Timer> timer(new Timer(test_name));
90 
91 
92  // #### Execution main part ####
93  timer->start();
94 
95  int Nin = 29;
96  int Nvol = CommonParameters::Nvol();
97  int Nex = 33;
98  Field v(Nin, Nvol, Nex);
99 
100  double av = 0.0;
101  double vr = 0.0;
102 
103  rand->gauss_lex_global(v);
104 
105  int size = v.size();
106  for (int i = 0; i < size; ++i) {
107  av += v.cmp(i);
108  vr += v.cmp(i) * v.cmp(i);
109  // vout.general(vl, " %10.8f\n",v.cmp(i));
110  }
111 
112  double av_all = Communicator::reduce_sum(av);
113  double vr_all = Communicator::reduce_sum(vr);
114 
115  int global_size = CommonParameters::Lvol() * Nin * Nex;
116 
117  av = av_all / global_size;
118  vr = vr_all / global_size - av * av;
119  vr = sqrt(vr);
120 
121  vout.general(vl, "\n");
122  vout.general(vl, "Gaussian distribution (Field):\n");
123  vout.general(vl, " number of samples = %10d\n", size);
124  vout.general(vl, " average = %10.8f\n", av);
125  vout.general(vl, " variance = %10.8f\n", vr);
126  vout.general(vl, " variance(expect) = %10.8f\n", 1.0 / sqrt(2.0));
127 
128  double result = vr;
129 
130  timer->report();
131 
132 
133  if (do_check) {
134  return Test::verify(result, expected_result);
135  } else {
136  vout.detailed(vl, "check skipped: expected_result not set.\n\n");
137  return EXIT_SKIP;
138  }
139  }
140 } // namespace Test_RandomNumbers
#define EXIT_SKIP
Definition: test.h:17
BridgeIO vout
Definition: bridgeIO.cpp:278
void detailed(const char *format,...)
Definition: bridgeIO.cpp:82
void general(const char *format,...)
Definition: bridgeIO.cpp:65
Container of Field-type object.
Definition: field.h:39
double cmp(const int jin, const int site, const int jex) const
Definition: field.h:123
int get_int(const string &key) const
Definition: parameters.cpp:42
Class for parameters.
Definition: parameters.h:38
static int Lvol()
virtual void gauss_lex_global(Field &)
gaussian random number defined on global lattice.
static bool RegisterTest(const std::string &key, const Test_function func)
Definition: testManager.h:80
bool is_set(const string &) const
Definition: parameters.cpp:372
double get_double(const string &key) const
Definition: parameters.cpp:27
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
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
int size() const
Definition: field.h:121