LCOV - code coverage report
Current view: top level - src/bcs - NavierStokesLHDGOutflowBC.C (source / functions) Hit Total Coverage
Test: idaholab/moose navier_stokes: #32971 (54bef8) with base c6cf66 Lines: 123 124 99.2 %
Date: 2026-05-29 20:37:52 Functions: 7 7 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 "NavierStokesLHDGOutflowBC.h"
      11             : 
      12             : registerMooseObject("NavierStokesApp", NavierStokesLHDGOutflowBC);
      13             : 
      14             : InputParameters
      15         320 : NavierStokesLHDGOutflowBC::validParams()
      16             : {
      17         320 :   auto params = IntegratedBC::validParams();
      18         320 :   params += NavierStokesLHDGAssemblyHelper::validParams();
      19         320 :   params.addClassDescription("Implements an outflow boundary condition for use with a hybridized "
      20             :                              "discretization of the incompressible Navier-Stokes equations");
      21         640 :   params.renameParam("variable", "u", "The x-component of velocity");
      22         320 :   return params;
      23           0 : }
      24             : 
      25         160 : NavierStokesLHDGOutflowBC::NavierStokesLHDGOutflowBC(const InputParameters & parameters)
      26             :   : IntegratedBC(parameters),
      27         160 :     NavierStokesLHDGAssemblyHelper(this, this, this, this, _fe_problem, _sys, _mesh, _tid),
      28         160 :     _cached_side(libMesh::invalid_uint)
      29             : {
      30         160 : }
      31             : 
      32             : void
      33         160 : NavierStokesLHDGOutflowBC::initialSetup()
      34             : {
      35         160 :   checkCoupling();
      36         160 : }
      37             : 
      38             : void
      39         645 : NavierStokesLHDGOutflowBC::jacobianSetup()
      40             : {
      41         645 :   _cached_elem = nullptr;
      42         645 :   _cached_side = libMesh::invalid_uint;
      43         645 : }
      44             : 
      45             : void
      46       22554 : NavierStokesLHDGOutflowBC::computeOffDiagJacobian(const unsigned int)
      47             : {
      48       22554 :   if ((_cached_elem != _current_elem) || (_cached_side != _current_side))
      49             :   {
      50        3222 :     computeJacobian();
      51        3222 :     _cached_elem = _current_elem;
      52        3222 :     _cached_side = _current_side;
      53             :   }
      54       22554 : }
      55             : 
      56             : void
      57       10532 : NavierStokesLHDGOutflowBC::computeResidual()
      58             : {
      59       10532 :   const Elem * const neigh = _current_elem->neighbor_ptr(_current_side);
      60             : 
      61       10532 :   _grad_u_vel_re.resize(_qu_dof_indices.size());
      62       10532 :   _u_vel_re.resize(_u_dof_indices.size());
      63       10532 :   _lm_u_vel_re.resize(_lm_u_dof_indices.size());
      64       10532 :   _grad_v_vel_re.resize(_qv_dof_indices.size());
      65       10532 :   _v_vel_re.resize(_v_dof_indices.size());
      66       10532 :   _lm_v_vel_re.resize(_lm_v_dof_indices.size());
      67       10532 :   _p_re.resize(_p_dof_indices.size());
      68             : 
      69             :   // qu, u, lm_u
      70       10532 :   vectorFaceResidual(_lm_u_sol, _JxW, *_qrule, _normals, _grad_u_vel_re);
      71       10532 :   scalarFaceResidual(_qu_sol, _u_sol, _lm_u_sol, 0, _JxW, *_qrule, _normals, _u_vel_re);
      72       10532 :   lmFaceResidual(_qu_sol, _u_sol, _lm_u_sol, 0, _JxW, *_qrule, _normals, neigh, _lm_u_vel_re);
      73             : 
      74             :   // qv, v, lm_v
      75       10532 :   vectorFaceResidual(_lm_v_sol, _JxW, *_qrule, _normals, _grad_v_vel_re);
      76       10532 :   scalarFaceResidual(_qv_sol, _v_sol, _lm_v_sol, 1, _JxW, *_qrule, _normals, _v_vel_re);
      77       10532 :   lmFaceResidual(_qv_sol, _v_sol, _lm_v_sol, 1, _JxW, *_qrule, _normals, neigh, _lm_v_vel_re);
      78             : 
      79             :   // p
      80       10532 :   pressureFaceResidual(_JxW, *_qrule, _normals, _p_re);
      81             : 
      82       10532 :   addResiduals(_assembly, _grad_u_vel_re, _qu_dof_indices, _grad_u_var.scalingFactor());
      83       10532 :   addResiduals(_assembly, _u_vel_re, _u_dof_indices, _u_var.scalingFactor());
      84       10532 :   addResiduals(_assembly, _lm_u_vel_re, _lm_u_dof_indices, _u_face_var.scalingFactor());
      85       10532 :   addResiduals(_assembly, _grad_v_vel_re, _qv_dof_indices, _grad_v_var.scalingFactor());
      86       10532 :   addResiduals(_assembly, _v_vel_re, _v_dof_indices, _v_var.scalingFactor());
      87       10532 :   addResiduals(_assembly, _lm_v_vel_re, _lm_v_dof_indices, _v_face_var.scalingFactor());
      88       10532 :   addResiduals(_assembly, _p_re, _p_dof_indices, _pressure_var.scalingFactor());
      89       10532 : }
      90             : 
      91             : void
      92        3222 : NavierStokesLHDGOutflowBC::computeJacobian()
      93             : {
      94        3222 :   const Elem * const neigh = _current_elem->neighbor_ptr(_current_side);
      95             : 
      96        3222 :   _grad_u_lm_u_jac.resize(_qu_dof_indices.size(), _lm_u_dof_indices.size());
      97        3222 :   _u_grad_u_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
      98        3222 :   _u_u_jac.resize(_u_dof_indices.size(), _u_dof_indices.size());
      99        3222 :   _u_lm_u_jac.resize(_u_dof_indices.size(), _lm_u_dof_indices.size());
     100        3222 :   _u_lm_v_jac.resize(_u_dof_indices.size(), _lm_v_dof_indices.size());
     101        3222 :   _u_p_jac.resize(_u_dof_indices.size(), _p_dof_indices.size());
     102        3222 :   _lm_u_grad_u_jac.resize(_lm_u_dof_indices.size(), _qu_dof_indices.size());
     103        3222 :   _lm_u_u_jac.resize(_lm_u_dof_indices.size(), _u_dof_indices.size());
     104        3222 :   _lm_u_lm_u_jac.resize(_lm_u_dof_indices.size(), _lm_u_dof_indices.size());
     105        3222 :   _lm_u_lm_v_jac.resize(_lm_u_dof_indices.size(), _lm_v_dof_indices.size());
     106        3222 :   _lm_u_p_jac.resize(_lm_u_dof_indices.size(), _p_dof_indices.size());
     107        3222 :   _grad_v_lm_v_jac.resize(_qv_dof_indices.size(), _lm_v_dof_indices.size());
     108        3222 :   _v_grad_v_jac.resize(_v_dof_indices.size(), _qv_dof_indices.size());
     109        3222 :   _v_v_jac.resize(_v_dof_indices.size(), _v_dof_indices.size());
     110        3222 :   _v_lm_u_jac.resize(_v_dof_indices.size(), _lm_u_dof_indices.size());
     111        3222 :   _v_lm_v_jac.resize(_v_dof_indices.size(), _lm_v_dof_indices.size());
     112        3222 :   _v_p_jac.resize(_v_dof_indices.size(), _p_dof_indices.size());
     113        3222 :   _lm_v_grad_v_jac.resize(_lm_v_dof_indices.size(), _qv_dof_indices.size());
     114        3222 :   _lm_v_v_jac.resize(_lm_v_dof_indices.size(), _v_dof_indices.size());
     115        3222 :   _lm_v_lm_u_jac.resize(_lm_v_dof_indices.size(), _lm_u_dof_indices.size());
     116        3222 :   _lm_v_lm_v_jac.resize(_lm_v_dof_indices.size(), _lm_v_dof_indices.size());
     117        3222 :   _lm_v_p_jac.resize(_lm_v_dof_indices.size(), _p_dof_indices.size());
     118        3222 :   _p_lm_u_jac.resize(_p_dof_indices.size(), _lm_u_dof_indices.size());
     119        3222 :   _p_lm_v_jac.resize(_p_dof_indices.size(), _lm_v_dof_indices.size());
     120             : 
     121             :   // qu, u, lm_u
     122        3222 :   vectorFaceJacobian(_JxW, *_qrule, _normals, _grad_u_lm_u_jac);
     123        3222 :   scalarFaceJacobian(0,
     124             :                      _JxW,
     125        3222 :                      *_qrule,
     126             :                      _normals,
     127             :                      _u_grad_u_jac,
     128             :                      _u_u_jac,
     129             :                      _u_lm_u_jac,
     130             :                      _u_p_jac,
     131             :                      _u_lm_u_jac,
     132             :                      _u_lm_v_jac);
     133        3222 :   lmFaceJacobian(0,
     134             :                  _JxW,
     135        3222 :                  *_qrule,
     136             :                  _normals,
     137             :                  neigh,
     138             :                  _lm_u_grad_u_jac,
     139             :                  _lm_u_u_jac,
     140             :                  _lm_u_lm_u_jac,
     141             :                  _lm_u_p_jac,
     142             :                  _lm_u_lm_u_jac,
     143             :                  _lm_u_lm_v_jac);
     144             : 
     145             :   // qv, v, lm_v
     146        3222 :   vectorFaceJacobian(_JxW, *_qrule, _normals, _grad_v_lm_v_jac);
     147        3222 :   scalarFaceJacobian(1,
     148             :                      _JxW,
     149        3222 :                      *_qrule,
     150             :                      _normals,
     151             :                      _v_grad_v_jac,
     152             :                      _v_v_jac,
     153             :                      _v_lm_v_jac,
     154             :                      _v_p_jac,
     155             :                      _v_lm_u_jac,
     156             :                      _v_lm_v_jac);
     157        3222 :   lmFaceJacobian(1,
     158             :                  _JxW,
     159        3222 :                  *_qrule,
     160             :                  _normals,
     161             :                  neigh,
     162             :                  _lm_v_grad_v_jac,
     163             :                  _lm_v_v_jac,
     164             :                  _lm_v_lm_v_jac,
     165             :                  _lm_v_p_jac,
     166             :                  _lm_v_lm_u_jac,
     167             :                  _lm_v_lm_v_jac);
     168             : 
     169             :   // p
     170        3222 :   pressureFaceJacobian(_JxW, *_qrule, _normals, _p_lm_u_jac, _p_lm_v_jac);
     171             : 
     172        3222 :   addJacobian(
     173        3222 :       _assembly, _grad_u_lm_u_jac, _qu_dof_indices, _lm_u_dof_indices, _grad_u_var.scalingFactor());
     174        3222 :   addJacobian(_assembly, _u_grad_u_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
     175        3222 :   addJacobian(_assembly, _u_u_jac, _u_dof_indices, _u_dof_indices, _u_var.scalingFactor());
     176        3222 :   addJacobian(_assembly, _u_lm_u_jac, _u_dof_indices, _lm_u_dof_indices, _u_var.scalingFactor());
     177        3222 :   addJacobian(_assembly, _u_lm_v_jac, _u_dof_indices, _lm_v_dof_indices, _u_var.scalingFactor());
     178        3222 :   addJacobian(_assembly, _u_p_jac, _u_dof_indices, _p_dof_indices, _u_var.scalingFactor());
     179        3222 :   addJacobian(
     180        3222 :       _assembly, _lm_u_grad_u_jac, _lm_u_dof_indices, _qu_dof_indices, _u_face_var.scalingFactor());
     181        3222 :   addJacobian(
     182        3222 :       _assembly, _lm_u_u_jac, _lm_u_dof_indices, _u_dof_indices, _u_face_var.scalingFactor());
     183        3222 :   addJacobian(
     184        3222 :       _assembly, _lm_u_lm_u_jac, _lm_u_dof_indices, _lm_u_dof_indices, _u_face_var.scalingFactor());
     185        3222 :   addJacobian(
     186        3222 :       _assembly, _lm_u_lm_v_jac, _lm_u_dof_indices, _lm_v_dof_indices, _u_face_var.scalingFactor());
     187        3222 :   addJacobian(
     188        3222 :       _assembly, _lm_u_p_jac, _lm_u_dof_indices, _p_dof_indices, _u_face_var.scalingFactor());
     189        3222 :   addJacobian(
     190        3222 :       _assembly, _grad_v_lm_v_jac, _qv_dof_indices, _lm_v_dof_indices, _grad_v_var.scalingFactor());
     191        3222 :   addJacobian(_assembly, _v_grad_v_jac, _v_dof_indices, _qv_dof_indices, _v_var.scalingFactor());
     192        3222 :   addJacobian(_assembly, _v_v_jac, _v_dof_indices, _v_dof_indices, _v_var.scalingFactor());
     193        3222 :   addJacobian(_assembly, _v_lm_u_jac, _v_dof_indices, _lm_u_dof_indices, _v_var.scalingFactor());
     194        3222 :   addJacobian(_assembly, _v_lm_v_jac, _v_dof_indices, _lm_v_dof_indices, _v_var.scalingFactor());
     195        3222 :   addJacobian(_assembly, _v_p_jac, _v_dof_indices, _p_dof_indices, _v_var.scalingFactor());
     196        3222 :   addJacobian(
     197        3222 :       _assembly, _lm_v_grad_v_jac, _lm_v_dof_indices, _qv_dof_indices, _v_face_var.scalingFactor());
     198        3222 :   addJacobian(
     199        3222 :       _assembly, _lm_v_v_jac, _lm_v_dof_indices, _v_dof_indices, _v_face_var.scalingFactor());
     200        3222 :   addJacobian(
     201        3222 :       _assembly, _lm_v_lm_u_jac, _lm_v_dof_indices, _lm_u_dof_indices, _v_face_var.scalingFactor());
     202        3222 :   addJacobian(
     203        3222 :       _assembly, _lm_v_lm_v_jac, _lm_v_dof_indices, _lm_v_dof_indices, _v_face_var.scalingFactor());
     204        3222 :   addJacobian(
     205        3222 :       _assembly, _lm_v_p_jac, _lm_v_dof_indices, _p_dof_indices, _v_face_var.scalingFactor());
     206        3222 :   addJacobian(
     207        3222 :       _assembly, _p_lm_u_jac, _p_dof_indices, _lm_u_dof_indices, _pressure_var.scalingFactor());
     208        3222 :   addJacobian(
     209        3222 :       _assembly, _p_lm_v_jac, _p_dof_indices, _lm_v_dof_indices, _pressure_var.scalingFactor());
     210        3222 : }

Generated by: LCOV version 1.14