https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | Private 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)
 
MooseApp & getMooseApp () 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 InputParameters & parameters () const
 
const hit::Node * getHitNode () const
 
bool hasBase () const
 
const std::string & getBase () const
 
const T & getParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const T * queryParam (const std::string &name) const
 
const T & getRenamedParam (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
 
PerfGraph & perfGraph ()
 
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.
 
void addMeshGenerator ()
 
void addRadiationObject () const
 
void addViewFactorObject () const
 
void addRadiationBCs () const
 
void addFixedTemperatureBCs () 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
 
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 T & getMeshProperty (const std::string &data_name, const std::string &prefix)
 
const T & getMeshProperty (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
 
const MooseEnum _view_factor_calculator
 the type of view factor calculation being performed
 
const bool _add_heat_flux_aux
 Whether to add heat flux aux.
 
VariableName _heat_flux_variable
 Heat flux aux name.
 
std::vector< SubdomainName > _heat_flux_aux_block
 Blocks to use for heat flux aux.
 
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
 

Private Member Functions

bool addRelationshipManager (Moose::RelationshipManagerType input_rm_type, const InputParameters &moose_object_pars, std::string rm_name, Moose::RelationshipManagerType rm_type, Moose::RelationshipManagerInputParameterCallback rm_input_parameter_func, Moose::RMSystemType sys_type=Moose::RMSystemType::NONE)
 
virtual std::string meshPropertyPrefix (const std::string &data_name) const
 
const RestartableDataValue & getMeshPropertyInternal (const std::string &data_name, const std::string &prefix) const
 
void mooseErrorInternal (Args &&... args) const
 

Static Private Member Functions

static const hit::Node * getHitNode (const InputParameters &params)
 
static std::string messagePrefix (const InputParameters &params, const bool hit_prefix)
 

Private Attributes

const ParallelParamObject & _parent
 
MooseApp & _meta_data_app
 
const MooseObject *const _meta_data_object
 
const MooseBase & _si_moose_base
 
const FEProblemBase * _si_problem
 

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
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 const auto & fixed_temperature_boundaries =
172 getParam<std::vector<BoundaryName>>("fixed_temperature_boundary");
173 const auto & fixed_boundary_temperatures =
174 getParam<std::vector<FunctionName>>("fixed_boundary_temperatures");
175
176 if (fixed_temperature_boundaries.size() != fixed_boundary_temperatures.size())
177 paramError("fixed_boundary_temperatures",
178 "The number of entries must match the number of entries in "
179 "'fixed_temperature_boundary'.");
180
181 checkBoundaryParameterIsSubset("adiabatic_boundary");
182 checkBoundaryParameterIsSubset("fixed_temperature_boundary");
183}
bool isParamSetByUser(const std::string &name) const
void paramWarning(const std::string &param, Args... args) const
const std::string & name() const
void paramError(const std::string &param, Args... args) const
const T & getParam(const std::string &name) const
bool isParamValid(const std::string &name) const
const bool _add_heat_flux_aux
Whether to add heat flux aux.
const MooseEnum _view_factor_calculator
the type of view factor calculation being performed
VariableName _heat_flux_variable
Heat flux aux name.
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
void checkBoundaryParameterIsSubset(const std::string &param) const
Checks that param boundaries are in the 'boundary' parameter.
std::vector< SubdomainName > _heat_flux_aux_block
Blocks to use for heat flux aux.
KOKKOS_INLINE_FUNCTION const T * find(const T &target, const T *const begin, const T *const end)
if(subdm)

Member Function Documentation

◆ act()

void RadiationTransferAction::act ( )
overridevirtual

Implements Action.

Definition at line 195 of file RadiationTransferAction.C.

196{
197 if (_current_task == "append_mesh_generator")
199 else if (_current_task == "add_user_object")
200 {
204 }
205 else if (_current_task == "add_bc")
206 {
209 }
210 else if (_current_task == "add_ray_boundary_condition")
211 addRayBCs();
212 else if (_current_task == "add_aux_variable" && _add_heat_flux_aux)
214 else if (_current_task == "add_aux_kernel" && _add_heat_flux_aux)
216}
const std::string & _current_task

◆ addFixedTemperatureBCs()

void RadiationTransferAction::addFixedTemperatureBCs ( ) const
protected

Definition at line 242 of file RadiationTransferAction.C.

243{
244 const auto & fixed_temperature_boundaries =
245 getParam<std::vector<BoundaryName>>("fixed_temperature_boundary");
246 const auto & fixed_boundary_temperatures =
247 getParam<std::vector<FunctionName>>("fixed_boundary_temperatures");
248 const auto & temperature = getParam<VariableName>("temperature");
249
250 for (unsigned int i = 0; i < fixed_temperature_boundaries.size(); ++i)
251 {
252 InputParameters params = _factory.getValidParams("FunctionDirichletBC");
253 params.set<FunctionName>("function") = fixed_boundary_temperatures[i];
254 params.set<NonlinearVariableName>("variable") = temperature;
255 params.set<std::vector<BoundaryName>>("boundary") = {fixed_temperature_boundaries[i]};
256
257 _problem->addBoundaryCondition("FunctionDirichletBC",
258 "fixed_temperature_bc_" + _name + "_" +
259 fixed_temperature_boundaries[i],
260 params);
261 }
262}
std::shared_ptr< FEProblemBase > & _problem
InputParameters getValidParams(const std::string &name) const
T & set(const std::string &name, bool quiet_mode=false)
const std::string & _name
Factory & _factory

Referenced by act().

◆ addHeatFluxAuxKernel()

void RadiationTransferAction::addHeatFluxAuxKernel ( ) const
protected

Definition at line 619 of file RadiationTransferAction.C.

620{
621 const std::string class_name = "GrayLambertRadiationHeatFluxAux";
622 InputParameters params = _factory.getValidParams(class_name);
623 params.set<AuxVariableName>("variable") = _heat_flux_variable;
624 params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
625 params.set<UserObjectName>("surface_radiation_object") = radiationObjectName();
626 params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
627 _problem->addAuxKernel(class_name, "radiation_heat_flux_aux_kernel", params);
628}
const ExecFlagType EXEC_TIMESTEP_END
const ExecFlagType EXEC_INITIAL
UserObjectName radiationObjectName() const
std::vector< BoundaryName > radiationPatchBoundaryNames() const

Referenced by act().

◆ addHeatFluxAuxVariable()

void RadiationTransferAction::addHeatFluxAuxVariable ( ) const
protected

Definition at line 608 of file RadiationTransferAction.C.

609{
610 const std::string var_type = "MooseVariable";
611 auto params = _factory.getValidParams(var_type);
612 params.set<std::vector<SubdomainName>>("block") = _heat_flux_aux_block;
613 params.set<MooseEnum>("order") = "CONSTANT";
614 params.set<MooseEnum>("family") = "MONOMIAL";
615 _problem->addAuxVariable(var_type, _heat_flux_variable, params);
616}

Referenced by act().

◆ addMeshGenerator()

void RadiationTransferAction::addMeshGenerator ( )
protected

Definition at line 543 of file RadiationTransferAction.C.

544{
545 std::vector<unsigned int> n_patches = getParam<std::vector<unsigned int>>("n_patches");
546 MultiMooseEnum partitioners = getParam<MultiMooseEnum>("partitioners");
547 if (!_pars.isParamSetByUser("partitioners"))
548 {
549 partitioners.clearSetValues();
550 for (unsigned int j = 0; j < _boundary_names.size(); ++j)
551 partitioners.setAdditionalValue("metis");
552 }
553
554 MultiMooseEnum direction = getParam<MultiMooseEnum>("centroid_partitioner_directions");
555
556 // check input parameters
557 if (_boundary_names.size() != n_patches.size())
558 mooseError("n_patches parameter must have same length as boundary parameter.");
559
560 if (_boundary_names.size() != partitioners.size())
561 mooseError("partitioners parameter must have same length as boundary parameter.");
562
563 for (unsigned int j = 0; j < partitioners.size(); ++j)
564 if (partitioners[j] == "centroid" && direction.size() != _boundary_names.size())
566 "centroid partitioner is selected for at least one sideset. "
567 "centroid_partitioner_directions parameter must have same length as boundary parameter.");
568
569 // check if mesh is a MeshGeneratorMesh
570 std::shared_ptr<MeshGeneratorMesh> mg_mesh = std::dynamic_pointer_cast<MeshGeneratorMesh>(_mesh);
571 if (!mg_mesh)
572 mooseError("This action adds MeshGenerator objects and therefore only works with a "
573 "MeshGeneratorMesh.");
574
575 for (unsigned int j = 0; j < _boundary_names.size(); ++j)
576 {
577 InputParameters params = _factory.getValidParams("PatchSidesetGenerator");
578 params.set<BoundaryName>("boundary") = _boundary_names[j];
579 params.set<unsigned int>("n_patches") = n_patches[j];
580 params.set<MooseEnum>("partitioner") = partitioners[j];
581
582 if (partitioners[j] == "centroid")
583 params.set<MooseEnum>("centroid_partitioner_direction") = direction[j];
584
585 _app.appendMeshGenerator("PatchSidesetGenerator", meshGeneratorName(j), params);
586 }
587}
std::shared_ptr< MooseMesh > & _mesh
MooseApp & _app
const MeshGenerator & appendMeshGenerator(const std::string &type, const std::string &name, InputParameters params)
void mooseError(Args &&... args) const
const InputParameters & _pars
unsigned int size() const
MeshGeneratorName meshGeneratorName(unsigned int j) const

