Line data Source code
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 "MassContinuityAssemblyHelper.h" 11 : #include "MooseTypes.h" 12 : #include "MooseObject.h" 13 : #include "MaterialPropertyInterface.h" 14 : #include "MooseMesh.h" 15 : 16 : using namespace libMesh; 17 : 18 : InputParameters 19 2605 : MassContinuityAssemblyHelper::validParams() 20 : { 21 2605 : auto params = IPHDGAssemblyHelper::validParams(); 22 5210 : params.addRequiredCoupledVar("interior_velocity_vars", 23 : "The velocity variables on the element interiors"); 24 5210 : params.addRequiredParam<std::vector<MooseFunctorName>>( 25 : "face_velocity_functors", "The velocity variables on element faces/facets"); 26 2605 : return params; 27 0 : } 28 : 29 1310 : MassContinuityAssemblyHelper::MassContinuityAssemblyHelper( 30 : const MooseObject * const moose_obj, 31 : MooseVariableDependencyInterface * const mvdi, 32 : const TransientInterface * const ti, 33 : const MooseMesh & mesh, 34 : SystemBase & sys, 35 : const Assembly & assembly, 36 : const THREAD_ID tid, 37 : const std::set<SubdomainID> & block_ids, 38 1310 : const std::set<BoundaryID> & boundary_ids) 39 : : IPHDGAssemblyHelper(moose_obj, mvdi, ti, sys, assembly, tid, block_ids, boundary_ids), 40 : ADFunctorInterface(moose_obj), 41 1310 : _coord_sys(assembly.coordSystem()), 42 1310 : _rz_radial_coord(mesh.getAxisymmetricRadialCoord()) 43 : 44 : { 45 1310 : for (const auto & interior_vel_var_name : 46 5240 : moose_obj->getParam<std::vector<VariableName>>("interior_velocity_vars")) 47 : { 48 2620 : const auto & var = sys.getFieldVariable<Real>(tid, interior_vel_var_name); 49 2620 : _interior_vels.push_back(&var.adSln()); 50 2620 : _interior_vel_grads.push_back(&var.adGradSln()); 51 : } 52 1310 : for (const auto & face_vel_functor_name : 53 5240 : moose_obj->getParam<std::vector<MooseFunctorName>>("face_velocity_functors")) 54 2620 : _face_vels.push_back(&getFunctorByName<ADReal>(face_vel_functor_name)); 55 : 56 1310 : if (mesh.dimension() != _interior_vels.size()) 57 0 : moose_obj->paramError( 58 : "interior_velocity_vars", 59 : "The number of interior velocity variables must be equal to the mesh dimension"); 60 1310 : if (mesh.dimension() != _face_vels.size()) 61 0 : moose_obj->paramError( 62 : "face_velocity_functors", 63 : "The number of face velocity functors must be equal to the mesh dimension"); 64 1310 : } 65 : 66 : void 67 1895210 : MassContinuityAssemblyHelper::scalarVolume() 68 : { 69 11397630 : for (const auto qp : make_range(_ip_qrule->n_points())) 70 : { 71 9502420 : ADReal divergence = 0; 72 28507260 : for (const auto d : index_range(_interior_vel_grads)) 73 : { 74 19004840 : divergence += (*_interior_vel_grads[d])[qp](d); 75 19004840 : if (_coord_sys == Moose::COORD_RZ && (_rz_radial_coord == d)) 76 0 : divergence += (*_interior_vels[d])[qp] / _ip_q_point[qp](_rz_radial_coord); 77 : } 78 9502420 : const auto qp_term = _ip_JxW[qp] * divergence; 79 27974208 : for (const auto i : index_range(_scalar_phi)) 80 36943576 : _scalar_re(i) -= qp_term * _scalar_phi[i][qp]; 81 : } 82 1895210 : } 83 : 84 : void 85 5686174 : MassContinuityAssemblyHelper::scalarFace() 86 : { 87 5686174 : } 88 : 89 : void 90 5686174 : MassContinuityAssemblyHelper::lmFace() 91 : { 92 18979558 : for (const auto qp : make_range(_ip_qrule_face->n_points())) 93 : { 94 : ADRealVectorValue interior_vel, face_vel; 95 39880152 : for (const auto d : index_range(_interior_vels)) 96 : { 97 26586768 : interior_vel(d) = (*_interior_vels[d])[qp]; 98 26586768 : face_vel(d) = (*_face_vels[d])( 99 53173536 : Moose::ElemSideQpArg{ 100 26586768 : _ip_current_elem, _ip_current_side, qp, _ip_qrule_face, _ip_q_point_face[qp]}, 101 26586768 : _ti.determineState()); 102 : } 103 26586768 : const auto qp_term = (interior_vel - face_vel) * _ip_normals[qp] * _ip_JxW_face[qp]; 104 110362596 : for (const auto i : index_range(_lm_re)) 105 194138424 : _lm_re(i) += _lm_phi_face[i][qp] * qp_term; 106 : } 107 5686174 : }