LCOV - code coverage report
Current view: top level - src/hdgkernels - ElementAndTraceScalarHDGAssemblyHelper.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 329044 Lines: 55 56 98.2 %
Date: 2026-08-03 21:12:22 Functions: 6 6 100.0 %
Legend: Lines: hit not hit

          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 "ElementAndTraceScalarHDGAssemblyHelper.h"
      11             : #include "Assembly.h"
      12             : #include "MooseFunctor.h"
      13             : #include "MooseVariableDependencyInterface.h"
      14             : #include "MooseVariableFE.h"
      15             : #include "SystemBase.h"
      16             : #include "MooseObject.h"
      17             : #include "TaggingInterface.h"
      18             : #include "TransientInterface.h"
      19             : 
      20             : using namespace libMesh;
      21             : 
      22             : InputParameters
      23       23366 : ElementAndTraceScalarHDGAssemblyHelper::validParams()
      24             : {
      25       23366 :   auto params = emptyInputParameters();
      26       70098 :   params.addRequiredParam<NonlinearVariableName>("face_variable", "The face variable");
      27       23366 :   return params;
      28           0 : }
      29             : 
      30         865 : ElementAndTraceScalarHDGAssemblyHelper::ElementAndTraceScalarHDGAssemblyHelper(
      31             :     const MooseObject * const moose_obj,
      32             :     MooseVariableDependencyInterface * const mvdi,
      33             :     const TransientInterface * const ti,
      34             :     SystemBase & sys,
      35             :     const Assembly & assembly,
      36             :     const THREAD_ID tid,
      37             :     const std::set<SubdomainID> & block_ids,
      38         865 :     const std::set<BoundaryID> & boundary_ids)
      39             :   : ThreeMaterialPropertyInterface(moose_obj, block_ids, boundary_ids),
      40         865 :     _ti(*ti),
      41         865 :     _u_var(sys.getFieldVariable<Real>(tid, moose_obj->getParam<NonlinearVariableName>("variable"))),
      42        1730 :     _u_face_var(sys.getFieldVariable<Real>(
      43        1730 :         tid, moose_obj->getParam<NonlinearVariableName>("face_variable"))),
      44         865 :     _u_dof_indices(_u_var.dofIndices()),
      45         865 :     _lm_u_dof_indices(_u_face_var.dofIndices()),
      46         865 :     _u_sol(_u_var.adSln()),
      47         865 :     _lm_u_sol(_u_face_var.adSln()),
      48         865 :     _scalar_phi(_u_var.phi()),
      49         865 :     _grad_scalar_phi(_u_var.gradPhi()),
      50         865 :     _scalar_phi_face(_u_var.phiFace()),
      51         865 :     _lm_phi_face(_u_face_var.phiFace()),
      52         865 :     _elem_volume(assembly.elemVolume()),
      53         865 :     _side_area(assembly.sideElemVolume()),
      54         865 :     _current_elem(assembly.elem()),
      55         865 :     _current_side(assembly.side()),
      56         865 :     _current_side_elem(assembly.sideElem()),
      57         865 :     _JxW(assembly.JxW()),
      58         865 :     _qrule(assembly.qRule()),
      59         865 :     _q_point(assembly.qPoints()),
      60         865 :     _JxW_face(assembly.JxWFace()),
      61         865 :     _qrule_face(assembly.qRuleFace()),
      62         865 :     _q_point_face(assembly.qPointsFace()),
      63        1730 :     _normals(assembly.normals())
      64             : {
      65         865 :   mvdi->addMooseVariableDependency(&const_cast<MooseVariableFE<Real> &>(_u_var));
      66         865 :   mvdi->addMooseVariableDependency(&const_cast<MooseVariableFE<Real> &>(_u_face_var));
      67         865 : }
      68             : 
      69             : std::array<ADResidualsPacket, 2>
      70      745794 : ElementAndTraceScalarHDGAssemblyHelper::taggingData() const
      71             : {
      72      745794 :   return {ADResidualsPacket{_scalar_re, _u_dof_indices, _u_var.scalingFactor()},
      73      745794 :           ADResidualsPacket{_lm_re, _lm_u_dof_indices, _u_face_var.scalingFactor()}};
      74             : }
      75             : 
      76             : std::set<std::string>
      77         308 : ElementAndTraceScalarHDGAssemblyHelper::additionalROVariables()
      78             : {
      79         924 :   return {_u_face_var.name()};
      80         308 : }
      81             : 
      82             : void
      83       29440 : ElementAndTraceScalarHDGAssemblyHelper::lmDirichlet(const Moose::Functor<Real> & dirichlet_value)
      84             : {
      85       89168 :   for (const auto qp : make_range(_qrule_face->n_points()))
      86             :   {
      87      179184 :     const auto scalar_value = dirichlet_value(
      88       59728 :         Moose::ElemSideQpArg{_current_elem, _current_side, qp, _qrule_face, _q_point_face[qp]},
      89       59728 :         _ti.determineState());
      90             : 
      91      360744 :     for (const auto i : index_range(_lm_re))
      92      301016 :       _lm_re(i) += _JxW_face[qp] * (_lm_u_sol[qp] - scalar_value) * _lm_phi_face[i][qp];
      93             :   }
      94       29440 : }
      95             : 
      96             : void
      97        9404 : ElementAndTraceScalarHDGAssemblyHelper::lmPrescribedFlux(const Moose::Functor<Real> & flux_value)
      98             : {
      99       29112 :   for (const auto qp : make_range(_qrule_face->n_points()))
     100             :   {
     101       59124 :     const auto flux = flux_value(
     102       19708 :         Moose::ElemSideQpArg{_current_elem, _current_side, qp, _qrule_face, _q_point_face[qp]},
     103       19708 :         _ti.determineState());
     104             : 
     105      175804 :     for (const auto i : index_range(_lm_re))
     106      156096 :       _lm_re(i) += _JxW_face[qp] * flux * _lm_phi_face[i][qp];
     107             :   }
     108        9404 : }

Generated by: LCOV version 1.14