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 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
178void
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
194void
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
228void
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
261void
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
306void
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
323bool
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
371void
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
429void
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}
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 addVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
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:371
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
const SolverSystemName & getSolverSystem(unsigned int variable_index) const
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