Bridge++  Ver. 1.1.x
 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 "parameterManager_YAML.h"
15 
16 #include "bridgeIO.h"
17 using Bridge::vout;
18 
19 #include "randomNumbers_Mseries.h"
20 
21 #ifdef USE_TEST
22 #include "test.h"
23 #endif
24 
25 #ifdef USE_TESTMANAGER_AUTOREGISTER
26 #include "testManager.h"
27 #endif
28 
29 //====================================================================
31 
38 namespace Test_RandomNumbers {
39  //- test-private parameters
40  namespace {
41  const std::string filename_input = "test_RandomNumbers_Mseries_GaussianField.yaml";
42  const std::string filename_output = "stdout";
43 
44  class Parameters_Test_RandomNumbers : public Parameters {
45  public:
46  Parameters_Test_RandomNumbers()
47  {
48  Register_int("seed", 0);
49 
50  Register_string("verbose_level", "NULL");
51 
52  Register_double("expected_result", 0.0);
53  }
54  };
55  }
56 
57  //- prototype declaration
58  int gaussian_field(void);
59 
60 #ifdef USE_TESTMANAGER_AUTOREGISTER
61  namespace {
62  static const bool is_registered = TestManager::RegisterTest(
63  "RandomNumbers.Mseries.GaussianField",
65  );
66  }
67 #endif
68 
69  //====================================================================
70  int gaussian_field(void)
71  {
72  // #### parameter setup ####
73  Parameters_Test_RandomNumbers params_test;
74 
75  Parameters params_all;
76 
77  params_all.Register_Parameters("Test_RandomNumbers", &params_test);
78 
79  ParameterManager_YAML params_manager;
80  params_manager.read_params(filename_input, &params_all);
81 
82  int iseed = params_test.get_int("seed");
83  const string str_vlevel = params_test.get_string("verbose_level");
84 #ifdef USE_TEST
85  const double expected_result = params_test.get_double("expected_result");
86 #endif
87 
89 
90  //- print input parameters
91  vout.general(vl, " iseed = %d\n", iseed);
92  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
93  vout.general(vl, "\n");
94 
95 
96  // #### object setup ####
97  RandomNumbers *rand = new RandomNumbers_Mseries(iseed);
98 
99 
100  // #### Execution main part ####
101  int Nin = 29;
102  int Nvol = CommonParameters::Nvol();
103  int Nex = 33;
104  Field v(Nin, Nvol, Nex);
105 
106  double av = 0.0;
107  double vr = 0.0;
108 
109  rand->gauss_lex_global(v);
110 
111  int size = v.size();
112  for (int i = 0; i < size; ++i) {
113  av += v.cmp(i);
114  vr += v.cmp(i) * v.cmp(i);
115  // vout.general(vl, " %10.8f\n",v.cmp(i));
116  }
117  av = av / size;
118  vr = vr / 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 
131  // #### tidy up ####
132  delete rand;
133 
134 
135 #ifdef USE_TEST
136  return Test::verify(expected_result, result);
137 
138 #else
139  return EXIT_SUCCESS;
140 #endif
141  }
142 } // namespace Test_RandomNumbers