https://mooseframework.inl.gov
PNSFVSolidHeatTransferPhysics.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 
12 #include "WCNSFVFlowPhysics.h"
14 #include "NSFVBase.h"
15 
17 registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_variable");
18 registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_ic");
19 registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_fv_kernel");
20 registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_fv_bc");
21 registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_material");
22 registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_preconditioning");
23 
26 {
28  params.addClassDescription("Define the Navier Stokes porous media solid energy equation");
29 
30  // These boundary conditions parameters are not implemented yet
31  params.suppressParameter<std::vector<BoundaryName>>("fixed_convection_boundaries");
32  params.suppressParameter<std::vector<MooseFunctorName>>("fixed_convection_T_fluid");
33  params.suppressParameter<std::vector<MooseFunctorName>>("fixed_convection_htc");
34 
35  // Swap out some parameters, base class is not specific to porous media
36  // Variables
37  params.renameParam("temperature_name",
38  "solid_temperature_variable",
39  "Name of the solid phase temperature variable");
40  params.set<VariableName>("solid_temperature_variable") = NS::T_solid;
41  params.addParam<NonlinearVariableName>(
42  "fluid_temperature_variable", NS::T_fluid, "Name of the fluid temperature variable");
43  MooseEnum face_interpol_types("average skewness-corrected", "average");
44  params.addParam<MooseEnum>(
45  "solid_temperature_face_interpolation",
46  face_interpol_types,
47  "The numerical scheme to interpolate the temperature/energy to the "
48  "face for conduction (separate from the advected quantity interpolation).");
49  params.addParam<bool>(
50  "solid_temperature_two_term_bc_expansion",
51  true,
52  "If a two-term Taylor expansion is needed for the determination of the boundary values"
53  "of the temperature/energy.");
54 
55  // Porous media parameters
56  // TODO: ensure consistency with fluid energy physics
57  params.transferParam<MooseFunctorName>(NSFVBase::validParams(), "porosity");
58 
59  // Material properties
60  params.suppressParameter<MaterialPropertyName>("specific_heat");
61  params.addParam<MooseFunctorName>("cp_solid", NS::cp + "_solid", "Specific heat functor");
62  params.suppressParameter<MaterialPropertyName>("density");
63  params.addParam<MooseFunctorName>("rho_solid", NS::density + "_solid", "Density functor");
64  params.addParam<std::vector<std::vector<SubdomainName>>>(
65  "thermal_conductivity_blocks", "Blocks which each thermal conductivity is defined");
66  params.suppressParameter<MooseFunctorName>("thermal_conductivity_functor");
67  params.addRequiredParam<std::vector<MooseFunctorName>>(
68  "thermal_conductivity_solid",
69  "Thermal conductivity, which may have different names depending on the subdomain");
70 
71  // Ambient convection with the liquid phase parameters
72  params.addParam<std::vector<std::vector<SubdomainName>>>(
73  "ambient_convection_blocks", {}, "The blocks where the ambient convection is present.");
74  params.addParam<std::vector<MooseFunctorName>>(
75  "ambient_convection_alpha",
76  {},
77  "The heat exchange coefficients for each block in 'ambient_convection_blocks'.");
78  params.addParam<std::vector<MooseFunctorName>>(
79  "ambient_convection_temperature",
80  {NS::T_fluid},
81  "The fluid temperature for each block in 'ambient_convection_blocks'.");
82 
83  // Heat source in solid porous medium parameters
84  params.addParam<std::vector<SubdomainName>>("external_heat_source_blocks",
85  std::vector<SubdomainName>(),
86  "The blocks where the heat source is present.");
87  params.addParam<MooseFunctorName>(
88  "external_heat_source",
89  "The name of a functor which contains the external heat source for the energy equation.");
90  params.addParam<Real>(
91  "external_heat_source_coeff", 1.0, "Multiplier for the coupled heat source term.");
92  params.addParam<bool>("use_external_enthalpy_material",
93  false,
94  "To indicate if the enthalpy material is set up outside of the action.");
95 
96  params.suppressParameter<VariableName>("heat_source_var");
97  params.suppressParameter<std::vector<SubdomainName>>("heat_source_blocks");
98 
99  // Numerical scheme
100  params.addParam<unsigned short>(
101  "ghost_layers", 2, "Number of layers of elements to ghost near process domain boundaries");
102  // Preconditioning has not been derived for NSFV + porous heat transfer at this point
103  MooseEnum pc_options("default none", "none");
104  params.set<MooseEnum>("preconditioning") = pc_options;
105  params.suppressParameter<MooseEnum>("preconditioning");
106 
107  // Parameter groups
108  params.addParamNamesToGroup("rho_solid cp_solid thermal_conductivity_solid "
109  "thermal_conductivity_blocks use_external_enthalpy_material",
110  "Material properties");
111  params.addParamNamesToGroup("ambient_convection_alpha ambient_convection_blocks "
112  "ambient_convection_temperature",
113  "Ambient convection");
114  params.addParamNamesToGroup(
115  "external_heat_source_blocks external_heat_source external_heat_source_coeff",
116  "Solid porous medium heat source");
117  params.addParamNamesToGroup(
118  "solid_temperature_face_interpolation solid_temperature_two_term_bc_expansion",
119  "Numerical scheme");
120  params.addParamNamesToGroup("ghost_layers", "Advanced");
121 
122  return params;
123 }
124 
126  : HeatConductionFV(parameters),
127  _solid_temperature_name(getParam<VariableName>("solid_temperature_variable")),
128  _fluid_temperature_name(getParam<NonlinearVariableName>("fluid_temperature_variable")),
129  _porosity_name(getParam<MooseFunctorName>(NS::porosity)),
130  _density_name(getParam<MooseFunctorName>("rho_solid")),
131  _specific_heat_name(getParam<MooseFunctorName>("cp_solid")),
132  _thermal_conductivity_blocks(
133  parameters.isParamValid("thermal_conductivity_blocks")
134  ? getParam<std::vector<std::vector<SubdomainName>>>("thermal_conductivity_blocks")
135  : std::vector<std::vector<SubdomainName>>()),
136  _thermal_conductivity_name(
137  getParam<std::vector<MooseFunctorName>>("thermal_conductivity_solid")),
138  _ambient_convection_blocks(
139  getParam<std::vector<std::vector<SubdomainName>>>("ambient_convection_blocks")),
140  _ambient_convection_alpha(getParam<std::vector<MooseFunctorName>>("ambient_convection_alpha")),
141  _ambient_temperature(getParam<std::vector<MooseFunctorName>>("ambient_convection_temperature"))
142 {
144 
145  // Parameter checks
146  if (getParam<std::vector<MooseFunctorName>>("ambient_convection_temperature").size() != 1)
147  checkVectorParamsSameLengthIfSet<MooseFunctorName, MooseFunctorName>(
148  "ambient_convection_alpha", "ambient_convection_temperature");
149  checkSecondParamSetOnlyIfFirstOneSet("external_heat_source", "external_heat_source_coeff");
151  paramError("solid_temperature_variable",
152  "Solid and fluid cannot share the same temperature variable");
153  // More parameter checks in ambient convection creation
154 }
155 
156 void
158 {
159  // Dont add if the user already defined the variable
161  /*error_if_aux=*/true))
163  getProblem().getVariable(0, _solid_temperature_name).blocks());
164  else
165  {
166  auto params = getFactory().getValidParams("INSFVEnergyVariable");
167  assignBlocks(params, _blocks);
168  params.set<SolverSystemName>("solver_sys") = getSolverSystem(_solid_temperature_name);
169  params.set<std::vector<Real>>("scaling") = {getParam<Real>("temperature_scaling")};
170  params.set<MooseEnum>("face_interp_method") =
171  getParam<MooseEnum>("solid_temperature_face_interpolation");
172  params.set<bool>("two_term_boundary_expansion") =
173  getParam<bool>("solid_temperature_two_term_bc_expansion");
174  getProblem().addVariable("INSFVEnergyVariable", _solid_temperature_name, params);
175  }
176 }
177 
178 void
180 {
181  // Check this physics against others
183 
184  if (isTransient())
186 
188  if (getParam<std::vector<MooseFunctorName>>("ambient_convection_alpha").size())
190  if (isParamValid("external_heat_source"))
192 }
193 
194 void
196 {
197  const auto kernel_type = "PINSFVEnergyTimeDerivative";
198  const auto kernel_name = prefix() + "pins_solid_energy_time";
199 
200  InputParameters params = getFactory().getValidParams(kernel_type);
201  assignBlocks(params, _blocks);
202  params.set<NonlinearVariableName>("variable") = _solid_temperature_name;
203  params.set<MooseFunctorName>(NS::density) = _density_name;
204 
205  // The '_solid' suffix has been declared when creating the INSFVEnthalpyMaterial
206  // only for thermal functor material properties
207  // Using this derivative we can model non-constant specific heat
209  /*thread_id=*/0))
210  params.set<MooseFunctorName>(NS::time_deriv(NS::specific_enthalpy)) =
212  else
213  params.set<MooseFunctorName>(NS::cp) = _specific_heat_name;
214 
215  params.set<MooseFunctorName>(NS::porosity) = _porosity_name;
216  // If modeling a variable density
218  /*thread_id=*/0))
219  {
220  params.set<MooseFunctorName>(NS::time_deriv(NS::density)) = NS::time_deriv(_density_name);
221  params.set<MooseFunctorName>(NS::specific_enthalpy) = NS::specific_enthalpy + "_solid";
222  }
223  params.set<bool>("is_solid") = true;
224 
225  getProblem().addFVKernel(kernel_type, kernel_name, params);
226 }
227 
228 void
230 {
231  const auto vector_conductivity = processThermalConductivity();
232 
233  const auto kernel_type =
234  vector_conductivity ? "PINSFVEnergyAnisotropicDiffusion" : "PINSFVEnergyDiffusion";
235 
236  InputParameters params = getFactory().getValidParams(kernel_type);
237  params.set<NonlinearVariableName>("variable") = _solid_temperature_name;
238  params.set<MooseFunctorName>(NS::porosity) = _porosity_name;
239 
240  // Set block restrictions
241  const bool combined = _thermal_conductivity_blocks.size() > 1;
242  std::vector<SubdomainName> thermal_conductivity_blocks;
243  for (const auto & block_group : _thermal_conductivity_blocks)
244  thermal_conductivity_blocks.insert(thermal_conductivity_blocks.end(),
245  std::make_move_iterator(block_group.begin()),
246  std::make_move_iterator(block_group.end()));
247  const auto block_names =
248  _thermal_conductivity_blocks.size() ? thermal_conductivity_blocks : _blocks;
249  assignBlocks(params, block_names);
250 
251  // Set thermal conductivity
252  const auto conductivity_name = vector_conductivity ? NS::kappa : NS::k;
253  if (combined)
254  params.set<MooseFunctorName>(conductivity_name) = prefix() + "combined_thermal_conductivity";
255  else
256  params.set<MooseFunctorName>(conductivity_name) = _thermal_conductivity_name[0];
257 
258  getProblem().addFVKernel(kernel_type, prefix() + "pins_energy_diffusion", params);
259 }
260 
261 void
263 {
264  const auto num_convection_blocks = _ambient_convection_blocks.size();
265  const auto num_used_blocks = num_convection_blocks ? num_convection_blocks : 1;
266 
267  // Check parameter. Late check in case the block was added by a Component
268  if (num_used_blocks != _ambient_convection_alpha.size())
269  paramError("ambient_convection_alpha",
270  "Number of ambient convection heat transfer coefficients (" +
271  std::to_string(_ambient_convection_alpha.size()) +
272  ") should match the number of "
273  "blocks (" +
274  std::to_string(num_convection_blocks) + ") each HTC is defined on.");
275 
276  const auto kernel_type = "PINSFVEnergyAmbientConvection";
277  InputParameters params = getFactory().getValidParams(kernel_type);
278  params.set<NonlinearVariableName>("variable") = _solid_temperature_name;
279  params.set<MooseFunctorName>(NS::T_solid) = _solid_temperature_name;
280  params.set<bool>("is_solid") = true;
281 
282  for (const auto block_i : make_range(num_used_blocks))
283  {
284  std::string block_name = "";
285  if (num_convection_blocks)
286  {
287  params.set<std::vector<SubdomainName>>("block") = _ambient_convection_blocks[block_i];
288  block_name = Moose::stringify(_ambient_convection_blocks[block_i]);
289  }
290  else
291  {
292  assignBlocks(params, _blocks);
293  block_name = std::to_string(block_i);
294  }
295 
296  params.set<MooseFunctorName>("h_solid_fluid") = _ambient_convection_alpha[block_i];
297  if (_ambient_temperature.size() > 1)
298  params.set<MooseFunctorName>(NS::T_fluid) = _ambient_temperature[block_i];
299  else
300  params.set<MooseFunctorName>(NS::T_fluid) = _ambient_temperature[0];
301 
302  getProblem().addFVKernel(kernel_type, prefix() + "ambient_convection_" + block_name, params);
303  }
304 }
305 
306 void
308 {
309  const std::string kernel_type = "FVCoupledForce";
310  InputParameters params = getFactory().getValidParams(kernel_type);
311  params.set<NonlinearVariableName>("variable") = _solid_temperature_name;
312  const auto & source_blocks = getParam<std::vector<SubdomainName>>("external_heat_source_blocks");
313  if (source_blocks.size())
314  assignBlocks(params, source_blocks);
315  else
316  assignBlocks(params, _blocks);
317  params.set<MooseFunctorName>("v") = getParam<MooseFunctorName>("external_heat_source");
318  params.set<Real>("coef") = getParam<Real>("external_heat_source_coeff");
319 
320  getProblem().addFVKernel(kernel_type, prefix() + "external_heat_source", params);
321 }
322 
323 bool
325 {
326  if (isParamValid("thermal_conductivity_blocks"))
327  checkBlockwiseConsistency<MooseFunctorName>("thermal_conductivity_blocks",
328  {"thermal_conductivity_solid"});
329  bool have_scalar = false;
330  bool have_vector = false;
331 
332  for (const auto i : index_range(_thermal_conductivity_name))
333  {
334  // First, check if the name is just a number (only in case of isotropic conduction)
336  have_scalar = true;
337  // Now we determine what kind of functor we are dealing with
338  else
339  {
341  /*thread_id=*/0))
342  have_scalar = true;
343  else
344  {
346  /*thread_id=*/0))
347  have_vector = true;
348  else
349  paramError("thermal_conductivity_solid",
350  "We only allow functor of type (AD)Real or (AD)RealVectorValue for thermal "
351  "conductivity! Functor '" +
352  _thermal_conductivity_name[i] + "' is not of the requested type.");
353  }
354  }
355  }
356 
357  if (have_vector == have_scalar)
358  paramError("thermal_conductivity_solid",
359  "The entries on thermal conductivity shall either be scalars or vectors, mixing "
360  "them is not supported!");
361  return have_vector;
362 }
363 
364 void
366 {
367  if (!getParam<bool>("use_external_enthalpy_material"))
368  {
369  InputParameters params = getFactory().getValidParams("INSFVEnthalpyFunctorMaterial");
370  assignBlocks(params, _blocks);
371 
372  params.set<MooseFunctorName>(NS::density) = _density_name;
373  params.set<MooseFunctorName>(NS::cp) = _specific_heat_name;
374  params.set<MooseFunctorName>("temperature") = _solid_temperature_name;
375  params.set<MaterialPropertyName>("declare_suffix") = "solid";
376 
378  "INSFVEnthalpyFunctorMaterial", prefix() + "ins_enthalpy_material", params);
379  }
380 
381  // Combine the functors (combining scalars and vectors is not currently supported)
382  if (_thermal_conductivity_name.size() > 1)
383  {
384  const auto vector_conductivity = processThermalConductivity();
385  const auto combiner_functor = vector_conductivity ? "PiecewiseByBlockVectorFunctorMaterial"
386  : "PiecewiseByBlockFunctorMaterial";
387  InputParameters params = getFactory().getValidParams(combiner_functor);
388  params.set<MooseFunctorName>("prop_name") = prefix() + "combined_thermal_conductivity";
389  std::vector<SubdomainName> blocks_list;
390  std::map<std::string, std::string> blocks_to_functors;
391  for (const auto i : index_range(_thermal_conductivity_name))
392  {
393  for (const auto & block : _thermal_conductivity_blocks[i])
394  {
395  blocks_list.push_back(block);
396  blocks_to_functors.insert(
397  std::pair<std::string, std::string>(block, _thermal_conductivity_name[i]));
398  }
399  }
400  params.set<std::vector<SubdomainName>>("block") = blocks_list;
401  params.set<std::map<std::string, std::string>>("subdomain_to_prop_value") = blocks_to_functors;
402  getProblem().addMaterial(combiner_functor, prefix() + "thermal_conductivity_combiner", params);
403  }
404 }
405 
408 {
409  unsigned short necessary_layers = getParam<unsigned short>("ghost_layers");
410  if (getParam<MooseEnum>("solid_temperature_face_interpolation") == "skewness-corrected")
411  necessary_layers = std::max(necessary_layers, (unsigned short)3);
412 
413  // Just an object that has a ghost_layers parameter and performs geometric, algebraic, and
414  // coupling ghosting
415  const std::string kernel_type = "INSFVMixingLengthReynoldsStress";
416  InputParameters params = getFactory().getValidParams(kernel_type);
417  params.template set<unsigned short>("ghost_layers") = necessary_layers;
418 
419  return params;
420 }
421 
422 void
424 {
425  // Get a pointer to a flow physics and a heat transfer physics on the same blocks, if it exists
426  const WCNSFVFlowPhysics * flow_physics = nullptr;
427  const WCNSFVFluidHeatTransferPhysics * fluid_energy_physics = nullptr;
428  const auto all_flow_physics = getCoupledPhysics<const WCNSFVFlowPhysics>(/*allow_fail=*/true);
429  for (const auto physics : all_flow_physics)
431  physics->name(), physics->blocks(), /*error_if_not_identical=*/false))
432  {
433  if (flow_physics)
434  mooseError("Two Fluid flow physics detected on the same blocks as the solid heat transfer "
435  "physics");
436  flow_physics = physics;
437  }
438  const auto all_fluid_energy_physics =
439  getCoupledPhysics<const WCNSFVFluidHeatTransferPhysics>(/*allow_fail=*/true);
440  for (const auto physics : all_fluid_energy_physics)
442  physics->name(), physics->blocks(), /*error_if_not_identical=*/false))
443  {
444  if (fluid_energy_physics)
445  mooseError("Two fluid heat transfer physics detected on the same blocks as the solid heat "
446  "transfer physics");
447  fluid_energy_physics = physics;
448  }
449 
450  if (!fluid_energy_physics && !flow_physics)
451  return;
452 
453  // Check that the parameters seem reasonable
454  // Different material properties
455  // TODO: Does this error on numbers?
456  if (flow_physics && flow_physics->densityName() == _density_name)
457  paramError("rho_solid", "Fluid and solid density should be different");
458  if (fluid_energy_physics && fluid_energy_physics->getSpecificHeatName() == _specific_heat_name)
459  paramError("cp_solid", "Fluid and solid specific heat should be different");
460 
461  // Check ambient convection parameters
462  if (fluid_energy_physics)
463  {
464  // The blocks should match
465  // We only use a warning in case the blocks are matching, just specified differently
466  // in the vector of vectors
467  auto fluid_convection_blocks = fluid_energy_physics->getAmbientConvectionBlocks();
468  std::sort(fluid_convection_blocks.begin(), fluid_convection_blocks.end());
469  std::vector<std::vector<SubdomainName>> copy_solid_blocks = _ambient_convection_blocks;
470  std::sort(copy_solid_blocks.begin(), copy_solid_blocks.end());
471  if (fluid_convection_blocks != _ambient_convection_blocks)
472  paramWarning("Ambient convection blocks in the solid phase :" +
473  Moose::stringify(_ambient_convection_blocks) + " and in the fluid phase " +
474  Moose::stringify(fluid_convection_blocks) + " do not seem to match.");
475 
476  // The coefficients should also match
477  auto fluid_convection_coeffs = fluid_energy_physics->getAmbientConvectionHTCs();
478  fluid_convection_blocks = fluid_energy_physics->getAmbientConvectionBlocks();
479  for (const auto i : index_range(fluid_energy_physics->getAmbientConvectionBlocks()))
480  for (const auto j : index_range(_ambient_convection_blocks))
481  if (fluid_convection_blocks[i] == _ambient_convection_blocks[j] &&
482  fluid_convection_coeffs[i] != _ambient_convection_alpha[j])
483  paramWarning("Ambient convection HTCs in the solid phase :" +
484  Moose::stringify(_ambient_convection_alpha) + " and in the fluid phase " +
485  Moose::stringify(fluid_convection_coeffs) + " do not seem to match.");
486  }
487 }
std::string prefix() const
bool parsesToReal(const std::string &input)
static InputParameters validParams()
Definition: NSFVBase.C:368
void renameParam(const std::string &old_name, const std::string &new_name, const std::string &new_docstring)
Creates all the objects needed to solve the Navier Stokes energy equation.
void assignBlocks(InputParameters &params, const std::vector< SubdomainName > &blocks) const
Factory & getFactory()
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
static const std::string T_solid
Definition: NS.h:107
T & set(const std::string &name, bool quiet_mode=false)
static const std::string density
Definition: NS.h:33
InputParameters getValidParams(const std::string &name) const
Creates all the objects needed to solve the Navier Stokes mass and momentum equations.
const std::vector< SubdomainName > & blocks() const
void checkFluidAndSolidHeatTransferPhysicsParameters() const
Battery of additional checks on parameters.
registerPhysicsBaseTasks("NavierStokesApp", PNSFVSolidHeatTransferPhysics)
std::vector< SubdomainName > _blocks
const MooseFunctorName & densityName() const
Return the name of the density functor.
void addRequiredParam(const std::string &name, const std::string &doc_string)
void suppressParameter(const std::string &name)
std::vector< MooseFunctorName > _thermal_conductivity_name
Name of the thermal conductivity functor for each block-group.
bool isParamValid(const std::string &name) const
void checkSecondParamSetOnlyIfFirstOneSet(const std::string &param1, const std::string &param2) const
virtual FEProblemBase & getProblem()
static const std::string porosity
Definition: NS.h:104
static const std::string cp
Definition: NS.h:121
std::vector< MooseFunctorName > _ambient_convection_alpha
Name of the ambient convection heat transfer coefficients for each block-group.
const SolverSystemName & getSolverSystem(unsigned int variable_index) const
const MooseFunctorName & getSpecificHeatName() const
Get the name of the specific heat material property.
static const std::string T_fluid
Definition: NS.h:106
bool processThermalConductivity()
Process thermal conductivity (multiple functor input options are available).
bool hasFunctorWithType(const std::string &name, const THREAD_ID tid) const
Creates all the objects needed to solve the porous media solid energy equation.
const T & getParam(const std::string &name) const
const MooseFunctorName _specific_heat_name
Name of the specific heat functor (usually material property)
void paramError(const std::string &param, Args... args) const
std::string stringify(const T &t)
void transferParam(const InputParameters &source_param, const std::string &name, const std::string &new_name="", const std::string &new_description="")
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
static InputParameters validParams()
bool variableExists(const VariableName &var_name, bool error_if_aux) const
bool checkBlockRestrictionIdentical(const std::string &object_name, const std::vector< SubdomainName > &blocks, const bool error_if_not_identical=true) const
const NonlinearVariableName _solid_temperature_name
Solid temperature name.
std::vector< std::vector< SubdomainName > > _thermal_conductivity_blocks
Vector of subdomain groups where we want to have different thermal conduction.
static const std::string kappa
Definition: NS.h:116
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< MooseFunctorName > _ambient_temperature
Name of the solid domain temperature for each block-group.
const std::vector< MooseFunctorName > & getAmbientConvectionHTCs() const
Name of the ambient convection heat transfer coefficients for each block-group.
void addPINSSolidEnergyTimeKernels()
Functions adding kernels for the solid energy equation.
registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_variable")
const NonlinearVariableName _fluid_temperature_name
Fluid temperature name.
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) const
const MooseFunctorName _porosity_name
Name of the porosity functor (usually material property)
void addClassDescription(const std::string &doc_string)
const MooseFunctorName _density_name
Name of the density functor (usually material property)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
void paramWarning(const std::string &param, Args... args) const
bool hasFunctor(const std::string &name, const THREAD_ID tid) const
PNSFVSolidHeatTransferPhysics(const InputParameters &parameters)
virtual void addFVKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
void saveSolverVariableName(const VariableName &var_name)
static const std::string k
Definition: NS.h:130
virtual InputParameters getAdditionalRMParams() const override
auto index_range(const T &sizable)
Creates all the objects needed to solve the heat conduction equations with a finite volume discretiza...
bool isTransient() const
std::vector< std::vector< SubdomainName > > _ambient_convection_blocks
Vector of subdomain groups where we want to have different ambient convection.
std::string time_deriv(const std::string &var)
Definition: NS.h:97
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
static const std::string specific_enthalpy
Definition: NS.h:68
const std::vector< std::vector< SubdomainName > > & getAmbientConvectionBlocks() const
Get the ambient convection parameters for parameter checking.