From fb8b1c9b7829bdb68caf7468d14d2e7c49b17a74 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 2 Dec 2019 10:36:53 -0600 Subject: [PATCH] Add constructor for CellInstanceFilter. Call prepare_distribcells at simulation initialization, not program initialization --- include/openmc/tallies/filter_cell_instance.h | 4 ++-- src/geometry_aux.cpp | 4 +++- src/initialize.cpp | 3 --- src/simulation.cpp | 4 ++++ src/tallies/filter_cell_instance.cpp | 5 +++++ 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/include/openmc/tallies/filter_cell_instance.h b/include/openmc/tallies/filter_cell_instance.h index d9e3785dc..0895cc1ef 100644 --- a/include/openmc/tallies/filter_cell_instance.h +++ b/include/openmc/tallies/filter_cell_instance.h @@ -51,8 +51,8 @@ public: //---------------------------------------------------------------------------- // Constructors, destructors - //CellInstanceFilter() = default; - //CellInstanceFilter(gsl::span instances); + CellInstanceFilter() = default; + CellInstanceFilter(gsl::span instances); ~CellInstanceFilter() = default; //---------------------------------------------------------------------------- diff --git a/src/geometry_aux.cpp b/src/geometry_aux.cpp index 965a58aea..8a3394743 100644 --- a/src/geometry_aux.cpp +++ b/src/geometry_aux.cpp @@ -320,6 +320,8 @@ find_root_universe() void prepare_distribcell() { + write_message("Preparing distributed cell instances...", 5); + // Find all cells listed in a DistribcellFilter or CellInstanceFilter std::unordered_set distribcells; for (auto& filt : model::tally_filters) { @@ -395,7 +397,7 @@ prepare_distribcell() for (int map = 0; map < target_univ_ids.size(); map++) { auto target_univ_id = target_univ_ids[map]; for (const auto& univ : model::universes) { - int32_t offset {0}; // TODO: is this a bug? It matches F90 implementation. + int32_t offset = 0; for (int32_t cell_indx : univ->cells_) { Cell& c = *model::cells[cell_indx]; diff --git a/src/initialize.cpp b/src/initialize.cpp index 460db2436..387fd9f11 100644 --- a/src/initialize.cpp +++ b/src/initialize.cpp @@ -269,9 +269,6 @@ void read_input_xml() read_tallies_xml(); - // Initialize distribcell_filters - prepare_distribcell(); - if (settings::run_mode == RUN_MODE_PLOTTING) { // Read plots.xml if it exists read_plots_xml(); diff --git a/src/simulation.cpp b/src/simulation.cpp index 2f3230c6e..ec588a9ad 100644 --- a/src/simulation.cpp +++ b/src/simulation.cpp @@ -5,6 +5,7 @@ #include "openmc/container_util.h" #include "openmc/eigenvalue.h" #include "openmc/error.h" +#include "openmc/geometry_aux.h" #include "openmc/material.h" #include "openmc/message_passing.h" #include "openmc/nuclide.h" @@ -57,6 +58,9 @@ int openmc_simulation_init() // Skip if simulation has already been initialized if (simulation::initialized) return 0; + // Initialize distribcell_filters + prepare_distribcell(); + // Determine how much work each process should do calculate_work(); diff --git a/src/tallies/filter_cell_instance.cpp b/src/tallies/filter_cell_instance.cpp index 21573c8da..8149f746f 100644 --- a/src/tallies/filter_cell_instance.cpp +++ b/src/tallies/filter_cell_instance.cpp @@ -9,6 +9,11 @@ namespace openmc { +CellInstanceFilter::CellInstanceFilter(gsl::span instances) +{ + this->set_cell_instances(instances); +} + void CellInstanceFilter::from_xml(pugi::xml_node node) {