30#include <CD_NamespaceHeader.H>
77 template <typename T, typename = std::enable_if_t<std::is_integral<T>::value>>
87 template <typename T, typename = std::enable_if_t<std::is_integral<T>::value>>
117 inline static RealVect
126 template <
typename T>
128 get(T& a_distribution);
136 template <
typename T>
166 inline static RealVect
167 randomPosition(
const RealVect& a_lo,
const RealVect& a_hi)
noexcept;
184 inline static RealVect
186 const RealVect& a_lo,
187 const RealVect& a_hi,
188 const RealVect& a_bndryCentroid,
189 const RealVect& a_bndryNormal,
191 const Real a_kappa)
noexcept;
203 inline static RealVect
205 const RealVect& a_hi,
206 const RealVect& a_bndryCentroid,
207 const RealVect& a_bndryNormal)
noexcept;
213 static bool s_seeded;
218 static thread_local std::mt19937_64 s_rng;
223 static thread_local std::uniform_real_distribution<Real> s_uniform01;
228 static thread_local std::uniform_real_distribution<Real> s_uniform11;
233 static thread_local std::normal_distribution<Real> s_normal01;
236#include <CD_NamespaceFooter.H>
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