19 "Computes the turbulent mixing length by assuming that it is " 20 "proportional to the distance from the nearest wall. The mixing" 21 "length is capped at a distance proportional to inputted parameter delta.");
22 params.
addParam<std::vector<BoundaryName>>(
23 "walls", {},
"Boundaries that correspond to solid walls.");
24 params.
addParam<MooseFunctorName>(
"von_karman_const", 0.41,
"");
25 params.
addParam<MooseFunctorName>(
"von_karman_const_0", 0.09,
"");
36 _wall_boundary_names(getParam<
std::vector<BoundaryName>>(
"walls")),
37 _von_karman_const(getFunctor<
Real>(
"von_karman_const")),
38 _von_karman_const_0(getFunctor<
Real>(
"von_karman_const_0")),
39 _delta(getFunctor<
Real>(
"delta"))
42 if (!
mesh.is_replicated())
43 mooseError(
"WallDistanceMixingLengthAux only supports replicated meshes");
48 "' is currently programmed to use finite volume machinery, so make sure that '",
50 "' is a finite volume variable.");
68 auto search = bnd_to_elem_map.find(bid);
69 if (search == bnd_to_elem_map.end())
70 mooseError(
"Error computing wall distance; the boundary id ", bid,
" is invalid");
71 const auto & bnd_elems = search->second;
76 const Elem & elem{l_mesh.elem_ref(elem_id)};
82 const Elem *
const neigh = elem.neighbor_ptr(side);
85 "In WallDistanceMixingLengthAux, we could not find a face information object with elem " 86 "and side, and we are on an external boundary. This shouldn't happen.");
87 const auto neigh_side = neigh->which_neighbor_am_i(&elem);
89 mooseAssert(fi,
"We should have a face info for either the elem or neigh side");
94 mooseAssert(dist2 != 0,
"This distance should never be 0");
95 min_dist2 = std::min(min_dist2, dist2);
106 if (std::sqrt(min_dist2) /
delta <= von_karman_const_0 / von_karman_const)
107 return von_karman_const * std::sqrt(min_dist2);
109 return von_karman_const_0 *
delta;
virtual MooseMesh & mesh()=0
const std::vector< BoundaryName > & _wall_boundary_names
const Moose::Functor< Real > & _von_karman_const_0
const Point & faceCentroid() const
static InputParameters validParams()
int delta(unsigned int i, unsigned int j)
Delta function, which returns zero if $i j$ and unity if $i=j$.
const std::string & name() const override
virtual Real computeValue()
Real distance(const Point &p)
virtual const std::string & name() const
const Moose::Functor< Real > & _von_karman_const
const std::vector< const FaceInfo *> & faceInfo() const
WallDistanceMixingLengthAux(const InputParameters ¶meters)
boundary_id_type BoundaryID
unsigned int sideWithBoundaryID(const Elem *const elem, const BoundaryID boundary_id) const
void paramError(const std::string ¶m, Args... args) const
MooseVariableField< Real > & _var
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
registerMooseObject("NavierStokesApp", WallDistanceMixingLengthAux)
void mooseError(Args &&... args) const
const Elem *const & _current_elem
static InputParameters validParams()
std::vector< BoundaryID > getBoundaryIDs(const Elem *const elem, const unsigned short int side) const
const Moose::Functor< Real > & _delta
const MooseArray< Point > & _q_point
const std::unordered_map< boundary_id_type, std::unordered_set< dof_id_type > > & getBoundariesToActiveSemiLocalElemIds() const