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;
349  /*thread_id=*/0))
350  paramError("thermal_conductivity_solid",
351  "We only allow functor of type (AD)Real or (AD)RealVectorValue for thermal "
352  "conductivity! Functor '" +
353  _thermal_conductivity_name[i] + "' is not of the requested type.");
354  else
355  // If another Physics is creating this functor, we could be running into an order of
356  // creation problem
357  paramWarning("thermal_conductivity_solid",
358  "Functor '" + _thermal_conductivity_name[i] +
359  "' was not found in the Problem. Did you mispell it?");
360  }
361  }
362  }
363 
364  if (have_vector && (have_vector == have_scalar))
365  paramError("thermal_conductivity_solid",
366  "The entries on thermal conductivity shall either be scalars or vectors, mixing "
367  "them is not supported!");
368  return have_vector;
369 }
370 
371 void
373 {
374  if (!getParam<bool>("use_external_enthalpy_material"))
375  {
376  InputParameters params = getFactory().getValidParams("INSFVEnthalpyFunctorMaterial");
377  assignBlocks(params, _blocks);
378 
379  params.set<MooseFunctorName>(NS::density) = _density_name;
380  params.set<MooseFunctorName>(NS::cp) = _specific_heat_name;
381  params.set<MooseFunctorName>("temperature") = _solid_temperature_name;
382  params.set<MaterialPropertyName>("declare_suffix") = "solid";
383 
385  "INSFVEnthalpyFunctorMaterial", prefix() + "ins_enthalpy_material", params);
386  }
387 
388  // Combine the functors (combining scalars and vectors is not currently supported)
389  if (_thermal_conductivity_name.size() > 1)
390  {
391  const auto vector_conductivity = processThermalConductivity();
392  const auto combiner_functor = vector_conductivity ? "PiecewiseByBlockVectorFunctorMaterial"
393  : "PiecewiseByBlockFunctorMaterial";
394  InputParameters params = getFactory().getValidParams(combiner_functor);
395  params.set<MooseFunctorName>("prop_name") = prefix() + "combined_thermal_conductivity";
396  std::vector<SubdomainName> blocks_list;
397  std::map<std::string, std::string> blocks_to_functors;
398  for (const auto i : index_range(_thermal_conductivity_name))
399  {
400  for (const auto & block : _thermal_conductivity_blocks[i])
401  {
402  blocks_list.push_back(block);
403  blocks_to_functors.insert(
404  std::pair<std::string, std::string>(block, _thermal_conductivity_name[i]));
405  }
406  }
407  params.set<std::vector<SubdomainName>>("block") = blocks_list;
408  params.set<std::map<std::string, std::string>>("subdomain_to_prop_value") = blocks_to_functors;
409  getProblem().addMaterial(combiner_functor, prefix() + "thermal_conductivity_combiner", params);
410  }
411 }
412 
415 {
416  unsigned short necessary_layers = getParam<unsigned short>("ghost_layers");
417  if (getParam<MooseEnum>("solid_temperature_face_interpolation") == "skewness-corrected")
418  necessary_layers = std::max(necessary_layers, (unsigned short)3);
419 
420  // Just an object that has a ghost_layers parameter and performs geometric, algebraic, and
421  // coupling ghosting
422  const std::string kernel_type = "INSFVMixingLengthReynoldsStress";
423  InputParameters params = getFactory().getValidParams(kernel_type);
424  params.template set<unsigned short>("ghost_layers") = necessary_layers;
425 
426  return params;
427 }
428 
429 void
431 {
432  // Get a pointer to a flow physics and a heat transfer physics on the same blocks, if it exists
433  const WCNSFVFlowPhysics * flow_physics = nullptr;
434  const WCNSFVFluidHeatTransferPhysics * fluid_energy_physics = nullptr;
435  const auto all_flow_physics = getCoupledPhysics<const WCNSFVFlowPhysics>(/*allow_fail=*/true);
436  for (const auto physics : all_flow_physics)
438  physics->name(), physics->blocks(), /*error_if_not_identical=*/false))
439  {
440  if (flow_physics)
441  mooseError("Two Fluid flow physics detected on the same blocks as the solid heat transfer "
442  "physics");
443  flow_physics = physics;
444  }
445  const auto all_fluid_energy_physics =
446  getCoupledPhysics<const WCNSFVFluidHeatTransferPhysics>(/*allow_fail=*/true);
447  for (const auto physics : all_fluid_energy_physics)
449  physics->name(), physics->blocks(), /*error_if_not_identical=*/false))
450  {
451  if (fluid_energy_physics)
452  mooseError("Two fluid heat transfer physics detected on the same blocks as the solid heat "
453  "transfer physics");
454  fluid_energy_physics = physics;
455  }
456 
457  if (!fluid_energy_physics && !flow_physics)
458  return;
459 
460  // Check that the parameters seem reasonable
461  // Different material properties
462  // TODO: Does this error on numbers?
463  if (flow_physics && flow_physics->densityName() == _density_name)
464  paramError("rho_solid", "Fluid and solid density should be different");
465  if (fluid_energy_physics && fluid_energy_physics->getSpecificHeatName() == _specific_heat_name)
466  paramError("cp_solid", "Fluid and solid specific heat should be different");
467 
468  // Check ambient convection parameters
469  if (fluid_energy_physics)
470  {
471  // The blocks should match
472  // We only use a warning in case the blocks are matching, just specified differently
473  // in the vector of vectors
474  auto fluid_convection_blocks = fluid_energy_physics->getAmbientConvectionBlocks();
475  std::sort(fluid_convection_blocks.begin(), fluid_convection_blocks.end());
476  std::vector<std::vector<SubdomainName>> copy_solid_blocks = _ambient_convection_blocks;
477  std::sort(copy_solid_blocks.begin(), copy_solid_blocks.end());
478  if (fluid_convection_blocks != _ambient_convection_blocks)
479  paramWarning("Ambient convection blocks in the solid phase :" +
480  Moose::stringify(_ambient_convection_blocks) + " and in the fluid phase " +
481  Moose::stringify(fluid_convection_blocks) + " do not seem to match.");
482 
483  // The coefficients should also match
484  auto fluid_convection_coeffs = fluid_energy_physics->getAmbientConvectionHTCs();
485  fluid_convection_blocks = fluid_energy_physics->getAmbientConvectionBlocks();
486  for (const auto i : index_range(fluid_energy_physics->getAmbientConvectionBlocks()))
487  for (const auto j : index_range(_ambient_convection_blocks))
488  if (fluid_convection_blocks[i] == _ambient_convection_blocks[j] &&
489  fluid_convection_coeffs[i] != _ambient_convection_alpha[j])
490  paramWarning("Ambient convection HTCs in the solid phase :" +
491  Moose::stringify(_ambient_convection_alpha) + " and in the fluid phase " +
492  Moose::stringify(fluid_convection_coeffs) + " do not seem to match.");
493  }
494 }
std::string prefix() const
static InputParameters validParams()
Definition: NSFVBase.C:371
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 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)
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
static const std::string T_solid
Definition: NS.h:111
T & set(const std::string &name, bool quiet_mode=false)
static const std::string density
Definition: NS.h:34
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.
void checkSecondParamSetOnlyIfFirstOneSet(const std::string &param1, const std::string &param2) const
virtual FEProblemBase & getProblem()
static const std::string porosity
Definition: NS.h:108
static const std::string cp
Definition: NS.h:125
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:110
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 MooseFunctorName _specific_heat_name
Name of the specific heat functor (usually material property)
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:120
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")
bool isParamValid(const std::string &name) const
void paramWarning(const std::string &param, Args... args) const
bool hasFunctor(const std::string &name, const THREAD_ID tid) const
bool parsesToReal(const std::string &input, Real *parsed_real)
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:134
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:98
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
static const std::string specific_enthalpy
Definition: NS.h:69
const std::vector< std::vector< SubdomainName > > & getAmbientConvectionBlocks() const
Get the ambient convection parameters for parameter checking.