Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 
27 namespace Test_RandomNumbers_MT19937 {
28  const std::string test_name = "RandomNumbers.MT19937.GaussianField";
29 
30  //- test-private parameters
31  namespace {
32  const std::string filename_input = "test_RandomNumbers_MT19937_GaussianField.yaml";
33  const std::string filename_output = "stdout";
34 
35  class Parameters_Test_RandomNumbers : public Parameters {
36  public:
37  Parameters_Test_RandomNumbers()
38  {
39  Register_int("seed", 0);
40 
41  Register_string("verbose_level", "NULL");
42 
43  Register_double("expected_result", 0.0);
44  }
45  };
46  }
47 
48  //- prototype declaration
49  int gaussian_field(void);
50 
51 #ifdef USE_TESTMANAGER_AUTOREGISTER
52  namespace {
53  static const bool is_registered = TestManager::RegisterTest(
54  test_name,
56  );
57  }
58 #endif
59 
60  //====================================================================
61  int gaussian_field(void)
62  {
63  // #### parameter setup ####
64  Parameters *params_test = new Parameters_Test_RandomNumbers;
65  Parameters *params_all = new Parameters;
66 
67  params_all->Register_Parameters("Test_RandomNumbers", params_test);
68 
69  ParameterManager_YAML params_manager;
70  params_manager.read_params(filename_input, params_all);
71 
72  int iseed = params_test->get_int("seed");
73  const string str_vlevel = params_test->get_string("verbose_level");
74 
75  const bool do_check = params_test->is_set("expected_result");
76  const double expected_result = do_check ? params_test->get_double("expected_result") : 0.0;
77 
79 
80  //- print input parameters
81  vout.general(vl, " iseed = %d\n", iseed);
82  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
83  vout.general(vl, "\n");
84 
85 
86  // #### object setup ####
87  RandomNumbers *rand = new RandomNumbers_MT19937(iseed);
88  Timer *timer = new Timer(test_name);
89 
90 
91  // #### Execution main part ####
92  timer->start();
93 
94  int Nin = 29;
95  int Nvol = CommonParameters::Nvol();
96  int Nex = 33;
97  Field v(Nin, Nvol, Nex);
98 
99  double av = 0.0;
100  double vr = 0.0;
101 
102  rand->gauss_lex_global(v);
103 
104  int size = v.size();
105  for (int i = 0; i < size; ++i) {
106  av += v.cmp(i);
107  vr += v.cmp(i) * v.cmp(i);
108  // vout.general(vl, " %10.8f\n",v.cmp(i));
109  }
110 
111  double av_all = Communicator::reduce_sum(av);
112  double vr_all = Communicator::reduce_sum(vr);
113 
114  int global_size = CommonParameters::Lvol() * Nin * Nex;
115 
116  av = av_all / global_size;
117  vr = vr_all / global_size - av * av;
118  vr = sqrt(vr);
119 
120  vout.general(vl, "\n");
121  vout.general(vl, "Gaussian distribution (Field):\n");
122  vout.general(vl, " number of samples = %10d\n", size);
123  vout.general(vl, " average = %10.8f\n", av);
124  vout.general(vl, " variance = %10.8f\n", vr);
125  vout.general(vl, " variance(expect) = %10.8f\n", 1.0 / sqrt(2.0));
126 
127  double result = vr;
128 
129  timer->report();
130 
131 
132  // #### tidy up ####
133  delete params_test;
134  delete params_all;
135 
136  delete timer;
137 
138  delete rand;
139 
140 
141  if (do_check) {
142  return Test::verify(expected_result, result);
143  } else {
144  vout.detailed(vl, "check skipped: expected_result not set.\n\n");
145  return EXIT_SKIP;
146  }
147  }
148 } // namespace Test_RandomNumbers
#define EXIT_SKIP
Definition: test.h:17
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
Container of Field-type object.
Definition: field.h:37
double cmp(const int jin, const int site, const int jex) const
Definition: field.h:108
int get_int(const string &key) const
Definition: parameters.cpp:40
Class for parameters.
Definition: parameters.h:40
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:79
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
Base class of random number generators.
Definition: randomNumbers.h:40
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
int size() const
Definition: field.h:106