From d8490143911df7c7800a100bf1be2b7311802c24 Mon Sep 17 00:00:00 2001 From: YoungHui Park Date: Tue, 14 Apr 2020 02:09:49 -0500 Subject: [PATCH] Switch surf_src_bank from vector to SharedArray --- include/openmc/bank.h | 4 +++- src/bank.cpp | 7 ++++++- src/particle.cpp | 2 +- src/simulation.cpp | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/openmc/bank.h b/include/openmc/bank.h index c20ae6fba..b81c176fc 100644 --- a/include/openmc/bank.h +++ b/include/openmc/bank.h @@ -18,7 +18,7 @@ namespace simulation { extern std::vector source_bank; -extern std::vector surf_src_bank; +extern SharedArray surf_src_bank; extern SharedArray fission_bank; @@ -34,6 +34,8 @@ void sort_fission_bank(); void free_memory_bank(); +void init_surf_src_bank(int64_t max); + void init_fission_bank(int64_t max); } // namespace openmc diff --git a/src/bank.cpp b/src/bank.cpp index 0fe3b7c44..11b54e930 100644 --- a/src/bank.cpp +++ b/src/bank.cpp @@ -17,7 +17,7 @@ namespace simulation { std::vector source_bank; -std::vector surf_src_bank; +SharedArray surf_src_bank; // The fission bank is allocated as a SharedArray, rather than a vector, as it will // be shared by all threads in the simulation. It will be allocated to a fixed @@ -44,6 +44,11 @@ void free_memory_bank() simulation::progeny_per_particle.clear(); } +void init_surf_src_bank(int64_t max) +{ + simulation::surf_src_bank.reserve(max); +} + void init_fission_bank(int64_t max) { simulation::fission_bank.reserve(max); diff --git a/src/particle.cpp b/src/particle.cpp index b2ac429c5..3a05d11ff 100644 --- a/src/particle.cpp +++ b/src/particle.cpp @@ -423,7 +423,7 @@ Particle::cross_surface() site.particle = this->type_; // site.parent_id = this->id_; // site.progeny_id = this->n_progeny_; - simulation::surf_src_bank.push_back(site); + int64_t idx = simulation::surf_src_bank.thread_safe_append(site); } // Handle any applicable boundary conditions. diff --git a/src/simulation.cpp b/src/simulation.cpp index 986a32708..224e0922b 100644 --- a/src/simulation.cpp +++ b/src/simulation.cpp @@ -287,7 +287,7 @@ void allocate_banks() // Allocate fission bank init_fission_bank(3*simulation::work_per_rank); - simulation::surf_src_bank.resize(simulation::work_per_rank); + init_surf_src_bank(10*simulation::work_per_rank); // TODO: capacity enough? } void initialize_batch()