Referenced by act().

◆ addRadiationBCs()

void RadiationTransferAction::addRadiationBCs ( ) const
protected

Definition at line 219 of file RadiationTransferAction.C.

220{
221 InputParameters params = _factory.getValidParams("GrayLambertNeumannBC");
222
223 // set boundary
224 std::vector<std::vector<std::string>> radiation_patch_names = bcRadiationPatchNames();
225 std::vector<BoundaryName> boundary_names;
226 for (auto & e1 : radiation_patch_names)
227 for (auto & e2 : e1)
228 boundary_names.push_back(e2);
229
230 params.set<std::vector<BoundaryName>>("boundary") = boundary_names;
231
232 // set temperature variable
233 params.set<NonlinearVariableName>("variable") = getParam<VariableName>("temperature");
234
235 // set radiationuserobject
236 params.set<UserObjectName>("surface_radiation_object_name") = radiationObjectName();
237
238 _problem->addBoundaryCondition("GrayLambertNeumannBC", "gray_lamber_neumann_bc_" + _name, params);
239}
for(PetscInt i=0;i< nvars;++i)
std::vector< std::vector< std::string > > bcRadiationPatchNames() const

Referenced by act().

◆ addRadiationObject()

void RadiationTransferAction::addRadiationObject ( ) const
protected

