https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
17registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_variable");
19registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_fv_kernel");
20registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_fv_bc");
21registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_material");
22registerMooseAction("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",
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");
115 "external_heat_source_blocks external_heat_source external_heat_source_coeff",
116 "Solid porous medium heat source");
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
156void
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 params.set<std::vector<Real>>("scaling") = {getParam<Real>("temperature_scaling")};
168 params.set<MooseEnum>("face_interp_method") =
169 getParam<MooseEnum>("solid_temperature_face_interpolation");
170 params.set<bool>("two_term_boundary_expansion") =
171 getParam<bool>("solid_temperature_two_term_bc_expansion");
172 addSharedSolverVariable("INSFVEnergyVariable", _solid_temperature_name, params);
173 }
174}
175
176void
178{
179 // Check this physics against others
181
182 if (isTransient())
184
186 if (getParam<std::vector<MooseFunctorName>>("ambient_convection_alpha").size())
188 if (isParamValid("external_heat_source"))
190}
191
192void
194{
195 const auto kernel_type = "PINSFVEnergyTimeDerivative";
196 const auto kernel_name = prefix() + "pins_solid_energy_time";
197
198 InputParameters params = getFactory().getValidParams(kernel_type);
199 assignBlocks(params, _blocks);
200 params.set<NonlinearVariableName>("variable") = _solid_temperature_name;
201 params.set<MooseFunctorName>(NS::density) = _density_name;
202
203 // The '_solid' suffix has been declared when creating the INSFVEnthalpyMaterial
204 // only for thermal functor material properties
205 // Using this derivative we can model non-constant specific heat
207 /*thread_id=*/0))
208 params.set<MooseFunctorName>(NS::time_deriv(NS::specific_enthalpy)) =
210 else
211 params.set<MooseFunctorName>(NS::cp) = _specific_heat_name;
212
213 params.set<MooseFunctorName>(NS::porosity) = _porosity_name;
214 // If modeling a variable density
216 /*thread_id=*/0))
217 {
218 params.set<MooseFunctorName>(NS::time_deriv(NS::density)) = NS::time_deriv(_density_name);
219 params.set<MooseFunctorName>(NS::specific_enthalpy) = NS::specific_enthalpy + "_solid";
220 }
221 params.set<bool>("is_solid") = true;
222
223 getProblem().addFVKernel(kernel_type, kernel_name, params);
224}
225
226void
228{
229 const auto vector_conductivity = processThermalConductivity();
230
231 const auto kernel_type =
232 vector_conductivity ? "PINSFVEnergyAnisotropicDiffusion" : "PINSFVEnergyDiffusion";
233
234 InputParameters params = getFactory().getValidParams(kernel_type);
235 params.set<NonlinearVariableName>("variable") = _solid_temperature_name;
236 params.set<MooseFunctorName>(NS::porosity) = _porosity_name;
237
238 // Set block restrictions
239 const bool combined = _thermal_conductivity_blocks.size() > 1;
240 std::vector<SubdomainName> thermal_conductivity_blocks;
241 for (const auto & block_group : _thermal_conductivity_blocks)
242 thermal_conductivity_blocks.insert(thermal_conductivity_blocks.end(),
243 std::make_move_iterator(block_group.begin()),
244 std::make_move_iterator(block_group.end()));
245 const auto block_names =
246 _thermal_conductivity_blocks.size() ? thermal_conductivity_blocks : _blocks;
247 assignBlocks(params, block_names);
248
249 // Set thermal conductivity
250 const auto conductivity_name = vector_conductivity ? NS::kappa : NS::k;
251 if (combined)
252 params.set<MooseFunctorName>(conductivity_name) = prefix() + "combined_thermal_conductivity";
253 else
254 params.set<MooseFunctorName>(conductivity_name) = _thermal_conductivity_name[0];
255
256 getProblem().addFVKernel(kernel_type, prefix() + "pins_energy_diffusion", params);
257}
258
259void
261{
262 const auto num_convection_blocks = _ambient_convection_blocks.size();
263 const auto num_used_blocks = num_convection_blocks ? num_convection_blocks : 1;
264
265 // Check parameter. Late check in case the block was added by a Component
266 if (num_used_blocks != _ambient_convection_alpha.size())
267 paramError("ambient_convection_alpha",
268 "Number of ambient convection heat transfer coefficients (" +
269 std::to_string(_ambient_convection_alpha.size()) +
270 ") should match the number of "
271 "blocks (" +
272 std::to_string(num_convection_blocks) + ") each HTC is defined on.");
273
274 const auto kernel_type = "PINSFVEnergyAmbientConvection";
275 InputParameters params = getFactory().getValidParams(kernel_type);
276 params.set<NonlinearVariableName>("variable") = _solid_temperature_name;
277 params.set<MooseFunctorName>(NS::T_solid) = _solid_temperature_name;
278 params.set<bool>("is_solid") = true;
279
280 for (const auto block_i : make_range(num_used_blocks))
281 {
282 std::string block_name = "";
283 if (num_convection_blocks)
284 {
285 params.set<std::vector<SubdomainName>>("block") = _ambient_convection_blocks[block_i];
286 block_name = Moose::stringify(_ambient_convection_blocks[block_i]);
287 }
288 else
289 {
290 assignBlocks(params, _blocks);
291 block_name = std::to_string(block_i);
292 }
293
294 params.set<MooseFunctorName>("h_solid_fluid") = _ambient_convection_alpha[block_i];
295 if (_ambient_temperature.size() > 1)
296 params.set<MooseFunctorName>(NS::T_fluid) = _ambient_temperature[block_i];
297 else
298 params.set<MooseFunctorName>(NS::T_fluid) = _ambient_temperature[0];
299
300 getProblem().addFVKernel(kernel_type, prefix() + "ambient_convection_" + block_name, params);
301 }
302}
303
304void
306{
307 const std::string kernel_type = "FVCoupledForce";
308 InputParameters params = getFactory().getValidParams(kernel_type);
309 params.set<NonlinearVariableName>("variable") = _solid_temperature_name;
310 const auto & source_blocks = getParam<std::vector<SubdomainName>>("external_heat_source_blocks");
311 if (source_blocks.size())
312 assignBlocks(params, source_blocks);
313 else
314 assignBlocks(params, _blocks);
315 params.set<MooseFunctorName>("v") = getParam<MooseFunctorName>("external_heat_source");
316 params.set<Real>("coef") = getParam<Real>("external_heat_source_coeff");
317
318 getProblem().addFVKernel(kernel_type, prefix() + "external_heat_source", params);
319}
320
321bool
323{
324 if (isParamValid("thermal_conductivity_blocks"))
325 checkBlockwiseConsistency<MooseFunctorName>("thermal_conductivity_blocks",
326 {"thermal_conductivity_solid"});
327 bool have_scalar = false;
328 bool have_vector = false;
329
330 for (const auto i : index_range(_thermal_conductivity_name))
331 {
332 // First, check if the name is just a number (only in case of isotropic conduction)
334 have_scalar = true;
335 // Now we determine what kind of functor we are dealing with
336 else
337 {
339 /*thread_id=*/0))
340 have_scalar = true;
341 else
342 {
344 /*thread_id=*/0))
345 have_vector = true;
347 /*thread_id=*/0))
348 paramError("thermal_conductivity_solid",
349 "We only allow functor of type (AD)Real or (AD)RealVectorValue for thermal "
350 "conductivity! Functor '" +
351 _thermal_conductivity_name[i] + "' is not of the requested type.");
352 else
353 // If another Physics is creating this functor, we could be running into an order of
354 // creation problem
355 paramWarning("thermal_conductivity_solid",
356 "Functor '" + _thermal_conductivity_name[i] +
357 "' was not found in the Problem. Did you mispell it?");
358 }
359 }
360 }
361
362 if (have_vector && (have_vector == have_scalar))
363 paramError("thermal_conductivity_solid",
364 "The entries on thermal conductivity shall either be scalars or vectors, mixing "
365 "them is not supported!");
366 return have_vector;
367}
368
369void
371{
372 if (!getParam<bool>("use_external_enthalpy_material"))
373 {
374 InputParameters params = getFactory().getValidParams("INSFVEnthalpyFunctorMaterial");
375 assignBlocks(params, _blocks);
376
377 params.set<MooseFunctorName>(NS::density) = _density_name;
378 params.set<MooseFunctorName>(NS::cp) = _specific_heat_name;
379 params.set<MooseFunctorName>("temperature") = _solid_temperature_name;
380 params.set<MaterialPropertyName>("declare_suffix") = "solid";
381
383 "INSFVEnthalpyFunctorMaterial", prefix() + "ins_enthalpy_material", params);
384 }
385
386 // Combine the functors (combining scalars and vectors is not currently supported)
387 if (_thermal_conductivity_name.size() > 1)
388 {
389 const auto vector_conductivity = processThermalConductivity();
390 const auto combiner_functor = vector_conductivity ? "PiecewiseByBlockVectorFunctorMaterial"
391 : "PiecewiseByBlockFunctorMaterial";
392 InputParameters params = getFactory().getValidParams(combiner_functor);
393 params.set<MooseFunctorName>("prop_name") = prefix() + "combined_thermal_conductivity";
394 std::vector<SubdomainName> blocks_list;
395 std::map<std::string, std::string> blocks_to_functors;
396 for (const auto i : index_range(_thermal_conductivity_name))
397 {
398 for (const auto & block : _thermal_conductivity_blocks[i])
399 {
400 blocks_list.push_back(block);
401 blocks_to_functors.insert(
402 std::pair<std::string, std::string>(block, _thermal_conductivity_name[i]));
403 }
404 }
405 params.set<std::vector<SubdomainName>>("block") = blocks_list;
406 params.set<std::map<std::string, std::string>>("subdomain_to_prop_value") = blocks_to_functors;
407 getProblem().addMaterial(combiner_functor, prefix() + "thermal_conductivity_combiner", params);
408 }
409}
410
413{
414 unsigned short necessary_layers = getParam<unsigned short>("ghost_layers");
415 if (getParam<MooseEnum>("solid_temperature_face_interpolation") == "skewness-corrected")
416 necessary_layers = std::max(necessary_layers, (unsigned short)3);
417
418 // Just an object that has a ghost_layers parameter and performs geometric, algebraic, and
419 // coupling ghosting
420 const std::string kernel_type = "INSFVMixingLengthReynoldsStress";
421 InputParameters params = getFactory().getValidParams(kernel_type);
422 params.template set<unsigned short>("ghost_layers") = necessary_layers;
423
424 return params;
425}
426
427void
429{
430 // Get a pointer to a flow physics and a heat transfer physics on the same blocks, if it exists
431 const WCNSFVFlowPhysics * flow_physics = nullptr;
432 const WCNSFVFluidHeatTransferPhysics * fluid_energy_physics = nullptr;
433 const auto all_flow_physics = getCoupledPhysics<const WCNSFVFlowPhysics>(/*allow_fail=*/true);
434 for (const auto physics : all_flow_physics)
436 physics->name(), physics->blocks(), /*error_if_not_identical=*/false))
437 {
438 if (flow_physics)
439 mooseError("Two Fluid flow physics detected on the same blocks as the solid heat transfer "
440 "physics");
441 flow_physics = physics;
442 }
443 const auto all_fluid_energy_physics =
444 getCoupledPhysics<const WCNSFVFluidHeatTransferPhysics>(/*allow_fail=*/true);
445 for (const auto physics : all_fluid_energy_physics)
447 physics->name(), physics->blocks(), /*error_if_not_identical=*/false))
448 {
449 if (fluid_energy_physics)
450 mooseError("Two fluid heat transfer physics detected on the same blocks as the solid heat "
451 "transfer physics");
452 fluid_energy_physics = physics;
453 }
454
455 if (!fluid_energy_physics && !flow_physics)
456 return;
457
458 // Check that the parameters seem reasonable
459 // Different material properties
460 // TODO: Does this error on numbers?
461 if (flow_physics && flow_physics->densityName() == _density_name)
462 paramError("rho_solid", "Fluid and solid density should be different");
463 if (fluid_energy_physics && fluid_energy_physics->getSpecificHeatName() == _specific_heat_name)
464 paramError("cp_solid", "Fluid and solid specific heat should be different");
465
466 // Check ambient convection parameters
467 if (fluid_energy_physics)
468 {
469 // The blocks should match
470 // We only use a warning in case the blocks are matching, just specified differently
471 // in the vector of vectors
472 auto fluid_convection_blocks = fluid_energy_physics->getAmbientConvectionBlocks();
473 std::sort(fluid_convection_blocks.begin(), fluid_convection_blocks.end());
474 std::vector<std::vector<SubdomainName>> copy_solid_blocks = _ambient_convection_blocks;
475 std::sort(copy_solid_blocks.begin(), copy_solid_blocks.end());
476 if (fluid_convection_blocks != _ambient_convection_blocks)
477 paramWarning("Ambient convection blocks in the solid phase :" +
478 Moose::stringify(_ambient_convection_blocks) + " and in the fluid phase " +
479 Moose::stringify(fluid_convection_blocks) + " do not seem to match.");
480
481 // The coefficients should also match
482 auto fluid_convection_coeffs = fluid_energy_physics->getAmbientConvectionHTCs();
483 fluid_convection_blocks = fluid_energy_physics->getAmbientConvectionBlocks();
484 for (const auto i : index_range(fluid_energy_physics->getAmbientConvectionBlocks()))
485 for (const auto j : index_range(_ambient_convection_blocks))
486 if (fluid_convection_blocks[i] == _ambient_convection_blocks[j] &&
487 fluid_convection_coeffs[i] != _ambient_convection_alpha[j])
488 paramWarning("Ambient convection HTCs in the solid phase :" +
489 Moose::stringify(_ambient_convection_alpha) + " and in the fluid phase " +
490 Moose::stringify(fluid_convection_coeffs) + " do not seem to match.");
491 }
492}
DualNumber< Real, DNDerivativeType, true > ADReal
registerPhysicsBaseTasks("NavierStokesApp", PNSFVSolidHeatTransferPhysics)
registerMooseAction("NavierStokesApp", PNSFVSolidHeatTransferPhysics, "add_variable")
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
virtual void addFVKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
InputParameters getValidParams(const std::string &name) const
Creates all the objects needed to solve the heat conduction equations with a finite volume discretiza...
static InputParameters validParams()
void checkSecondParamSetOnlyIfFirstOneSet(const std::string &param1, const std::string &param2) const
void suppressParameter(const std::string &name)
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
void renameParam(const std::string &old_name, const std::string &new_name, const std::string &new_docstring)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void transferParam(const InputParameters &source_param, const std::string &name, const std::string &new_name="", const std::string &new_description="")
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)
void paramWarning(const std::string &param, Args... args) const
void paramError(const std::string &param, Args... args) const
void mooseError(Args &&... args) const
const T & getParam(const std::string &name) const
bool isParamValid(const std::string &name) const
static InputParameters validParams()
Definition NSFVBase.C:378
Creates all the objects needed to solve the porous media solid energy equation.
const MooseFunctorName _porosity_name
Name of the porosity functor (usually material property)
const NonlinearVariableName _fluid_temperature_name
Fluid temperature name.
std::vector< MooseFunctorName > _thermal_conductivity_name
Name of the thermal conductivity functor for each block-group.
std::vector< MooseFunctorName > _ambient_temperature
Name of the solid domain temperature for each block-group.
std::vector< std::vector< SubdomainName > > _ambient_convection_blocks
Vector of subdomain groups where we want to have different ambient convection.
bool processThermalConductivity()
Process thermal conductivity (multiple functor input options are available).
std::vector< std::vector< SubdomainName > > _thermal_conductivity_blocks
Vector of subdomain groups where we want to have different thermal conduction.
virtual InputParameters getAdditionalRMParams() const override
PNSFVSolidHeatTransferPhysics(const InputParameters &parameters)
const NonlinearVariableName _solid_temperature_name
Solid temperature name.
const MooseFunctorName _specific_heat_name
Name of the specific heat functor (usually material property)
std::vector< MooseFunctorName > _ambient_convection_alpha
Name of the ambient convection heat transfer coefficients for each block-group.
const MooseFunctorName _density_name
Name of the density functor (usually material property)
void addPINSSolidEnergyTimeKernels()
Functions adding kernels for the solid energy equation.
void checkFluidAndSolidHeatTransferPhysicsParameters() const
Battery of additional checks on parameters.
virtual FEProblemBase & getProblem()
Factory & getFactory()
bool checkBlockRestrictionIdentical(const std::string &object_name, const std::vector< SubdomainName > &blocks, const bool error_if_not_identical=true) const
void assignBlocks(InputParameters &params, const std::vector< SubdomainName > &blocks) const
void saveSolverVariableName(const VariableName &var_name)
std::string prefix() const
bool variableExists(const VariableName &var_name, bool error_if_aux) const
void addSharedSolverVariable(const std::string &var_type, const VariableName &var_name, InputParameters params)
bool isTransient() const
std::vector< SubdomainName > _blocks
const std::vector< SubdomainName > & blocks() const
bool hasFunctor(const std::string &name, const THREAD_ID tid) const
bool hasFunctorWithType(const std::string &name, const THREAD_ID tid) const
const MooseFunctorName & densityName() const
Return the name of the density functor.
Creates all the objects needed to solve the Navier Stokes mass and momentum equations.
const std::vector< MooseFunctorName > & getAmbientConvectionHTCs() const
Name of the ambient convection heat transfer coefficients for each block-group.
const std::vector< std::vector< SubdomainName > > & getAmbientConvectionBlocks() const
Get the ambient convection parameters for parameter checking.
const MooseFunctorName & getSpecificHeatName() const
Get the name of the specific heat material property.
Creates all the objects needed to solve the Navier Stokes energy equation.
bool parsesToReal(const std::string &input, Real *parsed_real)
std::string stringify(const T &t)
static const std::string density
Definition NS.h:34
static const std::string T_fluid
Definition NS.h:110
static const std::string cp
Definition NS.h:125
static const std::string k
Definition NS.h:134
static const std::string T_solid
Definition NS.h:111
static const std::string specific_enthalpy
Definition NS.h:69
static const std::string kappa
Definition NS.h:120
static const std::string porosity
Definition NS.h:108
std::string time_deriv(const std::string &var)
Definition NS.h:98