LCOV - code coverage report
Current view: top level - src/hdgkernels - DiffusionLHDGKernel.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 87 88 98.9 %
Date: 2025-07-17 01:28:37 Functions: 10 10 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 "DiffusionLHDGAssemblyHelper.h"
      11             : #include "DiffusionLHDGKernel.h"
      12             : #include "MooseVariableFE.h"
      13             : #include "MooseVariableScalar.h"
      14             : #include "SystemBase.h"
      15             : #include "MooseMesh.h"
      16             : #include "MooseObject.h"
      17             : #include "MaterialPropertyInterface.h"
      18             : #include "NonlinearThread.h"
      19             : 
      20             : using namespace libMesh;
      21             : 
      22             : registerMooseObject("MooseApp", DiffusionLHDGKernel);
      23             : 
      24             : InputParameters
      25       14670 : DiffusionLHDGKernel::validParams()
      26             : {
      27       14670 :   auto params = HDGKernel::validParams();
      28       14670 :   params += DiffusionLHDGAssemblyHelper::validParams();
      29       14670 :   params.renameParam("variable", "u", "The diffusing specie concentration");
      30       14670 :   params.addParam<MooseFunctorName>("source", 0, "Source for the diffusing species");
      31       14670 :   params.addClassDescription("Adds the element and interior face weak forms for a hybridized local "
      32             :                              "discontinuous Galerkin discretization of a diffusion term.");
      33       14670 :   return params;
      34           0 : }
      35             : 
      36         203 : DiffusionLHDGKernel::DiffusionLHDGKernel(const InputParameters & params)
      37             :   : HDGKernel(params),
      38         203 :     DiffusionLHDGAssemblyHelper(this, this, this, this, _fe_problem, _sys, _tid),
      39         203 :     _source(getFunctor<Real>("source")),
      40         203 :     _qrule_face(_assembly.qRuleFace()),
      41         203 :     _q_point_face(_assembly.qPointsFace()),
      42         203 :     _JxW_face(_assembly.JxWFace()),
      43         406 :     _normals(_assembly.normals())
      44             : {
      45         203 : }
      46             : 
      47             : void
      48         203 : DiffusionLHDGKernel::initialSetup()
      49             : {
      50             :   // This check must occur after FEProblemBase::init()
      51         203 :   checkCoupling();
      52         203 : }
      53             : 
      54             : void
      55      355368 : DiffusionLHDGKernel::computeResidual()
      56             : {
      57      355368 :   _vector_re.resize(_qu_dof_indices.size());
      58      355368 :   _scalar_re.resize(_u_dof_indices.size());
      59             : 
      60             :   // qu and u
      61      355368 :   vectorVolumeResidual(_qu_sol, _u_sol, _JxW, *_qrule, _vector_re);
      62      355368 :   scalarVolumeResidual(_qu_sol, _source, _JxW, *_qrule, _current_elem, _q_point, _scalar_re);
      63             : 
      64      355368 :   addResiduals(_assembly, _vector_re, _qu_dof_indices, _grad_u_var.scalingFactor());
      65      355368 :   addResiduals(_assembly, _scalar_re, _u_dof_indices, _u_var.scalingFactor());
      66      355368 : }
      67             : 
      68             : void
      69     1260304 : DiffusionLHDGKernel::computeResidualOnSide()
      70             : {
      71     1260304 :   _vector_re.resize(_qu_dof_indices.size());
      72     1260304 :   _scalar_re.resize(_u_dof_indices.size());
      73     1260304 :   _lm_re.resize(_lm_u_dof_indices.size());
      74             : 
      75             :   // qu, u, lm_u
      76     1260304 :   vectorFaceResidual(_lm_u_sol, _JxW_face, *_qrule_face, _normals, _vector_re);
      77     1260304 :   scalarFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW_face, *_qrule_face, _normals, _scalar_re);
      78     1260304 :   lmFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW_face, *_qrule_face, _normals, _lm_re);
      79             : 
      80     1260304 :   addResiduals(_assembly, _vector_re, _qu_dof_indices, _grad_u_var.scalingFactor());
      81     1260304 :   addResiduals(_assembly, _scalar_re, _u_dof_indices, _u_var.scalingFactor());
      82     1260304 :   addResiduals(_assembly, _lm_re, _lm_u_dof_indices, _u_face_var.scalingFactor());
      83     1260304 : }
      84             : 
      85             : void
      86      235936 : DiffusionLHDGKernel::computeJacobian()
      87             : {
      88      235936 :   _vector_vector_jac.resize(_qu_dof_indices.size(), _qu_dof_indices.size());
      89      235936 :   _vector_scalar_jac.resize(_qu_dof_indices.size(), _u_dof_indices.size());
      90      235936 :   _scalar_vector_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
      91             : 
      92             :   // qu and u
      93      235936 :   vectorVolumeJacobian(_JxW, *_qrule, _vector_vector_jac, _vector_scalar_jac);
      94      235936 :   scalarVolumeJacobian(_JxW, *_qrule, _scalar_vector_jac);
      95             : 
      96      471872 :   addJacobian(
      97      235936 :       _assembly, _vector_vector_jac, _qu_dof_indices, _qu_dof_indices, _grad_u_var.scalingFactor());
      98      471872 :   addJacobian(
      99      235936 :       _assembly, _vector_scalar_jac, _qu_dof_indices, _u_dof_indices, _grad_u_var.scalingFactor());
     100      471872 :   addJacobian(
     101      235936 :       _assembly, _scalar_vector_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
     102      235936 : }
     103             : 
     104             : void
     105      838016 : DiffusionLHDGKernel::computeJacobianOnSide()
     106             : {
     107      838016 :   _scalar_vector_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
     108      838016 :   _scalar_scalar_jac.resize(_u_dof_indices.size(), _u_dof_indices.size());
     109      838016 :   _scalar_lm_jac.resize(_u_dof_indices.size(), _lm_u_dof_indices.size());
     110      838016 :   _lm_scalar_jac.resize(_lm_u_dof_indices.size(), _u_dof_indices.size());
     111      838016 :   _lm_lm_jac.resize(_lm_u_dof_indices.size(), _lm_u_dof_indices.size());
     112      838016 :   _vector_lm_jac.resize(_qu_dof_indices.size(), _lm_u_dof_indices.size());
     113      838016 :   _lm_vector_jac.resize(_lm_u_dof_indices.size(), _qu_dof_indices.size());
     114             : 
     115             :   // qu, u, lm_u
     116      838016 :   vectorFaceJacobian(_JxW_face, *_qrule_face, _normals, _vector_lm_jac);
     117      838016 :   scalarFaceJacobian(
     118      838016 :       _JxW_face, *_qrule_face, _normals, _scalar_vector_jac, _scalar_scalar_jac, _scalar_lm_jac);
     119      838016 :   lmFaceJacobian(_JxW_face, *_qrule_face, _normals, _lm_vector_jac, _lm_scalar_jac, _lm_lm_jac);
     120             : 
     121     1676032 :   addJacobian(
     122      838016 :       _assembly, _scalar_vector_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
     123     1676032 :   addJacobian(
     124      838016 :       _assembly, _scalar_scalar_jac, _u_dof_indices, _u_dof_indices, _u_var.scalingFactor());
     125      838016 :   addJacobian(_assembly, _scalar_lm_jac, _u_dof_indices, _lm_u_dof_indices, _u_var.scalingFactor());
     126     1676032 :   addJacobian(
     127      838016 :       _assembly, _lm_scalar_jac, _lm_u_dof_indices, _u_dof_indices, _u_face_var.scalingFactor());
     128     1676032 :   addJacobian(
     129      838016 :       _assembly, _lm_lm_jac, _lm_u_dof_indices, _lm_u_dof_indices, _u_face_var.scalingFactor());
     130     1676032 :   addJacobian(
     131      838016 :       _assembly, _vector_lm_jac, _qu_dof_indices, _lm_u_dof_indices, _grad_u_var.scalingFactor());
     132     1676032 :   addJacobian(
     133      838016 :       _assembly, _lm_vector_jac, _lm_u_dof_indices, _qu_dof_indices, _u_face_var.scalingFactor());
     134      838016 : }
     135             : 
     136             : void
     137         384 : DiffusionLHDGKernel::jacobianSetup()
     138             : {
     139         384 :   _cached_elem = nullptr;
     140         384 : }
     141             : 
     142             : void
     143      707808 : DiffusionLHDGKernel::computeOffDiagJacobian(const unsigned int)
     144             : {
     145      707808 :   if (_cached_elem != _current_elem)
     146             :   {
     147      235936 :     computeJacobian();
     148      235936 :     _cached_elem = _current_elem;
     149             :   }
     150      707808 : }
     151             : 
     152             : std::set<std::string>
     153         202 : DiffusionLHDGKernel::additionalROVariables()
     154             : {
     155         606 :   return {_grad_u_var.name(), _u_face_var.name()};
     156         202 : }

Generated by: LCOV version 1.14