30 "This action sets up the net radiation calculation between specified sidesets.");
33 "boundary",
"The boundaries that participate in the radiative exchange.");
35 params.
addParam<std::vector<BoundaryName>>(
38 "The adiabatic boundaries that participate in the radiative exchange.");
40 params.
addParam<std::vector<BoundaryName>>(
41 "fixed_temperature_boundary",
43 "The fixed temperature boundaries that participate in the radiative exchange.");
45 params.
addParam<std::vector<FunctionName>>(
46 "fixed_boundary_temperatures", {},
"The temperatures of the fixed boundary.");
49 "Number of radiation patches per sideset.");
51 "default=-3 metis=-2 parmetis=-1 linear=0 centroid hilbert_sfc morton_sfc",
"default");
52 partitioning.addValidName(
"grid");
56 "Specifies a mesh partitioner to use when preparing the radiation patches.");
61 "Specifies the sort direction if using the centroid partitioner. " 62 "Available options: x, y, z, radial");
64 params.
addRequiredParam<VariableName>(
"temperature",
"The coupled temperature variable.");
66 "Emissivities for each boundary.");
68 MooseEnum view_factor_calculator(
"analytical ray_tracing",
"ray_tracing");
70 "view_factor_calculator", view_factor_calculator,
"The view factor calculator being used.");
73 "print_view_factor_info",
false,
"Flag to print information about computed view factors.");
74 params.
addParam<
bool>(
"normalize_view_factor",
76 "Determines if view factors are normalized to sum to one (consistent with " 77 "their definition).");
79 std::vector<BoundaryName> empty = {};
80 params.
addParam<std::vector<BoundaryName>>(
83 "The sidesets that represent symmetry lines/planes for the problem. These sidesets do not " 84 "participate in the radiative exchange" 85 "so they should not be listed in the sidesets parameter.");
89 "ray_tracing_face_type", qtypes,
"The face quadrature rule type used for ray tracing.");
91 MooseEnum qorders(
"CONSTANT FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH NINTH TENTH " 92 "ELEVENTH TWELFTH THIRTEENTH FOURTEENTH FIFTEENTH SIXTEENTH SEVENTEENTH " 93 "EIGHTTEENTH NINTEENTH TWENTIETH",
96 "ray_tracing_face_order", qorders,
"The face quadrature rule order used for ray tracing.");
101 "Order of the polar quadrature [polar angle is between ray and normal]. Must be even. Only " 102 "used if view_factor_calculator = ray_tracing.");
104 "azimuthal_quad_order",
106 "Order of the azimuthal quadrature per quadrant [azimuthal angle is measured in " 107 "a plane perpendicular to the normal]. Only used if view_factor_calculator = " 115 _boundary_names(getParam<
std::vector<BoundaryName>>(
"boundary")),
116 _view_factor_calculator(getParam<
MooseEnum>(
"view_factor_calculator"))
118 const auto & symmetry_names = getParam<std::vector<BoundaryName>>(
"symmetry_boundary");
122 for (
const auto & param_name : {
"polar_quad_order",
123 "azimuthal_quad_order",
124 "ray_tracing_face_type",
125 "ray_tracing_face_order"})
128 "Only used for view_factor_calculator = ray_tracing. It is ignored for this " 131 if (symmetry_names.size())
133 "Symmetry boundaries are only supported with view_factor_calculator = " 140 if (std::find(symmetry_names.begin(), symmetry_names.end(),
name) != symmetry_names.end())
144 " is present in parameter boundary and symmetry_boundary.");
174 std::vector<BoundaryName> boundary_names;
175 for (
auto & e1 : radiation_patch_names)
177 boundary_names.push_back(e2);
179 params.
set<std::vector<BoundaryName>>(
"boundary") = boundary_names;
182 params.
set<NonlinearVariableName>(
"variable") = getParam<VariableName>(
"temperature");
187 _problem->addBoundaryCondition(
"GrayLambertNeumannBC",
"gray_lamber_neumann_bc_" +
_name, params);
194 std::vector<BoundaryName> boundary_names;
195 for (
auto & e1 : radiation_patch_names)
197 boundary_names.push_back(e2);
207 params.
set<std::vector<BoundaryName>>(
"boundary") = boundary_names;
216 params.
set<std::vector<BoundaryName>>(
"boundary") = boundary_names;
219 params.
set<
bool>(
"print_view_factor_info") = getParam<bool>(
"print_view_factor_info");
220 params.
set<
bool>(
"normalize_view_factor") = getParam<bool>(
"normalize_view_factor");
232 std::vector<BoundaryName> boundary_names;
233 for (
auto & e1 : radiation_patch_names)
235 boundary_names.push_back(e2);
239 params.
set<std::vector<BoundaryName>>(
"boundary") = boundary_names;
247 params.
set<
MooseEnum>(
"face_order") = getParam<MooseEnum>(
"ray_tracing_face_order");
248 params.
set<
MooseEnum>(
"face_type") = getParam<MooseEnum>(
"ray_tracing_face_type");
251 params.
set<
unsigned int>(
"polar_quad_order") = getParam<unsigned int>(
"polar_quad_order");
252 params.
set<
unsigned int>(
"azimuthal_quad_order") = getParam<unsigned int>(
"azimuthal_quad_order");
263 std::vector<BoundaryName> boundary_names;
264 for (
auto & e1 : radiation_patch_names)
266 boundary_names.push_back(e2);
270 params.
set<std::vector<BoundaryName>>(
"boundary") = boundary_names;
277 const auto & symmetry_names = getParam<std::vector<BoundaryName>>(
"symmetry_boundary");
278 if (symmetry_names.size() > 0)
281 params.
set<std::vector<BoundaryName>>(
"boundary") = symmetry_names;
291 return "ray_study_uo_" +
_name;
297 return "ray_bc_" +
_name;
303 return "symmetry_ray_bc_" +
_name;
309 return "view_factor_uo_" +
_name;
315 return "view_factor_surface_radiation_" +
_name;
324 std::vector<FunctionName>
emissivity = getParam<std::vector<FunctionName>>(
"emissivity");
326 mooseError(
"emissivity parameter needs to be the same size as the boundary parameter.");
331 params.
set<std::vector<VariableName>>(
"temperature") = {getParam<VariableName>(
"temperature")};
333 std::vector<FunctionName> extended_emissivity;
335 for (
unsigned int i = 0; i <
nPatch(
j); ++i)
337 params.
set<std::vector<FunctionName>>(
"emissivity") = extended_emissivity;
340 std::vector<BoundaryName> boundary_names;
341 for (
auto & e1 : radiation_patch_names)
343 boundary_names.push_back(e2);
344 params.
set<std::vector<BoundaryName>>(
"boundary") = boundary_names;
349 std::vector<BoundaryName> adiabatic_boundary_names =
350 getParam<std::vector<BoundaryName>>(
"adiabatic_boundary");
351 std::vector<BoundaryName> adiabatic_patch_names;
352 for (
unsigned int k = 0;
k < adiabatic_boundary_names.size(); ++
k)
354 BoundaryName bnd_name = adiabatic_boundary_names[
k];
361 mooseError(
"Adiabatic boundary ", bnd_name,
" not present in boundary.");
368 for (
auto & e : radiation_patch_names[index])
369 adiabatic_patch_names.push_back(e);
371 params.
set<std::vector<BoundaryName>>(
"adiabatic_boundary") = adiabatic_patch_names;
378 mooseError(
"fixed_temperature_boundary is provided so fixed_boundary_temperatures must be " 381 std::vector<BoundaryName> fixed_T_boundary_names =
382 getParam<std::vector<BoundaryName>>(
"fixed_temperature_boundary");
384 std::vector<FunctionName> fixed_T_funcs =
385 getParam<std::vector<FunctionName>>(
"fixed_boundary_temperatures");
388 if (fixed_T_funcs.size() != fixed_T_boundary_names.size())
389 mooseError(
"Size of parameter fixed_boundary_temperatures and fixed_temperature_boundary " 392 std::vector<BoundaryName> fixed_T_patch_names;
393 std::vector<FunctionName> fixed_T_function_names;
394 for (
unsigned int k = 0;
k < fixed_T_boundary_names.size(); ++
k)
396 BoundaryName bnd_name = fixed_T_boundary_names[
k];
403 mooseError(
"Fixed temperature sideset ", bnd_name,
" not present in boundary.");
410 for (
auto & e : radiation_patch_names[index])
412 fixed_T_patch_names.push_back(e);
413 fixed_T_function_names.push_back(fixed_T_funcs[
k]);
416 params.
set<std::vector<BoundaryName>>(
"fixed_temperature_boundary") = fixed_T_patch_names;
417 params.
set<std::vector<FunctionName>>(
"fixed_boundary_temperatures") = fixed_T_function_names;
432 std::vector<std::vector<std::string>>
435 std::vector<std::vector<std::string>> radiation_patch_names(
_boundary_names.size());
437 for (
unsigned int j = 0;
j < boundary_ids.size(); ++
j)
440 std::string base_name =
_mesh->getBoundaryName(bid);
441 std::vector<std::string> bnames;
442 for (
unsigned int i = 0; i <
nPatch(
j); ++i)
444 std::stringstream ss;
445 ss << base_name <<
"_" << i;
446 bnames.push_back(ss.str());
448 radiation_patch_names[
j] = bnames;
450 return radiation_patch_names;
453 std::vector<std::vector<std::string>>
456 auto ad_bnd_names = getParam<std::vector<BoundaryName>>(
"adiabatic_boundary");
457 auto ft_bnd_names = getParam<std::vector<BoundaryName>>(
"fixed_temperature_boundary");
458 std::vector<std::vector<std::string>> radiation_patch_names;
460 for (
unsigned int j = 0;
j < boundary_ids.size(); ++
j)
466 auto it_a = std::find(ad_bnd_names.begin(), ad_bnd_names.end(), bnd_name);
467 auto it_t = std::find(ft_bnd_names.begin(), ft_bnd_names.end(), bnd_name);
468 if (it_a != ad_bnd_names.end() || it_t != ft_bnd_names.end())
471 std::string base_name =
_mesh->getBoundaryName(bid);
472 std::vector<std::string> bnames;
473 for (
unsigned int i = 0; i <
nPatch(
j); ++i)
475 std::stringstream ss;
476 ss << base_name <<
"_" << i;
477 bnames.push_back(ss.str());
479 radiation_patch_names.push_back(bnames);
481 return radiation_patch_names;
487 std::vector<unsigned int> n_patches = getParam<std::vector<unsigned int>>(
"n_patches");
488 MultiMooseEnum partitioners = getParam<MultiMooseEnum>(
"partitioners");
493 partitioners.setAdditionalValue(
"metis");
496 MultiMooseEnum direction = getParam<MultiMooseEnum>(
"centroid_partitioner_directions");
500 mooseError(
"n_patches parameter must have same length as boundary parameter.");
503 mooseError(
"partitioners parameter must have same length as boundary parameter.");
505 for (
unsigned int j = 0;
j < partitioners.size(); ++
j)
508 "centroid partitioner is selected for at least one sideset. " 509 "centroid_partitioner_directions parameter must have same length as boundary parameter.");
514 mooseError(
"This action adds MeshGenerator objects and therefore only works with a " 515 "MeshGeneratorMesh.");
521 params.
set<
unsigned int>(
"n_patches") = n_patches[
j];
524 if (partitioners[
j] ==
"centroid")
525 params.
set<
MooseEnum>(
"centroid_partitioner_direction") = direction[
j];
537 mooseError(
"Failed to convert mesh generator ", mg->
name(),
" to PatchSidesetGenerator.");
544 std::stringstream ss;
std::string rayBCName() const
const MeshGenerator & getMeshGenerator(const std::string &name) const
const std::vector< BoundaryName > _boundary_names
the boundary names participating in the radiative heat transfer
Subdivides a sidesets into smaller patches each of which is going to be a new patch.
void addViewFactorObject() const
InputParameters getValidParams(const std::string &name) const
unsigned int size() const
UserObjectName rayStudyName() const
const ExecFlagType EXEC_TIMESTEP_END
void addRayStudyObject() const
virtual const std::string & name() const
std::vector< std::vector< std::string > > radiationPatchNames() const
static InputParameters validParams()
MeshGeneratorName meshGeneratorName(unsigned int j) const
ExecFlagEnum getDefaultExecFlagEnum()
bool isParamValid(const std::string &name) const
RayTracingStudy used to generate Rays for view factor computation using the angular quadrature method...
static InputParameters validParams()
std::vector< std::vector< std::string > > bcRadiationPatchNames() const
UserObjectName viewFactorObjectName() const
const std::string & _current_task
void paramError(const std::string ¶m, Args... args) const
const ExecFlagType EXEC_LINEAR
const MeshGenerator & appendMeshGenerator(const std::string &type, const std::string &name, InputParameters params)
virtual void act() override
std::shared_ptr< MooseMesh > & _mesh
const MooseEnum _view_factor_calculator
the type of view factor calculation being performed
unsigned int nPatch(unsigned int j) const
provides the updated number of patches for this boundary
void addRadiationObject() const
UserObjectName radiationObjectName() const
void mooseError(Args &&... args) const
void addRadiationBCs() const
const InputParameters & _pars
std::shared_ptr< FEProblemBase > & _problem
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
void paramWarning(const std::string ¶m, Args... args) const
std::string symmetryRayBCName() const
Base class for the RayBC syntax.
unsigned int nPatches() const
static const std::string k
RadiationTransferAction(const InputParameters ¶ms)
registerMooseAction("HeatTransferApp", RadiationTransferAction, "append_mesh_generator")
static const std::string emissivity
Base class for Ray tracing studies that will generate Rays and then propagate all of them to terminat...
const ExecFlagType EXEC_INITIAL