https://mooseframework.inl.gov
Loading...
Searching...
No Matches
INSFVMomentumPressureFlux.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
12#include "NS.h"
13
15
18{
19 auto params = FVFluxKernel::validParams();
21 params.addClassDescription("Momentum pressure term eps grad_P, as a flux kernel "
22 "using the divergence theoreom, in the "
23 "incompressible Navier-Stokes momentum equation.");
24 params.addRequiredParam<MooseFunctorName>(NS::pressure, "The pressure");
25 return params;
26}
27
29 : FVFluxKernel(params), INSFVMomentumResidualObject(*this), _p(getFunctor<ADReal>(NS::pressure))
30{
31 if (!dynamic_cast<INSFVVelocityVariable *>(&_var))
32 mooseError("INSFVMomentumPressureFlux may only be used with a Navier-Stokes velocity, "
33 "of variable type INSFVSuperficialVelocityVariable.");
34}
35
38{
39 ADReal eps_p_interface;
40 // Momentum and porosity domains should match
41 const auto & face_type = _face_info->faceType(std::make_pair(_var.number(), _var.sys().number()));
42 const bool use_elem = (face_type == FaceInfo::VarFaceNeighbors::ELEM) ||
43 (face_type == FaceInfo::VarFaceNeighbors::BOTH);
44
45 const auto * const elem_ptr = use_elem ? &_face_info->elem() : _face_info->neighborPtr();
46 const auto & elem = makeElemArg(elem_ptr);
47 const auto state = determineState();
48
50 eps_p_interface = epsilon()(elem, state) * _p(singleSidedFaceArg(), state);
51 else
52 {
53 const auto * neighbor_ptr = use_elem ? _face_info->neighborPtr() : &_face_info->elem();
54 const auto & neighbor = makeElemArg(neighbor_ptr);
55
56 Moose::FV::interpolate(Moose::FV::InterpMethod::Average,
57 eps_p_interface,
58 epsilon()(elem, state) * _p(elem, state),
59 epsilon()(neighbor, state) * _p(neighbor, state),
61 true);
62 }
63
64 return eps_p_interface * _normal(_index);
65}
DualNumber< Real, DNDerivativeType, true > ADReal
registerMooseObject("NavierStokesApp", INSFVMomentumPressureFlux)
static InputParameters validParams()
RealVectorValue _normal
bool onBoundary(const FaceInfo &fi) const
MooseVariableFV< Real > & _var
Moose::FaceArg singleSidedFaceArg(const FaceInfo *fi=nullptr, Moose::FV::LimiterType limiter_type=Moose::FV::LimiterType::CentralDifference, bool correct_skewness=false, const Moose::StateArg *state_limiter=nullptr) const
const FaceInfo * _face_info
VarFaceNeighbors faceType(const std::pair< unsigned int, unsigned int > &var_sys) const
const Elem & elem() const
const Elem * neighborPtr() const
Moose::ElemArg makeElemArg(const Elem *elem, bool correct_skewnewss=false) const
A flux kernel using the divergence theorem for the pressure gradient term in the momentum equation.
INSFVMomentumPressureFlux(const InputParameters &params)
virtual const Moose::FunctorBase< ADReal > & epsilon() const
static InputParameters validParams()
virtual ADReal computeQpResidual() override
const Moose::Functor< ADReal > & _p
The pressure.
All objects that contribute to pressure-based (e.g.
const unsigned int _index
index x|y|z
void mooseError(Args &&... args) const
SystemBase & sys()
unsigned int number() const
unsigned int number() const
Moose::StateArg determineState() const
void interpolate(InterpMethod m, T &result, const T2 &value1, const T3 &value2, const FaceInfo &fi, const bool one_is_elem)
static const std::string pressure
Definition NS.h:57