mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-27 05:35:49 -04:00
Use uniqe_ptr<Filter> for global filter vector
This commit is contained in:
parent
89bf3a6afb
commit
9f6801ca74
3 changed files with 29 additions and 29 deletions
|
|
@ -2,6 +2,7 @@
|
|||
#define OPENMC_TALLIES_FILTER_H
|
||||
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
|
@ -23,7 +24,7 @@ extern std::vector<FilterMatch> filter_matches;
|
|||
#pragma omp threadprivate(filter_matches)
|
||||
|
||||
class Filter;
|
||||
extern std::vector<Filter*> tally_filters;
|
||||
extern std::vector<std::unique_ptr<Filter>> tally_filters;
|
||||
|
||||
//==============================================================================
|
||||
//! Stores bins and weights for filtered tally events.
|
||||
|
|
|
|||
|
|
@ -187,9 +187,9 @@ prepare_distribcell()
|
|||
{
|
||||
// Find all cells listed in a DistribcellFilter.
|
||||
std::unordered_set<int32_t> distribcells;
|
||||
for (auto* filt : tally_filters) {
|
||||
if (filt->type() == "distribcell") {
|
||||
auto* distrib_filt = static_cast<DistribcellFilter*>(filt);
|
||||
for (auto& filt : tally_filters) {
|
||||
auto* distrib_filt = dynamic_cast<DistribcellFilter*>(filt.get());
|
||||
if (distrib_filt) {
|
||||
distribcells.insert(distrib_filt->cell_);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ namespace openmc {
|
|||
//==============================================================================
|
||||
|
||||
std::vector<FilterMatch> filter_matches;
|
||||
std::vector<Filter*> tally_filters;
|
||||
std::vector<std::unique_ptr<Filter>> tally_filters;
|
||||
|
||||
//==============================================================================
|
||||
// Non-member functions
|
||||
|
|
@ -48,7 +48,6 @@ free_memory_tally_c()
|
|||
filter_matches.clear();
|
||||
}
|
||||
|
||||
for (Filter* filt : tally_filters) {delete filt;}
|
||||
tally_filters.clear();
|
||||
}
|
||||
|
||||
|
|
@ -97,53 +96,53 @@ extern "C" {
|
|||
{
|
||||
std::string type_ {type};
|
||||
if (type_ == "azimuthal") {
|
||||
tally_filters.push_back(new AzimuthalFilter());
|
||||
tally_filters.push_back(std::make_unique<AzimuthalFilter>());
|
||||
} else if (type_ == "cell") {
|
||||
tally_filters.push_back(new CellFilter());
|
||||
tally_filters.push_back(std::make_unique<CellFilter>());
|
||||
} else if (type_ == "cellborn") {
|
||||
tally_filters.push_back(new CellbornFilter());
|
||||
tally_filters.push_back(std::make_unique<CellbornFilter>());
|
||||
} else if (type_ == "cellfrom") {
|
||||
tally_filters.push_back(new CellFromFilter());
|
||||
tally_filters.push_back(std::make_unique<CellFromFilter>());
|
||||
} else if (type_ == "distribcell") {
|
||||
tally_filters.push_back(new DistribcellFilter());
|
||||
tally_filters.push_back(std::make_unique<DistribcellFilter>());
|
||||
} else if (type_ == "delayedgroup") {
|
||||
tally_filters.push_back(new DelayedGroupFilter());
|
||||
tally_filters.push_back(std::make_unique<DelayedGroupFilter>());
|
||||
} else if (type_ == "energyfunction") {
|
||||
tally_filters.push_back(new EnergyFunctionFilter());
|
||||
tally_filters.push_back(std::make_unique<EnergyFunctionFilter>());
|
||||
} else if (type_ == "energy") {
|
||||
tally_filters.push_back(new EnergyFilter());
|
||||
tally_filters.push_back(std::make_unique<EnergyFilter>());
|
||||
} else if (type_ == "energyout") {
|
||||
tally_filters.push_back(new EnergyoutFilter());
|
||||
tally_filters.push_back(std::make_unique<EnergyoutFilter>());
|
||||
} else if (type_ == "legendre") {
|
||||
tally_filters.push_back(new LegendreFilter());
|
||||
tally_filters.push_back(std::make_unique<LegendreFilter>());
|
||||
} else if (type_ == "material") {
|
||||
tally_filters.push_back(new MaterialFilter());
|
||||
tally_filters.push_back(std::make_unique<MaterialFilter>());
|
||||
} else if (type_ == "mesh") {
|
||||
tally_filters.push_back(new MeshFilter());
|
||||
tally_filters.push_back(std::make_unique<MeshFilter>());
|
||||
} else if (type_ == "meshsurface") {
|
||||
tally_filters.push_back(new MeshSurfaceFilter());
|
||||
tally_filters.push_back(std::make_unique<MeshSurfaceFilter>());
|
||||
} else if (type_ == "mu") {
|
||||
tally_filters.push_back(new MuFilter());
|
||||
tally_filters.push_back(std::make_unique<MuFilter>());
|
||||
} else if (type_ == "particle") {
|
||||
tally_filters.push_back(new ParticleFilter());
|
||||
tally_filters.push_back(std::make_unique<ParticleFilter>());
|
||||
} else if (type_ == "polar") {
|
||||
tally_filters.push_back(new PolarFilter());
|
||||
tally_filters.push_back(std::make_unique<PolarFilter>());
|
||||
} else if (type_ == "surface") {
|
||||
tally_filters.push_back(new SurfaceFilter());
|
||||
tally_filters.push_back(std::make_unique<SurfaceFilter>());
|
||||
} else if (type_ == "spatiallegendre") {
|
||||
tally_filters.push_back(new SpatialLegendreFilter());
|
||||
tally_filters.push_back(std::make_unique<SpatialLegendreFilter>());
|
||||
} else if (type_ == "sphericalharmonics") {
|
||||
tally_filters.push_back(new SphericalHarmonicsFilter());
|
||||
tally_filters.push_back(std::make_unique<SphericalHarmonicsFilter>());
|
||||
} else if (type_ == "universe") {
|
||||
tally_filters.push_back(new UniverseFilter());
|
||||
tally_filters.push_back(std::make_unique<UniverseFilter>());
|
||||
} else if (type_ == "zernike") {
|
||||
tally_filters.push_back(new ZernikeFilter());
|
||||
tally_filters.push_back(std::make_unique<ZernikeFilter>());
|
||||
} else if (type_ == "zernikeradial") {
|
||||
tally_filters.push_back(new ZernikeRadialFilter());
|
||||
tally_filters.push_back(std::make_unique<ZernikeRadialFilter>());
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
return tally_filters.back();
|
||||
return tally_filters.back().get();
|
||||
}
|
||||
|
||||
void filter_from_xml(Filter* filt, pugi::xml_node* node)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue