From f5e2c12681d82c97f9c8d83a40397e70146d51ca Mon Sep 17 00:00:00 2001 From: John Tramm Date: Fri, 13 Dec 2019 18:05:58 +0000 Subject: [PATCH] fixed issue with fixed source problems, where fission neutrons were getting banked to fission bank instead of secondary bank. --- include/openmc/physics.h | 2 +- src/physics.cpp | 28 ++++++++++++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/include/openmc/physics.h b/include/openmc/physics.h index fb43775a6..d14f97720 100644 --- a/include/openmc/physics.h +++ b/include/openmc/physics.h @@ -49,7 +49,7 @@ int sample_nuclide(Particle* p); //! Determine the average total, prompt, and delayed neutrons produced from //! fission and creates appropriate bank sites. void create_fission_sites(Particle* p, int i_nuclide, const Reaction* rx, - std::vector& bank); + std::vector& bank, bool use_fission_bank); int sample_element(Particle* p); diff --git a/src/physics.cpp b/src/physics.cpp index 5d72111dc..fbb7a31d5 100644 --- a/src/physics.cpp +++ b/src/physics.cpp @@ -95,11 +95,13 @@ void sample_neutron_reaction(Particle* p) if (nuc->fissionable_) { Reaction* rx = sample_fission(i_nuclide, p); if (settings::run_mode == RUN_MODE_EIGENVALUE) { - create_fission_sites(p, i_nuclide, rx, simulation::fission_bank); + //create_fission_sites(p, i_nuclide, rx, simulation::fission_bank); + create_fission_sites(p, i_nuclide, rx, simulation::fission_bank, true); } else if (settings::run_mode == RUN_MODE_FIXEDSOURCE && settings::create_fission_neutrons) { //create_fission_sites(p, i_nuclide, rx, simulation::secondary_bank); - create_fission_sites(p, i_nuclide, rx, p->secondary_bank_); + //create_fission_sites(p, i_nuclide, rx, p->secondary_bank_); + create_fission_sites(p, i_nuclide, rx, p->secondary_bank_, false); // Make sure particle population doesn't grow out of control for // subcritical multiplication problems. @@ -149,7 +151,7 @@ void sample_neutron_reaction(Particle* p) void create_fission_sites(Particle* p, int i_nuclide, const Reaction* rx, - std::vector& bank) + std::vector& bank, bool use_fission_bank) { // If uniform fission source weighting is turned on, we increase or decrease // the expected number of fission sites produced @@ -173,11 +175,21 @@ create_fission_sites(Particle* p, int i_nuclide, const Reaction* rx, p->fission_ = true; for (int i = 0; i < nu; ++i) { - // Create new bank site and get reference to last element - int idx; - #pragma omp atomic capture - idx = shared_fission_bank_length++; - Particle::Bank * site = shared_fission_bank + idx; + Particle::Bank * site; + if(use_fission_bank) + { + // Create new bank site and get reference to last element + int idx; + #pragma omp atomic capture + idx = shared_fission_bank_length++; + Particle::Bank * site = shared_fission_bank + idx; + } + else + { + // Create new bank site and get reference to last element + bank.emplace_back(); + site = &bank.back(); + } site->r = p->r(); site->particle = Particle::Type::neutron; site->wgt = 1. / weight;