refactor of prn() interface and python interface changes

This commit is contained in:
John Tramm 2019-12-04 16:35:01 +00:00
parent 2ec02d6472
commit 638172e68d
53 changed files with 494 additions and 534 deletions

View file

@ -142,7 +142,7 @@ SourceDistribution::SourceDistribution(pugi::xml_node node)
}
Particle::Bank SourceDistribution::sample(uint64_t* prn_seeds, int stream) const
Particle::Bank SourceDistribution::sample(uint64_t* prn_seed) const
{
Particle::Bank site;
@ -158,7 +158,7 @@ Particle::Bank SourceDistribution::sample(uint64_t* prn_seeds, int stream) const
site.particle = particle_;
// Sample spatial distribution
site.r = space_->sample(prn_seeds, stream);
site.r = space_->sample(prn_seed);
double xyz[] {site.r.x, site.r.y, site.r.z};
// Now search to see if location exists in geometry
@ -200,7 +200,7 @@ Particle::Bank SourceDistribution::sample(uint64_t* prn_seeds, int stream) const
++n_accept;
// Sample angle
site.u = angle_->sample(prn_seeds, stream);
site.u = angle_->sample(prn_seed);
// Check for monoenergetic source above maximum particle energy
auto p = static_cast<int>(particle_);
@ -218,7 +218,7 @@ Particle::Bank SourceDistribution::sample(uint64_t* prn_seeds, int stream) const
while (true) {
// Sample energy spectrum
site.E = energy_->sample(prn_seeds, stream);
site.E = energy_->sample(prn_seed);
// Resample if energy falls outside minimum or maximum particle energy
if (site.E < data::energy_max[p] && site.E > data::energy_min[p]) break;
@ -270,11 +270,11 @@ void initialize_source()
// initialize random number seed
int64_t id = simulation::total_gen*settings::n_particles +
simulation::work_index[mpi::rank] + i + 1;
uint64_t prn_seeds[N_STREAMS];
set_particle_seed(id, prn_seeds);
uint64_t prn_seed;
init_seed(id, &prn_seed, STREAM_SOURCE);
// sample external source distribution
simulation::source_bank[i] = sample_external_source(prn_seeds);
simulation::source_bank[i] = sample_external_source(&prn_seed);
}
}
@ -288,11 +288,8 @@ void initialize_source()
}
}
Particle::Bank sample_external_source(uint64_t* prn_seeds)
Particle::Bank sample_external_source(uint64_t* prn_seed)
{
// Set the random number generator to the source stream.
int stream = STREAM_SOURCE;
// Determine total source strength
double total_strength = 0.0;
for (auto& s : model::external_sources)
@ -301,7 +298,7 @@ Particle::Bank sample_external_source(uint64_t* prn_seeds)
// Sample from among multiple source distributions
int i = 0;
if (model::external_sources.size() > 1) {
double xi = prn(prn_seeds, stream)*total_strength;
double xi = prn(prn_seed)*total_strength;
double c = 0.0;
for (; i < model::external_sources.size(); ++i) {
c += model::external_sources[i].strength();
@ -310,7 +307,7 @@ Particle::Bank sample_external_source(uint64_t* prn_seeds)
}
// Sample source site from i-th source distribution
Particle::Bank site {model::external_sources[i].sample(prn_seeds, stream)};
Particle::Bank site {model::external_sources[i].sample(prn_seed)};
// If running in MG, convert site.E to group
if (!settings::run_CE) {
@ -334,11 +331,11 @@ void fill_source_bank_fixedsource()
// initialize random number seed
int64_t id = (simulation::total_gen + overall_generation()) *
settings::n_particles + simulation::work_index[mpi::rank] + i + 1;
uint64_t prn_seeds[N_STREAMS];
set_particle_seed(id, prn_seeds);
uint64_t prn_seed;
init_seed(id, &prn_seed, STREAM_SOURCE);
// sample external source distribution
simulation::source_bank[i] = sample_external_source(prn_seeds);
simulation::source_bank[i] = sample_external_source(&prn_seed);
}
}
}