Make the user-defined distribcells an argument to the function.

This commit is contained in:
Patrick Shriwise 2021-08-05 17:03:37 -05:00
parent 7cb0b855f6
commit 88ec652760
5 changed files with 13 additions and 7 deletions

View file

@ -7,6 +7,7 @@
#include <cstdint>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include "openmc/vector.h"
@ -63,9 +64,12 @@ int32_t find_root_universe();
//==============================================================================
//! Populate all data structures needed for distribcells.
//! \param user_distribcells A set of cell indices to create distribcell data
//! structures for regardless of whether or not they are part of a tally
//! filter.
//==============================================================================
void prepare_distribcell();
void prepare_distribcell(const std::unordered_set<int32_t>* user_distribcells = nullptr);
//==============================================================================
//! Recursively search through the geometry and count cell instances.

View file

@ -105,7 +105,6 @@ extern int trigger_batch_interval; //!< Batch interval for triggers
extern "C" int verbosity; //!< How verbose to make output
extern double weight_cutoff; //!< Weight cutoff for Russian roulette
extern double weight_survive; //!< Survival weight after Russian roulette
extern std::unordered_set<int32_t> distribcells; //!< Manually set distribcells
} // namespace settings
//==============================================================================

View file

@ -44,6 +44,8 @@ public:
const vector<CellInstance>& cell_instances() const { return cell_instances_; }
const std::unordered_set<int32_t>& cells() const { return cells_; }
void set_cell_instances(gsl::span<CellInstance> instances);
private:

View file

@ -2,7 +2,6 @@
#include <algorithm> // for std::max
#include <sstream>
#include <unordered_set>
#include <fmt/core.h>
#include <pugixml.hpp>
@ -311,12 +310,14 @@ find_root_universe()
//==============================================================================
void
prepare_distribcell()
prepare_distribcell(const std::unordered_set<int32_t>* user_distribcells)
{
write_message("Preparing distributed cell instances...", 5);
std::unordered_set<int32_t> distribcells;
// start with any cells manually specified via the C++ API
std::unordered_set<int32_t> distribcells = settings::distribcells;
if (user_distribcells) distribcells = *user_distribcells;
// Find all cells listed in a DistribcellFilter or CellInstanceFilter
for (auto& filt : model::tally_filters) {
@ -326,7 +327,8 @@ prepare_distribcell()
distribcells.insert(distrib_filt->cell());
}
if (cell_inst_filt) {
for (const auto& c_inst : cell_inst_filt->cell_instances()) distribcells.insert(c_inst.index_cell);
const auto& filter_cells = cell_inst_filt->cells();
distribcells.insert(filter_cells.begin(), filter_cells.end());
}
}

View file

@ -114,7 +114,6 @@ int trigger_batch_interval {1};
int verbosity {7};
double weight_cutoff {0.25};
double weight_survive {1.0};
std::unordered_set<int32_t> distribcells;
} // namespace settings