From ce135cc4a993e3be86be1246729eb4ead951e9bc Mon Sep 17 00:00:00 2001 From: davidjohnlong Date: Thu, 12 Mar 2020 17:02:22 +0000 Subject: [PATCH] Refactor fixed source sampling so call to custom library is made from call to sample_external_source() --- src/particle.cpp | 7 +------ src/simulation.cpp | 7 +------ src/source.cpp | 11 ++++++++--- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/particle.cpp b/src/particle.cpp index 3465d6e6c..96cf3fdcf 100644 --- a/src/particle.cpp +++ b/src/particle.cpp @@ -695,12 +695,7 @@ Particle::write_restart() const simulation::work_index[mpi::rank] + i; uint64_t seed = init_seed(id, STREAM_SOURCE); // re-sample source site - Particle::Bank site; - if (!settings::path_source_library.empty()) { - site = sample_custom_source_library(&seed); - } else { - site = sample_external_source(&seed); - } + auto site = sample_external_source(&seed); write_dataset(file_id, "weight", site.wgt); write_dataset(file_id, "energy", site.E); write_dataset(file_id, "xyz", site.r); diff --git a/src/simulation.cpp b/src/simulation.cpp index 2eeb7e3ce..64a7d0e80 100644 --- a/src/simulation.cpp +++ b/src/simulation.cpp @@ -457,12 +457,7 @@ void initialize_history(Particle* p, int64_t index_source) simulation::work_index[mpi::rank] + index_source; uint64_t seed = init_seed(id, STREAM_SOURCE); // sample from external source distribution or custom library then set - Particle::Bank site; - if (!settings::path_source_library.empty()) { - site = sample_custom_source_library(&seed); - } else { - site = sample_external_source(&seed); - } + auto site = sample_external_source(&seed); p->from_source(&site); } else if (settings::run_mode == RunMode::EIGENVALUE) { // set defaults for eigenvalue simulations from primary bank diff --git a/src/source.cpp b/src/source.cpp index 3b51b2373..21b12ed0d 100644 --- a/src/source.cpp +++ b/src/source.cpp @@ -44,7 +44,7 @@ std::vector external_sources; namespace { -typedef Particle::Bank (*sample_t)(uint64_t &seed); +using sample_t = Particle::Bank (*)(uint64_t* seed); sample_t custom_source_function; void* custom_source_library; @@ -315,6 +315,11 @@ void initialize_source() Particle::Bank sample_external_source(uint64_t* seed) { + // return values from custom source if using + if (!settings::path_source_library.empty()) { + return sample_custom_source_library(seed); + } + // Determine total source strength double total_strength = 0.0; for (auto& s : model::external_sources) @@ -363,7 +368,7 @@ void load_custom_source_library() dlerror(); // get the function from the library - //using sample_t = Particle::Bank (*)(uint64_t* seed); + using sample_t = Particle::Bank (*)(uint64_t* seed); custom_source_function = reinterpret_cast(dlsym(custom_source_library, "sample_source")); // check for any dlsym errors @@ -386,7 +391,7 @@ void close_custom_source_library() Particle::Bank sample_custom_source_library(uint64_t* seed) { - return custom_source_function(*seed); + return custom_source_function(seed); } void fill_source_bank_custom_source()