22 " terms of turbulent kinetic energy (TKE).");
23 params.
addRequiredParam<MooseFunctorName>(
"u",
"The velocity in the x direction.");
24 params.
addParam<MooseFunctorName>(
"v",
"The velocity in the y direction.");
25 params.
addParam<MooseFunctorName>(
"w",
"The velocity in the z direction.");
27 "Coupled turbulent kinetic energy dissipation rate.");
32 params.
addParam<std::vector<BoundaryName>>(
33 "walls", {},
"Boundaries that correspond to solid walls.");
37 "Boolean to determine if the problem should be use in a linear or nonlinear solve.");
38 MooseEnum wall_treatment(
"eq_newton eq_incremental eq_linearized neq",
"neq");
42 "The method used for computing the wall functions " 43 "'eq_newton', 'eq_incremental', 'eq_linearized', 'neq'");
44 params.
addParam<
Real>(
"C_mu", 0.09,
"Coupled turbulent kinetic energy closure.");
45 params.
addParam<
Real>(
"C_pl", 10.0,
"Production Limiter Constant Multiplier.");
52 _dim(_subproblem.
mesh().dimension()),
53 _u_var(getFunctor<
Real>(
"u")),
54 _v_var(params.isParamValid(
"v") ? &(getFunctor<
Real>(
"v")) : nullptr),
55 _w_var(params.isParamValid(
"w") ? &(getFunctor<
Real>(
"w")) : nullptr),
60 _wall_boundary_names(getParam<
std::vector<BoundaryName>>(
"walls")),
61 _linearized_model(getParam<bool>(
"linearized_model")),
63 _C_mu(getParam<
Real>(
"C_mu")),
64 _C_pl(getParam<
Real>(
"C_pl"))
67 paramError(
"v",
"In two or more dimensions, the v velocity must be supplied!");
70 paramError(
"w",
"In three or more dimensions, the w velocity must be supplied!");
103 const Real rho =
_rho(elem_arg, state);
113 Real production = 0.0;
114 Real destruction = 0.0;
115 Real tot_weight = 0.0;
116 std::vector<Real> y_plus_vec, velocity_grad_norm_vec;
121 velocity(1) = (*_v_var)(elem_arg, state);
123 velocity(2) = (*_w_var)(elem_arg, state);
128 mooseAssert(distance_vec.size(),
"Should have found a distance vector");
129 mooseAssert(distance_vec.size() == face_info_vec.size(),
130 "Should be as many distance vectors as face info vectors");
133 for (
unsigned int i = 0; i < distance_vec.size(); i++)
136 velocity -
velocity * face_info_vec[i]->normal() * face_info_vec[i]->normal());
137 const auto distance = distance_vec[i];
145 y_plus_vec.push_back(y_plus);
146 const Real velocity_grad_norm = parallel_speed /
distance;
147 velocity_grad_norm_vec.push_back(velocity_grad_norm);
152 for (
unsigned int i = 0; i < y_plus_vec.size(); i++)
154 const auto y_plus = y_plus_vec[i];
156 const auto fi = face_info_vec[i];
158 const Elem *
const loc_elem = defined_on_elem_side ? &fi->elem() : fi->neighborPtr();
162 const Real wall_mut =
_mu_t(facearg, state);
163 const Real wall_mu =
_mu(facearg, state);
164 const auto tau_w = (wall_mut + wall_mu) * velocity_grad_norm_vec[i];
165 const auto destruction_visc = 2.0 * wall_mu / Utility::pow<2>(distance_vec[i]) / tot_weight;
170 destruction += destruction_visc;
173 destruction += destruction_log;
185 const auto destruction =
206 const auto symmetric_strain_tensor_sq_norm =
209 auto production =
_mu_t(elem_arg, state) * symmetric_strain_tensor_sq_norm;
215 production = std::min(production, production_limit);
const ElemInfo * _current_elem_info
const Moose::Functor< Real > * _w_var
z-velocity
std::map< const Elem *, std::vector< Real > > _dist
static constexpr Real von_karman_constant
static const std::string mu_t
void requestVariableCellGradient(const std::string &variable_name)
const Real _C_pl
Production Limiter Constant.
Moose::StateArg determineState() const
const Elem * elem() const
const Moose::Functor< Real > & _u_var
x-velocity
static InputParameters validParams()
MooseLinearVariableFV< Real > & _var
static const std::string density
static const std::string TKE
WallTreatmentEnum
Wall treatment options.
void getWallBoundedElements(const std::vector< BoundaryName > &wall_boundary_name, const FEProblemBase &fe_problem, const SubProblem &subproblem, const std::set< SubdomainID > &block_ids, std::unordered_set< const Elem *> &wall_bounded)
Map marking wall bounded elements The map passed in wall_bounded_map gets cleared and re-populated...
virtual const std::set< SubdomainID > & blockIDs() const
const NS::WallTreatmentEnum _wall_treatment
Method used for wall treatment.
const Moose::Functor< Real > & _rho
Density.
Real distance(const Point &p)
const std::vector< BoundaryName > & _wall_boundary_names
Wall boundaries.
registerMooseObject("NavierStokesApp", LinearFVTKESourceSink)
Moose::ElemArg makeElemArg(const Elem *elem, bool correct_skewnewss=false) const
template Real findyPlus< Real >(const Real &mu, const Real &rho, const Real &u, Real dist)
Kernel that adds contributions to the source and the sink of the turbulent kinetic energy discretized...
const Real _C_mu
C_mu constant.
const Moose::Functor< Real > & _epsilon
epsilon - dissipation rate of TKE
std::unordered_set< const Elem * > _wall_bounded
const unsigned int _dim
The dimension of the domain.
static const std::string mu
const Moose::Functor< Real > & _mu
Dynamic viscosity.
void paramError(const std::string ¶m, Args... args) const
static InputParameters validParams()
void getWallDistance(const std::vector< BoundaryName > &wall_boundary_name, const FEProblemBase &fe_problem, const SubProblem &subproblem, const std::set< SubdomainID > &block_ids, std::map< const Elem *, std::vector< Real >> &dist_map)
Map storing wall ditance for near-wall marked elements The map passed in dist_map gets cleared and re...
virtual Real computeMatrixContribution() override
LinearFVTKESourceSink(const InputParameters ¶ms)
Class constructor.
virtual Real computeRightHandSideContribution() override
virtual void initialSetup() override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Real getElemValue(const ElemInfo &elem_info, const StateArg &state) const
static const std::string TKED
void getElementFaceArgs(const std::vector< BoundaryName > &wall_boundary_name, const FEProblemBase &fe_problem, const SubProblem &subproblem, const std::set< SubdomainID > &block_ids, std::map< const Elem *, std::vector< const FaceInfo *>> &face_info_map)
Map storing face arguments to wall bounded faces The map passed in face_info_map gets cleared and re-...
static const std::string velocity
FEProblemBase & _fe_problem
template Real computeSpeed< Real >(const libMesh::VectorValue< Real > &velocity)
virtual void initialSetup()
std::map< const Elem *, std::vector< const FaceInfo * > > _face_infos
MooseUnits pow(const MooseUnits &, int)
const Moose::Functor< Real > & _mu_t
Turbulent dynamic viscosity.
Real _current_elem_volume
template Real computeShearStrainRateNormSquared< Real >(const Moose::Functor< Real > &u, const Moose::Functor< Real > *v, const Moose::Functor< Real > *w, const Moose::ElemArg &elem_arg, const Moose::StateArg &state)
virtual bool hasFaceSide(const FaceInfo &fi, const bool fi_elem_side) const override
const Moose::Functor< Real > * _v_var
y-velocity