mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-21 14:35:27 -04:00
Merge pull request #1865 from pshriwise/manual_distribcells
Allow addition of distributed cell index generation in C++ API.
This commit is contained in:
commit
4c17061a1d
3 changed files with 17 additions and 4 deletions
|
|
@ -7,6 +7,7 @@
|
|||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#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::vector<int32_t>* user_distribcells = nullptr);
|
||||
|
||||
//==============================================================================
|
||||
//! Recursively search through the geometry and count cell instances.
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -311,12 +311,18 @@ find_root_universe()
|
|||
//==============================================================================
|
||||
|
||||
void
|
||||
prepare_distribcell()
|
||||
prepare_distribcell(const std::vector<int32_t>* user_distribcells)
|
||||
{
|
||||
write_message("Preparing distributed cell instances...", 5);
|
||||
|
||||
// Find all cells listed in a DistribcellFilter or CellInstanceFilter
|
||||
std::unordered_set<int32_t> distribcells;
|
||||
|
||||
// start with any cells manually specified via the C++ API
|
||||
if (user_distribcells) {
|
||||
distribcells.insert(user_distribcells->begin(), user_distribcells->end());
|
||||
}
|
||||
|
||||
// Find all cells listed in a DistribcellFilter or CellInstanceFilter
|
||||
for (auto& filt : model::tally_filters) {
|
||||
auto* distrib_filt = dynamic_cast<DistribcellFilter*>(filt.get());
|
||||
auto* cell_inst_filt = dynamic_cast<CellInstanceFilter*>(filt.get());
|
||||
|
|
@ -324,7 +330,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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue