https://mooseframework.inl.gov
Loading...
Searching...
No Matches
MassFluxPenaltyIPHDGAssemblyHelper.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://www.mooseframework.org
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
11
12#include "MooseVariableFE.h"
13#include "SystemBase.h"
14#include "TransientInterface.h"
15
18{
20 params.addRequiredParam<NonlinearVariableName>("u", "The x-velocity");
21 params.addRequiredParam<NonlinearVariableName>("v", "The y-velocity");
22 params.addParam<NonlinearVariableName>("w", "The z-velocity");
23 params.addRequiredRangeCheckedParam<unsigned short>(
24 "component", "0<=component<=1", "The velocity component this object is being applied to");
25 params.addRequiredParam<Real>("gamma", "The penalty to multiply the jump");
26 params.addClassDescription("introduces a jump correction on internal faces for grad-div "
27 "stabilization for discontinuous Galerkin methods.");
28 params.addRequiredParam<MooseFunctorName>("face_velocity",
29 "A vector functor representing the face velocity");
30 return params;
31}
32
34 const MooseObject * const moose_obj,
36 const TransientInterface * const ti,
37 const MooseMesh & mesh,
38 SystemBase & sys,
39 const Assembly & assembly,
40 const THREAD_ID tid,
41 const std::set<SubdomainID> & block_ids,
42 const std::set<BoundaryID> & boundary_ids)
44 moose_obj, mvdi, ti, sys, assembly, tid, block_ids, boundary_ids),
45 ADFunctorInterface(moose_obj),
46 _vel_x_var(sys.getFieldVariable<Real>(tid, moose_obj->getParam<NonlinearVariableName>("u"))),
47 _vel_y_var(sys.getFieldVariable<Real>(tid, moose_obj->getParam<NonlinearVariableName>("v"))),
48 _vel_x(_vel_x_var.adSln()),
49 _vel_y(_vel_y_var.adSln()),
50 _vel_z(moose_obj->isParamValid("w")
51 ? &sys.getFieldVariable<Real>(tid, moose_obj->getParam<NonlinearVariableName>("w"))
52 .adSln()
53 : nullptr),
54 _comp(moose_obj->getParam<unsigned short>("component")),
55 _gamma(moose_obj->getParam<Real>("gamma")),
56 _face_velocity(getFunctor<ADRealVectorValue>("face_velocity")),
57 _hmax(0)
58{
59 if ((mesh.dimension() > 2) && !moose_obj->isParamValid("w"))
60 moose_obj->paramError("w", "For 3D meshes, the z-velocity must be provided");
61}
62
63void
65{
66 _hmax = _current_side_elem->hmax();
67
68 for (const auto qp : make_range(_qrule_face->n_points()))
69 {
70 const auto qp_term = computeQpResidualOnSide(qp) * _JxW_face[qp];
71 for (const auto i : index_range(_scalar_re))
72 _scalar_re(i) += qp_term * _scalar_phi_face[i][qp];
73 }
74}
75
76void
78{
79 _hmax = _current_side_elem->hmax();
80
81 for (const auto qp : make_range(_qrule_face->n_points()))
82 {
83 const auto qp_term = computeQpResidualOnSide(qp) * _JxW_face[qp];
84 for (const auto i : index_range(_lm_re))
85 _lm_re(i) -= qp_term * _lm_phi_face[i][qp];
86 }
87}
88
91{
92 ADRealVectorValue soln_jump(_vel_x[qp], _vel_y[qp], 0);
93 if (_vel_z)
94 soln_jump(2) = (*_vel_z)[qp];
95 soln_jump -= _face_velocity(
98
99 return _gamma / _hmax * soln_jump * _normals[qp] * _normals[qp](_comp);
100}
DualNumber< Real, DNDerivativeType, true > ADReal
unsigned int THREAD_ID
const MooseArray< Point > & _q_point_face
const TransientInterface & _ti
static InputParameters validParams()
const MooseArray< Point > & _normals
const MooseArray< std::vector< Real > > & _lm_phi_face
const MooseArray< std::vector< Real > > & _scalar_phi_face
const libMesh::QBase *const & _qrule_face
const MooseArray< Real > & _JxW_face
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, const std::string &doc_string)
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)
Real _hmax
Facet characteristic length for correct norm computations.
MassFluxPenaltyIPHDGAssemblyHelper(const MooseObject *const moose_obj, MooseVariableDependencyInterface *const mvdi, const TransientInterface *const ti, const MooseMesh &mesh, SystemBase &sys, const Assembly &assembly, const THREAD_ID tid, const std::set< SubdomainID > &block_ids, const std::set< BoundaryID > &boundary_ids)
const Moose::Functor< ADRealVectorValue > & _face_velocity
void paramError(const std::string &param, Args... args) const
bool isParamValid(const std::string &name) const
Moose::StateArg determineState() const
unsigned int n_points() const
MeshBase & mesh