https://mooseframework.inl.gov
Loading...
Searching...
No Matches
RadiationTransferAction.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
11#include "Factory.h"
12#include "MooseMesh.h"
13#include "MeshGeneratorMesh.h"
14#include "FEProblemBase.h"
16#include "ViewFactorRayBC.h"
17#include "ViewFactorRayStudy.h"
18
19registerMooseAction("HeatTransferApp", RadiationTransferAction, "append_mesh_generator");
20registerMooseAction("HeatTransferApp", RadiationTransferAction, "add_user_object");
21registerMooseAction("HeatTransferApp", RadiationTransferAction, "add_bc");
22registerMooseAction("HeatTransferApp", RadiationTransferAction, "add_ray_boundary_condition");
23registerMooseAction("HeatTransferApp", RadiationTransferAction, "add_aux_variable");
24registerMooseAction("HeatTransferApp", RadiationTransferAction, "add_aux_kernel");
25
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}
120
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 checkBoundaryParameterIsSubset("adiabatic_boundary");
172 checkBoundaryParameterIsSubset("fixed_temperature_boundary");
173}
174
175void
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}
183
184void
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")
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}
204
205void
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}
227
228void
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}
256
257void
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}
281
282void
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") =
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") =
304 _problem->addObject<RayBoundaryConditionBase>("ReflectRayBC", symmetryRayBCName(), params);
305 }
306}
307
308UserObjectName
310{
311 return "ray_study_uo_" + _name;
312}
313
314std::string
316{
317 return "ray_bc_" + _name;
318}
319
320std::string
322{
323 return "symmetry_ray_bc_" + _name;
324}
325
326UserObjectName
328{
329 return "view_factor_uo_" + _name;
330}
331
332UserObjectName
334{
335 return "view_factor_surface_radiation_" + _name;
336}
337
338void
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}
423
424std::vector<std::vector<std::string>>
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}
444
445std::vector<std::vector<std::string>>
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}
475
476std::vector<BoundaryName>
478 const std::vector<BoundaryName> & boundary_names_or_ids) const
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}
499
500std::vector<BoundaryName>
505
506std::vector<BoundaryName>
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}
515
516void
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())
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}
562
563unsigned int
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}
572
573MeshGeneratorName
575{
576 std::stringstream ss;
577 ss << "patch_side_set_generator_" << _boundary_names[j];
578 return ss.str();
579}
580
581void
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}
591
592void
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}
const ExecFlagType EXEC_TIMESTEP_END
const ExecFlagType EXEC_INITIAL
const ExecFlagType EXEC_LINEAR
registerMooseAction("HeatTransferApp", RadiationTransferAction, "append_mesh_generator")
std::shared_ptr< MooseMesh > & _mesh
static InputParameters validParams()
MooseApp & _app
std::shared_ptr< FEProblemBase > & _problem
const std::string & _current_task
InputParameters getValidParams(const std::string &name) const
bool isParamSetByUser(const std::string &name) const
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)
T & set(const std::string &name, bool quiet_mode=false)
const MeshGenerator & appendMeshGenerator(const std::string &type, const std::string &name, InputParameters params)
const MeshGenerator & getMeshGenerator(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
void mooseError(Args &&... args) const
const InputParameters & _pars
const std::string & _name
const T & getParam(const std::string &name) const
bool isParamValid(const std::string &name) const
unsigned int size() const
Factory & _factory
Subdivides a sidesets into smaller patches each of which is going to be a new patch.
unsigned int nPatches() const
std::vector< std::vector< std::string > > radiationPatchNames() const
virtual void act() override
static InputParameters validParams()
const bool _add_heat_flux_aux
Whether to add heat flux aux.
std::string symmetryRayBCName() const
const MooseEnum _view_factor_calculator
the type of view factor calculation being performed
std::vector< std::vector< std::string > > bcRadiationPatchNames() const
UserObjectName radiationObjectName() const
std::vector< BoundaryName > radiationPatchBoundaryNames() const
VariableName _heat_flux_variable
Heat flux aux name.
std::vector< BoundaryName > adiabaticPatchBoundaryNames() const
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
UserObjectName viewFactorObjectName() const
MeshGeneratorName meshGeneratorName(unsigned int j) const
std::vector< BoundaryName > patchBoundaryNames(const std::vector< BoundaryName > &boundary_names) const
void checkBoundaryParameterIsSubset(const std::string &param) const
Checks that param boundaries are in the 'boundary' parameter.
RadiationTransferAction(const InputParameters &params)
UserObjectName rayStudyName() const
std::vector< SubdomainName > _heat_flux_aux_block
Blocks to use for heat flux aux.
unsigned int nPatch(unsigned int j) const
provides the updated number of patches for this boundary
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...
ExecFlagEnum getDefaultExecFlagEnum()