33 #ifndef RANDOM_WRAPPER_HPP
34 #define RANDOM_WRAPPER_HPP
108 virtual void seed(std::size_t s) = 0;
109 virtual void seed(std::seed_seq& s) = 0;
110 virtual void seed(std::uint32_t i, std::uint32_t j) = 0;
111 virtual real_t get() = 0;
112 virtual real_t get(std::uint32_t i, std::uint32_t j) = 0;
113 virtual int flops_per_prng() = 0;
128 template<
typename real_t,
typename E,
typename D>
144 void seed(std::size_t s) { e.seed(s); d.reset(); }
149 void seed(std::seed_seq& s) { e.seed(s); d.reset(); }
156 void seed(std::uint32_t i, std::uint32_t j) {
157 std::seed_seq seq{i,j};
164 real_t
get() {
return d(e); }
169 real_t
get(std::uint32_t i, std::uint32_t j) {
170 std::seed_seq seq{i,j};
180 if (std::is_same<D,std::normal_distribution<real_t>>())
182 if (std::is_same<D,std::uniform_real_distribution<real_t>>())
184 std::cout <<
"ERROR: random distribution not recognized" << std::endl;
203 template<
typename real_t> std::unique_ptr<RandomGeneratorBase<real_t>>
208 return std::unique_ptr<RandomGeneratorBase<real_t>>
210 std::normal_distribution<real_t>>(seed));
212 return std::unique_ptr<RandomGeneratorBase<real_t>>
214 std::uniform_real_distribution<real_t>>(seed));
217 return std::unique_ptr<RandomGeneratorBase<real_t>>
219 std::normal_distribution<real_t>>(seed));
221 return std::unique_ptr<RandomGeneratorBase<real_t>>
223 std::uniform_real_distribution<real_t>>(seed));
238 template<
typename real_t> std::unique_ptr<RandomGeneratorBase<real_t>>
240 return make_random_generator<real_t>(0, e, d);
251 template<
typename real_t> std::unique_ptr<RandomGeneratorBase<real_t>>
253 return make_random_generator<real_t>
class to wrap the C++11 random number generator/distribution
Definition: RandomWrapper.hpp:105
Class for a random number generator.
Definition: RandomWrapper.hpp:129
RandomGenerator()
Definition: RandomWrapper.hpp:134
void seed(std::uint32_t i, std::uint32_t j)
Definition: RandomWrapper.hpp:156
int flops_per_prng()
Definition: RandomWrapper.hpp:179
RandomGenerator(std::size_t s)
Definition: RandomWrapper.hpp:139
void seed(std::seed_seq &s)
Definition: RandomWrapper.hpp:149
real_t get()
Definition: RandomWrapper.hpp:164
void seed(std::size_t s)
Definition: RandomWrapper.hpp:144
real_t get(std::uint32_t i, std::uint32_t j)
Definition: RandomWrapper.hpp:169
std::unique_ptr< RandomGeneratorBase< real_t > > make_default_random_generator(std::size_t seed=0)
Definition: RandomWrapper.hpp:252
RandomEngine
Random number engine.
Definition: RandomWrapper.hpp:52
RandomDistribution
Definition: RandomWrapper.hpp:74
std::string get_name(RandomEngine e)
Definition: RandomWrapper.hpp:62
std::unique_ptr< RandomGeneratorBase< real_t > > make_random_generator(std::size_t seed, RandomEngine e, RandomDistribution d)
Definition: RandomWrapper.hpp:204
Definition: StrumpackOptions.hpp:43