1
0
Fork 0
mirror of https://github.com/cosmo-sims/MUSIC.git synced 2024-09-19 17:03:46 +02:00

added back (and exposed) N-GenIC topgrid generator

This commit is contained in:
Oliver Hahn 2024-02-26 16:25:45 +08:00
parent bfbb00ae71
commit c18cb64055
3 changed files with 27 additions and 22 deletions

View file

@ -145,6 +145,7 @@ void RNG_music::parse_random_parameters(void)
void RNG_music::compute_random_numbers(void) void RNG_music::compute_random_numbers(void)
{ {
bool rndsign = pcf_->get_value_safe<bool>("random", "grafic_sign", false); bool rndsign = pcf_->get_value_safe<bool>("random", "grafic_sign", false);
bool bUseNGenIC = pcf_->get_value_safe<bool>("random","coarse_ngenic",false);
std::vector<rng *> randc(std::max(levelmax_, levelmin_seed_) + 1, (rng *)NULL); std::vector<rng *> randc(std::max(levelmax_, levelmin_seed_) + 1, (rng *)NULL);
@ -156,7 +157,8 @@ void RNG_music::compute_random_numbers(void)
if (rngfnames_[levelmin_seed_].size() > 0) if (rngfnames_[levelmin_seed_].size() > 0)
randc[levelmin_seed_] = new rng(1 << levelmin_seed_, rngfnames_[levelmin_seed_], rndsign); randc[levelmin_seed_] = new rng(1 << levelmin_seed_, rngfnames_[levelmin_seed_], rndsign);
else else
randc[levelmin_seed_] = new rng(1 << levelmin_seed_, ran_cube_size_, rngseeds_[levelmin_seed_]); randc[levelmin_seed_] = new rng(1 << levelmin_seed_, ran_cube_size_, rngseeds_[levelmin_seed_],
bUseNGenIC, true);
for (int i = levelmin_seed_ + 1; i <= levelmin_; ++i) for (int i = levelmin_seed_ + 1; i <= levelmin_; ++i)
{ {
@ -178,7 +180,7 @@ void RNG_music::compute_random_numbers(void)
randc[levelmin_seed_] = new rng(1 << levelmin_seed_, rngfnames_[levelmin_seed_], rndsign); randc[levelmin_seed_] = new rng(1 << levelmin_seed_, rngfnames_[levelmin_seed_], rndsign);
else else
randc[levelmin_seed_] = randc[levelmin_seed_] =
new rng(1 << levelmin_seed_, ran_cube_size_, rngseeds_[levelmin_seed_]); //, x0, lx ); new rng(1 << levelmin_seed_, ran_cube_size_, rngseeds_[levelmin_seed_], bUseNGenIC, true); //, x0, lx );
for (int ilevel = levelmin_seed_ - 1; ilevel >= (int)levelmin_; --ilevel) for (int ilevel = levelmin_seed_ - 1; ilevel >= (int)levelmin_; --ilevel)
{ {
@ -205,7 +207,7 @@ void RNG_music::compute_random_numbers(void)
if (rngfnames_[levelmin_].size() > 0) if (rngfnames_[levelmin_].size() > 0)
randc[levelmin_] = new rng(1 << levelmin_, rngfnames_[levelmin_], rndsign); randc[levelmin_] = new rng(1 << levelmin_, rngfnames_[levelmin_], rndsign);
else else
randc[levelmin_] = new rng(1 << levelmin_, ran_cube_size_, rngseeds_[levelmin_]); randc[levelmin_] = new rng(1 << levelmin_, ran_cube_size_, rngseeds_[levelmin_], bUseNGenIC, true);
} }
store_rnd(levelmin_, randc[levelmin_]); store_rnd(levelmin_, randc[levelmin_]);

View file

@ -11,10 +11,13 @@
template <typename T> template <typename T>
void rapid_proto_ngenic_rng(size_t res, long baseseed, music_wnoise_generator<T> &R) void music_wnoise_generator<T>:: gen_topgrid_NGenIC(size_t res, long baseseed) {
{ music::ulog.Print(
music::ulog.Print("Invoking the N-GenIC random number generator"); "Generating large-scale random numbers using N-GenIC RNG with seed %ld",
baseseed);
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// execute N-GenIC rando number generator
unsigned *seedtable = new unsigned[res * res]; unsigned *seedtable = new unsigned[res * res];
gsl_rng *random_generator = gsl_rng_alloc(gsl_rng_ranlxd1); gsl_rng *random_generator = gsl_rng_alloc(gsl_rng_ranlxd1);
@ -138,7 +141,7 @@ void rapid_proto_ngenic_rng(size_t res, long baseseed, music_wnoise_generator<T>
for (int i = 0; i < (int)res; ++i) for (int i = 0; i < (int)res; ++i)
for (size_t j = 0; j < res; ++j) for (size_t j = 0; j < res; ++j)
for (size_t k = 0; k < res; ++k) for (size_t k = 0; k < res; ++k)
R(i, j, k) = rnoise[((size_t)i * res + j) * res + k]; (*this)(i, j, k) = rnoise[((size_t)i * res + j) * res + k];
delete[] rnoise; delete[] rnoise;
} }
@ -154,7 +157,8 @@ music_wnoise_generator<T>::music_wnoise_generator(unsigned res, unsigned cubesiz
} }
template <typename T> template <typename T>
music_wnoise_generator<T>::music_wnoise_generator(unsigned res, unsigned cubesize, long baseseed, bool zeromean) music_wnoise_generator<T>::music_wnoise_generator( unsigned res, unsigned cubesize, long baseseed,
bool bUseNGenIC, bool zeromean )
: res_(res), cubesize_(cubesize), ncubes_(1), baseseed_(baseseed) : res_(res), cubesize_(cubesize), ncubes_(1), baseseed_(baseseed)
{ {
music::ilog.Print("Generating random numbers (2) with seed %ld", baseseed); music::ilog.Print("Generating random numbers (2) with seed %ld", baseseed);
@ -162,23 +166,19 @@ music_wnoise_generator<T>::music_wnoise_generator(unsigned res, unsigned cubesiz
double mean = 0.0; double mean = 0.0;
size_t res_l = res; size_t res_l = res;
bool musicnoise = true; if( bUseNGenIC ){
if (!musicnoise) cubesize_ = res;
cubesize_ = res_; ncubes_ = 1;
}
if (!musicnoise)
music::elog.Print("This currently breaks compatibility. Need to disable by hand! Make sure to not check into repo");
initialize(); initialize();
if (musicnoise) if( !bUseNGenIC ){
mean = fill_all(); mean = fill_all();
else }else{
{ mean = 0.0;
rnums_.push_back(new Meshvar<T>(res, 0, 0, 0)); gen_topgrid_NGenIC( res_, baseseed_ );
cubemap_[0] = 0; // create dummy map index zeromean = false;
register_cube(0, 0, 0);
rapid_proto_ngenic_rng( res_, baseseed_, *this );
} }
if (zeromean) if (zeromean)

View file

@ -39,6 +39,9 @@ protected:
//! subtract a constant from an entire cube //! subtract a constant from an entire cube
void subtract_from_cube(int i, int j, int k, double val); void subtract_from_cube(int i, int j, int k, double val);
//! usees the N-GenIC random number generator to set up the top grid
void gen_topgrid_NGenIC( size_t res, long baseseed );
//! copy random numbers from a cube to a full grid array //! copy random numbers from a cube to a full grid array
template <class C> template <class C>
void copy_cube(int i, int j, int k, C &dat) void copy_cube(int i, int j, int k, C &dat)
@ -127,7 +130,7 @@ public:
music_wnoise_generator(music_wnoise_generator<T> &rc, unsigned cubesize, long baseseed, int *x0_ = NULL, int *lx_ = NULL, bool zeromean = true); music_wnoise_generator(music_wnoise_generator<T> &rc, unsigned cubesize, long baseseed, int *x0_ = NULL, int *lx_ = NULL, bool zeromean = true);
//! constructor //! constructor
music_wnoise_generator(unsigned res, unsigned cubesize, long baseseed, bool zeromean = true); music_wnoise_generator(unsigned res, unsigned cubesize, long baseseed, bool bUseNGenIC, bool zeromean = true );
//! constructor to read white noise from file //! constructor to read white noise from file
music_wnoise_generator(unsigned res, std::string randfname, bool rndsign); music_wnoise_generator(unsigned res, std::string randfname, bool rndsign);