https://mooseframework.inl.gov
Loading...
Searching...
No Matches
MassContinuityAssemblyHelper.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
11#include "MooseTypes.h"
12#include "MooseObject.h"
14#include "MooseMesh.h"
15#include "Assembly.h"
16#include "SystemBase.h"
17#include "TransientInterface.h"
18
21{
23 params.addRequiredCoupledVar("interior_velocity_vars",
24 "The velocity variables on the element interiors");
25 params.addRequiredParam<std::vector<MooseFunctorName>>(
26 "face_velocity_functors", "The velocity variables on element faces/facets");
27 return params;
28}
29
31 const MooseObject * const moose_obj,
33 const TransientInterface * const ti,
34 const MooseMesh & mesh,
35 SystemBase & sys,
36 const Assembly & assembly,
37 const THREAD_ID tid,
38 const std::set<SubdomainID> & block_ids,
39 const std::set<BoundaryID> & boundary_ids)
41 moose_obj, mvdi, ti, sys, assembly, tid, block_ids, boundary_ids),
42 ADFunctorInterface(moose_obj),
43 _coord_sys(assembly.coordSystem()),
44 _rz_radial_coord(mesh.getAxisymmetricRadialCoord())
45
46{
47 for (const auto & interior_vel_var_name :
48 moose_obj->getParam<std::vector<VariableName>>("interior_velocity_vars"))
49 {
50 const auto & var = sys.getFieldVariable<Real>(tid, interior_vel_var_name);
51 _interior_vels.push_back(&var.adSln());
52 _interior_vel_grads.push_back(&var.adGradSln());
53 }
54 for (const auto & face_vel_functor_name :
55 moose_obj->getParam<std::vector<MooseFunctorName>>("face_velocity_functors"))
56 _face_vels.push_back(&getFunctorByName<ADReal>(face_vel_functor_name));
57
58 if (mesh.dimension() != _interior_vels.size())
59 moose_obj->paramError(
60 "interior_velocity_vars",
61 "The number of interior velocity variables must be equal to the mesh dimension");
62 if (mesh.dimension() != _face_vels.size())
63 moose_obj->paramError(
64 "face_velocity_functors",
65 "The number of face velocity functors must be equal to the mesh dimension");
66}
67
68void
70{
71 for (const auto qp : make_range(_qrule->n_points()))
72 {
73 ADReal divergence = 0;
74 for (const auto d : index_range(_interior_vel_grads))
75 {
76 divergence += (*_interior_vel_grads[d])[qp](d);
78 divergence += (*_interior_vels[d])[qp] / _q_point[qp](_rz_radial_coord);
79 }
80 const auto qp_term = _JxW[qp] * divergence;
81 for (const auto i : index_range(_scalar_phi))
82 _scalar_re(i) -= qp_term * _scalar_phi[i][qp];
83 }
84}
85
86void
90
91void
93{
94 for (const auto qp : make_range(_qrule_face->n_points()))
95 {
96 ADRealVectorValue interior_vel, face_vel;
97 for (const auto d : index_range(_interior_vels))
98 {
99 interior_vel(d) = (*_interior_vels[d])[qp];
100 face_vel(d) = (*_face_vels[d])(
103 }
104 const auto qp_term = (interior_vel - face_vel) * _normals[qp] * _JxW_face[qp];
105 for (const auto i : index_range(_lm_re))
106 _lm_re(i) += _lm_phi_face[i][qp] * qp_term;
107 }
108}
DualNumber< Real, DNDerivativeType, true > ADReal
unsigned int THREAD_ID
const MooseArray< Real > & _JxW
const MooseArray< Point > & _q_point_face
const TransientInterface & _ti
static InputParameters validParams()
const libMesh::QBase *const & _qrule
const MooseArray< Point > & _normals
const MooseArray< Point > & _q_point
const MooseArray< std::vector< Real > > & _lm_phi_face
const MooseArray< std::vector< Real > > & _scalar_phi
const libMesh::QBase *const & _qrule_face
const MooseArray< Real > & _JxW_face
const unsigned int _rz_radial_coord
The radial coordinate index for RZ coordinate systems.
std::vector< const ADVariableValue * > _interior_vels
The velocities at interior element quadrature points.
MassContinuityAssemblyHelper(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)
std::vector< const ADVariableGradient * > _interior_vel_grads
The velocity gradients at interior element quadrature points.
std::vector< const Moose::Functor< ADReal > * > _face_vels
The velocity functors used to evalute the velocity on element face quadrature points.
const Moose::CoordinateSystemType _coord_sys
The coordinate system.
void paramError(const std::string &param, Args... args) const
const T & getParam(const std::string &name) const
MooseVariableFE< T > & getFieldVariable(THREAD_ID tid, const std::string &var_name)
Moose::StateArg determineState() const
unsigned int n_points() const
MeshBase & mesh