https://mooseframework.inl.gov
RANSYPlusAux.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 
10 #include "RANSYPlusAux.h"
11 #include "NonlinearSystemBase.h"
12 #include "NavierStokesMethods.h"
13 #include "libmesh/nonlinear_solver.h"
14 
15 registerMooseObject("NavierStokesApp", RANSYPlusAux);
16 
19 {
21  params.addClassDescription("Calculates non-dimensional wall distance (y+) value.");
22  params.addRequiredCoupledVar("u", "The velocity in the x direction.");
23  params.addCoupledVar("v", "The velocity in the y direction.");
24  params.addCoupledVar("w", "The velocity in the z direction.");
25  params.addParam<MooseFunctorName>("k", "Turbulent kinetic energy functor.");
26  params.deprecateParam("k", NS::TKE, "01/01/2025");
27  params.addRequiredParam<MooseFunctorName>(NS::density, "Fluid density.");
28  params.addRequiredParam<MooseFunctorName>(NS::mu, "Dynamic viscosity.");
29  params.addParam<std::vector<BoundaryName>>(
30  "walls", {}, "Boundaries that correspond to solid walls.");
31  MooseEnum wall_treatment("eq_newton eq_incremental eq_linearized neq", "neq");
32  params.addParam<MooseEnum>("wall_treatment",
33  wall_treatment,
34  "The method used for computing the y_plus in the wall functions "
35  "'eq_newton', 'eq_incremental', 'eq_linearized', 'neq'");
36  params.addParam<Real>("C_mu", 0.09, "Coupled turbulent kinetic energy closure coefficient.");
37 
38  return params;
39 }
40 
42  : AuxKernel(params),
43  _dim(_subproblem.mesh().dimension()),
44  _u_var(getFunctor<ADReal>("u")),
45  _v_var(params.isParamValid("v") ? &(getFunctor<ADReal>("v")) : nullptr),
46  _w_var(params.isParamValid("w") ? &(getFunctor<ADReal>("w")) : nullptr),
47  _k(params.isParamValid(NS::TKE) ? &(getFunctor<ADReal>(NS::TKE)) : nullptr),
48  _rho(getFunctor<ADReal>(NS::density)),
49  _mu(getFunctor<ADReal>(NS::mu)),
50  _wall_boundary_names(getParam<std::vector<BoundaryName>>("walls")),
51  _wall_treatment(getParam<MooseEnum>("wall_treatment").getEnum<NS::WallTreatmentEnum>()),
52  _C_mu(getParam<Real>("C_mu"))
53 {
54  if (_dim >= 2 && !_v_var)
55  paramError("v", "In two or more dimensions, the v velocity must be supplied!");
56 
57  if (_dim >= 3 && !_w_var)
58  paramError("w", "In three or more dimensions, the w velocity must be supplied!");
59 
61  paramError(NS::TKE, "In the non-equilibrium wall treatment the TKE must be supplied!");
62 }
63 
64 void
66 {
67  // Getting wall treatment maps
72 }
73 
74 Real
76 {
77 
78  if (_wall_bounded.find(_current_elem) != _wall_bounded.end())
79  {
80  const auto state = determineState();
81  const auto elem_arg = makeElemArg(_current_elem);
82  const auto rho = _rho(elem_arg, state);
83  const auto mu = _mu(elem_arg, state);
84  ADReal y_plus;
85  std::vector<Real> y_plus_vec;
86 
87  ADRealVectorValue velocity(_u_var(elem_arg, state));
88  if (_v_var)
89  velocity(1) = (*_v_var)(elem_arg, state);
90  if (_w_var)
91  velocity(2) = (*_w_var)(elem_arg, state);
92 
93  const auto & face_info_vec = libmesh_map_find(_face_infos, _current_elem);
94  const auto & distance_vec = libmesh_map_find(_dist, _current_elem);
95 
96  for (unsigned int i = 0; i < distance_vec.size(); i++)
97  {
98  const auto parallel_speed = NS::computeSpeed(
99  velocity - velocity * face_info_vec[i]->normal() * face_info_vec[i]->normal());
100  const auto distance = distance_vec[i];
101 
103  // Non-equilibrium / Non-iterative
104  y_plus = std::pow(_C_mu, 0.25) * distance * std::sqrt((*_k)(elem_arg, state)) * rho / mu;
105  else
106  // Equilibrium / Iterative
107  y_plus = NS::findyPlus(mu, rho, std::max(parallel_speed, 1e-10), distance);
108 
109  y_plus_vec.push_back(raw_value(y_plus));
110  }
111  // Return average of y+ for cells with multiple wall faces
112  return std::accumulate(y_plus_vec.begin(), y_plus_vec.end(), 0.0) / y_plus_vec.size();
113  }
114  else
115  return 0.;
116 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
Computes wall y+ based on wall functions.
Definition: RANSYPlusAux.h:19
const Real _C_mu
C_mu constant.
Definition: RANSYPlusAux.h:57
void getWallBoundedElements(const std::vector< BoundaryName > &wall_boundary_name, const FEProblemBase &fe_problem, const SubProblem &subproblem, const std::set< SubdomainID > &block_ids, std::map< const Elem *, bool > &wall_bounded_map)
Map marking wall bounded elements The map passed in wall_bounded_map gets cleared and re-populated...
Moose::StateArg determineState() const
const unsigned int _dim
the dimension of the simulation
Definition: RANSYPlusAux.h:32
const Moose::Functor< ADReal > & _mu
Dynamic viscosity.
Definition: RANSYPlusAux.h:48
MeshBase & mesh
static const std::string density
Definition: NS.h:33
auto raw_value(const Eigen::Map< T > &in)
static const std::string TKE
Definition: NS.h:176
WallTreatmentEnum
Wall treatment options.
Definition: NS.h:182
NS::WallTreatmentEnum _wall_treatment
Method used for wall treatment.
Definition: RANSYPlusAux.h:54
virtual const std::set< SubdomainID > & blockIDs() const
const Moose::Functor< ADReal > * _k
Turbulent kinetic energy.
Definition: RANSYPlusAux.h:42
DualNumber< Real, DNDerivativeType, true > ADReal
Real distance(const Point &p)
void addRequiredParam(const std::string &name, const std::string &doc_string)
FEProblemBase & _c_fe_problem
Moose::ElemArg makeElemArg(const Elem *elem, bool correct_skewnewss=false) const
virtual Real computeValue() override
Definition: RANSYPlusAux.C:75
void deprecateParam(const std::string &old_name, const std::string &new_name, const std::string &removal_date)
static const std::string mu
Definition: NS.h:123
std::map< const Elem *, std::vector< Real > > _dist
Definition: RANSYPlusAux.h:62
ADReal findyPlus(const ADReal &mu, const ADReal &rho, const ADReal &u, Real dist)
Finds the non-dimensional wall distance normalized with the friction velocity Implements a fixed-poin...
const Moose::Functor< ADReal > * _v_var
y-velocity
Definition: RANSYPlusAux.h:37
registerMooseObject("NavierStokesApp", RANSYPlusAux)
std::map< const Elem *, bool > _wall_bounded
Definition: RANSYPlusAux.h:61
void paramError(const std::string &param, Args... args) const
const Moose::Functor< ADReal > * _w_var
z-velocity
Definition: RANSYPlusAux.h:39
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...
std::map< const Elem *, std::vector< const FaceInfo * > > _face_infos
Definition: RANSYPlusAux.h:63
void addCoupledVar(const std::string &name, const std::string &doc_string)
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
static InputParameters validParams()
Definition: RANSYPlusAux.C:18
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
RANSYPlusAux(const InputParameters &parameters)
Definition: RANSYPlusAux.C:41
SubProblem & _subproblem
const Elem *const & _current_elem
const std::vector< BoundaryName > & _wall_boundary_names
Wall boundary names.
Definition: RANSYPlusAux.h:51
void addClassDescription(const std::string &doc_string)
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 InputParameters validParams()
static const std::string velocity
Definition: NS.h:45
const Moose::Functor< ADReal > & _rho
Density.
Definition: RANSYPlusAux.h:45
ADReal computeSpeed(const ADRealVectorValue &velocity)
Compute the speed (velocity norm) given the supplied velocity.
const Moose::Functor< ADReal > & _u_var
x-velocity
Definition: RANSYPlusAux.h:35
virtual void initialSetup() override
Definition: RANSYPlusAux.C:65
MooseUnits pow(const MooseUnits &, int)