24 const double sq2r = 1.0 / sqrt(2.0);
26 const double pi = 4.0 * atan(1.0);
27 const double pi2 = 2.0 * pi;
39 double slg1 = sqrt(-log(1.0 - r1) * 2.0) * sq2r;
40 double ang1 = pi2 * r2;
42 rand1 = slg1 * cos(ang1);
43 rand2 = slg1 * sin(ang1);
50 if (f.
nin() % 2 == 0) {
51 return generate_global<rand_gauss_even>(f);
53 return generate_global<rand_gauss_odd>(f);
61 return generate_global<rand_uniform>(f);
81 for (
size_t i = 0; i <
m_block; i += 2) {
85 double slg1 = sqrt(-log(1 - r1) * 2.0) * sq2r;
86 double ang1 = pi2 * r2;
88 *
m_ptr++ = slg1 * cos(ang1);
89 *
m_ptr++ = slg1 * sin(ang1);
93 for (
size_t i = 0; i <
m_block; i += 2) {
111 size_t ngauss = m_block / 2;
113 for (
size_t i = 0; i < ngauss; ++i) {
114 double r1 = m_rand_gauss->get();
115 double r2 = m_rand_gauss->get();
117 double slg1 = sqrt(-log(1 - r1) * 2.0) * sq2r;
118 double ang1 = pi2 * r2;
120 *m_ptr++ = slg1 * cos(ang1);
121 *m_ptr++ = slg1 * sin(ang1);
126 double r1 = m_rand_gauss->get();
127 double r2 = m_rand_gauss->get();
129 double slg1 = sqrt(-log(1 - r1) * 2.0) * sq2r;
130 double ang1 = pi2 * r2;
132 *m_ptr++ = slg1 * cos(ang1);
136 for (
size_t i = 0; i < m_block + 1; ++i) {
153 for (
size_t i = 0; i < m_block; ++i) {
154 *m_ptr++ = m_rand_gauss->get();
157 for (
size_t i = 0; i < m_block; ++i) {
171 template<
typename InnerGenerator>
174 InnerGenerator fill(f,
this);
183 for (
int j = 0; j < Nex; ++j) {
184 for (
int i = 0; i < Nvol; ++i) {
206 for (
int j = 0; j < Nex; ++j) {
209 for (
int t = 0; t < Lt; ++t) {
210 bool in_t = in_j && (t >= gt * Nt) && (t < (gt + 1) * Nt);
212 for (
int z = 0; z < Lz; ++z) {
213 bool in_z = in_t && (z >= gz * Nz) && (z < (gz + 1) * Nz);
215 for (
int y = 0; y < Ly; ++y) {
216 bool in_y = in_z && (y >= gy * Ny) && (y < (gy + 1) * Ny);
218 for (
int x = 0; x < Lx; ++x) {
219 bool in_x = in_y && (x >= gx * Nx) && (x < (gx + 1) * Nx);
RandomNumbers * m_rand_gauss
void detailed(const char *format,...)
virtual void uniform_lex_global(Field &)
uniform random number defined on global lattice.
Container of Field-type object.
static int ipe(const int dir)
logical coordinate of current proc.
static const std::string class_name
void convertField(Field &eo, const Field &lex)
virtual void gauss_lex_global(Field &)
gaussian random number defined on global lattice.
Bridge::VerboseLevel m_vl
virtual void gauss_eo_global(Field &)
gaussian noise for even-odd perconditioned field (S.UEDA)
size_t block_size() const
size_t block_size() const
void operator()(const bool do_fill)
void operator()(const bool do_fill)
static int size()
size of small world.
void generate_global(Field &f)
void gauss(double &rand1, double &rand2)