LCOV - code coverage report
Current view: top level - src/hdgkernels - NavierStokesLHDGKernel.C (source / functions) Hit Total Coverage
Test: idaholab/moose navier_stokes: 9fc4b0 Lines: 227 229 99.1 %
Date: 2025-08-14 10:14:56 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 "NavierStokesLHDGKernel.h"
      11             : #include "MooseVariableFE.h"
      12             : #include "MooseVariableScalar.h"
      13             : #include "FEProblemBase.h"
      14             : 
      15             : registerMooseObject("NavierStokesApp", NavierStokesLHDGKernel);
      16             : 
      17             : InputParameters
      18        1112 : NavierStokesLHDGKernel::validParams()
      19             : {
      20        1112 :   auto params = HDGKernel::validParams();
      21        1112 :   params += NavierStokesLHDGAssemblyHelper::validParams();
      22        2224 :   params.addParam<MooseFunctorName>(
      23        2224 :       "body_force_x", 0, "Body force for the momentum equation in the x-direction");
      24        2224 :   params.addParam<MooseFunctorName>(
      25        2224 :       "body_force_y", 0, "Body force for the momentum equation in the y-direction");
      26        2224 :   params.addParam<MooseFunctorName>(
      27        2224 :       "body_force_z", 0, "Body force for the momentum equation in the z-direction");
      28        2224 :   params.addParam<MooseFunctorName>(
      29             :       "pressure_mms_forcing_function",
      30        2224 :       0,
      31             :       "A forcing function for the pressure (mass) equation for conducting MMS studies");
      32        1112 :   params.addClassDescription("Implements the steady incompressible Navier-Stokes equations for a "
      33             :                              "hybridized discretization");
      34        2224 :   params.renameParam("variable", "u", "The x-component of velocity");
      35        1112 :   return params;
      36           0 : }
      37             : 
      38         556 : NavierStokesLHDGKernel::NavierStokesLHDGKernel(const InputParameters & parameters)
      39             :   : HDGKernel(parameters),
      40         556 :     NavierStokesLHDGAssemblyHelper(this, this, this, this, _fe_problem, _sys, _mesh, _tid),
      41             :     // body forces
      42         556 :     _body_force_x(getFunctor<Real>("body_force_x")),
      43        1112 :     _body_force_y(getFunctor<Real>("body_force_y")),
      44        1112 :     _body_force_z(getFunctor<Real>("body_force_z")),
      45        1112 :     _pressure_mms_forcing_function(getFunctor<Real>("pressure_mms_forcing_function")),
      46         556 :     _qrule_face(_assembly.qRuleFace()),
      47         556 :     _q_point_face(_assembly.qPointsFace()),
      48         556 :     _JxW_face(_assembly.JxWFace()),
      49         556 :     _normals(_assembly.normals()),
      50         556 :     _current_side(_assembly.side())
      51             : {
      52         556 :   if (_mesh.dimension() > 2)
      53           0 :     mooseError("This class only supports 2D simulations at this time");
      54             : 
      55         556 :   _body_forces.push_back(&_body_force_x);
      56         556 :   _body_forces.push_back(&_body_force_y);
      57         556 :   _body_forces.push_back(&_body_force_z);
      58         556 : }
      59             : 
      60             : void
      61     2893008 : NavierStokesLHDGKernel::computeResidual()
      62             : {
      63     2893008 :   _grad_u_vel_re.resize(_qu_dof_indices.size());
      64     2893008 :   _grad_v_vel_re.resize(_qv_dof_indices.size());
      65     2893008 :   _u_vel_re.resize(_u_dof_indices.size());
      66     2893008 :   _v_vel_re.resize(_v_dof_indices.size());
      67     2893008 :   _p_re.resize(_p_dof_indices.size());
      68     2893008 :   _global_lm_re.resize(_global_lm_dof_indices ? _global_lm_dof_indices->size() : 0);
      69             : 
      70             :   // qu and u
      71     2893008 :   vectorVolumeResidual(_qu_sol, _u_sol, _JxW, *_qrule, _grad_u_vel_re);
      72     2893008 :   scalarVolumeResidual(
      73     2893008 :       _qu_sol, 0, _body_force_x, _JxW, *_qrule, _current_elem, _q_point, _u_vel_re);
      74             : 
      75             :   // qv and v
      76     2893008 :   vectorVolumeResidual(_qv_sol, _v_sol, _JxW, *_qrule, _grad_v_vel_re);
      77     2893008 :   scalarVolumeResidual(
      78     2893008 :       _qv_sol, 1, _body_force_y, _JxW, *_qrule, _current_elem, _q_point, _v_vel_re);
      79             : 
      80             :   // p
      81     2893008 :   pressureVolumeResidual(
      82     2893008 :       _pressure_mms_forcing_function, _JxW, *_qrule, _current_elem, _q_point, _p_re, _global_lm_re);
      83             : 
      84     2893008 :   addResiduals(_assembly, _grad_u_vel_re, _qu_dof_indices, _grad_u_var.scalingFactor());
      85     2893008 :   addResiduals(_assembly, _grad_v_vel_re, _qv_dof_indices, _grad_v_var.scalingFactor());
      86     2893008 :   addResiduals(_assembly, _u_vel_re, _u_dof_indices, _u_var.scalingFactor());
      87     2893008 :   addResiduals(_assembly, _v_vel_re, _v_dof_indices, _v_var.scalingFactor());
      88     2893008 :   addResiduals(_assembly, _p_re, _p_dof_indices, _pressure_var.scalingFactor());
      89     2893008 :   if (_global_lm_dof_indices)
      90     1389808 :     addResiduals(
      91     1389808 :         _assembly, _global_lm_re, *_global_lm_dof_indices, _enclosure_lm_var->scalingFactor());
      92     2893008 : }
      93             : 
      94             : void
      95      825920 : NavierStokesLHDGKernel::computeJacobian()
      96             : {
      97      825920 :   _grad_u_grad_u_jac.resize(_qu_dof_indices.size(), _qu_dof_indices.size());
      98      825920 :   _grad_v_grad_v_jac.resize(_qv_dof_indices.size(), _qv_dof_indices.size());
      99      825920 :   _grad_u_u_jac.resize(_qu_dof_indices.size(), _u_dof_indices.size());
     100      825920 :   _grad_v_v_jac.resize(_qv_dof_indices.size(), _v_dof_indices.size());
     101      825920 :   _u_grad_u_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
     102      825920 :   _v_grad_v_jac.resize(_v_dof_indices.size(), _qv_dof_indices.size());
     103      825920 :   _u_u_jac.resize(_u_dof_indices.size(), _u_dof_indices.size());
     104      825920 :   _u_v_jac.resize(_u_dof_indices.size(), _v_dof_indices.size());
     105      825920 :   _v_u_jac.resize(_v_dof_indices.size(), _u_dof_indices.size());
     106      825920 :   _v_v_jac.resize(_v_dof_indices.size(), _v_dof_indices.size());
     107      825920 :   _u_p_jac.resize(_u_dof_indices.size(), _p_dof_indices.size());
     108      825920 :   _v_p_jac.resize(_v_dof_indices.size(), _p_dof_indices.size());
     109      825920 :   _p_u_jac.resize(_p_dof_indices.size(), _u_dof_indices.size());
     110      825920 :   _p_v_jac.resize(_p_dof_indices.size(), _v_dof_indices.size());
     111      825920 :   _p_global_lm_jac.resize(_p_dof_indices.size(),
     112      825920 :                           _global_lm_dof_indices ? _global_lm_dof_indices->size() : 0);
     113      825920 :   _global_lm_p_jac.resize(_global_lm_dof_indices ? _global_lm_dof_indices->size() : 0,
     114      825920 :                           _p_dof_indices.size());
     115             : 
     116             :   // qu and u
     117      825920 :   vectorVolumeJacobian(_JxW, *_qrule, _grad_u_grad_u_jac, _grad_u_u_jac);
     118      825920 :   scalarVolumeJacobian(0, _JxW, *_qrule, _u_grad_u_jac, _u_u_jac, _u_v_jac, _u_p_jac);
     119             : 
     120             :   // qv and v
     121      825920 :   vectorVolumeJacobian(_JxW, *_qrule, _grad_v_grad_v_jac, _grad_v_v_jac);
     122      825920 :   scalarVolumeJacobian(1, _JxW, *_qrule, _v_grad_v_jac, _v_u_jac, _v_v_jac, _v_p_jac);
     123             : 
     124             :   // p
     125      825920 :   pressureVolumeJacobian(_JxW, *_qrule, _p_u_jac, _p_v_jac, _p_global_lm_jac, _global_lm_p_jac);
     126             : 
     127      825920 :   addJacobian(
     128      825920 :       _assembly, _grad_u_grad_u_jac, _qu_dof_indices, _qu_dof_indices, _grad_u_var.scalingFactor());
     129      825920 :   addJacobian(
     130      825920 :       _assembly, _grad_v_grad_v_jac, _qv_dof_indices, _qv_dof_indices, _grad_v_var.scalingFactor());
     131      825920 :   addJacobian(
     132      825920 :       _assembly, _grad_u_u_jac, _qu_dof_indices, _u_dof_indices, _grad_u_var.scalingFactor());
     133      825920 :   addJacobian(
     134      825920 :       _assembly, _grad_v_v_jac, _qv_dof_indices, _v_dof_indices, _grad_v_var.scalingFactor());
     135      825920 :   addJacobian(_assembly, _u_grad_u_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
     136      825920 :   addJacobian(_assembly, _v_grad_v_jac, _v_dof_indices, _qv_dof_indices, _v_var.scalingFactor());
     137      825920 :   addJacobian(_assembly, _u_u_jac, _u_dof_indices, _u_dof_indices, _u_var.scalingFactor());
     138      825920 :   addJacobian(_assembly, _u_v_jac, _u_dof_indices, _v_dof_indices, _u_var.scalingFactor());
     139      825920 :   addJacobian(_assembly, _v_u_jac, _v_dof_indices, _u_dof_indices, _v_var.scalingFactor());
     140      825920 :   addJacobian(_assembly, _v_v_jac, _v_dof_indices, _v_dof_indices, _v_var.scalingFactor());
     141      825920 :   addJacobian(_assembly, _u_p_jac, _u_dof_indices, _p_dof_indices, _u_var.scalingFactor());
     142      825920 :   addJacobian(_assembly, _v_p_jac, _v_dof_indices, _p_dof_indices, _v_var.scalingFactor());
     143      825920 :   addJacobian(_assembly, _p_u_jac, _p_dof_indices, _u_dof_indices, _pressure_var.scalingFactor());
     144      825920 :   addJacobian(_assembly, _p_v_jac, _p_dof_indices, _v_dof_indices, _pressure_var.scalingFactor());
     145      825920 :   if (_global_lm_dof_indices)
     146             :   {
     147      365120 :     addJacobian(_assembly,
     148             :                 _p_global_lm_jac,
     149             :                 _p_dof_indices,
     150             :                 *_global_lm_dof_indices,
     151      365120 :                 _pressure_var.scalingFactor());
     152      365120 :     addJacobian(_assembly,
     153             :                 _global_lm_p_jac,
     154      365120 :                 *_global_lm_dof_indices,
     155             :                 _p_dof_indices,
     156      365120 :                 _enclosure_lm_var->scalingFactor());
     157             :   }
     158      825920 : }
     159             : 
     160             : void
     161     8525968 : NavierStokesLHDGKernel::computeResidualOnSide()
     162             : {
     163     8525968 :   const Elem * const neigh = _current_elem->neighbor_ptr(_current_side);
     164             : 
     165     8525968 :   _grad_u_vel_re.resize(_qu_dof_indices.size());
     166     8525968 :   _u_vel_re.resize(_u_dof_indices.size());
     167     8525968 :   _lm_u_vel_re.resize(_lm_u_dof_indices.size());
     168     8525968 :   _grad_v_vel_re.resize(_qv_dof_indices.size());
     169     8525968 :   _v_vel_re.resize(_v_dof_indices.size());
     170     8525968 :   _lm_v_vel_re.resize(_lm_v_dof_indices.size());
     171     8525968 :   _p_re.resize(_p_dof_indices.size());
     172             : 
     173             :   // qu, u, lm_u
     174     8525968 :   vectorFaceResidual(_lm_u_sol, _JxW_face, *_qrule_face, _normals, _grad_u_vel_re);
     175     8525968 :   scalarFaceResidual(_qu_sol, _u_sol, _lm_u_sol, 0, _JxW_face, *_qrule_face, _normals, _u_vel_re);
     176     8525968 :   lmFaceResidual(
     177     8525968 :       _qu_sol, _u_sol, _lm_u_sol, 0, _JxW_face, *_qrule_face, _normals, neigh, _lm_u_vel_re);
     178             : 
     179             :   // qv, v, lm_v
     180     8525968 :   vectorFaceResidual(_lm_v_sol, _JxW_face, *_qrule_face, _normals, _grad_v_vel_re);
     181     8525968 :   scalarFaceResidual(_qv_sol, _v_sol, _lm_v_sol, 1, _JxW_face, *_qrule_face, _normals, _v_vel_re);
     182     8525968 :   lmFaceResidual(
     183     8525968 :       _qv_sol, _v_sol, _lm_v_sol, 1, _JxW_face, *_qrule_face, _normals, neigh, _lm_v_vel_re);
     184             : 
     185             :   // p
     186     8525968 :   pressureFaceResidual(_JxW_face, *_qrule_face, _normals, _p_re);
     187             : 
     188     8525968 :   addResiduals(_assembly, _grad_u_vel_re, _qu_dof_indices, _grad_u_var.scalingFactor());
     189     8525968 :   addResiduals(_assembly, _u_vel_re, _u_dof_indices, _u_var.scalingFactor());
     190     8525968 :   addResiduals(_assembly, _lm_u_vel_re, _lm_u_dof_indices, _u_face_var.scalingFactor());
     191     8525968 :   addResiduals(_assembly, _grad_v_vel_re, _qv_dof_indices, _grad_v_var.scalingFactor());
     192     8525968 :   addResiduals(_assembly, _v_vel_re, _v_dof_indices, _v_var.scalingFactor());
     193     8525968 :   addResiduals(_assembly, _lm_v_vel_re, _lm_v_dof_indices, _v_face_var.scalingFactor());
     194     8525968 :   addResiduals(_assembly, _p_re, _p_dof_indices, _pressure_var.scalingFactor());
     195     8525968 : }
     196             : 
     197             : void
     198     2433440 : NavierStokesLHDGKernel::computeJacobianOnSide()
     199             : {
     200     2433440 :   const Elem * const neigh = _current_elem->neighbor_ptr(_current_side);
     201             : 
     202     2433440 :   _grad_u_lm_u_jac.resize(_qu_dof_indices.size(), _lm_u_dof_indices.size());
     203     2433440 :   _u_grad_u_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
     204     2433440 :   _u_u_jac.resize(_u_dof_indices.size(), _u_dof_indices.size());
     205     2433440 :   _u_lm_u_jac.resize(_u_dof_indices.size(), _lm_u_dof_indices.size());
     206     2433440 :   _u_lm_v_jac.resize(_u_dof_indices.size(), _lm_v_dof_indices.size());
     207     2433440 :   _u_p_jac.resize(_u_dof_indices.size(), _p_dof_indices.size());
     208     2433440 :   _lm_u_grad_u_jac.resize(_lm_u_dof_indices.size(), _qu_dof_indices.size());
     209     2433440 :   _lm_u_u_jac.resize(_lm_u_dof_indices.size(), _u_dof_indices.size());
     210     2433440 :   _lm_u_lm_u_jac.resize(_lm_u_dof_indices.size(), _lm_u_dof_indices.size());
     211     2433440 :   _lm_u_lm_v_jac.resize(_lm_u_dof_indices.size(), _lm_v_dof_indices.size());
     212     2433440 :   _lm_u_p_jac.resize(_lm_u_dof_indices.size(), _p_dof_indices.size());
     213     2433440 :   _grad_v_lm_v_jac.resize(_qv_dof_indices.size(), _lm_v_dof_indices.size());
     214     2433440 :   _v_grad_v_jac.resize(_v_dof_indices.size(), _qv_dof_indices.size());
     215     2433440 :   _v_v_jac.resize(_v_dof_indices.size(), _v_dof_indices.size());
     216     2433440 :   _v_lm_u_jac.resize(_v_dof_indices.size(), _lm_u_dof_indices.size());
     217     2433440 :   _v_lm_v_jac.resize(_v_dof_indices.size(), _lm_v_dof_indices.size());
     218     2433440 :   _v_p_jac.resize(_v_dof_indices.size(), _p_dof_indices.size());
     219     2433440 :   _lm_v_grad_v_jac.resize(_lm_v_dof_indices.size(), _qv_dof_indices.size());
     220     2433440 :   _lm_v_v_jac.resize(_lm_v_dof_indices.size(), _v_dof_indices.size());
     221     2433440 :   _lm_v_lm_u_jac.resize(_lm_v_dof_indices.size(), _lm_u_dof_indices.size());
     222     2433440 :   _lm_v_lm_v_jac.resize(_lm_v_dof_indices.size(), _lm_v_dof_indices.size());
     223     2433440 :   _lm_v_p_jac.resize(_lm_v_dof_indices.size(), _p_dof_indices.size());
     224     2433440 :   _p_lm_u_jac.resize(_p_dof_indices.size(), _lm_u_dof_indices.size());
     225     2433440 :   _p_lm_v_jac.resize(_p_dof_indices.size(), _lm_v_dof_indices.size());
     226             : 
     227             :   // qu, u, lm_u
     228     2433440 :   vectorFaceJacobian(_JxW_face, *_qrule_face, _normals, _grad_u_lm_u_jac);
     229     2433440 :   scalarFaceJacobian(0,
     230             :                      _JxW_face,
     231     2433440 :                      *_qrule_face,
     232             :                      _normals,
     233             :                      _u_grad_u_jac,
     234             :                      _u_u_jac,
     235             :                      _u_lm_u_jac,
     236             :                      _u_p_jac,
     237             :                      _u_lm_u_jac,
     238             :                      _u_lm_v_jac);
     239     2433440 :   lmFaceJacobian(0,
     240             :                  _JxW_face,
     241     2433440 :                  *_qrule_face,
     242             :                  _normals,
     243             :                  neigh,
     244             :                  _lm_u_grad_u_jac,
     245             :                  _lm_u_u_jac,
     246             :                  _lm_u_lm_u_jac,
     247             :                  _lm_u_p_jac,
     248             :                  _lm_u_lm_u_jac,
     249             :                  _lm_u_lm_v_jac);
     250             : 
     251             :   // qv, v, lm_v
     252     2433440 :   vectorFaceJacobian(_JxW_face, *_qrule_face, _normals, _grad_v_lm_v_jac);
     253     2433440 :   scalarFaceJacobian(1,
     254             :                      _JxW_face,
     255     2433440 :                      *_qrule_face,
     256             :                      _normals,
     257             :                      _v_grad_v_jac,
     258             :                      _v_v_jac,
     259             :                      _v_lm_v_jac,
     260             :                      _v_p_jac,
     261             :                      _v_lm_u_jac,
     262             :                      _v_lm_v_jac);
     263     2433440 :   lmFaceJacobian(1,
     264             :                  _JxW_face,
     265     2433440 :                  *_qrule_face,
     266             :                  _normals,
     267             :                  neigh,
     268             :                  _lm_v_grad_v_jac,
     269             :                  _lm_v_v_jac,
     270             :                  _lm_v_lm_v_jac,
     271             :                  _lm_v_p_jac,
     272             :                  _lm_v_lm_u_jac,
     273             :                  _lm_v_lm_v_jac);
     274             : 
     275             :   // p
     276     2433440 :   pressureFaceJacobian(_JxW_face, *_qrule_face, _normals, _p_lm_u_jac, _p_lm_v_jac);
     277             : 
     278     2433440 :   addJacobian(
     279     2433440 :       _assembly, _grad_u_lm_u_jac, _qu_dof_indices, _lm_u_dof_indices, _grad_u_var.scalingFactor());
     280     2433440 :   addJacobian(_assembly, _u_grad_u_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
     281     2433440 :   addJacobian(_assembly, _u_u_jac, _u_dof_indices, _u_dof_indices, _u_var.scalingFactor());
     282     2433440 :   addJacobian(_assembly, _u_lm_u_jac, _u_dof_indices, _lm_u_dof_indices, _u_var.scalingFactor());
     283     2433440 :   addJacobian(_assembly, _u_lm_v_jac, _u_dof_indices, _lm_v_dof_indices, _u_var.scalingFactor());
     284     2433440 :   addJacobian(_assembly, _u_p_jac, _u_dof_indices, _p_dof_indices, _u_var.scalingFactor());
     285     2433440 :   addJacobian(
     286     2433440 :       _assembly, _lm_u_grad_u_jac, _lm_u_dof_indices, _qu_dof_indices, _u_face_var.scalingFactor());
     287     2433440 :   addJacobian(
     288     2433440 :       _assembly, _lm_u_u_jac, _lm_u_dof_indices, _u_dof_indices, _u_face_var.scalingFactor());
     289     2433440 :   addJacobian(
     290     2433440 :       _assembly, _lm_u_lm_u_jac, _lm_u_dof_indices, _lm_u_dof_indices, _u_face_var.scalingFactor());
     291     2433440 :   addJacobian(
     292     2433440 :       _assembly, _lm_u_lm_v_jac, _lm_u_dof_indices, _lm_v_dof_indices, _u_face_var.scalingFactor());
     293     2433440 :   addJacobian(
     294     2433440 :       _assembly, _lm_u_p_jac, _lm_u_dof_indices, _p_dof_indices, _u_face_var.scalingFactor());
     295     2433440 :   addJacobian(
     296     2433440 :       _assembly, _grad_v_lm_v_jac, _qv_dof_indices, _lm_v_dof_indices, _grad_v_var.scalingFactor());
     297     2433440 :   addJacobian(_assembly, _v_grad_v_jac, _v_dof_indices, _qv_dof_indices, _v_var.scalingFactor());
     298     2433440 :   addJacobian(_assembly, _v_v_jac, _v_dof_indices, _v_dof_indices, _v_var.scalingFactor());
     299     2433440 :   addJacobian(_assembly, _v_lm_u_jac, _v_dof_indices, _lm_u_dof_indices, _v_var.scalingFactor());
     300     2433440 :   addJacobian(_assembly, _v_lm_v_jac, _v_dof_indices, _lm_v_dof_indices, _v_var.scalingFactor());
     301     2433440 :   addJacobian(_assembly, _v_p_jac, _v_dof_indices, _p_dof_indices, _v_var.scalingFactor());
     302     2433440 :   addJacobian(
     303     2433440 :       _assembly, _lm_v_grad_v_jac, _lm_v_dof_indices, _qv_dof_indices, _v_face_var.scalingFactor());
     304     2433440 :   addJacobian(
     305     2433440 :       _assembly, _lm_v_v_jac, _lm_v_dof_indices, _v_dof_indices, _v_face_var.scalingFactor());
     306     2433440 :   addJacobian(
     307     2433440 :       _assembly, _lm_v_lm_u_jac, _lm_v_dof_indices, _lm_u_dof_indices, _v_face_var.scalingFactor());
     308     2433440 :   addJacobian(
     309     2433440 :       _assembly, _lm_v_lm_v_jac, _lm_v_dof_indices, _lm_v_dof_indices, _v_face_var.scalingFactor());
     310     2433440 :   addJacobian(
     311     2433440 :       _assembly, _lm_v_p_jac, _lm_v_dof_indices, _p_dof_indices, _v_face_var.scalingFactor());
     312     2433440 :   addJacobian(
     313     2433440 :       _assembly, _p_lm_u_jac, _p_dof_indices, _lm_u_dof_indices, _pressure_var.scalingFactor());
     314     2433440 :   addJacobian(
     315     2433440 :       _assembly, _p_lm_v_jac, _p_dof_indices, _lm_v_dof_indices, _pressure_var.scalingFactor());
     316     2433440 : }
     317             : 
     318             : void
     319         556 : NavierStokesLHDGKernel::initialSetup()
     320             : {
     321             :   // This check must occur after FEProblemBase::init()
     322         556 :   checkCoupling();
     323         556 : }
     324             : 
     325             : void
     326        1988 : NavierStokesLHDGKernel::jacobianSetup()
     327             : {
     328        1988 :   _cached_elem = nullptr;
     329        1988 : }
     330             : 
     331             : void
     332     5781440 : NavierStokesLHDGKernel::computeOffDiagJacobian(const unsigned int)
     333             : {
     334     5781440 :   if (_cached_elem != _current_elem)
     335             :   {
     336      825920 :     computeJacobian();
     337      825920 :     _cached_elem = _current_elem;
     338             :   }
     339     5781440 : }
     340             : 
     341             : std::set<std::string>
     342         556 : NavierStokesLHDGKernel::additionalROVariables()
     343             : {
     344         556 :   std::set<std::string> covered_vars = {_grad_u_var.name(),
     345         556 :                                         _u_face_var.name(),
     346         556 :                                         _v_var.name(),
     347         556 :                                         _grad_v_var.name(),
     348         556 :                                         _v_face_var.name(),
     349        3892 :                                         _pressure_var.name()};
     350         556 :   if (_enclosure_lm_var)
     351         278 :     covered_vars.insert(_enclosure_lm_var->name());
     352         556 :   return covered_vars;
     353         556 : }

Generated by: LCOV version 1.14