https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
RadiationTransferAction Class Reference

#include <RadiationTransferAction.h>

Inheritance diagram for RadiationTransferAction:
[legend]

Public Types

typedef DataFileName DataFileParameterType
 

Public Member Functions

 RadiationTransferAction (const InputParameters &params)
 
virtual void act () override
 
void timedAct ()
 
virtual void addRelationshipManagers (Moose::RelationshipManagerType when_type)
 
MooseObjectName uniqueActionName () const
 
const std::string & specificTaskName () const
 
const std::set< std::string > & getAllTasks () const
 
void appendTask (const std::string &task)
 
MooseAppgetMooseApp () const
 
const std::string & type () const
 
const std::string & name () const
 
std::string typeAndName () const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
MooseObjectName uniqueName () const
 
const InputParametersparameters () const
 
const hit::Node * getHitNode () const
 
bool hasBase () const
 
const std::string & getBase () const
 
const TgetParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const TqueryParam (const std::string &name) const
 
const TgetRenamedParam (const std::string &old_name, const std::string &new_name) const
 
T getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &name) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
std::string messagePrefix (const bool hit_prefix=true) const
 
std::string errorPrefix (const std::string &) const
 
void mooseError (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecatedNoTrace (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
void callMooseError (std::string msg, const bool with_prefix, const hit::Node *node=nullptr, const bool show_trace=true) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
PerfGraphperfGraph ()
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static InputParameters validParams ()
 
static void callMooseError (MooseApp *const app, const InputParameters &params, std::string msg, const bool with_prefix, const hit::Node *node, const bool show_trace=true)
 

Public Attributes

 usingCombinedWarningSolutionWarnings
 
const ConsoleStream _console
 

Static Public Attributes

static const std::string unique_action_name_param
 
static const std::string type_param
 
static const std::string name_param
 
static const std::string unique_name_param
 
static const std::string app_param
 
static const std::string moose_base_param
 
static const std::string kokkos_object_param
 
static constexpr auto SYSTEM
 
static constexpr auto NAME
 

Protected Member Functions

void checkBoundaryParameterIsSubset (const std::string &param) const
 Checks that param boundaries are in the 'boundary' parameter. More...
 
void addMeshGenerator ()
 
void addRadiationObject () const
 
void addViewFactorObject () const
 
void addRadiationBCs () const
 
void addRayStudyObject () const
 
void addRayBCs () const
 
void addHeatFluxAuxVariable () const
 
void addHeatFluxAuxKernel () const
 
std::vector< std::vector< std::string > > radiationPatchNames () const
 
std::vector< std::vector< std::string > > bcRadiationPatchNames () const
 
std::vector< BoundaryName > patchBoundaryNames (const std::vector< BoundaryName > &boundary_names) const
 
std::vector< BoundaryName > radiationPatchBoundaryNames () const
 
std::vector< BoundaryName > adiabaticPatchBoundaryNames () const
 
UserObjectName viewFactorObjectName () const
 
UserObjectName radiationObjectName () const
 
UserObjectName rayStudyName () const
 
std::string rayBCName () const
 
std::string symmetryRayBCName () const
 
MeshGeneratorName meshGeneratorName (unsigned int j) const
 
unsigned int nPatch (unsigned int j) const
 provides the updated number of patches for this boundary More...
 
bool addRelationshipManagers (Moose::RelationshipManagerType when_type, const InputParameters &moose_object_pars)
 
void associateWithParameter (const std::string &param_name, InputParameters &params) const
 
void associateWithParameter (const InputParameters &from_params, const std::string &param_name, InputParameters &params) const
 
const TgetMeshProperty (const std::string &data_name, const std::string &prefix)
 
const TgetMeshProperty (const std::string &data_name)
 
bool hasMeshProperty (const std::string &data_name, const std::string &prefix) const
 
bool hasMeshProperty (const std::string &data_name, const std::string &prefix) const
 
bool hasMeshProperty (const std::string &data_name) const
 
bool hasMeshProperty (const std::string &data_name) const
 
std::string meshPropertyName (const std::string &data_name) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level, const std::string &live_message, const bool print_dots=true) const
 
std::string timedSectionName (const std::string &section_name) const
 
void flagInvalidSolutionInternal (const InvalidSolutionID invalid_solution_id) const
 
InvalidSolutionID registerInvalidSolutionInternal (const std::string &message, const bool warning) const
 

Static Protected Member Functions

static std::string meshPropertyName (const std::string &data_name, const std::string &prefix)
 

Protected Attributes

const std::vector< BoundaryName > _boundary_names
 the boundary names participating in the radiative heat transfer More...
 
const MooseEnum _view_factor_calculator
 the type of view factor calculation being performed More...
 
const bool _add_heat_flux_aux
 Whether to add heat flux aux. More...
 
VariableName _heat_flux_variable
 Heat flux aux name. More...
 
std::vector< SubdomainName > _heat_flux_aux_block
 Blocks to use for heat flux aux. More...
 
std::string _registered_identifier
 
std::string _specific_task_name
 
std::set< std::string > _all_tasks
 
ActionWarehouse_awh
 
const std::string & _current_task
 
std::shared_ptr< MooseMesh > & _mesh
 
std::shared_ptr< MooseMesh > & _displaced_mesh
 
std::shared_ptr< FEProblemBase > & _problem
 
PerfID _act_timer
 
MooseApp_app
 
Factory_factory
 
ActionFactory_action_factory
 
const std::string & _type
 
const std::string & _name
 
const InputParameters_pars
 
MooseApp_pg_moose_app
 
const std::string _prefix
 
const Parallel::Communicator & _communicator
 

Detailed Description

Definition at line 16 of file RadiationTransferAction.h.

Constructor & Destructor Documentation

◆ RadiationTransferAction()

RadiationTransferAction::RadiationTransferAction ( const InputParameters params)

Definition at line 121 of file RadiationTransferAction.C.

122  : Action(params),
123  _boundary_names(getParam<std::vector<BoundaryName>>("boundary")),
124  _view_factor_calculator(getParam<MooseEnum>("view_factor_calculator")),
125  _add_heat_flux_aux(getParam<bool>("add_heat_flux_aux"))
126 {
127  const auto & symmetry_names = getParam<std::vector<BoundaryName>>("symmetry_boundary");
128 
129  if (_view_factor_calculator != "ray_tracing")
130  {
131  for (const auto & param_name : {"polar_quad_order",
132  "azimuthal_quad_order",
133  "ray_tracing_face_type",
134  "ray_tracing_face_order"})
135  if (params.isParamSetByUser(param_name))
136  paramWarning(param_name,
137  "Only used for view_factor_calculator = ray_tracing. It is ignored for this "
138  "calculation.");
139 
140  if (symmetry_names.size())
141  paramError("symmetry_boundary",
142  "Symmetry boundaries are only supported with view_factor_calculator = "
143  "ray_tracing.");
144  }
145  else
146  {
147  // check that there is no overlap between sidesets and symmetry sidesets
148  for (const auto & name : _boundary_names)
149  if (std::find(symmetry_names.begin(), symmetry_names.end(), name) != symmetry_names.end())
150  paramError("boundary",
151  "Boundary ",
152  name,
153  " is present in parameter boundary and symmetry_boundary.");
154  }
155 
156  if (_add_heat_flux_aux)
157  {
158  if (isParamValid("heat_flux_variable"))
159  _heat_flux_variable = getParam<VariableName>("heat_flux_variable");
160  else
161  paramError("heat_flux_variable",
162  "If 'add_heat_flux_aux' is true, then this parameter must be provided.");
163 
164  if (isParamValid("heat_flux_aux_block"))
165  _heat_flux_aux_block = getParam<std::vector<SubdomainName>>("heat_flux_aux_block");
166  else
167  paramError("heat_flux_aux_block",
168  "If 'add_heat_flux_aux' is true, then this parameter must be provided.");
169  }
170 
171  checkBoundaryParameterIsSubset("adiabatic_boundary");
172  checkBoundaryParameterIsSubset("fixed_temperature_boundary");
173 }
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
void paramError(const std::string &param, Args... args) const
const T & getParam(const std::string &name) const
std::vector< SubdomainName > _heat_flux_aux_block
Blocks to use for heat flux aux.
Action(const InputParameters &parameters)
const bool _add_heat_flux_aux
Whether to add heat flux aux.
const std::string & name() const
void checkBoundaryParameterIsSubset(const std::string &param) const
Checks that param boundaries are in the &#39;boundary&#39; parameter.
bool isParamSetByUser(const std::string &name) const
const MooseEnum _view_factor_calculator
the type of view factor calculation being performed
bool isParamValid(const std::string &name) const
void paramWarning(const std::string &param, Args... args) const
VariableName _heat_flux_variable
Heat flux aux name.

Member Function Documentation

◆ act()

void RadiationTransferAction::act ( )
overridevirtual

Implements Action.

Definition at line 185 of file RadiationTransferAction.C.

186 {
187  if (_current_task == "append_mesh_generator")
189  else if (_current_task == "add_user_object")
190  {
194  }
195  else if (_current_task == "add_bc")
196  addRadiationBCs();
197  else if (_current_task == "add_ray_boundary_condition")
198  addRayBCs();
199  else if (_current_task == "add_aux_variable" && _add_heat_flux_aux)
201  else if (_current_task == "add_aux_kernel" && _add_heat_flux_aux)
203 }
const bool _add_heat_flux_aux
Whether to add heat flux aux.
const std::string & _current_task

◆ addHeatFluxAuxKernel()

void RadiationTransferAction::addHeatFluxAuxKernel ( ) const
protected

Definition at line 593 of file RadiationTransferAction.C.

Referenced by act().

594 {
595  const std::string class_name = "GrayLambertRadiationHeatFluxAux";
596  InputParameters params = _factory.getValidParams(class_name);
597  params.set<AuxVariableName>("variable") = _heat_flux_variable;
598  params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
599  params.set<UserObjectName>("surface_radiation_object") = radiationObjectName();
600  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
601  _problem->addAuxKernel(class_name, "radiation_heat_flux_aux_kernel", params);
602 }
Factory & _factory
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
const ExecFlagType EXEC_TIMESTEP_END
UserObjectName radiationObjectName() const
std::shared_ptr< FEProblemBase > & _problem
std::vector< BoundaryName > radiationPatchBoundaryNames() const
VariableName _heat_flux_variable
Heat flux aux name.
const ExecFlagType EXEC_INITIAL

◆ addHeatFluxAuxVariable()

void RadiationTransferAction::addHeatFluxAuxVariable ( ) const
protected

Definition at line 582 of file RadiationTransferAction.C.

Referenced by act().

583 {
584  const std::string var_type = "MooseVariable";
585  auto params = _factory.getValidParams(var_type);
586  params.set<std::vector<SubdomainName>>("block") = _heat_flux_aux_block;
587  params.set<MooseEnum>("order") = "CONSTANT";
588  params.set<MooseEnum>("family") = "MONOMIAL";
589  _problem->addAuxVariable(var_type, _heat_flux_variable, params);
590 }
std::vector< SubdomainName > _heat_flux_aux_block
Blocks to use for heat flux aux.
Factory & _factory
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
std::shared_ptr< FEProblemBase > & _problem
VariableName _heat_flux_variable
Heat flux aux name.

◆ addMeshGenerator()

void RadiationTransferAction::addMeshGenerator ( )
protected

Definition at line 517 of file RadiationTransferAction.C.

Referenced by act().

518 {
519  std::vector<unsigned int> n_patches = getParam<std::vector<unsigned int>>("n_patches");
520  MultiMooseEnum partitioners = getParam<MultiMooseEnum>("partitioners");
521  if (!_pars.isParamSetByUser("partitioners"))
522  {
523  partitioners.clearSetValues();
524  for (unsigned int j = 0; j < _boundary_names.size(); ++j)
525  partitioners.setAdditionalValue("metis");
526  }
527 
528  MultiMooseEnum direction = getParam<MultiMooseEnum>("centroid_partitioner_directions");
529 
530  // check input parameters
531  if (_boundary_names.size() != n_patches.size())
532  mooseError("n_patches parameter must have same length as boundary parameter.");
533 
534  if (_boundary_names.size() != partitioners.size())
535  mooseError("partitioners parameter must have same length as boundary parameter.");
536 
537  for (unsigned int j = 0; j < partitioners.size(); ++j)
538  if (partitioners[j] == "centroid" && direction.size() != _boundary_names.size())
539  mooseError(
540  "centroid partitioner is selected for at least one sideset. "
541  "centroid_partitioner_directions parameter must have same length as boundary parameter.");
542 
543  // check if mesh is a MeshGeneratorMesh
544  std::shared_ptr<MeshGeneratorMesh> mg_mesh = std::dynamic_pointer_cast<MeshGeneratorMesh>(_mesh);
545  if (!mg_mesh)
546  mooseError("This action adds MeshGenerator objects and therefore only works with a "
547  "MeshGeneratorMesh.");
548 
549  for (unsigned int j = 0; j < _boundary_names.size(); ++j)
550  {
551  InputParameters params = _factory.getValidParams("PatchSidesetGenerator");
552  params.set<BoundaryName>("boundary") = _boundary_names[j];
553  params.set<unsigned int>("n_patches") = n_patches[j];
554  params.set<MooseEnum>("partitioner") = partitioners[j];
555 
556  if (partitioners[j] == "centroid")
557  params.set<MooseEnum>("centroid_partitioner_direction") = direction[j];
558 
559  _app.appendMeshGenerator("PatchSidesetGenerator", meshGeneratorName(j), params);
560  }
561 }
const InputParameters & _pars
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
Factory & _factory
MooseApp & _app
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
unsigned int size() const
MeshGeneratorName meshGeneratorName(unsigned int j) const
const MeshGenerator & appendMeshGenerator(const std::string &type, const std::string &name, InputParameters params)
bool isParamSetByUser(const std::string &name) const
std::shared_ptr< MooseMesh > & _mesh
void mooseError(Args &&... args) const
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
void clearSetValues()

◆ addRadiationBCs()

void RadiationTransferAction::addRadiationBCs ( ) const
protected

Definition at line 206 of file RadiationTransferAction.C.

Referenced by act().

207 {
208  InputParameters params = _factory.getValidParams("GrayLambertNeumannBC");
209 
210  // set boundary
211  std::vector<std::vector<std::string>> radiation_patch_names = bcRadiationPatchNames();
212  std::vector<BoundaryName> boundary_names;
213  for (auto & e1 : radiation_patch_names)
214  for (auto & e2 : e1)
215  boundary_names.push_back(e2);
216 
217  params.set<std::vector<BoundaryName>>("boundary") = boundary_names;
218 
219  // set temperature variable
220  params.set<NonlinearVariableName>("variable") = getParam<VariableName>("temperature");
221 
222  // set radiationuserobject
223  params.set<UserObjectName>("surface_radiation_object_name") = radiationObjectName();
224 
225  _problem->addBoundaryCondition("GrayLambertNeumannBC", "gray_lamber_neumann_bc_" + _name, params);
226 }
const std::string & _name
Factory & _factory
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
std::vector< std::vector< std::string > > bcRadiationPatchNames() const
UserObjectName radiationObjectName() const
std::shared_ptr< FEProblemBase > & _problem

◆ addRadiationObject()

void RadiationTransferAction::addRadiationObject ( ) const
protected

Definition at line 339 of file RadiationTransferAction.C.

Referenced by act().

340 {
341  std::vector<std::vector<std::string>> radiation_patch_names = radiationPatchNames();
342 
343  // input parameter check
344  std::vector<FunctionName> emissivity = getParam<std::vector<FunctionName>>("emissivity");
345  if (emissivity.size() != _boundary_names.size())
346  mooseError("emissivity parameter needs to be the same size as the boundary parameter.");
347 
348  // the action only sets up ViewFactorObjectSurfaceRadiation, because after splitting
349  // faces auotmatically, it makes no sense to require view factor input by hand.
350  InputParameters params = _factory.getValidParams("ViewFactorObjectSurfaceRadiation");
351  params.set<std::vector<VariableName>>("temperature") = {getParam<VariableName>("temperature")};
352 
353  std::vector<FunctionName> extended_emissivity;
354  for (unsigned int j = 0; j < _boundary_names.size(); ++j)
355  for (unsigned int i = 0; i < nPatch(j); ++i)
356  extended_emissivity.push_back(emissivity[j]);
357  params.set<std::vector<FunctionName>>("emissivity") = extended_emissivity;
358 
359  // add boundary parameter
360  params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
361 
362  // add adiabatic_boundary parameter if required
363  if (isParamValid("adiabatic_boundary"))
364  params.set<std::vector<BoundaryName>>("adiabatic_boundary") = adiabaticPatchBoundaryNames();
365 
366  // add isothermal sidesets if required
367  if (isParamValid("fixed_temperature_boundary"))
368  {
369  if (!isParamValid("fixed_boundary_temperatures"))
370  mooseError("fixed_temperature_boundary is provided so fixed_boundary_temperatures must be "
371  "provided too");
372 
373  std::vector<BoundaryName> fixed_T_boundary_names =
374  getParam<std::vector<BoundaryName>>("fixed_temperature_boundary");
375 
376  std::vector<FunctionName> fixed_T_funcs =
377  getParam<std::vector<FunctionName>>("fixed_boundary_temperatures");
378 
379  // check length of fixed_boundary_temperatures
380  if (fixed_T_funcs.size() != fixed_T_boundary_names.size())
381  mooseError("Size of parameter fixed_boundary_temperatures and fixed_temperature_boundary "
382  "must be equal.");
383 
384  std::vector<BoundaryName> fixed_T_patch_names;
385  std::vector<FunctionName> fixed_T_function_names;
386  for (unsigned int k = 0; k < fixed_T_boundary_names.size(); ++k)
387  {
388  BoundaryName bnd_name = fixed_T_boundary_names[k];
389 
390  // find the right entry in _boundary_names
391  auto it = std::find(_boundary_names.begin(), _boundary_names.end(), bnd_name);
392 
393  // check if entry was found: it must be found or an error would occur later
394  if (it == _boundary_names.end())
395  mooseError("Fixed temperature sideset ", bnd_name, " not present in boundary.");
396 
397  // this is the position in the _boundary_names vector; this is what
398  // we are really after
399  auto index = std::distance(_boundary_names.begin(), it);
400 
401  // collect the correct boundary names
402  for (auto & e : radiation_patch_names[index])
403  {
404  fixed_T_patch_names.push_back(e);
405  fixed_T_function_names.push_back(fixed_T_funcs[k]);
406  }
407  }
408  params.set<std::vector<BoundaryName>>("fixed_temperature_boundary") = fixed_T_patch_names;
409  params.set<std::vector<FunctionName>>("fixed_boundary_temperatures") = fixed_T_function_names;
410  }
411 
412  // the view factor userobject name
413  params.set<UserObjectName>("view_factor_object_name") = viewFactorObjectName();
414 
415  // this userobject needs to be executed on linear and timestep end
417  exec_enum = {EXEC_LINEAR, EXEC_TIMESTEP_END};
418  params.set<ExecFlagEnum>("execute_on") = exec_enum;
419 
420  // add the object
421  _problem->addUserObject("ViewFactorObjectSurfaceRadiation", radiationObjectName(), params);
422 }
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
Factory & _factory
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
const ExecFlagType EXEC_TIMESTEP_END
std::vector< std::vector< std::string > > radiationPatchNames() const
ExecFlagEnum getDefaultExecFlagEnum()
UserObjectName viewFactorObjectName() const
const ExecFlagType EXEC_LINEAR
std::vector< BoundaryName > adiabaticPatchBoundaryNames() const
unsigned int nPatch(unsigned int j) const
provides the updated number of patches for this boundary
UserObjectName radiationObjectName() const
void mooseError(Args &&... args) const
std::shared_ptr< FEProblemBase > & _problem
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
bool isParamValid(const std::string &name) const
std::vector< BoundaryName > radiationPatchBoundaryNames() const
static const std::string k
Definition: NS.h:134
static const std::string emissivity

◆ addRayBCs()

void RadiationTransferAction::addRayBCs ( ) const
protected

Definition at line 283 of file RadiationTransferAction.C.

Referenced by act().

284 {
285  if (_view_factor_calculator == "analytical")
286  return;
287 
288  {
289  InputParameters params = _factory.getValidParams("ViewFactorRayBC");
290  params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
291  params.set<RayTracingStudy *>("_ray_tracing_study") =
292  &_problem->getUserObject<ViewFactorRayStudy>(rayStudyName());
293  _problem->addObject<RayBoundaryConditionBase>("ViewFactorRayBC", rayBCName(), params);
294  }
295 
296  // add symmetry BCs if applicable
297  const auto & symmetry_names = getParam<std::vector<BoundaryName>>("symmetry_boundary");
298  if (symmetry_names.size() > 0)
299  {
300  InputParameters params = _factory.getValidParams("ReflectRayBC");
301  params.set<std::vector<BoundaryName>>("boundary") = symmetry_names;
302  params.set<RayTracingStudy *>("_ray_tracing_study") =
303  &_problem->getUserObject<ViewFactorRayStudy>(rayStudyName());
304  _problem->addObject<RayBoundaryConditionBase>("ReflectRayBC", symmetryRayBCName(), params);
305  }
306 }
Factory & _factory
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
UserObjectName rayStudyName() const
RayTracingStudy used to generate Rays for view factor computation using the angular quadrature method...
const MooseEnum _view_factor_calculator
the type of view factor calculation being performed
std::shared_ptr< FEProblemBase > & _problem
std::string symmetryRayBCName() const
Base class for the RayBC syntax.
std::vector< BoundaryName > radiationPatchBoundaryNames() const
Base class for Ray tracing studies that will generate Rays and then propagate all of them to terminat...

◆ addRayStudyObject()

void RadiationTransferAction::addRayStudyObject ( ) const
protected

Definition at line 258 of file RadiationTransferAction.C.

Referenced by act().

259 {
260  if (_view_factor_calculator == "analytical")
261  return;
262 
263  InputParameters params = _factory.getValidParams("ViewFactorRayStudy");
264 
265  params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
266 
267  // set this object to be execute on initial only
269  exec_enum = {EXEC_INITIAL};
270  params.set<ExecFlagEnum>("execute_on") = exec_enum;
271 
272  // set face order
273  params.set<MooseEnum>("face_order") = getParam<MooseEnum>("ray_tracing_face_order");
274  params.set<MooseEnum>("face_type") = getParam<MooseEnum>("ray_tracing_face_type");
275 
276  // set angular quadrature
277  params.set<unsigned int>("polar_quad_order") = getParam<unsigned int>("polar_quad_order");
278  params.set<unsigned int>("azimuthal_quad_order") = getParam<unsigned int>("azimuthal_quad_order");
279  _problem->addUserObject("ViewFactorRayStudy", rayStudyName(), params);
280 }
Factory & _factory
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
UserObjectName rayStudyName() const
ExecFlagEnum getDefaultExecFlagEnum()
const MooseEnum _view_factor_calculator
the type of view factor calculation being performed
std::shared_ptr< FEProblemBase > & _problem
std::vector< BoundaryName > radiationPatchBoundaryNames() const
const ExecFlagType EXEC_INITIAL

◆ addViewFactorObject()

void RadiationTransferAction::addViewFactorObject ( ) const
protected

Definition at line 229 of file RadiationTransferAction.C.

Referenced by act().

230 {
231  // this userobject is only executed on initial
233  exec_enum = {EXEC_INITIAL};
234 
235  if (_view_factor_calculator == "analytical")
236  {
237  // this branch adds the UnobstructedPlanarViewFactor
238  InputParameters params = _factory.getValidParams("UnobstructedPlanarViewFactor");
239  params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
240  params.set<ExecFlagEnum>("execute_on") = exec_enum;
241 
242  _problem->addUserObject("UnobstructedPlanarViewFactor", viewFactorObjectName(), params);
243  }
244  else if (_view_factor_calculator == "ray_tracing")
245  {
246  // this branch adds the ray tracing UO
247  InputParameters params = _factory.getValidParams("RayTracingViewFactor");
248  params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
249  params.set<ExecFlagEnum>("execute_on") = exec_enum;
250  params.set<UserObjectName>("ray_study_name") = rayStudyName();
251  params.set<bool>("print_view_factor_info") = getParam<bool>("print_view_factor_info");
252  params.set<bool>("normalize_view_factor") = getParam<bool>("normalize_view_factor");
253  _problem->addUserObject("RayTracingViewFactor", viewFactorObjectName(), params);
254  }
255 }
Factory & _factory
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
UserObjectName rayStudyName() const
ExecFlagEnum getDefaultExecFlagEnum()
UserObjectName viewFactorObjectName() const
const MooseEnum _view_factor_calculator
the type of view factor calculation being performed
std::shared_ptr< FEProblemBase > & _problem
std::vector< BoundaryName > radiationPatchBoundaryNames() const
const ExecFlagType EXEC_INITIAL

◆ adiabaticPatchBoundaryNames()

std::vector< BoundaryName > RadiationTransferAction::adiabaticPatchBoundaryNames ( ) const
protected

Definition at line 507 of file RadiationTransferAction.C.

Referenced by addRadiationObject().

508 {
509  std::vector<BoundaryName> patch_boundary_names;
510  if (isParamValid("adiabatic_boundary"))
511  patch_boundary_names =
512  patchBoundaryNames(getParam<std::vector<BoundaryName>>("adiabatic_boundary"));
513  return patch_boundary_names;
514 }
const T & getParam(const std::string &name) const
std::vector< BoundaryName > patchBoundaryNames(const std::vector< BoundaryName > &boundary_names) const
bool isParamValid(const std::string &name) const

◆ bcRadiationPatchNames()

std::vector< std::vector< std::string > > RadiationTransferAction::bcRadiationPatchNames ( ) const
protected

Definition at line 446 of file RadiationTransferAction.C.

Referenced by addRadiationBCs().

447 {
448  auto ad_bnd_names = getParam<std::vector<BoundaryName>>("adiabatic_boundary");
449  auto ft_bnd_names = getParam<std::vector<BoundaryName>>("fixed_temperature_boundary");
450  std::vector<std::vector<std::string>> radiation_patch_names;
451  std::vector<BoundaryID> boundary_ids = _mesh->getBoundaryIDs(_boundary_names);
452  for (unsigned int j = 0; j < boundary_ids.size(); ++j)
453  {
454  boundary_id_type bid = boundary_ids[j];
455  BoundaryName bnd_name = _boundary_names[j];
456 
457  // check if this sideset is adiabatic or isothermal
458  auto it_a = std::find(ad_bnd_names.begin(), ad_bnd_names.end(), bnd_name);
459  auto it_t = std::find(ft_bnd_names.begin(), ft_bnd_names.end(), bnd_name);
460  if (it_a != ad_bnd_names.end() || it_t != ft_bnd_names.end())
461  continue;
462 
463  std::string base_name = _mesh->getBoundaryName(bid);
464  std::vector<std::string> bnames;
465  for (unsigned int i = 0; i < nPatch(j); ++i)
466  {
467  std::stringstream ss;
468  ss << base_name << "_" << i;
469  bnames.push_back(ss.str());
470  }
471  radiation_patch_names.push_back(bnames);
472  }
473  return radiation_patch_names;
474 }
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
int8_t boundary_id_type
std::shared_ptr< MooseMesh > & _mesh
unsigned int nPatch(unsigned int j) const
provides the updated number of patches for this boundary
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")

◆ checkBoundaryParameterIsSubset()

void RadiationTransferAction::checkBoundaryParameterIsSubset ( const std::string &  param) const
protected

Checks that param boundaries are in the 'boundary' parameter.

Definition at line 176 of file RadiationTransferAction.C.

Referenced by RadiationTransferAction().

177 {
178  const auto boundary_names = getParam<std::vector<BoundaryName>>(param);
179  for (const auto & bname : boundary_names)
180  if (std::find(_boundary_names.begin(), _boundary_names.end(), bname) == _boundary_names.end())
181  paramError(param, "The boundaries in '" + param + "' must be a subset of 'boundary'.");
182 }
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
void paramError(const std::string &param, Args... args) const

◆ meshGeneratorName()

MeshGeneratorName RadiationTransferAction::meshGeneratorName ( unsigned int  j) const
protected

Definition at line 574 of file RadiationTransferAction.C.

Referenced by addMeshGenerator(), and nPatch().

575 {
576  std::stringstream ss;
577  ss << "patch_side_set_generator_" << _boundary_names[j];
578  return ss.str();
579 }
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")

◆ nPatch()

unsigned int RadiationTransferAction::nPatch ( unsigned int  j) const
protected

provides the updated number of patches for this boundary

Definition at line 564 of file RadiationTransferAction.C.

Referenced by addRadiationObject(), bcRadiationPatchNames(), patchBoundaryNames(), and radiationPatchNames().

565 {
567  const PatchSidesetGenerator * psg = dynamic_cast<const PatchSidesetGenerator *>(mg);
568  if (!psg)
569  mooseError("Failed to convert mesh generator ", mg->name(), " to PatchSidesetGenerator.");
570  return psg->nPatches();
571 }
const MeshGenerator & getMeshGenerator(const std::string &name) const
Subdivides a sidesets into smaller patches each of which is going to be a new patch.
MooseApp & _app
MeshGeneratorName meshGeneratorName(unsigned int j) const
const std::string & name() const
void mooseError(Args &&... args) const
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
unsigned int nPatches() const

◆ patchBoundaryNames()

std::vector< BoundaryName > RadiationTransferAction::patchBoundaryNames ( const std::vector< BoundaryName > &  boundary_names) const
protected

Definition at line 477 of file RadiationTransferAction.C.

Referenced by adiabaticPatchBoundaryNames(), and radiationPatchBoundaryNames().

479 {
480  std::vector<BoundaryName> patch_boundary_names;
481  std::vector<BoundaryID> ids = _mesh->getBoundaryIDs(boundary_names_or_ids);
482  for (const auto i : index_range(boundary_names_or_ids))
483  {
484  const auto boundary_name_or_id = boundary_names_or_ids[i];
485  const auto it = std::find(_boundary_names.begin(), _boundary_names.end(), boundary_name_or_id);
486  mooseAssert(it != _boundary_names.end(), boundary_name_or_id + " not found in 'boundary'.");
487  const auto boundary_index = std::distance(_boundary_names.begin(), it);
488  const auto n_patches = nPatch(boundary_index);
489  const auto boundary_name = _mesh->getBoundaryName(ids[i]);
490  for (const auto j : make_range(n_patches))
491  {
492  std::stringstream ss;
493  ss << boundary_name << "_" << j;
494  patch_boundary_names.push_back(ss.str());
495  }
496  }
497  return patch_boundary_names;
498 }
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
std::shared_ptr< MooseMesh > & _mesh
unsigned int nPatch(unsigned int j) const
provides the updated number of patches for this boundary
IntRange< T > make_range(T beg, T end)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
auto index_range(const T &sizable)

◆ radiationObjectName()

UserObjectName RadiationTransferAction::radiationObjectName ( ) const
protected

Definition at line 333 of file RadiationTransferAction.C.

Referenced by addHeatFluxAuxKernel(), addRadiationBCs(), and addRadiationObject().

334 {
335  return "view_factor_surface_radiation_" + _name;
336 }
const std::string & _name

◆ radiationPatchBoundaryNames()

std::vector< BoundaryName > RadiationTransferAction::radiationPatchBoundaryNames ( ) const
protected

Definition at line 501 of file RadiationTransferAction.C.

Referenced by addHeatFluxAuxKernel(), addRadiationObject(), addRayBCs(), addRayStudyObject(), and addViewFactorObject().

502 {
504 }
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
std::vector< BoundaryName > patchBoundaryNames(const std::vector< BoundaryName > &boundary_names) const

◆ radiationPatchNames()

std::vector< std::vector< std::string > > RadiationTransferAction::radiationPatchNames ( ) const
protected

Definition at line 425 of file RadiationTransferAction.C.

Referenced by addRadiationObject().

426 {
427  std::vector<std::vector<std::string>> radiation_patch_names(_boundary_names.size());
428  std::vector<BoundaryID> boundary_ids = _mesh->getBoundaryIDs(_boundary_names);
429  for (unsigned int j = 0; j < boundary_ids.size(); ++j)
430  {
431  boundary_id_type bid = boundary_ids[j];
432  std::string base_name = _mesh->getBoundaryName(bid);
433  std::vector<std::string> bnames;
434  for (unsigned int i = 0; i < nPatch(j); ++i)
435  {
436  std::stringstream ss;
437  ss << base_name << "_" << i;
438  bnames.push_back(ss.str());
439  }
440  radiation_patch_names[j] = bnames;
441  }
442  return radiation_patch_names;
443 }
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
int8_t boundary_id_type
std::shared_ptr< MooseMesh > & _mesh
unsigned int nPatch(unsigned int j) const
provides the updated number of patches for this boundary
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")

◆ rayBCName()

std::string RadiationTransferAction::rayBCName ( ) const
protected

Definition at line 315 of file RadiationTransferAction.C.

Referenced by addRayBCs().

316 {
317  return "ray_bc_" + _name;
318 }
const std::string & _name

◆ rayStudyName()

UserObjectName RadiationTransferAction::rayStudyName ( ) const
protected

Definition at line 309 of file RadiationTransferAction.C.

Referenced by addRayBCs(), addRayStudyObject(), and addViewFactorObject().

310 {
311  return "ray_study_uo_" + _name;
312 }
const std::string & _name

◆ symmetryRayBCName()

std::string RadiationTransferAction::symmetryRayBCName ( ) const
protected

Definition at line 321 of file RadiationTransferAction.C.

Referenced by addRayBCs().

322 {
323  return "symmetry_ray_bc_" + _name;
324 }
const std::string & _name

◆ validParams()

InputParameters RadiationTransferAction::validParams ( )
static

Definition at line 27 of file RadiationTransferAction.C.

28 {
30  params.addClassDescription(
31  "This action sets up the net radiation calculation between specified sidesets.");
32 
33  params.addRequiredParam<std::vector<BoundaryName>>(
34  "boundary", "The boundaries that participate in the radiative exchange.");
35 
36  params.addParam<std::vector<BoundaryName>>(
37  "adiabatic_boundary",
38  {},
39  "The adiabatic boundaries that participate in the radiative exchange.");
40 
41  params.addParam<std::vector<BoundaryName>>(
42  "fixed_temperature_boundary",
43  {},
44  "The fixed temperature boundaries that participate in the radiative exchange.");
45 
46  params.addParam<std::vector<FunctionName>>(
47  "fixed_boundary_temperatures", {}, "The temperatures of the fixed boundary.");
48 
49  params.addRequiredParam<std::vector<unsigned int>>("n_patches",
50  "Number of radiation patches per sideset.");
51  MultiMooseEnum partitioning(
52  "default=-3 metis=-2 parmetis=-1 linear=0 centroid hilbert_sfc morton_sfc", "default");
53  partitioning.addValidName("grid");
54  params.addParam<MultiMooseEnum>(
55  "partitioners",
56  partitioning,
57  "Specifies a mesh partitioner to use when preparing the radiation patches.");
58 
59  MultiMooseEnum direction("x y z radial");
60  params.addParam<MultiMooseEnum>("centroid_partitioner_directions",
61  direction,
62  "Specifies the sort direction if using the centroid partitioner. "
63  "Available options: x, y, z, radial");
64 
65  params.addRequiredParam<VariableName>("temperature", "The coupled temperature variable.");
66  params.addRequiredParam<std::vector<FunctionName>>("emissivity",
67  "Emissivities for each boundary.");
68 
69  MooseEnum view_factor_calculator("analytical ray_tracing", "ray_tracing");
70  params.addParam<MooseEnum>(
71  "view_factor_calculator", view_factor_calculator, "The view factor calculator being used.");
72 
73  params.addParam<bool>(
74  "print_view_factor_info", false, "Flag to print information about computed view factors.");
75  params.addParam<bool>("normalize_view_factor",
76  true,
77  "Determines if view factors are normalized to sum to one (consistent with "
78  "their definition).");
79 
80  std::vector<BoundaryName> empty = {};
81  params.addParam<std::vector<BoundaryName>>(
82  "symmetry_boundary",
83  empty,
84  "The sidesets that represent symmetry lines/planes for the problem. These sidesets do not "
85  "participate in the radiative exchange"
86  "so they should not be listed in the sidesets parameter.");
87 
88  MooseEnum qtypes("GAUSS GRID", "GRID");
89  params.addParam<MooseEnum>(
90  "ray_tracing_face_type", qtypes, "The face quadrature rule type used for ray tracing.");
91 
92  MooseEnum qorders("CONSTANT FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH NINTH TENTH "
93  "ELEVENTH TWELFTH THIRTEENTH FOURTEENTH FIFTEENTH SIXTEENTH SEVENTEENTH "
94  "EIGHTTEENTH NINTEENTH TWENTIETH",
95  "CONSTANT");
96  params.addParam<MooseEnum>(
97  "ray_tracing_face_order", qorders, "The face quadrature rule order used for ray tracing.");
98 
99  params.addParam<unsigned int>(
100  "polar_quad_order",
101  16,
102  "Order of the polar quadrature [polar angle is between ray and normal]. Must be even. Only "
103  "used if view_factor_calculator = ray_tracing.");
104  params.addParam<unsigned int>(
105  "azimuthal_quad_order",
106  8,
107  "Order of the azimuthal quadrature per quadrant [azimuthal angle is measured in "
108  "a plane perpendicular to the normal]. Only used if view_factor_calculator = "
109  "ray_tracing.");
110 
111  params.addParam<bool>("add_heat_flux_aux", false, "If true, add a heat flux aux variable");
112  params.addParam<VariableName>(
113  "heat_flux_variable",
114  "Heat flux aux variable name; this must be provided if 'add_heat_flux_aux' is true");
115  params.addParam<std::vector<SubdomainName>>(
116  "heat_flux_aux_block", "Subdomains to use for heat flux aux if 'add_heat_flux_aux' is true");
117 
118  return params;
119 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
static InputParameters validParams()
void addClassDescription(const std::string &doc_string)

◆ viewFactorObjectName()

UserObjectName RadiationTransferAction::viewFactorObjectName ( ) const
protected

Definition at line 327 of file RadiationTransferAction.C.

Referenced by addRadiationObject(), and addViewFactorObject().

328 {
329  return "view_factor_uo_" + _name;
330 }
const std::string & _name

Member Data Documentation

◆ _add_heat_flux_aux

const bool RadiationTransferAction::_add_heat_flux_aux
protected

Whether to add heat flux aux.

Definition at line 60 of file RadiationTransferAction.h.

Referenced by act(), and RadiationTransferAction().

◆ _boundary_names

const std::vector<BoundaryName> RadiationTransferAction::_boundary_names
protected

◆ _heat_flux_aux_block

std::vector<SubdomainName> RadiationTransferAction::_heat_flux_aux_block
protected

Blocks to use for heat flux aux.

Definition at line 64 of file RadiationTransferAction.h.

Referenced by addHeatFluxAuxVariable(), and RadiationTransferAction().

◆ _heat_flux_variable

VariableName RadiationTransferAction::_heat_flux_variable
protected

Heat flux aux name.

Definition at line 62 of file RadiationTransferAction.h.

Referenced by addHeatFluxAuxKernel(), addHeatFluxAuxVariable(), and RadiationTransferAction().

◆ _view_factor_calculator

const MooseEnum RadiationTransferAction::_view_factor_calculator
protected

the type of view factor calculation being performed

Definition at line 57 of file RadiationTransferAction.h.

Referenced by addRayBCs(), addRayStudyObject(), addViewFactorObject(), and RadiationTransferAction().


The documentation for this class was generated from the following files: