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