28 "Define a turbulence model for a incompressible or weakly-compressible Navier Stokes "
29 "flow with a finite volume discretization");
31 MooseEnum turbulence_type(
"mixing-length k-epsilon none",
"none");
33 "turbulence_handling",
35 "The way turbulent diffusivities are determined in the turbulent regime.");
38 params.
deprecateParam(
"mixing_length_walls",
"turbulence_walls",
"");
45 "tke_name",
NS::TKE,
"Name of the turbulent kinetic energy variable");
47 "tked_name",
NS::TKED,
"Name of the turbulent kinetic energy dissipation variable");
49 "initial_tke",
"0",
"Initial value for the turbulence kinetic energy");
51 "initial_tked",
"0",
"Initial value for the turbulence kinetic energy dissipation");
52 params.
addParam<FunctionName>(
"initial_mu_t",
"Initial value for the turbulence viscosity");
55 "C1_eps",
"C1 coefficient for the turbulent kinetic energy dissipation equation");
57 "C2_eps",
"C2 coefficient for the turbulent kinetic energy dissipation equation");
59 "sigma_k",
"Scaling coefficient for the turbulent kinetic energy diffusion term");
62 "Scaling coefficient for the turbulent kinetic energy dissipation diffusion term");
69 params.
addParam<
bool>(
"bulk_wall_treatment",
true,
"Whether to treat the wall cell as bulk");
70 MooseEnum wall_treatment(
"eq_newton eq_incremental eq_linearized neq",
"neq");
73 "The method used for computing the epsilon wall functions and the "
74 "turbulence viscosity wall functions");
77 "The method used for computing the temperature wall functions");
81 MooseEnum face_interpol_types(
"average skewness-corrected",
"average");
85 "The numerical scheme to interpolate the TKE to the "
86 "face (separate from the advected quantity interpolation).");
89 "The numerical scheme to interpolate the TKE to the "
90 "face when in the advection kernel.");
92 "tke_two_term_bc_expansion",
94 "If a two-term Taylor expansion is needed for the determination of the boundary values"
95 "of the turbulent kinetic energy.");
99 "The numerical scheme to interpolate the TKED to the "
100 "face (separate from the advected quantity interpolation).");
103 "The numerical scheme to interpolate the TKED to the "
104 "face when in the advection kernel.");
106 "tked_two_term_bc_expansion",
108 "If a two-term Taylor expansion is needed for the determination of the boundary values"
109 "of the turbulent kinetic energy dissipation.");
111 "turbulent_viscosity_two_term_bc_expansion",
113 "If a two-term Taylor expansion is needed for the determination of the boundary values"
114 "of the turbulent viscosity.");
115 params.
addParam<
bool>(
"mu_t_as_aux_variable",
117 "Whether to use an auxiliary variable instead of a functor material "
118 "property for the turbulent viscosity");
119 params.
addParam<
bool>(
"output_mu_t",
true,
"Whether to add mu_t to the field outputs");
121 "k_t_as_aux_variable",
123 "Whether to use an auxiliary variable for the effective turbulent conductivity");
124 params.
renameParam(
"k_t_as_aux_variable",
"k_eff_t_as_aux_variable",
"");
132 "fluid_heat_transfer_physics",
134 "WCNS(Linear)FVFluidHeatTransferPhysics generating the heat advection equations");
136 "scalar_transport_physics",
138 "WCNS(Linear)FVScalarTransportPhysics generating the scalar advection equations");
142 "scalar_transport_physics Sc_t",
147 "K-Epsilon wall function");
149 "tked_face_interpolation tked_two_term_bc_expansion "
150 "turbulent_viscosity_two_term_bc_expansion "
151 "mu_t_as_aux_variable k_eff_t_as_aux_variable",
152 "K-Epsilon model numerical");
160 _turbulence_model(getParam<
MooseEnum>(
"turbulence_handling")),
161 _turbulence_walls(getParam<
std::vector<BoundaryName>>(
"turbulence_walls")),
162 _wall_treatment_eps(getParam<
MooseEnum>(
"wall_treatment_eps")),
163 _wall_treatment_temp(getParam<
MooseEnum>(
"wall_treatment_T")),
164 _tke_name(getParam<MooseFunctorName>(
"tke_name")),
165 _tked_name(getParam<MooseFunctorName>(
"tked_name"))
176 if (getParam<bool>(
"mu_t_as_aux_variable"))
178 if (getParam<bool>(
"k_eff_t_as_aux_variable"))
192 "bulk_wall_treatment",
194 "tke_face_interpolation",
195 "tke_two_term_bc_expansion",
197 "tked_face_interpolation",
198 "tked_two_term_bc_expansion",
199 "turbulent_viscosity_two_term_bc_expansion"});
226 getParam<PhysicsName>(
"fluid_heat_transfer_physics"),
true);
229 !getCoupledPhysics<const WCNSFVFluidHeatTransferPhysicsBase>(
true).empty())
231 "We currently do not support creating both turbulence physics and fluid heat "
232 "transfer physics that are not coupled together. Use "
233 "'fluid_heat_transfer_physics' to explicitly specify the coupling");
249 getParam<PhysicsName>(
"scalar_transport_physics"),
true);
251 !getCoupledPhysics<const WCNSFVScalarTransportPhysicsBase>(
true).empty())
253 "scalar_transport_physics",
254 "We currently do not support creating both turbulence physics and scalar transport "
255 "physics that are not coupled together");
271 mooseInfoRepeated(
"Coupling turbulence physics with fluid heat transfer physics " +
274 mooseInfoRepeated(
"No fluid heat transfer equation considered by this turbulence "
280 mooseInfoRepeated(
"No scalar transport equations considered by this turbulence physics.");
289 const std::string ic_type =
"FVFunctionIC";
293 if ((getParam<bool>(
"initialize_variables_from_mesh_file") || !
_define_variables) &&
294 ((getParam<bool>(
"mu_t_as_aux_variable") &&
isParamValid(
"initial_mu_t")) ||
296 mooseError(
"inital_mu_t/tke/tked should not be provided if we are restarting from a mesh file "
297 "or not defining variables in the Physics");
304 if (getParam<bool>(
"mu_t_as_aux_variable"))
309 params.
set<FunctionName>(
"function") = getParam<FunctionName>(
"initial_mu_t");
311 else if (MooseUtils::isFloat(rho_name) &&
312 MooseUtils::isFloat(getParam<FunctionName>(
"initial_tke")) &&
313 MooseUtils::isFloat(getParam<FunctionName>(
"initial_tked")))
314 params.
set<FunctionName>(
"function") =
315 std::to_string(std::atof(rho_name.c_str()) * getParam<Real>(
"C_mu") *
316 std::pow(std::atof(getParam<FunctionName>(
"initial_tke").c_str()), 2) /
317 std::atof(getParam<FunctionName>(
"initial_tked").c_str()));
320 "Initial turbulent viscosity should be provided. A sensible value is "
321 "rho * C_mu TKE_initial^2 / TKED_initial");
333 "This parameter can only be specified if 'mu_t_as_aux_variable=true'");
336 params.
set<FunctionName>(
"function") = getParam<FunctionName>(
"initial_tke");
343 params.
set<FunctionName>(
"function") = getParam<FunctionName>(
"initial_tked");
356 const auto var_type = is_linear ?
"MooseLinearVariableFVReal" :
"MooseVariableFVReal";
361 if (!is_linear &&
isParamValid(
"turbulent_viscosity_two_term_bc_expansion"))
362 params.
set<
bool>(
"two_term_boundary_expansion") =
363 getParam<bool>(
"turbulent_viscosity_two_term_bc_expansion");
369 if (
_turbulence_model ==
"k-epsilon" && getParam<bool>(
"k_eff_t_as_aux_variable"))
380 const std::string u_names[3] = {
"u",
"v",
"w"};
399 params.set<
bool>(
"newton_solve") = !is_linear;
400 params.applySpecificParameters(
parameters(), {
"C_mu",
"bulk_wall_treatment",
"mu_t_ratio_max"});
406 getParam<bool>(
"k_eff_t_as_aux_variable"))
410 params.set<AuxVariableName>(
"variable") =
NS::k_eff_t;
416 if (k_names.size() != 1)
418 "Thermal conductivity vector is not currently supported for obtaining "
419 "the effective thermal conductivity");
421 params.set<MooseFunctorName>(
NS::k) = k_names[0];
423 params.applySpecificParameters(
parameters(), {
"Pr_t"});
425 "EffectiveTurbulentThermalConductivityAux",
name() +
"_thermal_conductivity_aux", params);
438 const auto mat_type =
439 is_linear ?
"FunctorEffectiveDynamicViscosity" :
"ADFunctorEffectiveDynamicViscosity";
445 params.
set<MooseFunctorName>(
NS::mu_t +
"_inverse_factor") =
"1";
448 if (!getParam<bool>(
"mu_t_as_aux_variable"))
455 if (getParam<bool>(
"output_mu_t"))
456 params.
set<std::vector<OutputName>>(
"outputs") = {
"all"};
458 "INSFVkEpsilonViscosityFunctorMaterial",
prefix() +
"compute_mu_t", params);
463 mooseAssert(!getParam<bool>(
"k_eff_t_as_aux_variable"),
"k_eff_t should not exist");
464 const auto object_type = is_linear ?
"ParsedFunctorMaterial" :
"ADParsedFunctorMaterial";
471 if (k_names.size() != 1)
473 "Specifying multiple block-restricted thermal "
474 "conductivities is not currently supported for obtaining "
475 "the effective thermal conductivity");
476 const auto & k_name = k_names[0];
478 const auto & Pr_t_name = getParam<MooseFunctorName>(
"Pr_t");
481 if (!MooseUtils::isFloat(cp_name) && !MooseUtils::isFloat(Pr_t_name))
482 params.
set<std::vector<std::string>>(
"functor_names") = {cp_name, Pr_t_name, mu_t_name};
483 else if (MooseUtils::isFloat(cp_name) && !MooseUtils::isFloat(Pr_t_name))
484 params.
set<std::vector<std::string>>(
"functor_names") = {Pr_t_name, mu_t_name};
485 else if (!MooseUtils::isFloat(cp_name) && MooseUtils::isFloat(Pr_t_name))
486 params.
set<std::vector<std::string>>(
"functor_names") = {cp_name, mu_t_name};
488 params.
set<std::vector<std::string>>(
"functor_names") = {mu_t_name};
490 params.
set<std::string>(
"expression") =
491 k_name +
"+" + mu_t_name +
"*" + cp_name +
"/" + Pr_t_name;
494 params.
set<std::vector<OutputName>>(
"outputs") = {
"all"};
501 "passive_scalar_diffusivity");
502 const auto mat_type =
503 is_linear ?
"FunctorEffectiveDynamicViscosity" :
"ADFunctorEffectiveDynamicViscosity";
508 params.
set<MooseFunctorName>(
NS::mu_t +
"_inverse_factor") = rho_name;
509 const auto turbulent_schmidt_number = getParam<std::vector<Real>>(
"Sc_t");
513 for (
const auto i : index_range(scalar_diffs))
517 params.
set<MooseFunctorName>(
"property_name") = scalar_diffs[i] +
"_plus_mut/Sc_t";
518 params.
set<
bool>(
"add_dynamic_viscosity") =
true;
519 params.
set<Real>(
NS::mu_t +
"_extra_inverse_factor") =
520 (turbulent_schmidt_number.size() == 1 ? turbulent_schmidt_number[0]
521 : turbulent_schmidt_number[i]);
523 mat_type,
prefix() +
"mu_eff_passive_scalar_" + std::to_string(i), params);
529 params.
set<MooseFunctorName>(
"property_name") =
"mu_t_passive_scalar";
530 params.
set<
bool>(
"add_dynamic_viscosity") =
false;
531 if (turbulent_schmidt_number.size() != 1)
533 "A single passive scalar turbulent Schmidt number can and must be specified "
534 "with k-epsilon and the WCNSFV discretization.");
535 params.
set<Real>(
NS::mu_t +
"_extra_inverse_factor") = turbulent_schmidt_number[0];
void mooseInfoRepeated(Args &&... args)
const ExecFlagType EXEC_NONLINEAR
const std::string & _current_task
const ConsoleStream _console
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters ¶meters)
virtual void addAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
virtual void addFVInitialCondition(const std::string &ic_name, const std::string &name, InputParameters ¶meters)
InputParameters getValidParams(const std::string &name) const
static InputParameters validParams()
static InputParameters validParams()
const InputParameters & parameters() const
const std::string & name() const
void paramError(const std::string ¶m, Args... args) const
bool isParamSetByUser(const std::string &name) const
void mooseError(Args &&... args) const
const T & getParam(const std::string &name) const
bool isParamValid(const std::string &name) const
static InputParameters commonTurbulenceParams()
Base class to hold common parameters and utilities between all the weakly compressible Navier Stokes-...
static InputParameters validParams()
bool _define_variables
Whether to define variables if they do not exist.
void addSharedAuxVariable(const std::string &var_type, const VariableName &var_name, const InputParameters ¶ms)
virtual FEProblemBase & getProblem()
bool shouldCreateIC(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool ic_is_default_ic, const bool error_if_already_defined) const
void assignBlocks(InputParameters ¶ms, const std::vector< SubdomainName > &blocks) const
unsigned int dimension() const
void reportPotentiallyMissedParameters(const std::vector< std::string > ¶m_names, const std::string &object_type, const std::string &object_name="") const
void saveSolverVariableName(const VariableName &var_name)
std::string prefix() const
void saveAuxVariableName(const VariableName &var_name)
bool shouldCreateVariable(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_aux)
std::vector< SubdomainName > _blocks
bool hasFunctor(const std::string &name, const THREAD_ID tid) const
Helper class to interact with a flow and turbulence physics for a Physics that solves an advection pr...
const WCNSFVFlowPhysicsBase * _flow_equations_physics
Flow physics.
const std::vector< std::string > _velocity_names
Velocity names.
static InputParameters validParams()
const MooseFunctorName _density_name
Name of the density material property.
bool hasFlowEquations() const
Whether the physics is actually creating the flow equations.
const MooseFunctorName & dynamicViscosityName() const
Return the name of the dynamic viscosity functor.
const MooseFunctorName & densityName() const
Return the name of the density functor.
const MooseFunctorName & getSpecificHeatName() const
Get the name of the specific heat material property.
const std::vector< MooseFunctorName > & getThermalConductivityName() const
bool hasEnergyEquation() const
Whether the physics is actually creating the heat equation.
bool hasScalarEquations() const
Whether the physics is actually creating the scalar advection equations.
std::vector< BoundaryName > _turbulence_walls
List of boundaries to act as walls for turbulence models.
static InputParameters validParams()
bool _has_scalar_equations
bool _has_energy_equation
const VariableName _tke_name
Name of the turbulent kinetic energy.
virtual void addInitialConditions() override
virtual void actOnAdditionalTasks() override
void retrieveCoupledPhysics()
Retrieve the other WCNSFVPhysics at play in the simulation to be able to add the relevant terms (turb...
virtual void addMaterials() override
virtual void addAuxiliaryVariables() override
const WCNSFVScalarTransportPhysicsBase * _scalar_transport_physics
The scalar advection physics to add turbulent mixing for.
const WCNSFVFluidHeatTransferPhysicsBase * _fluid_energy_physics
The heat advection physics to add turbulent mixing for.
MooseEnum _wall_treatment_eps
Turbulence wall treatment for epsilon (same for all walls currently)
const VariableName _tked_name
Name of the turbulent kinetic energy dissipation.
const MooseEnum _turbulence_model
Turbulence model to create the equation(s) for.
WCNSFVTurbulencePhysicsBase(const InputParameters ¶meters)
const VariableName _turbulent_viscosity_name
Name of the turbulence viscosity auxiliary variable (or property)
virtual void addAuxiliaryKernels() override
Creates all the objects needed to add a turbulence model to an incompressible / weakly-compressible N...
static InputParameters validParams()
static const std::string density
static const std::string TKED
static const std::string cp
static const std::string turbulent_Prandtl
static const std::string mu_t
static const std::string k_eff_t
static const std::string mu
static const std::string TKE
static const std::string k
static const std::string mu_eff
MooseEnum fvAdvectedInterpolationMethods()
Enum of the advected interpolation methods supported by FVInterpolationMethod objects.