From 279104cfed48518373efb59186758e96b4acb84e Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 19 Mar 2019 10:55:05 -0500 Subject: [PATCH] Move secondary bank outside of Particle class --- include/openmc/bank.h | 3 ++- include/openmc/particle.h | 5 +---- src/bank.cpp | 1 + src/particle.cpp | 12 ++++++------ src/physics.cpp | 2 +- src/physics_mg.cpp | 2 +- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/include/openmc/bank.h b/include/openmc/bank.h index 4597369c78..93e2be669f 100644 --- a/include/openmc/bank.h +++ b/include/openmc/bank.h @@ -22,11 +22,12 @@ namespace simulation { extern std::vector source_bank; extern std::vector fission_bank; +extern std::vector secondary_bank; #ifdef _OPENMP extern std::vector master_fission_bank; #endif -#pragma omp threadprivate(fission_bank) +#pragma omp threadprivate(fission_bank, secondary_bank) } // namespace simulation diff --git a/include/openmc/particle.h b/include/openmc/particle.h index d52c67ea55..c6156e481d 100644 --- a/include/openmc/particle.h +++ b/include/openmc/particle.h @@ -187,7 +187,7 @@ public: //! \param u Direction of the secondary particle //! \param E Energy of the secondary particle in [eV] //! \param type Particle type - void create_secondary(Direction u, double E, Type type); + void create_secondary(Direction u, double E, Type type) const; //! initialize from a source site // @@ -283,9 +283,6 @@ public: // Track output bool write_track_ {false}; - - // Secondary particles created - std::vector secondary_bank_; }; } // namespace openmc diff --git a/src/bank.cpp b/src/bank.cpp index a80cfbf375..172ecf84f3 100644 --- a/src/bank.cpp +++ b/src/bank.cpp @@ -18,6 +18,7 @@ namespace simulation { std::vector source_bank; std::vector fission_bank; +std::vector secondary_bank; #ifdef _OPENMP std::vector master_fission_bank; #endif diff --git a/src/particle.cpp b/src/particle.cpp index ab0f6effba..8ca07ca82a 100644 --- a/src/particle.cpp +++ b/src/particle.cpp @@ -73,11 +73,11 @@ Particle::clear() } void -Particle::create_secondary(Direction u, double E, Type type) +Particle::create_secondary(Direction u, double E, Type type) const { - secondary_bank_.emplace_back(); + simulation::secondary_bank.emplace_back(); - auto& bank {secondary_bank_.back()}; + auto& bank {simulation::secondary_bank.back()}; bank.particle = type; bank.wgt = wgt_; bank.r = this->r(); @@ -357,10 +357,10 @@ Particle::transport() // Check for secondary particles if this particle is dead if (!alive_) { // If no secondary particles, break out of event loop - if (secondary_bank_.empty()) break; + if (simulation::secondary_bank.empty()) break; - this->from_source(&secondary_bank_.back()); - secondary_bank_.pop_back(); + this->from_source(&simulation::secondary_bank.back()); + simulation::secondary_bank.pop_back(); n_event = 0; // Enter new particle in particle track file diff --git a/src/physics.cpp b/src/physics.cpp index 7d44aa17c6..2d48855c77 100644 --- a/src/physics.cpp +++ b/src/physics.cpp @@ -94,7 +94,7 @@ void sample_neutron_reaction(Particle* p) create_fission_sites(p, i_nuclide, rx, simulation::fission_bank); } else if (settings::run_mode == RUN_MODE_FIXEDSOURCE && settings::create_fission_neutrons) { - create_fission_sites(p, i_nuclide, rx, p->secondary_bank_); + create_fission_sites(p, i_nuclide, rx, simulation::secondary_bank); } } diff --git a/src/physics_mg.cpp b/src/physics_mg.cpp index 84dfa9cdea..f99d15aac7 100644 --- a/src/physics_mg.cpp +++ b/src/physics_mg.cpp @@ -51,7 +51,7 @@ sample_reaction(Particle* p) create_fission_sites(p, simulation::fission_bank); } else if ((settings::run_mode == RUN_MODE_FIXEDSOURCE) && (settings::create_fission_neutrons)) { - create_fission_sites(p, p->secondary_bank_); + create_fission_sites(p, simulation::secondary_bank); } }