https://mooseframework.inl.gov
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"
15 #include "PatchSidesetGenerator.h"
16 #include "ViewFactorRayBC.h"
17 #include "ViewFactorRayStudy.h"
18 
19 registerMooseAction("HeatTransferApp", RadiationTransferAction, "append_mesh_generator");
20 registerMooseAction("HeatTransferApp", RadiationTransferAction, "add_user_object");
21 registerMooseAction("HeatTransferApp", RadiationTransferAction, "add_bc");
22 registerMooseAction("HeatTransferApp", RadiationTransferAction, "add_ray_boundary_condition");
23 registerMooseAction("HeatTransferApp", RadiationTransferAction, "add_aux_variable");
24 registerMooseAction("HeatTransferApp", RadiationTransferAction, "add_aux_kernel");
25 
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 }
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 
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 }
174 
175 void
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 
184 void
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 }
204 
205 void
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 
228 void
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 
257 void
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 
282 void
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 }
307 
308 UserObjectName
310 {
311  return "ray_study_uo_" + _name;
312 }
313 
314 std::string
316 {
317  return "ray_bc_" + _name;
318 }
319 
320 std::string
322 {
323  return "symmetry_ray_bc_" + _name;
324 }
325 
326 UserObjectName
328 {
329  return "view_factor_uo_" + _name;
330 }
331 
332 UserObjectName
334 {
335  return "view_factor_surface_radiation_" + _name;
336 }
337 
338 void
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 
424 std::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 
445 std::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 
476 std::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 
500 std::vector<BoundaryName>
502 {
504 }
505 
506 std::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 
516 void
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 }
562 
563 unsigned 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 
573 MeshGeneratorName
575 {
576  std::stringstream ss;
577  ss << "patch_side_set_generator_" << _boundary_names[j];
578  return ss.str();
579 }
580 
581 void
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 
592 void
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 MeshGenerator & getMeshGenerator(const std::string &name) const
const InputParameters & _pars
const std::string & _name
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
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
std::vector< SubdomainName > _heat_flux_aux_block
Blocks to use for heat flux aux.
Subdivides a sidesets into smaller patches each of which is going to be a new patch.
Factory & _factory
MooseApp & _app
T & set(const std::string &name, bool quiet_mode=false)
const bool _add_heat_flux_aux
Whether to add heat flux aux.
InputParameters getValidParams(const std::string &name) const
unsigned int size() const
UserObjectName rayStudyName() const
const ExecFlagType EXEC_TIMESTEP_END
std::vector< BoundaryName > patchBoundaryNames(const std::vector< BoundaryName > &boundary_names) const
void addRequiredParam(const std::string &name, const std::string &doc_string)
std::vector< std::vector< std::string > > radiationPatchNames() const
static InputParameters validParams()
MeshGeneratorName meshGeneratorName(unsigned int j) const
ExecFlagEnum getDefaultExecFlagEnum()
RayTracingStudy used to generate Rays for view factor computation using the angular quadrature method...
const std::string & name() const
static InputParameters validParams()
int8_t boundary_id_type
std::vector< std::vector< std::string > > bcRadiationPatchNames() const
UserObjectName viewFactorObjectName() const
const std::string & _current_task
const ExecFlagType EXEC_LINEAR
std::vector< BoundaryName > adiabaticPatchBoundaryNames() const
void checkBoundaryParameterIsSubset(const std::string &param) const
Checks that param boundaries are in the &#39;boundary&#39; parameter.
const MeshGenerator & appendMeshGenerator(const std::string &type, const std::string &name, InputParameters params)
bool isParamSetByUser(const std::string &name) const
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
UserObjectName radiationObjectName() const
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) const
void addClassDescription(const std::string &doc_string)
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
void paramWarning(const std::string &param, Args... args) const
std::string symmetryRayBCName() const
Base class for the RayBC syntax.
std::vector< BoundaryName > radiationPatchBoundaryNames() const
unsigned int nPatches() const
VariableName _heat_flux_variable
Heat flux aux name.
static const std::string k
Definition: NS.h:134
RadiationTransferAction(const InputParameters &params)
auto index_range(const T &sizable)
registerMooseAction("HeatTransferApp", RadiationTransferAction, "append_mesh_generator")
static const std::string emissivity
void clearSetValues()
Base class for Ray tracing studies that will generate Rays and then propagate all of them to terminat...
const ExecFlagType EXEC_INITIAL