https://mooseframework.inl.gov
Loading...
Searching...
No Matches
LinearFVEnergyAdvection.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 "NSFVUtils.h"
13#include "NS.h"
14
16
19{
21 params.addClassDescription("Represents the matrix and right hand side contributions of an "
22 "advection term for the energy e.g. h=int(cp dT). A user may still "
23 "override what quantity is advected, but the default is enthalpy.");
24 MooseEnum advected_quantity("enthalpy temperature", "enthalpy");
25 params.addParam<MooseEnum>("advected_quantity", advected_quantity, "The advected quantity");
26 params.addParam<Real>("cp", "Constant specific heat value");
27 params.addRequiredParam<UserObjectName>(
28 "rhie_chow_user_object",
29 "The rhie-chow user-object which is used to determine the face velocity.");
31 return params;
32}
33
35 : LinearFVFluxKernel(params),
36 _advected_quantity(getParam<MooseEnum>("advected_quantity").getEnum<AdvectedQuantityEnum>()),
37 _cp(isParamValid("cp") ? getParam<Real>("cp") : 1.0),
38 _mass_flux_provider(getUserObject<RhieChowMassFlux>("rhie_chow_user_object")),
39 _advected_interp_coeffs(std::make_pair<Real, Real>(0, 0)),
40 _face_mass_flux(0.0)
41{
42 Moose::FV::setInterpolationMethod(*this, _advected_interp_method, "advected_interp_method");
43
45 paramError("cp", "cp should not be specified for enthalpy advection");
46
48 paramError("cp", "cp should be specified for temperature advection");
49
50 // The boundary contributions rely on the Rhie-Chow flux being oriented outward from this
51 // variable's cell, which only holds if the variable's one-sided faces are one-sided for the
52 // flow too.
54}
55
56Real
61
62Real
67
68Real
73
74Real
79
80Real
82{
83 const auto * const adv_bc = cast_ptr<const LinearFVAdvectionDiffusionBC *>(&bc);
84 mooseAssert(adv_bc, "This should be a valid BC!");
85
86 const auto boundary_value_matrix_contrib = adv_bc->computeBoundaryValueMatrixContribution();
87
88 // Rhie-Chow mass fluxes on one-sided boundary faces are already oriented outward from the
89 // active cell, even when the active cell is the FaceInfo neighbor.
90 return _cp * boundary_value_matrix_contrib * _face_mass_flux * _current_face_area;
91}
92
93Real
95{
96 const auto * const adv_bc = cast_ptr<const LinearFVAdvectionDiffusionBC *>(&bc);
97 mooseAssert(adv_bc, "This should be a valid BC!");
98
99 const auto boundary_value_rhs_contrib = adv_bc->computeBoundaryValueRHSContribution();
100 return -_cp * boundary_value_rhs_contrib * _face_mass_flux * _current_face_area;
101}
102
103void
105{
107
108 // Caching the mass flux on the face which will be reused in the advection term's matrix and right
109 // hand side contributions
111
112 // Caching the interpolation coefficients so they will be reused for the matrix and right hand
113 // side terms
116}
registerMooseObject("NavierStokesApp", LinearFVEnergyAdvection)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
An advection kernel that implements the advection term for the enthalpy in the energy equation.
virtual Real computeBoundaryMatrixContribution(const LinearFVBoundaryCondition &bc) override
std::pair< Real, Real > _advected_interp_coeffs
Container for the current advected interpolation coefficients on the face to make sure we don't compu...
Moose::FV::InterpMethod _advected_interp_method
The interpolation method to use for the advected quantity.
virtual Real computeNeighborMatrixContribution() override
AdvectedQuantityEnum _advected_quantity
The advected quantity.
const RhieChowMassFlux & _mass_flux_provider
The Rhie-Chow user object that provides us with the face velocity.
virtual Real computeElemMatrixContribution() override
virtual Real computeNeighborRightHandSideContribution() override
virtual Real computeBoundaryRHSContribution(const LinearFVBoundaryCondition &bc) override
virtual void setupFaceData(const FaceInfo *face_info) override
LinearFVEnergyAdvection(const InputParameters &params)
virtual Real computeElemRightHandSideContribution() override
const Real _cp
The constant specific heat value.
Real _face_mass_flux
Container for the mass flux on the face which will be reused in the advection term's matrix and right...
AdvectedQuantityEnum
The advected quantity options.
static InputParameters validParams()
virtual void setupFaceData(const FaceInfo *face_info)
const FaceInfo * _current_face_info
static InputParameters validParams()
MooseLinearVariableFV< Real > & _var
void paramError(const std::string &param, Args... args) const
bool isParamValid(const std::string &name) const
User object responsible for determining the face fluxes using the Rhie-Chow interpolation in a segreg...
Real getMassFlux(const FaceInfo &fi) const
Get the face velocity times density (used in advection terms)
void checkBlocks(const VarType &var) const
Check the block consistency between the passed in var and us.
bool setInterpolationMethod(const MooseObject &obj, Moose::FV::InterpMethod &interp_method, const std::string &param_name)
InputParameters advectedInterpolationParameter()