Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_RandomNumbers_Mseries_GaussianField.cpp
Go to the documentation of this file.
1 
14 #include "Tests/test.h"
15 
17 
18 //====================================================================
20 
29 namespace Test_RandomNumbers_Mseries {
30  const std::string test_name = "RandomNumbers.Mseries.GaussianField";
31 
32  //- test-private parameters
33  namespace {
34  const std::string filename_input = "test_RandomNumbers_Mseries_GaussianField.yaml";
35  }
36 
37  //- prototype declaration
38  int gaussian_field(void);
39 
40 #ifdef USE_TESTMANAGER_AUTOREGISTER
41  namespace {
42  static const bool is_registered = TestManager::RegisterTest(
43  test_name,
45  );
46  }
47 #endif
48 
49  //====================================================================
50  int gaussian_field(void)
51  {
52  // #### parameter setup ####
53 
54  Parameters params_all = ParameterManager::read(filename_input);
55 
56  Parameters params_test = params_all.lookup("Test_RandomNumbers");
57 
58  int iseed = params_test.get_int("int_seed");
59  const string str_vlevel = params_test.get_string("verbose_level");
60 
61  const bool do_check = params_test.is_set("expected_result");
62  const double expected_result = do_check ? params_test.get_double("expected_result") : 0.0;
63 
65 
66  //- print input parameters
67  vout.general(vl, " iseed = %d\n", iseed);
68  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
69  vout.general(vl, "\n");
70 
71 
72  // #### object setup ####
74  unique_ptr<Timer> timer(new Timer(test_name));
75 
76 
77  // #### Execution main part ####
78  timer->start();
79 
80  int Nin = 29;
81  int Nvol = CommonParameters::Nvol();
82  int Nex = 33;
83  Field v(Nin, Nvol, Nex);
84 
85  double av = 0.0;
86  double vr = 0.0;
87 
88  rand->gauss_lex_global(v);
89 
90  int size = v.size();
91  for (int i = 0; i < size; ++i) {
92  av += v.cmp(i);
93  vr += v.cmp(i) * v.cmp(i);
94  // vout.general(vl, " %10.8f\n",v.cmp(i));
95  }
96 
97  double av_all = Communicator::reduce_sum(av);
98  double vr_all = Communicator::reduce_sum(vr);
99 
100  int global_size = CommonParameters::Lvol() * Nin * Nex;
101 
102  av = av_all / global_size;
103  vr = vr_all / global_size - av * av;
104  vr = sqrt(vr);
105 
106  vout.general(vl, "\n");
107  vout.general(vl, "Gaussian distribution (Field):\n");
108  vout.general(vl, " number of samples = %10d\n", size);
109  vout.general(vl, " average = %10.8f\n", av);
110  vout.general(vl, " variance = %10.8f\n", vr);
111  vout.general(vl, " variance(expect) = %10.8f\n", 1.0 / sqrt(2.0));
112 
113  double result = vr;
114 
115  timer->report();
116 
117 
118  if (do_check) {
119  return Test::verify(result, expected_result);
120  } else {
121  vout.detailed(vl, "check skipped: expected_result not set.\n\n");
122  return EXIT_SKIP;
123  }
124  }
125 } // namespace Test_RandomNumbers
#define EXIT_SKIP
Definition: test.h:17
Random number generator base on M-series.
BridgeIO vout
Definition: bridgeIO.cpp:495
void detailed(const char *format,...)
Definition: bridgeIO.cpp:212
void general(const char *format,...)
Definition: bridgeIO.cpp:195
Container of Field-type object.
Definition: field.h:39
double cmp(const int jin, const int site, const int jex) const
Definition: field.h:132
int get_int(const string &key) const
Definition: parameters.cpp:87
Class for parameters.
Definition: parameters.h:46
static int Lvol()
virtual void gauss_lex_global(Field &)
gaussian random number defined on global lattice.
Parameters lookup(const string &key) const
Definition: parameters.h:78
static bool RegisterTest(const std::string &key, const Test_function func)
Definition: testManager.h:69
double get_double(const string &key) const
Definition: parameters.cpp:70
bool is_set(const string &key) const
Definition: parameters.cpp:396
void start()
Definition: timer.cpp:44
static void read(const std::string &params_file, Parameters &params)
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:42
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...
Definition: timer.h:31
string get_string(const string &key) const
Definition: parameters.cpp:116
void report(const Bridge::VerboseLevel vl=Bridge::GENERAL)
Definition: timer.cpp:128
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:131
int size() const
Definition: field.h:121