https://mooseframework.inl.gov
PCNSFVHLLCMomentumBC.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 "PCNSFVHLLCMomentumBC.h"
11 
14 
15 template <typename T>
16 void
18 {
19  MooseEnum momentum_component("x=0 y=1 z=2");
21  "momentum_component",
22  momentum_component,
23  "The component of the momentum equation that this kernel applies to.");
24 }
25 
26 template <typename T>
29 {
31  addCommonParams(params);
32  params.addClassDescription("Implements the momentum boundary flux portion of the porous HLLC "
33  "discretization given specified mass fluxes and fluid temperature");
34  return params;
35 }
36 
37 template <>
40 {
42  addCommonParams(params);
43  params.addClassDescription("Implements the momentum boundary flux portion of the porous HLLC "
44  "discretization given specified pressure");
45  return params;
46 }
47 
48 template <typename T>
50  : T(params), _index(this->template getParam<MooseEnum>("momentum_component"))
51 {
52 }
53 
54 template <typename T>
55 ADReal
57 {
58  return this->_normal_speed_elem * this->_eps_elem[this->_qp] * this->_rho_elem[this->_qp] *
59  this->_vel_elem[this->_qp](_index) +
60  this->_normal(_index) * this->_eps_elem[this->_qp] * this->_pressure_elem[this->_qp];
61 }
62 
63 template <typename T>
64 ADReal
66 {
67  return this->_normal_speed_boundary * this->_eps_boundary * this->_rho_boundary *
68  this->_vel_boundary(_index) +
69  this->_normal(_index) * this->_eps_boundary * this->_pressure_boundary;
70 }
71 
72 template <typename T>
73 ADReal
75 {
76  auto vel_nonnormal = this->_vel_elem[this->_qp] - this->_normal_speed_elem * this->_normal;
77  return this->_normal(_index) * this->_SM + vel_nonnormal(_index);
78 
79  // For some reason, the below expression doesn't give as good results as the
80  // above one.
81  // return this->_normal(_index) * (_SM - this->_normal_speed_elem) +
82  // this->_vel_elem[this->_qp](_index);
83 }
84 
85 template <typename T>
86 ADReal
88 {
89  auto vel_nonnormal = this->_vel_boundary - this->_normal_speed_boundary * this->_normal;
90  return this->_normal(_index) * this->_SM + vel_nonnormal(_index);
91 
92  // For some reason, the below expression doesn't give as good results as the
93  // above one.
94  // return this->_normal(_index) * (_SM - this->_normal_speed_boundary) +
95  // this->_vel_elem[this->_qp](_index);
96 }
97 
98 template <typename T>
99 ADReal
101 {
102  return this->_eps_elem[this->_qp] * this->_rho_elem[this->_qp] *
103  this->_vel_elem[this->_qp](_index);
104 }
105 
106 template <typename T>
107 ADReal
109 {
110  return this->_eps_boundary * this->_rho_boundary * this->_vel_boundary(_index);
111 }
112 
static void addCommonParams(InputParameters &params)
virtual ADReal conservedVariableElem() override
static InputParameters validParams()
virtual ADReal fluxBoundary() override
DualNumber< Real, DNDerivativeType, true > ADReal
void addRequiredParam(const std::string &name, const std::string &doc_string)
PCNSFVHLLCMomentumBC(const InputParameters &params)
Template class for implementing the advective flux plus pressure terms in the porous conservation of ...
InputParameters validParams()
virtual ADReal conservedVariableBoundary() override
virtual ADReal hllcElem() override
HLLC modifications to flux for elem & boundary, see Toro.
virtual ADReal hllcBoundary() override
virtual ADReal fluxElem() override
flux functions on elem & boundary, i.e. standard left/right values of F
void addClassDescription(const std::string &doc_string)
registerMooseObject("NavierStokesApp", PCNSFVHLLCSpecifiedMassFluxAndTemperatureMomentumBC)