Definition at line 375 of file RadiationTransferAction.C.

376{
377 std::vector<std::vector<std::string>> radiation_patch_names = radiationPatchNames();
378
379 // input parameter check
380 std::vector<FunctionName> emissivity = getParam<std::vector<FunctionName>>("emissivity");
381 if (emissivity.size() != _boundary_names.size())
382 mooseError("emissivity parameter needs to be the same size as the boundary parameter.");
383
384 // the action only sets up ViewFactorObjectSurfaceRadiation, because after splitting
385 // faces auotmatically, it makes no sense to require view factor input by hand.
386 InputParameters params = _factory.getValidParams("ViewFactorObjectSurfaceRadiation");
387 params.set<std::vector<VariableName>>("temperature") = {getParam<VariableName>("temperature")};
388
389 std::vector<FunctionName> extended_emissivity;
390 for (unsigned int j = 0; j < _boundary_names.size(); ++j)
391 for (unsigned int i = 0; i < nPatch(j); ++i)
392 extended_emissivity.push_back(emissivity[j]);
393 params.set<std::vector<FunctionName>>("emissivity") = extended_emissivity;
394
395 // add boundary parameter
396 params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
397
398 // add adiabatic_boundary parameter if required
399 if (isParamValid("adiabatic_boundary"))
400 params.set<std::vector<BoundaryName>>("adiabatic_boundary") = adiabaticPatchBoundaryNames();
401
402 const auto & fixed_T_boundary_names =
403 getParam<std::vector<BoundaryName>>("fixed_temperature_boundary");
404
405 // add isothermal sidesets if required
406 if (!fixed_T_boundary_names.empty())
407 {
408 const auto & fixed_T_funcs = getParam<std::vector<FunctionName>>("fixed_boundary_temperatures");
409
410 std::vector<BoundaryName> fixed_T_patch_names;
411 std::vector<FunctionName> fixed_T_function_names;
412 for (unsigned int k = 0; k < fixed_T_boundary_names.size(); ++k)
413 {
414 BoundaryName bnd_name = fixed_T_boundary_names[k];
415
416 // find the right entry in _boundary_names
417 auto it = std::find(_boundary_names.begin(), _boundary_names.end(), bnd_name);
418
419 // check if entry was found: it must be found or an error would occur later
420 if (it == _boundary_names.end())
421 mooseError("Fixed temperature sideset ", bnd_name, " not present in boundary.");
422
423 // this is the position in the _boundary_names vector; this is what
424 // we are really after
425 auto index = std::distance(_boundary_names.begin(), it);
426
427 // collect the correct boundary names
428 for (auto & e : radiation_patch_names[index])
429 {
430 fixed_T_patch_names.push_back(e);
431 fixed_T_function_names.push_back(fixed_T_funcs[k]);
432 }
433 }
434 params.set<std::vector<BoundaryName>>("fixed_temperature_boundary") = fixed_T_patch_names;
435 params.set<std::vector<FunctionName>>("fixed_boundary_temperatures") = fixed_T_function_names;
436 }
437
438 // the view factor userobject name
439 params.set<UserObjectName>("view_factor_object_name") = viewFactorObjectName();
440
441 // this userobject needs to be executed on linear and timestep end
443 exec_enum = {EXEC_LINEAR, EXEC_TIMESTEP_END};
444 params.set<ExecFlagEnum>("execute_on") = exec_enum;
445
446 // add the object
447 _problem->addUserObject("ViewFactorObjectSurfaceRadiation", radiationObjectName(), params);
448}
const ExecFlagType EXEC_LINEAR
std::vector< std::vector< std::string > > radiationPatchNames() const
std::vector< BoundaryName > adiabaticPatchBoundaryNames() const
UserObjectName viewFactorObjectName() const
unsigned int nPatch(unsigned int j) const
provides the updated number of patches for this boundary
ExecFlagEnum getDefaultExecFlagEnum()

