chombo-discharge
Loading...
Searching...
No Matches
CD_Random.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
13#ifndef CD_RANDOM_H
14#define CD_RANDOM_H
15
16// Std includes
17#include <random>
18#include <memory>
19#include <mutex>
20#include <type_traits>
21#ifdef _OPENMP
22#include <omp.h>
23#endif
24
25// Chombo includes
26#include <REAL.H>
27#include <RealVect.H>
28
29// Our includes
30#include <CD_NamespaceHeader.H>
31
38class Random
39{
40public:
44 Random() = delete;
45
50 Random(const Random& a_other) = delete;
51
56 Random(const Random&& a_other) = delete;
57
62 Random&
63 operator=(const Random& a_other) = delete;
64
69 Random&
70 operator=(const Random&& a_other) = delete;
71
78 inline static T
79 getPoisson(const Real a_mean);
80
88 inline static T
89 getBinomial(const T a_N, const Real a_p) noexcept;
90
95 inline static Real
97
102 inline static Real
104
109 inline static Real
110 getNormal01();
111
117 inline static RealVect
118 getDirection();
119
125 template <typename T>
126 inline static Real
128
134 template <typename T>
135 inline static size_t
137
141 inline static void
142 seed();
143
149 inline static void
150 setSeed(const int a_seed);
151
155 inline static void
157
164 inline static RealVect
165 randomPosition(const RealVect& a_lo, const RealVect& a_hi) noexcept;
166
180 inline static RealVect
182 const RealVect& a_lo,
183 const RealVect& a_hi,
185 const RealVect& a_bndryNormal,
186 const Real a_dx,
187 const Real a_kappa) noexcept;
188
197 inline static RealVect
199 const RealVect& a_hi,
201 const RealVect& a_bndryNormal) noexcept;
202
203private:
207 static bool s_seeded;
208
212 static thread_local std::mt19937_64 s_rng;
213
217 static thread_local std::uniform_real_distribution<Real> s_uniform01;
218
222 static thread_local std::uniform_real_distribution<Real> s_uniform11;
223
227 static thread_local std::normal_distribution<Real> s_normal01;
228};
229
230#include <CD_NamespaceFooter.H>
231
232#include <CD_RandomImplem.H>
233
234#endif
Implementation of CD_Random.H.
Class for encapsulating random number generation. This class is MPI and OpenMP safe.
Definition CD_Random.H:39
static Real get(T &a_distribution)
For getting a random number from a user-supplied distribution. T must be a distribution for which we ...
Definition CD_RandomImplem.H:217
static void setRandomSeed()
Set a random RNG seed.
Definition CD_RandomImplem.H:90
static RealVect getDirection()
Get a random direction in space.
Definition CD_RandomImplem.H:180
Random(const Random &a_other)=delete
Deleted copy constructor. Must be impossible because this is a singleton.
static Real getUniformReal11()
Get a uniform real number on the interval [-1,1].
Definition CD_RandomImplem.H:164
Random(const Random &&a_other)=delete
Deleted copy constructor. Must be impossible because this is a singleton.
static size_t getDiscrete(T &a_distribution)
For getting a random number from a user-supplied distribution. T must be a distribution for which we ...
Definition CD_RandomImplem.H:226
static Real getUniformReal01()
Get a uniform real number on the interval [0,1].
Definition CD_RandomImplem.H:156
Random & operator=(const Random &&a_other)=delete
Disallowed move assignment.
static Real getNormal01()
Get a number from a normal distribution centered on zero and variance 1.
Definition CD_RandomImplem.H:172
static void seed()
Seed the RNG.
Definition CD_RandomImplem.H:32
static void setSeed(const int a_seed)
Set the RNG seed.
Definition CD_RandomImplem.H:56
static T getPoisson(const Real a_mean)
Get Poisson distributed number.
Definition CD_RandomImplem.H:104
Random()=delete
Disallowed constructor.
static RealVect randomPosition(const RealVect &a_lo, const RealVect &a_hi) noexcept
Return a random position in the cube (a_lo, a_hi);.
Definition CD_RandomImplem.H:284
Random & operator=(const Random &a_other)=delete
Disallowed copy assignment.
static T getBinomial(const T a_N, const Real a_p) noexcept
Get Poisson distributed number.
Definition CD_RandomImplem.H:130
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:26