From 3621fddc7eb4bf8e67c18a34b74ba0f8b235b6bc Mon Sep 17 00:00:00 2001 From: John Tramm Date: Wed, 8 Jan 2020 19:19:05 +0000 Subject: [PATCH] Changed the nu_bank particle field to be a vector. We can get away with it being a static array of length 15, but for CPU robustness we will make it a vector. We will need to convert a bunch of other vectors when moving to GPU so this is fine. --- include/openmc/particle.h | 2 +- src/physics.cpp | 15 ++++++++++----- src/physics_mg.cpp | 14 ++++++++++---- src/tallies/tally_scoring.cpp | 2 -- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/include/openmc/particle.h b/include/openmc/particle.h index daf5749854..c884b333b1 100644 --- a/include/openmc/particle.h +++ b/include/openmc/particle.h @@ -334,7 +334,7 @@ public: std::vector> tracks_; - NuBank nu_bank_[15]; + std::vector nu_bank_; double tally_absorption_ {0.0}; double tally_collision_ {0.0}; diff --git a/src/physics.cpp b/src/physics.cpp index 9cb93b2aea..6ab186dd82 100644 --- a/src/physics.cpp +++ b/src/physics.cpp @@ -169,14 +169,16 @@ create_fission_sites(Particle* p, int i_nuclide, const Reaction* rx, // First, if our bank is full then don't continue if (nu == 0) return; - assert( nu < 15 ); - // Initialize the counter of delayed neutrons encountered for each delayed // group. double nu_d[MAX_DELAYED_GROUPS] = {0.}; + // Clear out particle's nu fission bank + p->nu_bank_.clear(); + p->fission_ = true; int skipped = 0; + for (int i = 0; i < nu; ++i) { Particle::Bank * site; if(use_fission_bank) @@ -219,9 +221,12 @@ create_fission_sites(Particle* p, int i_nuclide, const Reaction* rx, // Write fission particles to nuBank if(use_fission_bank) { - p->nu_bank_[i].wgt = site->wgt; - p->nu_bank_[i].E = site->E; - p->nu_bank_[i].delayed_group = site->delayed_group; + Particle::NuBank* nu_bank_entry; + p->nu_bank_.emplace_back(); + nu_bank_entry = &p->nu_bank_.back(); + nu_bank_entry->wgt = site->wgt; + nu_bank_entry->E = site->E; + nu_bank_entry->delayed_group = site->delayed_group; } } diff --git a/src/physics_mg.cpp b/src/physics_mg.cpp index 11ae2a0453..51ce1edf9c 100644 --- a/src/physics_mg.cpp +++ b/src/physics_mg.cpp @@ -112,14 +112,17 @@ create_fission_sites(Particle* p, std::vector& bank, bool use_fi // First, if our bank is full then don't continue if (nu == 0) return; - assert( nu < 15 ); // Initialize the counter of delayed neutrons encountered for each delayed // group. double nu_d[MAX_DELAYED_GROUPS] = {0.}; + + // Clear out particle's nu fission bank + p->nu_bank_.clear(); p->fission_ = true; int skipped = 0; + for (int i = 0; i < nu; ++i) { Particle::Bank * site; if(use_fission_bank) @@ -182,9 +185,12 @@ create_fission_sites(Particle* p, std::vector& bank, bool use_fi // Write fission particles to nuBank if(use_fission_bank) { - p->nu_bank_[i].wgt = site->wgt; - p->nu_bank_[i].E = site->E; - p->nu_bank_[i].delayed_group = site->delayed_group; + Particle::NuBank* nu_bank_entry; + p->nu_bank_.emplace_back(); + nu_bank_entry = &p->nu_bank_.back(); + nu_bank_entry->wgt = site->wgt; + nu_bank_entry->E = site->E; + nu_bank_entry->delayed_group = site->delayed_group; } } diff --git a/src/tallies/tally_scoring.cpp b/src/tallies/tally_scoring.cpp index 5782907184..58f7c43dc7 100644 --- a/src/tallies/tally_scoring.cpp +++ b/src/tallies/tally_scoring.cpp @@ -331,8 +331,6 @@ score_fission_eout(Particle* p, int i_tally, int i_score, int score_bin) // loop over number of particles banked for (auto i = 0; i < p->n_bank_; ++i) { - //auto i_bank = simulation::fission_bank.size() - p->n_bank_ + i; //TODO: This is breaking event-based right here - //const auto& bank = simulation::fission_bank[i_bank]; const auto& bank = p->nu_bank_[i]; // get the delayed group