Referenced by act().

◆ addRayBCs()

void RadiationTransferAction::addRayBCs ( ) const
protected

Definition at line 319 of file RadiationTransferAction.C.

320{
321 if (_view_factor_calculator == "analytical")
322 return;
323
324 {
325 InputParameters params = _factory.getValidParams("ViewFactorRayBC");
326 params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
327 params.set<RayTracingStudy *>("_ray_tracing_study") =
329 _problem->addObject<RayBoundaryConditionBase>("ViewFactorRayBC", rayBCName(), params);
330 }
331
332 // add symmetry BCs if applicable
333 const auto & symmetry_names = getParam<std::vector<BoundaryName>>("symmetry_boundary");
334 if (symmetry_names.size() > 0)
335 {
336 InputParameters params = _factory.getValidParams("ReflectRayBC");
337 params.set<std::vector<BoundaryName>>("boundary") = symmetry_names;
338 params.set<RayTracingStudy *>("_ray_tracing_study") =
340 _problem->addObject<RayBoundaryConditionBase>("ReflectRayBC", symmetryRayBCName(), params);
341 }
342}
std::string symmetryRayBCName() const
UserObjectName rayStudyName() const
Base class for the RayBC syntax.
Base class for Ray tracing studies that will generate Rays and then propagate all of them to terminat...
const T & getUserObject(const std::string &param_name, bool is_dependency=true) const
RayTracingStudy used to generate Rays for view factor computation using the angular quadrature method...

Referenced by act().

◆ addRayStudyObject()

void RadiationTransferAction::addRayStudyObject ( ) const
protected

Definition at line 294 of file RadiationTransferAction.C.

295{
296 if (_view_factor_calculator == "analytical")
297 return;
298
299 InputParameters params = _factory.getValidParams("ViewFactorRayStudy");
300
301 params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
302
303 // set this object to be execute on initial only
305 exec_enum = {EXEC_INITIAL};
306 params.set<ExecFlagEnum>("execute_on") = exec_enum;
307
308 // set face order
309 params.set<MooseEnum>("face_order") = getParam<MooseEnum>("ray_tracing_face_order");
310 params.set<MooseEnum>("face_type") = getParam<MooseEnum>("ray_tracing_face_type");
311
312 // set angular quadrature
313 params.set<unsigned int>("polar_quad_order") = getParam<unsigned int>("polar_quad_order");
314 params.set<unsigned int>("azimuthal_quad_order") = getParam<unsigned int>("azimuthal_quad_order");
315 _problem->addUserObject("ViewFactorRayStudy", rayStudyName(), params);
316}

Referenced by act().

◆ addViewFactorObject()

