https://mooseframework.inl.gov
WCNSFVTurbulencePhysicsBase.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 
11 #include "WCNSFVFlowPhysicsBase.h"
16 #include "kEpsilonViscosityAux.h"
17 #include "INSFVTKESourceSink.h"
19 #include "NSFVUtils.h"
20 #include "NSFVBase.h"
21 
24 {
27  params.addClassDescription(
28  "Define a turbulence model for a incompressible or weakly-compressible Navier Stokes "
29  "flow with a finite volume discretization");
30 
31  MooseEnum turbulence_type("mixing-length k-epsilon none", "none");
32  params.addParam<MooseEnum>(
33  "turbulence_handling",
34  turbulence_type,
35  "The way turbulent diffusivities are determined in the turbulent regime.");
37 
38  params.deprecateParam("mixing_length_walls", "turbulence_walls", "");
39 
40  // Not implemented, re-enable with k-epsilon
41  params.suppressParameter<MooseEnum>("preconditioning");
42 
43  // K-Epsilon parameters
44  params.addParam<MooseFunctorName>(
45  "tke_name", NS::TKE, "Name of the turbulent kinetic energy variable");
46  params.addParam<MooseFunctorName>(
47  "tked_name", NS::TKED, "Name of the turbulent kinetic energy dissipation variable");
48  params.addParam<FunctionName>(
49  "initial_tke", "0", "Initial value for the turbulence kinetic energy");
50  params.addParam<FunctionName>(
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");
53 
54  params.addParam<MooseFunctorName>(
55  "C1_eps", "C1 coefficient for the turbulent kinetic energy dissipation equation");
56  params.addParam<MooseFunctorName>(
57  "C2_eps", "C2 coefficient for the turbulent kinetic energy dissipation equation");
58  params.addParam<MooseFunctorName>(
59  "sigma_k", "Scaling coefficient for the turbulent kinetic energy diffusion term");
60  params.addParam<MooseFunctorName>(
61  "sigma_eps",
62  "Scaling coefficient for the turbulent kinetic energy dissipation diffusion term");
63  params.addParam<MooseFunctorName>(
64  NS::turbulent_Prandtl, NS::turbulent_Prandtl, "Turbulent Prandtl number");
65  params.transferParam<Real>(INSFVTKESourceSink::validParams(), "C_pl");
66  params.transferParam<Real>(kEpsilonViscosityAux::validParams(), "mu_t_ratio_max");
67 
68  // Boundary parameters
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");
71  params.addParam<MooseEnum>("wall_treatment_eps",
72  wall_treatment,
73  "The method used for computing the epsilon wall functions and the "
74  "turbulence viscosity wall functions");
75  params.addParam<MooseEnum>("wall_treatment_T",
76  wall_treatment,
77  "The method used for computing the temperature wall functions");
78  params.transferParam<Real>(INSFVTurbulentViscosityWallFunction::validParams(), "C_mu");
79 
80  // K-Epsilon numerical scheme parameters
81  MooseEnum face_interpol_types("average skewness-corrected", "average");
82  MooseEnum adv_interpol_types(NS::fvAdvectedInterpolationMethods());
83  params.addParam<MooseEnum>("tke_face_interpolation",
84  face_interpol_types,
85  "The numerical scheme to interpolate the TKE to the "
86  "face (separate from the advected quantity interpolation).");
87  params.addParam<MooseEnum>("tke_advection_interpolation",
88  adv_interpol_types,
89  "The numerical scheme to interpolate the TKE to the "
90  "face when in the advection kernel.");
91  params.addParam<bool>(
92  "tke_two_term_bc_expansion",
93  false,
94  "If a two-term Taylor expansion is needed for the determination of the boundary values"
95  "of the turbulent kinetic energy.");
96 
97  params.addParam<MooseEnum>("tked_face_interpolation",
98  face_interpol_types,
99  "The numerical scheme to interpolate the TKED to the "
100  "face (separate from the advected quantity interpolation).");
101  params.addParam<MooseEnum>("tked_advection_interpolation",
102  adv_interpol_types,
103  "The numerical scheme to interpolate the TKED to the "
104  "face when in the advection kernel.");
105  params.addParam<bool>(
106  "tked_two_term_bc_expansion",
107  false,
108  "If a two-term Taylor expansion is needed for the determination of the boundary values"
109  "of the turbulent kinetic energy dissipation.");
110  params.addParam<bool>(
111  "turbulent_viscosity_two_term_bc_expansion",
112  true,
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",
116  false,
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");
120  params.addParam<bool>("k_t_as_aux_variable",
121  false,
122  "Whether to use an auxiliary variable for the turbulent conductivity");
123 
124  // Add the coupled physics
125  // TODO Remove the defaults once NavierStokesFV action is removed
126  // It is a little risky right now because the user could forget to pass the parameter and
127  // be missing the influence of turbulence on either of these physics. There is a check in the
128  // constructor to present this from happening
129  params.addParam<PhysicsName>(
130  "fluid_heat_transfer_physics",
131  "NavierStokesFV",
132  "WCNS(Linear)FVFluidHeatTransferPhysics generating the heat advection equations");
133  params.addParam<PhysicsName>(
134  "scalar_transport_physics",
135  "NavierStokesFV",
136  "WCNS(Linear)FVScalarTransportPhysics generating the scalar advection equations");
137 
138  // Parameter groups
139  params.addParamNamesToGroup("fluid_heat_transfer_physics turbulent_prandtl "
140  "scalar_transport_physics Sc_t",
141  "Coupled Physics");
142  params.addParamNamesToGroup("initial_tke initial_tked C1_eps C2_eps sigma_k sigma_eps",
143  "K-Epsilon model");
144  params.addParamNamesToGroup("C_mu bulk_wall_treatment wall_treatment_eps wall_treatment_T",
145  "K-Epsilon wall function");
146  params.addParamNamesToGroup("tke_face_interpolation tke_two_term_bc_expansion "
147  "tked_face_interpolation tked_two_term_bc_expansion "
148  "turbulent_viscosity_two_term_bc_expansion "
149  "mu_t_as_aux_variable k_t_as_aux_variable",
150  "K-Epsilon model numerical");
151 
152  return params;
153 }
154 
156  : NavierStokesPhysicsBase(parameters),
158  _turbulence_model(getParam<MooseEnum>("turbulence_handling")),
159  _turbulence_walls(getParam<std::vector<BoundaryName>>("turbulence_walls")),
160  _wall_treatment_eps(getParam<MooseEnum>("wall_treatment_eps")),
161  _wall_treatment_temp(getParam<MooseEnum>("wall_treatment_T")),
162  _tke_name(getParam<MooseFunctorName>("tke_name")),
163  _tked_name(getParam<MooseFunctorName>("tked_name"))
164 {
165  if (_verbose && _turbulence_model != "none")
166  _console << "Creating a " << std::string(_turbulence_model) << " turbulence model."
167  << std::endl;
168 
169  // Keep track of the variable names, for loading variables from files notably
170  if (_turbulence_model == "k-epsilon")
171  {
174  if (getParam<bool>("mu_t_as_aux_variable"))
176  if (getParam<bool>("k_t_as_aux_variable"))
178  }
179 
180  // Parameter checks
181  if (_turbulence_model == "none")
182  errorInconsistentDependentParameter("turbulence_handling", "none", {"turbulence_walls"});
183  if (_turbulence_model != "k-epsilon")
184  {
185  errorDependentParameter("turbulence_handling",
186  "k-epsilon",
187  {"C_mu",
188  "C1_eps",
189  "C2_eps",
190  "bulk_wall_treatment",
191  "tke_scaling",
192  "tke_face_interpolation",
193  "tke_two_term_bc_expansion",
194  "tked_scaling",
195  "tked_face_interpolation",
196  "tked_two_term_bc_expansion",
197  "turbulent_viscosity_two_term_bc_expansion"});
198  checkSecondParamSetOnlyIfFirstOneTrue("mu_t_as_aux_variable", "initial_mu_t");
199  }
200 }
201 
202 void
204 {
205  // Other Physics may not exist or be initialized at construction time, so
206  // we retrieve them now, on this task which occurs after 'init_physics'
207  if (_current_task == "get_turbulence_physics")
209 }
210 
211 void
213 {
214  // _flow_equations_physics is initialized by 'WCNSFVCoupledAdvectionPhysicsHelper'
216  _has_flow_equations = true;
217  else
218  _has_flow_equations = false;
219 
220  // Sanity check for interaction for fluid heat transfer physics
221  if (isParamValid("fluid_heat_transfer_physics") && _turbulence_model != "none")
222  {
223  _fluid_energy_physics = getCoupledPhysics<WCNSFVFluidHeatTransferPhysicsBase>(
224  getParam<PhysicsName>("fluid_heat_transfer_physics"), true);
225  // Check for a missing parameter / do not support isolated physics for now
226  if (!_fluid_energy_physics &&
227  !getCoupledPhysics<const WCNSFVFluidHeatTransferPhysicsBase>(true).empty())
228  paramError("fluid_heat_transfer_physics",
229  "We currently do not support creating both turbulence physics and fluid heat "
230  "transfer physics that are not coupled together. Use "
231  "'fluid_heat_transfer_physics' to explicitly specify the coupling");
233  _has_energy_equation = true;
234  else
235  _has_energy_equation = false;
236  }
237  else
238  {
239  _has_energy_equation = false;
240  _fluid_energy_physics = nullptr;
241  }
242 
243  // Sanity check for interaction with scalar transport physics
244  if (isParamValid("scalar_transport_physics") && _turbulence_model != "none")
245  {
246  _scalar_transport_physics = getCoupledPhysics<WCNSFVScalarTransportPhysicsBase>(
247  getParam<PhysicsName>("scalar_transport_physics"), true);
249  !getCoupledPhysics<const WCNSFVScalarTransportPhysicsBase>(true).empty())
250  paramError(
251  "scalar_transport_physics",
252  "We currently do not support creating both turbulence physics and scalar transport "
253  "physics that are not coupled together");
255  _has_scalar_equations = true;
256  else
257  _has_scalar_equations = false;
258  }
259  else
260  {
261  _has_scalar_equations = false;
262  _scalar_transport_physics = nullptr;
263  }
264 
265  // To help remediate the danger of the parameter setup
266  if (_verbose)
267  {
269  mooseInfoRepeated("Coupling turbulence physics with fluid heat transfer physics " +
271  else
272  mooseInfoRepeated("No fluid heat transfer equation considered by this turbulence "
273  "physics.");
275  mooseInfoRepeated("Coupling turbulence physics with scalar transport physics " +
277  else
278  mooseInfoRepeated("No scalar transport equations considered by this turbulence physics.");
279  }
280 }
281 
282 void
284 {
285  if (_turbulence_model == "mixing-length" || _turbulence_model == "none")
286  return;
287  const std::string ic_type = "FVFunctionIC";
288  InputParameters params = getFactory().getValidParams(ic_type);
289 
290  // Parameter checking: error if initial conditions are provided but not going to be used
291  if ((getParam<bool>("initialize_variables_from_mesh_file") || !_define_variables) &&
292  ((getParam<bool>("mu_t_as_aux_variable") && isParamValid("initial_mu_t")) ||
293  isParamSetByUser("initial_tke") || isParamSetByUser("initial_tked")))
294  mooseError("inital_mu_t/tke/tked should not be provided if we are restarting from a mesh file "
295  "or not defining variables in the Physics");
296 
297  // do not set initial conditions if we are not defining variables
298  if (!_define_variables)
299  return;
300  // on regular restarts (from checkpoint), we obey the user specification of initial conditions
301 
302  if (getParam<bool>("mu_t_as_aux_variable"))
303  {
304  const auto rho_name = _flow_equations_physics->densityName();
305  // If the user provided an initial value, we use that
306  if (isParamValid("initial_mu_t"))
307  params.set<FunctionName>("function") = getParam<FunctionName>("initial_mu_t");
308  // If we can compute the initialization value from the user parameters, we do that
309  else if (MooseUtils::isFloat(rho_name) &&
310  MooseUtils::isFloat(getParam<FunctionName>("initial_tke")) &&
311  MooseUtils::isFloat(getParam<FunctionName>("initial_tked")))
312  params.set<FunctionName>("function") =
313  std::to_string(std::atof(rho_name.c_str()) * getParam<Real>("C_mu") *
314  std::pow(std::atof(getParam<FunctionName>("initial_tke").c_str()), 2) /
315  std::atof(getParam<FunctionName>("initial_tked").c_str()));
316  else
317  paramError("initial_mu_t",
318  "Initial turbulent viscosity should be provided. A sensible value is "
319  "rho * C_mu TKE_initial^2 / TKED_initial");
320 
321  params.set<VariableName>("variable") = _turbulent_viscosity_name;
322  // Always obey the user specification of an initial condition
324  _blocks,
325  /*whether IC is a default*/ !isParamSetByUser("initial_mu_t"),
326  /*error if already an IC*/ isParamSetByUser("initial_mu_t")))
327  getProblem().addFVInitialCondition(ic_type, prefix() + "initial_mu_turb", params);
328  }
329  else if (isParamSetByUser("initial_mu_t"))
330  paramError("initial_mu_t",
331  "This parameter can only be specified if 'mu_t_as_aux_variable=true'");
332 
333  params.set<VariableName>("variable") = _tke_name;
334  params.set<FunctionName>("function") = getParam<FunctionName>("initial_tke");
336  _blocks,
337  /*whether IC is a default*/ !isParamSetByUser("initial_tke"),
338  /*error if already an IC*/ isParamSetByUser("initial_tke")))
339  getProblem().addFVInitialCondition(ic_type, prefix() + "initial_tke", params);
340  params.set<VariableName>("variable") = _tked_name;
341  params.set<FunctionName>("function") = getParam<FunctionName>("initial_tked");
343  _blocks,
344  /*whether IC is a default*/ !isParamSetByUser("initial_tked"),
345  /*error if already an IC*/ isParamSetByUser("initial_tked")))
346  getProblem().addFVInitialCondition(ic_type, prefix() + "initial_tked", params);
347 }
348 
349 void
351 {
352  // Not future-proof
353  const bool is_linear = dynamic_cast<WCNSLinearFVTurbulencePhysics *>(this);
354  const auto var_type = is_linear ? "MooseLinearVariableFVReal" : "MooseVariableFVReal";
355 
356  if (_turbulence_model == "k-epsilon" && getParam<bool>("mu_t_as_aux_variable"))
357  {
358  auto params = getFactory().getValidParams(var_type);
359  assignBlocks(params, _blocks);
360  if (!is_linear && isParamValid("turbulent_viscosity_two_term_bc_expansion"))
361  params.set<bool>("two_term_boundary_expansion") =
362  getParam<bool>("turbulent_viscosity_two_term_bc_expansion");
363  if (!shouldCreateVariable(_turbulent_viscosity_name, _blocks, /*error if aux*/ false))
364  reportPotentiallyMissedParameters({"turbulent_viscosity_two_term_bc_expansion"}, var_type);
365  else
367  }
368  if (_turbulence_model == "k-epsilon" && getParam<bool>("k_t_as_aux_variable"))
369  {
370  auto params = getFactory().getValidParams(var_type);
371  assignBlocks(params, _blocks);
372  if (shouldCreateVariable(NS::k_t, _blocks, /*error if aux*/ false))
373  getProblem().addAuxVariable(var_type, NS::k_t, params);
374  }
375 }
376 
377 void
379 {
380  const std::string u_names[3] = {"u", "v", "w"};
381  // Not future-proof
382  const bool is_linear = dynamic_cast<WCNSLinearFVTurbulencePhysics *>(this);
383 
384  if (_turbulence_model == "k-epsilon" && getParam<bool>("mu_t_as_aux_variable"))
385  {
386  auto params = getFactory().getValidParams("kEpsilonViscosityAux");
387  assignBlocks(params, _blocks);
388 
389  params.set<AuxVariableName>("variable") = _turbulent_viscosity_name;
390  params.set<MooseFunctorName>(NS::density) = _flow_equations_physics->densityName();
391  params.set<MooseFunctorName>(NS::mu) = _flow_equations_physics->dynamicViscosityName();
392  params.set<MooseFunctorName>(NS::TKE) = _tke_name;
393  params.set<MooseFunctorName>(NS::TKED) = _tked_name;
394  params.set<std::vector<BoundaryName>>("walls") = _turbulence_walls;
395  params.set<MooseEnum>("wall_treatment") = _wall_treatment_eps;
396  for (const auto d : make_range(dimension()))
397  params.set<MooseFunctorName>(u_names[d]) = _velocity_names[d];
398 
399  params.set<bool>("newton_solve") = !is_linear;
400  params.applySpecificParameters(parameters(), {"C_mu", "bulk_wall_treatment", "mu_t_ratio_max"});
401  params.set<ExecFlagEnum>("execute_on") = {EXEC_NONLINEAR};
402 
403  getProblem().addAuxKernel("kEpsilonViscosityAux", name() + "_viscosity_aux", params);
404  }
405  if (_turbulence_model == "k-epsilon" && _has_energy_equation &&
406  getParam<bool>("k_t_as_aux_variable"))
407  {
408  auto params = getFactory().getValidParams("TurbulentConductivityAux");
409  assignBlocks(params, _blocks);
410  params.set<AuxVariableName>("variable") = NS::k_t;
411  params.set<MooseFunctorName>(NS::cp) = _fluid_energy_physics->getSpecificHeatName();
412  params.set<MooseFunctorName>(NS::mu_t) = _turbulent_viscosity_name;
413  params.applySpecificParameters(parameters(), {"Pr_t"});
415  "TurbulentConductivityAux", name() + "_thermal_conductivity_aux", params);
416  }
417 }
418 
419 void
421 {
422  // Not future-proof
423  const bool is_linear = dynamic_cast<WCNSLinearFVTurbulencePhysics *>(this);
424  if (_turbulence_model == "k-epsilon")
425  {
426  if (!getProblem().hasFunctor(NS::mu_eff, /*thread_id=*/0))
427  {
428  const auto mat_type =
429  is_linear ? "FunctorEffectiveDynamicViscosity" : "ADFunctorEffectiveDynamicViscosity";
430  InputParameters params = getFactory().getValidParams(mat_type);
431  assignBlocks(params, _blocks);
432  params.set<MooseFunctorName>("property_name") = NS::mu_eff;
433  params.set<MooseFunctorName>(NS::mu) = _flow_equations_physics->dynamicViscosityName();
434  params.set<MooseFunctorName>(NS::mu_t) = _turbulent_viscosity_name;
435  params.set<MooseFunctorName>(NS::mu_t + "_inverse_factor") = "1";
436  getProblem().addMaterial(mat_type, prefix() + "effective_viscosity", params);
437  }
438  if (!getParam<bool>("mu_t_as_aux_variable"))
439  {
440  InputParameters params = getFactory().getValidParams("INSFVkEpsilonViscosityFunctorMaterial");
441  params.set<MooseFunctorName>(NS::TKE) = _tke_name;
442  params.set<MooseFunctorName>(NS::TKED) = _tked_name;
443  params.set<MooseFunctorName>(NS::density) = _density_name;
444  params.set<ExecFlagEnum>("execute_on") = {EXEC_NONLINEAR};
445  if (getParam<bool>("output_mu_t"))
446  params.set<std::vector<OutputName>>("outputs") = {"all"};
448  "INSFVkEpsilonViscosityFunctorMaterial", prefix() + "compute_mu_t", params);
449  }
450 
451  if (_has_energy_equation && !getProblem().hasFunctor(NS::k_t, /*thread_id=*/0))
452  {
453  mooseAssert(!getParam<bool>("k_t_as_aux_variable"), "k_t should not exist");
454  const auto object_type = is_linear ? "ParsedFunctorMaterial" : "ADParsedFunctorMaterial";
455  InputParameters params = getFactory().getValidParams(object_type);
456  assignBlocks(params, _blocks);
457  const auto mu_t_name = NS::mu_t;
458  const auto cp_name = _fluid_energy_physics->getSpecificHeatName();
459  const auto Pr_t_name = getParam<MooseFunctorName>("Pr_t");
460 
461  // Avoid defining floats as functors in the parsed expression
462  if (!MooseUtils::isFloat(cp_name) && !MooseUtils::isFloat(Pr_t_name))
463  params.set<std::vector<std::string>>("functor_names") = {cp_name, Pr_t_name, mu_t_name};
464  else if (MooseUtils::isFloat(cp_name) && !MooseUtils::isFloat(Pr_t_name))
465  params.set<std::vector<std::string>>("functor_names") = {Pr_t_name, mu_t_name};
466  else if (!MooseUtils::isFloat(cp_name) && MooseUtils::isFloat(Pr_t_name))
467  params.set<std::vector<std::string>>("functor_names") = {cp_name, mu_t_name};
468  else
469  params.set<std::vector<std::string>>("functor_names") = {mu_t_name};
470 
471  params.set<std::string>("expression") = mu_t_name + "*" + cp_name + "/" + Pr_t_name;
472  params.set<std::string>("property_name") = NS::k_t;
473  params.set<ExecFlagEnum>("execute_on") = {EXEC_NONLINEAR};
474  params.set<std::vector<OutputName>>("outputs") = {"all"};
475  getProblem().addMaterial(object_type, prefix() + "turbulent_heat_eff_conductivity", params);
476  }
477 
479  {
480  const auto scalar_diffs = _scalar_transport_physics->getParam<std::vector<MooseFunctorName>>(
481  "passive_scalar_diffusivity");
482  const auto mat_type =
483  is_linear ? "FunctorEffectiveDynamicViscosity" : "ADFunctorEffectiveDynamicViscosity";
484  InputParameters params = getFactory().getValidParams(mat_type);
485  params.set<MooseFunctorName>(NS::mu) = _flow_equations_physics->dynamicViscosityName();
486  params.set<MooseFunctorName>(NS::mu_t) = _turbulent_viscosity_name;
487  const auto & rho_name = _flow_equations_physics->densityName();
488  params.set<MooseFunctorName>(NS::mu_t + "_inverse_factor") = rho_name;
489  const auto turbulent_schmidt_number = getParam<std::vector<Real>>("Sc_t");
490  assignBlocks(params, _blocks);
491  // LinearFV can only use 1 diffusion kernel per equation, so we create N_scalars mu_effs
492  if (is_linear)
493  for (const auto i : index_range(scalar_diffs))
494  {
495  if (!getProblem().hasFunctor(scalar_diffs[i] + "_eff", /*thread_id=*/0))
496  {
497  params.set<MooseFunctorName>("property_name") = scalar_diffs[i] + "_plus_mut/Sc_t";
498  params.set<bool>("add_dynamic_viscosity") = true;
499  params.set<Real>(NS::mu_t + "_extra_inverse_factor") =
500  (turbulent_schmidt_number.size() == 1 ? turbulent_schmidt_number[0]
501  : turbulent_schmidt_number[i]);
503  mat_type, prefix() + "mu_eff_passive_scalar_" + std::to_string(i), params);
504  }
505  }
506  // WCNSFV can add multiple diffusion kernels
507  else
508  {
509  params.set<MooseFunctorName>("property_name") = "mu_t_passive_scalar";
510  params.set<bool>("add_dynamic_viscosity") = false;
511  if (turbulent_schmidt_number.size() != 1)
512  paramError("passive_scalar_schmidt_number",
513  "A single passive scalar turbulent Schmidt number can and must be specified "
514  "with k-epsilon and the WCNSFV discretization.");
515  params.set<Real>(NS::mu_t + "_extra_inverse_factor") = turbulent_schmidt_number[0];
516  getProblem().addMaterial(mat_type, prefix() + "mu_t_passive_scalars", params);
517  }
518  }
519  }
520 }
std::string prefix() const
virtual void addFVInitialCondition(const std::string &ic_name, const std::string &name, InputParameters &parameters)
virtual void actOnAdditionalTasks() override
const VariableName _turbulent_viscosity_name
Name of the turbulence viscosity auxiliary variable (or property)
bool hasFlowEquations() const
Whether the physics is actually creating the flow equations.
void retrieveCoupledPhysics()
Retrieve the other WCNSFVPhysics at play in the simulation to be able to add the relevant terms (turb...
static const std::string mu_t
Definition: NS.h:129
void assignBlocks(InputParameters &params, const std::vector< SubdomainName > &blocks) const
bool shouldCreateVariable(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_aux)
const MooseFunctorName & dynamicViscosityName() const
Return the name of the dynamic viscosity functor.
static const std::string turbulent_Prandtl
Definition: NS.h:142
const MooseFunctorName _density_name
Name of the density material property.
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)
const VariableName _tked_name
Name of the turbulent kinetic energy dissipation.
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
const InputParameters & parameters() const
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
static const std::string TKE
Definition: NS.h:180
void reportPotentiallyMissedParameters(const std::vector< std::string > &param_names, const std::string &object_type, const std::string &object_name="") const
void mooseInfoRepeated(Args &&... args)
virtual void addInitialConditions() override
const bool _verbose
virtual void addAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
bool shouldCreateIC(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool ic_is_default_ic, const bool error_if_already_defined) const
virtual void addAuxVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
const MooseEnum _turbulence_model
Turbulence model to create the equation(s) for.
static InputParameters commonTurbulenceParams()
Definition: NSFVBase.C:331
std::vector< SubdomainName > _blocks
unsigned int dimension() const
const MooseFunctorName & densityName() const
Return the name of the density functor.
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.
void errorDependentParameter(const std::string &param1, const std::string &value_not_set, const std::vector< std::string > &dependent_params) const
void saveAuxVariableName(const VariableName &var_name)
virtual FEProblemBase & getProblem()
virtual void addAuxiliaryKernels() override
static InputParameters validParams()
static const std::string cp
Definition: NS.h:125
Creates all the objects needed to add a turbulence model to an incompressible / weakly-compressible N...
const std::string & name() const
const MooseFunctorName & getSpecificHeatName() const
Get the name of the specific heat material property.
bool hasEnergyEquation() const
Whether the physics is actually creating the heat equation.
static const std::string mu
Definition: NS.h:127
const VariableName _tke_name
Name of the turbulent kinetic energy.
const std::string & _current_task
static InputParameters validParams()
Helper class to interact with a flow and turbulence physics for a Physics that solves an advection pr...
const WCNSFVFluidHeatTransferPhysicsBase * _fluid_energy_physics
The heat advection physics to add turbulent mixing for.
void errorInconsistentDependentParameter(const std::string &param1, const std::string &value_set, const std::vector< std::string > &dependent_params) const
static const std::string mu_eff
Definition: NS.h:133
bool _define_variables
Whether to define variables if they do not exist.
const std::vector< std::string > _velocity_names
Velocity names.
const ExecFlagType EXEC_NONLINEAR
MooseEnum fvAdvectedInterpolationMethods()
Enum of the advected interpolation methods supported by FVInterpolationMethod objects.
Definition: NSFVUtils.C:61
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)
static const std::string TKED
Definition: NS.h:181
void mooseError(Args &&... args) const
void addClassDescription(const std::string &doc_string)
const WCNSFVScalarTransportPhysicsBase * _scalar_transport_physics
The scalar advection physics to add turbulent mixing for.
bool isParamValid(const std::string &name) const
Base class to hold common parameters and utilities between all the weakly compressible Navier Stokes-...
const ConsoleStream _console
bool hasFunctor(const std::string &name, const THREAD_ID tid) const
void checkSecondParamSetOnlyIfFirstOneTrue(const std::string &param1, const std::string &param2) const
static const std::string k_t
Definition: NS.h:136
static InputParameters validParams()
static InputParameters validParams()
MooseEnum _wall_treatment_eps
Turbulence wall treatment for epsilon (same for all walls currently)
bool isParamSetByUser(const std::string &name) const
MooseUnits pow(const MooseUnits &, int)
void saveSolverVariableName(const VariableName &var_name)
const WCNSFVFlowPhysicsBase * _flow_equations_physics
Flow physics.
auto index_range(const T &sizable)
WCNSFVTurbulencePhysicsBase(const InputParameters &parameters)
virtual void addAuxiliaryVariables() override