From 29b57486871f39fc28a9e336ffc98e64afacc561 Mon Sep 17 00:00:00 2001 From: "Paul P.H. Wilson" Date: Fri, 17 Mar 2023 08:27:09 -0500 Subject: [PATCH] reduce temporary memory use for potentially large data --- include/openmc/distribution.h | 2 +- src/distribution.cpp | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/include/openmc/distribution.h b/include/openmc/distribution.h index 86aa4a3819..34744b3e3d 100644 --- a/include/openmc/distribution.h +++ b/include/openmc/distribution.h @@ -61,7 +61,7 @@ private: void normalize(); //! Initialize alias tables for distribution - void init_alias(vector& x, vector& p); + void init_alias(); }; //============================================================================== diff --git a/src/distribution.cpp b/src/distribution.cpp index ce2a85705c..e2e1138265 100644 --- a/src/distribution.cpp +++ b/src/distribution.cpp @@ -26,38 +26,38 @@ Discrete::Discrete(pugi::xml_node node) { auto params = get_node_array(node, "parameters"); - std::size_t n = params.size(); - std::vector x_vec(params.begin(), params.begin() + n / 2); - std::vector p_vec(params.begin() + n / 2, params.end()); + std::size_t n = params.size()/2; - this->init_alias(x_vec, p_vec); + x_.assign(params.begin(), params.begin() + n); + prob_.assign(params.begin() + n, params.end()); + + this->init_alias(); } Discrete::Discrete(const double* x, const double* p, int n) { - std::vector x_vec(x, x + n); - std::vector p_vec(p, p + n); + + x_.assign(x, x + n); + prob_.assign(p, p + n); - this->init_alias(x_vec, p_vec); + this->init_alias(); } Discrete::Discrete(const double* p, int n) { - std::vector p_vec(p, p + n); - std::vector x_vec(n); + prob_.assign(p, p + n); + x_.resize(n); for (int i=0; iinit_alias(x_vec, p_vec); + this->init_alias(); } -void Discrete::init_alias(vector& x, vector& p) +void Discrete::init_alias() { - x_ = x; - prob_ = p; normalize(); // The initialization and sampling method is based on Vose