void RadiationTransferAction::addViewFactorObject ( ) const
protected

Definition at line 265 of file RadiationTransferAction.C.

266{
267 // this userobject is only executed on initial
269 exec_enum = {EXEC_INITIAL};
270
271 if (_view_factor_calculator == "analytical")
272 {
273 // this branch adds the UnobstructedPlanarViewFactor
274 InputParameters params = _factory.getValidParams("UnobstructedPlanarViewFactor");
275 params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
276 params.set<ExecFlagEnum>("execute_on") = exec_enum;
277
278 _problem->addUserObject("UnobstructedPlanarViewFactor", viewFactorObjectName(), params);
279 }
280 else if (_view_factor_calculator == "ray_tracing")
281 {
282 // this branch adds the ray tracing UO
283 InputParameters params = _factory.getValidParams("RayTracingViewFactor");
284 params.set<std::vector<BoundaryName>>("boundary") = radiationPatchBoundaryNames();
285 params.set<ExecFlagEnum>("execute_on") = exec_enum;
286 params.set<UserObjectName>("ray_study_name") = rayStudyName();
287 params.set<bool>("print_view_factor_info") = getParam<bool>("print_view_factor_info");
288 params.set<bool>("normalize_view_factor") = getParam<bool>("normalize_view_factor");
289 _problem->addUserObject("RayTracingViewFactor", viewFactorObjectName(), params);
290 }
291}

Referenced by act().

◆ adiabaticPatchBoundaryNames()

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

Definition at line 533 of file RadiationTransferAction.C.

534{
535 std::vector<BoundaryName> patch_boundary_names;
536 if (isParamValid("adiabatic_boundary"))
537 patch_boundary_names =
538 patchBoundaryNames(getParam<std::vector<BoundaryName>>("adiabatic_boundary"));
539 return patch_boundary_names;
540}
std::vector< BoundaryName > patchBoundaryNames(const std::vector< BoundaryName > &boundary_names) const

Referenced by addRadiationObject().

◆ bcRadiationPatchNames()

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

Definition at line 472 of file RadiationTransferAction.C.

473{
474 auto ad_bnd_names = getParam<std::vector<BoundaryName>>("adiabatic_boundary");
475 auto ft_bnd_names = getParam<std::vector<BoundaryName>>("fixed_temperature_boundary");
476 std::vector<std::vector<std::string>> radiation_patch_names;
477 std::vector<BoundaryID> boundary_ids = _mesh->getBoundaryIDs(_boundary_names);
478 for (unsigned int j = 0; j < boundary_ids.size(); ++j)
479 {
480 boundary_id_type bid = boundary_ids[j];
481 BoundaryName bnd_name = _boundary_names[j];
482
483 // check if this sideset is adiabatic or isothermal
484 auto it_a = std::find(ad_bnd_names.begin(), ad_bnd_names.end(), bnd_name);
485 auto it_t = std::find(ft_bnd_names.begin(), ft_bnd_names.end(), bnd_name);
486 if (it_a != ad_bnd_names.end() || it_t != ft_bnd_names.end())
487 continue;
488
489 std::string base_name = _mesh->getBoundaryName(bid);
490 std::vector<std::string> bnames;
491 for (unsigned int i = 0; i < nPatch(j); ++i)
492 {
493 std::stringstream ss;
494 ss << base_name << "_" << i;
495 bnames.push_back(ss.str());
496 }
497 radiation_patch_names.push_back(bnames);
498 }
499 return radiation_patch_names;
500}
int8_t boundary_id_type

Referenced by addRadiationBCs().

◆ checkBoundaryParameterIsSubset()

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

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

Definition at line 186 of file RadiationTransferAction.C.

187{
188 const auto boundary_names = getParam<std::vector<BoundaryName>>(param);
189 for (const auto & bname : boundary_names)
190 if (std::find(_boundary_names.begin(), _boundary_names.end(), bname) == _boundary_names.end())
191 paramError(param, "The boundaries in '" + param + "' must be a subset of 'boundary'.");
192}

Referenced by RadiationTransferAction().

◆ meshGeneratorName()

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

Definition at line 600 of file RadiationTransferAction.C.

601{
602 std::stringstream ss;
603 ss << "patch_side_set_generator_" << _boundary_names[j];
604 return ss.str();
605}

Referenced by addMeshGenerator(), and nPatch().

◆ nPatch()

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

