28 const double sq2r = 1.0 / sqrt(2.0);
30 const double pi = 4.0 * atan(1.0);
31 const double pi2 = 2.0 * pi;
43 double slg1 = sqrt(-log(1.0 - r1) * 2.0) * sq2r;
44 double ang1 = pi2 * r2;
46 rn1 = slg1 * cos(ang1);
47 rn2 = slg1 * sin(ang1);
54 if (f.
nin() % 2 == 0) {
55 return generate_global<rand_gauss_even>(f);
57 return generate_global<rand_gauss_odd>(f);
65 return generate_global<rand_uniform>(f);
85 for (
size_t i = 0; i <
m_block; i += 2) {
89 double slg1 = sqrt(-log(1 - r1) * 2.0) * sq2r;
90 double ang1 = pi2 * r2;
92 *
m_ptr++ = slg1 * cos(ang1);
93 *
m_ptr++ = slg1 * sin(ang1);
97 for (
size_t i = 0; i <
m_block; i += 2) {
115 size_t ngauss = m_block / 2;
117 for (
size_t i = 0; i < ngauss; ++i) {
118 double r1 = m_rng->get();
119 double r2 = m_rng->get();
121 double slg1 = sqrt(-log(1 - r1) * 2.0) * sq2r;
122 double ang1 = pi2 * r2;
124 *m_ptr++ = slg1 * cos(ang1);
125 *m_ptr++ = slg1 * sin(ang1);
130 double r1 = m_rng->get();
131 double r2 = m_rng->get();
133 double slg1 = sqrt(-log(1 - r1) * 2.0) * sq2r;
134 double ang1 = pi2 * r2;
136 *m_ptr++ = slg1 * cos(ang1);
140 for (
size_t i = 0; i < m_block + 1; ++i) {
157 for (
size_t i = 0; i < m_block; ++i) {
158 *m_ptr++ = m_rng->get();
161 for (
size_t i = 0; i < m_block; ++i) {
175 template<
typename InnerGenerator>
178 InnerGenerator fill(f,
this);
187 for (
int j = 0; j < Nex; ++j) {
188 for (
int i = 0; i < Nvol; ++i) {
210 for (
int j = 0; j < Nex; ++j) {
213 for (
int t = 0; t < Lt; ++t) {
214 bool in_t = in_j && (t >= gt * Nt) && (t < (gt + 1) * Nt);
216 for (
int z = 0; z < Lz; ++z) {
217 bool in_z = in_t && (z >= gz * Nz) && (z < (gz + 1) * Nz);
219 for (
int y = 0; y < Ly; ++y) {
220 bool in_y = in_z && (y >= gy * Ny) && (y < (gy + 1) * Ny);
222 for (
int x = 0; x < Lx; ++x) {
223 bool in_x = in_y && (x >= gx * Nx) && (x < (gx + 1) * Nx);
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 &rn1, double &rn2)