Loading [MathJax]/extensions/tex2jax.js
Cardinal
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
OpenMCProblemBase.h
Go to the documentation of this file.
1/********************************************************************/
2/* SOFTWARE COPYRIGHT NOTIFICATION */
3/* Cardinal */
4/* */
5/* (c) 2021 UChicago Argonne, LLC */
6/* ALL RIGHTS RESERVED */
7/* */
8/* Prepared by UChicago Argonne, LLC */
9/* Under Contract No. DE-AC02-06CH11357 */
10/* With the U. S. Department of Energy */
11/* */
12/* Prepared by Battelle Energy Alliance, LLC */
13/* Under Contract No. DE-AC07-05ID14517 */
14/* With the U. S. Department of Energy */
15/* */
16/* See LICENSE for full restrictions */
17/********************************************************************/
18
19#pragma once
20
21#define LIBMESH
22
23#include "CardinalProblem.h"
24#include "PostprocessorInterface.h"
25#include "CardinalEnums.h"
26
27#include "mpi.h"
28#include "openmc/bank.h"
29#include "openmc/capi.h"
30#include "openmc/cell.h"
31#include "openmc/geometry.h"
32#include "openmc/geometry_aux.h"
33#include "openmc/hdf5_interface.h"
34#include "openmc/material.h"
35#include "openmc/mesh.h"
36#include "openmc/settings.h"
37#include "openmc/simulation.h"
38#include "openmc/source.h"
39#include "openmc/state_point.h"
40#include "openmc/tallies/tally.h"
41#include "openmc/tallies/filter_cell_instance.h"
42#include "xtensor/xview.hpp"
43
44// Forward declarations to avoid cyclic dependencies.
48
52class OpenMCProblemBase : public CardinalProblem, public PostprocessorInterface
53{
54public:
55 OpenMCProblemBase(const InputParameters & params);
56
57 static InputParameters validParams();
58
59 virtual ~OpenMCProblemBase() override;
60
66 std::string subdomainName(const SubdomainID & id) const;
67
73 void catchOpenMCError(const int & err, const std::string descriptor) const;
74
79 bool isReactionRateScore(const std::string & score) const;
80
85 bool isHeatingScore(const std::string & score) const;
86
93 unsigned int addExternalVariable(const std::string & name, const std::vector<SubdomainName> * block = nullptr);
94
99 const Real & scaling() const { return _scaling; }
100
105 bool hasScaling() const { return _specified_scaling; }
106
112 std::string enumToTallyScore(const std::string & score) const;
113
119 std::string tallyScoreToEnum(const std::string & score) const;
120
126 virtual void geometryType(bool & has_csg_universe, bool & has_dag_universe) const;
127
129 bool firstSolve() const;
130
137 openmc::TriggerMetric triggerMetric(std::string trigger) const;
138
144 openmc::TallyEstimator tallyEstimator(tally::TallyEstimatorEnum estimator) const;
145
151 std::string estimatorToString(openmc::TallyEstimator estimator) const;
152
154 void externalSolve() override;
155
157 virtual void syncSolutions(ExternalProblem::Direction direction) override;
158 virtual bool adaptMesh() override;
159
161 void importProperties() const;
162
175 xt::xtensor<double, 1> tallySum(openmc::Tally * tally, const unsigned int & score) const;
176
183 double tallySumAcrossBins(std::vector<openmc::Tally *> tally, const unsigned int & score) const;
184
191 double tallyMeanAcrossBins(std::vector<openmc::Tally *> tally, const unsigned int & score) const;
192
197 typedef std::pair<int32_t, int32_t> cellInfo;
198
204 bool cellIsVoid(const cellInfo & cell_info) const;
205
211 bool cellHasZeroInstances(const cellInfo & cell_info) const;
212
219 std::string materialName(const int32_t index) const;
220
227 xt::xtensor<double, 1> relativeError(const xt::xtensor<double, 1> & sum,
228 const xt::xtensor<double, 1> & sum_sq, const int & n_realizations) const;
229
235
240 int nParticles() const;
241
246 int nTotalParticles() const { return _total_n_particles; }
247
253 int32_t cellID(const int32_t index) const;
254
260 int32_t materialID(const int32_t index) const;
261
266 std::string printPoint(const Point & p) const;
267
273 std::string printMaterial(const int32_t & index) const;
274
279 void writeSourceBank(const std::string & filename);
280
287 unsigned int numElemsInSubdomain(const SubdomainID & id) const;
288
293 bool isLocalElem(const Elem * elem) const;
294
300 unsigned int globalElemID(const unsigned int & id) const { return _local_to_global_elem[id]; }
301
311 virtual void setCellTemperature(const int32_t & id, const int32_t & instance, const Real & T,
312 const cellInfo & cell_info) const;
313
319 virtual void setCellDensity(const Real & density, const cellInfo & cell_info) const;
320
327 virtual std::string printCell(const cellInfo & cell_info, const bool brief = false) const;
328
335 virtual std::vector<int32_t> cellFill(const cellInfo & cell_info, int & fill_type) const;
336
344 bool materialFill(const cellInfo & cell_info, int32_t & material_index) const;
345
350 long unsigned int numCells() const;
351
356 virtual std::vector<int32_t> getMappedTallyIDs() const = 0;
357
358protected:
361
364
367
370
373
374 // execute tallly and filte editors
376
379
382
389 void fillElementalAuxVariable(const unsigned int & var_num,
390 const std::vector<unsigned int> & elem_ids,
391 const Real & value);
392
397 std::string sourceBankFileName() const
398 {
399 return openmc::settings::path_output + "initial_source_" +
400 std::to_string(_fixed_point_iteration) + ".h5";
401 }
402
404 const bool & _verbose;
405
407 const Real * _power;
408
410 const Real * _source_strength;
411
420
423
443 const Real & _scaling;
444
446 const bool & _skip_statepoint;
447
455
457 unsigned int _total_n_particles;
458
460 long unsigned int _n_openmc_cells;
461
469
471 openmc::RunMode _run_mode;
472
474 std::vector<OpenMCNuclideDensities *> _nuclide_densities_uos;
475
477 std::vector<OpenMCDomainFilterEditor *> _filter_editor_uos;
478
480 std::vector<OpenMCTallyEditor *> _tally_editor_uos;
481
483 std::vector<unsigned int> _local_to_global_elem;
484
486 const bool _has_adaptivity;
487
494
496 static constexpr Real _density_conversion_factor{0.001};
497
499 static constexpr int MATERIAL_VOID{-1};
500};
Definition CardinalProblem.h:27
Definition OpenMCDomainFilterEditor.h:33
Definition OpenMCNuclideDensities.h:29
Definition OpenMCProblemBase.h:53
const bool _specified_scaling
Whether a mesh scaling was specified by the user.
Definition OpenMCProblemBase.h:422
double tallySumAcrossBins(std::vector< openmc::Tally * > tally, const unsigned int &score) const
void executeFilterEditors()
Execute all filter editor userobjects.
OpenMCProblemBase(const InputParameters &params)
void importProperties() const
Import temperature and density from a properties.h5 file.
static InputParameters validParams()
const Real & _scaling
Definition OpenMCProblemBase.h:443
virtual void syncSolutions(ExternalProblem::Direction direction) override
Set the 'mesh changed' adaptivity flag.
openmc::TriggerMetric triggerMetric(trigger::TallyTriggerTypeEnum trigger) const
unsigned int _total_n_particles
Total number of particles simulated.
Definition OpenMCProblemBase.h:457
long unsigned int _n_openmc_cells
Total number of unique OpenMC cell IDs + instances combinations.
Definition OpenMCProblemBase.h:460
virtual void setCellTemperature(const int32_t &id, const int32_t &instance, const Real &T, const cellInfo &cell_info) const
bool materialFill(const cellInfo &cell_info, int32_t &material_index) const
void checkOpenMCUserObjectIDs() const
Ensure that the IDs of OpenMC objects in UserObjects don't clash.
void getOpenMCUserObjects()
Find all userobjects which are changing OpenMC data structures.
int nParticles() const
void externalSolve() override
Run a k-eigenvalue OpenMC simulation.
bool firstSolve() const
Whether this is the first time OpenMC is running.
virtual bool adaptMesh() override
int _fixed_point_iteration
Definition OpenMCProblemBase.h:454
std::string subdomainName(const SubdomainID &id) const
static constexpr Real _density_conversion_factor
Conversion unit to transfer between kg/m3 and g/cm3.
Definition OpenMCProblemBase.h:496
bool cellIsVoid(const cellInfo &cell_info) const
bool isLocalElem(const Elem *elem) const
void sendTallyNuclidesToOpenMC()
Set the tally nuclides for any tallies being modified via MOOSE.
void catchOpenMCError(const int &err, const std::string descriptor) const
std::vector< OpenMCNuclideDensities * > _nuclide_densities_uos
Userobjects for changing OpenMC material compositions.
Definition OpenMCProblemBase.h:474
std::string printPoint(const Point &p) const
unsigned int numElemsInSubdomain(const SubdomainID &id) const
const bool & _verbose
Whether to print diagnostic information about model setup and the transfers.
Definition OpenMCProblemBase.h:404
xt::xtensor< double, 1 > tallySum(openmc::Tally *tally, const unsigned int &score) const
Compute the sum of a tally within each bin.
int32_t cellID(const int32_t index) const
xt::xtensor< double, 1 > relativeError(const xt::xtensor< double, 1 > &sum, const xt::xtensor< double, 1 > &sum_sq, const int &n_realizations) const
double tallyMeanAcrossBins(std::vector< openmc::Tally * > tally, const unsigned int &score) const
openmc::TriggerMetric triggerMetric(std::string trigger) const
bool _run_on_adaptivity_cycle
Definition OpenMCProblemBase.h:493
std::pair< int32_t, int32_t > cellInfo
Definition OpenMCProblemBase.h:197
void checkTallyEditorIDs() const
Ensure that any tally editors don't apply to Cardinal-mapped tallies.
const Real & scaling() const
Definition OpenMCProblemBase.h:99
std::string materialName(const int32_t index) const
virtual void geometryType(bool &has_csg_universe, bool &has_dag_universe) const
const bool _has_adaptivity
Whether or not the problem contains mesh adaptivity.
Definition OpenMCProblemBase.h:486
const Real * _source_strength
Source strength by which to normalize the OpenMC results, for fixed source mode.
Definition OpenMCProblemBase.h:410
std::vector< OpenMCDomainFilterEditor * > _filter_editor_uos
Userobjects for creating/changing OpenMC filters.
Definition OpenMCProblemBase.h:477
virtual void setCellDensity(const Real &density, const cellInfo &cell_info) const
bool _reuse_source
Definition OpenMCProblemBase.h:419
bool isReactionRateScore(const std::string &score) const
virtual std::vector< int32_t > cellFill(const cellInfo &cell_info, int &fill_type) const
std::string estimatorToString(openmc::TallyEstimator estimator) const
bool isHeatingScore(const std::string &score) const
std::string tallyScoreToEnum(const std::string &score) const
const Real * _power
Power by which to normalize the OpenMC results, for k-eigenvalue mode.
Definition OpenMCProblemBase.h:407
unsigned int addExternalVariable(const std::string &name, const std::vector< SubdomainName > *block=nullptr)
virtual ~OpenMCProblemBase() override
std::string printMaterial(const int32_t &index) const
const bool & _skip_statepoint
Whether to skip writing statepoints from OpenMC.
Definition OpenMCProblemBase.h:446
int nTotalParticles() const
Definition OpenMCProblemBase.h:246
void sendNuclideDensitiesToOpenMC()
Set the nuclide densities for any materials being modified via MOOSE.
void executeTallyEditors()
Execute all tally editor userobjects.
virtual std::vector< int32_t > getMappedTallyIDs() const =0
int _n_cell_digits
Definition OpenMCProblemBase.h:468
int32_t materialID(const int32_t index) const
unsigned int globalElemID(const unsigned int &id) const
Definition OpenMCProblemBase.h:300
std::vector< unsigned int > _local_to_global_elem
Mapping from local element indices to global element indices for this rank.
Definition OpenMCProblemBase.h:483
const Real & densityConversionFactor() const
Definition OpenMCProblemBase.h:234
void writeSourceBank(const std::string &filename)
std::string sourceBankFileName() const
Definition OpenMCProblemBase.h:397
std::string enumToTallyScore(const std::string &score) const
bool cellHasZeroInstances(const cellInfo &cell_info) const
static constexpr int MATERIAL_VOID
ID used by OpenMC to indicate that a material fill is VOID.
Definition OpenMCProblemBase.h:499
openmc::RunMode _run_mode
OpenMC run mode.
Definition OpenMCProblemBase.h:471
void fillElementalAuxVariable(const unsigned int &var_num, const std::vector< unsigned int > &elem_ids, const Real &value)
bool hasScaling() const
Definition OpenMCProblemBase.h:105
virtual std::string printCell(const cellInfo &cell_info, const bool brief=false) const
long unsigned int numCells() const
std::vector< OpenMCTallyEditor * > _tally_editor_uos
Userobjects for creating/changing OpenMC tallies.
Definition OpenMCProblemBase.h:480
openmc::TallyEstimator tallyEstimator(tally::TallyEstimatorEnum estimator) const
Definition OpenMCTallyEditor.h:31
Definition CardinalEnums.h:138
TallyEstimatorEnum
Type of estimator to use for OpenMC tallies.
Definition CardinalEnums.h:149
Definition CardinalEnums.h:169
TallyTriggerTypeEnum
Type of trigger to apply.
Definition CardinalEnums.h:172