provides the updated number of patches for this boundary

Definition at line 590 of file RadiationTransferAction.C.

591{
593 const PatchSidesetGenerator * psg = dynamic_cast<const PatchSidesetGenerator *>(mg);
594 if (!psg)
595 mooseError("Failed to convert mesh generator ", mg->name(), " to PatchSidesetGenerator.");
596 return psg->nPatches();
597}
const MeshGenerator & getMeshGenerator(const std::string &name) const
Subdivides a sidesets into smaller patches each of which is going to be a new patch.
unsigned int nPatches() const

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

◆ patchBoundaryNames()

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

Definition at line 503 of file RadiationTransferAction.C.

505{
506 std::vector<BoundaryName> patch_boundary_names;
507 std::vector<BoundaryID> ids = _mesh->getBoundaryIDs(boundary_names_or_ids);
508 for (const auto i : index_range(boundary_names_or_ids))
509 {
510 const auto boundary_name_or_id = boundary_names_or_ids[i];
511 const auto it = std::find(_boundary_names.begin(), _boundary_names.end(), boundary_name_or_id);
512 mooseAssert(it != _boundary_names.end(), boundary_name_or_id + " not found in 'boundary'.");
513 const auto boundary_index = std::distance(_boundary_names.begin(), it);
514 const auto n_patches = nPatch(boundary_index);
515 const auto boundary_name = _mesh->getBoundaryName(ids[i]);
516 for (const auto j : make_range(n_patches))
517 {
518 std::stringstream ss;
519 ss << boundary_name << "_" << j;
520 patch_boundary_names.push_back(ss.str());
521 }
522 }
523 return patch_boundary_names;
524}
auto index_range(const T &sizable)
IntRange< T > make_range(T beg, T end)

Referenced by adiabaticPatchBoundaryNames(), and radiationPatchBoundaryNames().

◆ radiationObjectName()

UserObjectName RadiationTransferAction::radiationObjectName ( ) const
protected

Definition at line 369 of file RadiationTransferAction.C.

370{
371 return "view_factor_surface_radiation_" + _name;
372}

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

◆ radiationPatchBoundaryNames()

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

◆ radiationPatchNames()

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

Definition at line 451 of file RadiationTransferAction.C.

452{
453 std::vector<std::vector<std::string>> radiation_patch_names(_boundary_names.size());
454 std::vector<BoundaryID> boundary_ids = _mesh->getBoundaryIDs(_boundary_names);
455 for (unsigned int j = 0; j < boundary_ids.size(); ++j)
456 {
457 boundary_id_type bid = boundary_ids[j];
458 std::string base_name = _mesh->getBoundaryName(bid);
459 std::vector<std::string> bnames;
460 for (unsigned int i = 0; i < nPatch(j); ++i)
461 {
462 std::stringstream ss;
463 ss << base_name << "_" << i;
464 bnames.push_back(ss.str());
465 }
466 radiation_patch_names[j] = bnames;
467 }
468 return radiation_patch_names;
469}

Referenced by addRadiationObject().

◆ rayBCName()

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

Definition at line 351 of file RadiationTransferAction.C.

352{
353 return "ray_bc_" + _name;
354}

Referenced by addRayBCs().

◆ rayStudyName()

UserObjectName RadiationTransferAction::rayStudyName ( ) const
protected

Definition at line 345 of file RadiationTransferAction.C.

346{
347 return "ray_study_uo_" + _name;
348}

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

◆ symmetryRayBCName()

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

Definition at line 357 of file RadiationTransferAction.C.

358{
359 return "symmetry_ray_bc_" + _name;
360}

Referenced by addRayBCs().

◆ validParams()

InputParameters RadiationTransferAction::validParams ( )
static

Definition at line 27 of file RadiationTransferAction.C.

28{
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");
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}
static InputParameters validParams()
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)

◆ viewFactorObjectName()

UserObjectName RadiationTransferAction::viewFactorObjectName ( ) const
protected

Definition at line 363 of file RadiationTransferAction.C.

364{
365 return "view_factor_uo_" + _name;
366}

Referenced by addRadiationObject(), and addViewFactorObject().

Member Data Documentation

◆ _add_heat_flux_aux

const bool RadiationTransferAction::_add_heat_flux_aux
protected

Whether to add heat flux aux.

Definition at line 61 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 65 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 63 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 58 of file RadiationTransferAction.h.

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


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