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

Generated by: LCOV version 1.14