LCOV - code coverage report
Current view: top level - src/bcs - DiffusionLHDGPrescribedGradientBC.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 76 77 98.7 %
Date: 2025-07-17 01:28:37 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 "DiffusionLHDGAssemblyHelper.h"
      11             : #include "DiffusionLHDGPrescribedGradientBC.h"
      12             : 
      13             : registerMooseObject("MooseApp", DiffusionLHDGPrescribedGradientBC);
      14             : 
      15             : InputParameters
      16       14386 : DiffusionLHDGPrescribedGradientBC::validParams()
      17             : {
      18       14386 :   auto params = IntegratedBC::validParams();
      19       14386 :   params += DiffusionLHDGAssemblyHelper::validParams();
      20       14386 :   params.renameParam("variable", "u", "The diffusing specie concentration");
      21       14386 :   params.addClassDescription("Implements a flux boundary condition for use with a hybridized "
      22             :                              "discretization of the diffusion equation");
      23       43158 :   params.addParam<MooseFunctorName>(
      24       28772 :       "normal_gradient", 0, "The prescribed value of the gradient dotted with the normal");
      25       14386 :   return params;
      26           0 : }
      27             : 
      28          61 : DiffusionLHDGPrescribedGradientBC::DiffusionLHDGPrescribedGradientBC(
      29          61 :     const InputParameters & parameters)
      30             :   : IntegratedBC(parameters),
      31          61 :     DiffusionLHDGAssemblyHelper(this, this, this, this, _fe_problem, _sys, _tid),
      32          61 :     _normal_gradient(getFunctor<Real>("normal_gradient")),
      33          61 :     _cached_side(libMesh::invalid_uint)
      34             : {
      35          61 : }
      36             : 
      37             : void
      38          61 : DiffusionLHDGPrescribedGradientBC::initialSetup()
      39             : {
      40          61 :   checkCoupling();
      41          61 : }
      42             : 
      43             : void
      44        1800 : DiffusionLHDGPrescribedGradientBC::computeResidual()
      45             : {
      46        1800 :   _vector_re.resize(_qu_dof_indices.size());
      47        1800 :   _scalar_re.resize(_u_dof_indices.size());
      48        1800 :   _lm_re.resize(_lm_u_dof_indices.size());
      49             : 
      50             :   // For notation, please read "A superconvergent LDG-hybridizable Galerkin method for second-order
      51             :   // elliptic problems" by Cockburn
      52             : 
      53             :   // qu, u, lm_u
      54        1800 :   vectorFaceResidual(_lm_u_sol, _JxW, *_qrule, _normals, _vector_re);
      55        1800 :   scalarFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW, *_qrule, _normals, _scalar_re);
      56        1800 :   lmFaceResidual(_qu_sol, _u_sol, _lm_u_sol, _JxW, *_qrule, _normals, _lm_re);
      57             : 
      58        5400 :   for (const auto qp : make_range(_qrule->n_points()))
      59       25200 :     for (const auto i : index_range(_lm_re))
      60             :       // prescribed normal gradient
      61       21600 :       _lm_re(i) += _JxW[qp] * _diff[qp] * _lm_phi_face[i][qp] *
      62       21600 :                    _normal_gradient(
      63       21600 :                        Moose::ElemSideQpArg{_current_elem, _current_side, qp, _qrule, _q_point[qp]},
      64       43200 :                        determineState());
      65             : 
      66        1800 :   addResiduals(_assembly, _vector_re, _qu_dof_indices, _grad_u_var.scalingFactor());
      67        1800 :   addResiduals(_assembly, _scalar_re, _u_dof_indices, _u_var.scalingFactor());
      68        1800 :   addResiduals(_assembly, _lm_re, _lm_u_dof_indices, _u_face_var.scalingFactor());
      69        1800 : }
      70             : 
      71             : void
      72         720 : DiffusionLHDGPrescribedGradientBC::computeJacobian()
      73             : {
      74         720 :   _vector_vector_jac.resize(_qu_dof_indices.size(), _qu_dof_indices.size());
      75         720 :   _vector_scalar_jac.resize(_qu_dof_indices.size(), _u_dof_indices.size());
      76         720 :   _scalar_vector_jac.resize(_u_dof_indices.size(), _qu_dof_indices.size());
      77         720 :   _scalar_scalar_jac.resize(_u_dof_indices.size(), _u_dof_indices.size());
      78         720 :   _scalar_lm_jac.resize(_u_dof_indices.size(), _lm_u_dof_indices.size());
      79         720 :   _lm_scalar_jac.resize(_lm_u_dof_indices.size(), _u_dof_indices.size());
      80         720 :   _lm_lm_jac.resize(_lm_u_dof_indices.size(), _lm_u_dof_indices.size());
      81         720 :   _vector_lm_jac.resize(_qu_dof_indices.size(), _lm_u_dof_indices.size());
      82         720 :   _lm_vector_jac.resize(_lm_u_dof_indices.size(), _qu_dof_indices.size());
      83             : 
      84             :   // qu, u, lm_u
      85         720 :   vectorFaceJacobian(_JxW, *_qrule, _normals, _vector_lm_jac);
      86         720 :   scalarFaceJacobian(
      87         720 :       _JxW, *_qrule, _normals, _scalar_vector_jac, _scalar_scalar_jac, _scalar_lm_jac);
      88         720 :   lmFaceJacobian(_JxW, *_qrule, _normals, _lm_vector_jac, _lm_scalar_jac, _lm_lm_jac);
      89             : 
      90        1440 :   addJacobian(
      91         720 :       _assembly, _vector_vector_jac, _qu_dof_indices, _qu_dof_indices, _grad_u_var.scalingFactor());
      92        1440 :   addJacobian(
      93         720 :       _assembly, _vector_scalar_jac, _qu_dof_indices, _u_dof_indices, _grad_u_var.scalingFactor());
      94        1440 :   addJacobian(
      95         720 :       _assembly, _scalar_vector_jac, _u_dof_indices, _qu_dof_indices, _u_var.scalingFactor());
      96        1440 :   addJacobian(
      97         720 :       _assembly, _scalar_scalar_jac, _u_dof_indices, _u_dof_indices, _u_var.scalingFactor());
      98         720 :   addJacobian(_assembly, _scalar_lm_jac, _u_dof_indices, _lm_u_dof_indices, _u_var.scalingFactor());
      99        1440 :   addJacobian(
     100         720 :       _assembly, _lm_scalar_jac, _lm_u_dof_indices, _u_dof_indices, _u_face_var.scalingFactor());
     101        1440 :   addJacobian(
     102         720 :       _assembly, _lm_lm_jac, _lm_u_dof_indices, _lm_u_dof_indices, _u_face_var.scalingFactor());
     103        1440 :   addJacobian(
     104         720 :       _assembly, _vector_lm_jac, _qu_dof_indices, _lm_u_dof_indices, _grad_u_var.scalingFactor());
     105        1440 :   addJacobian(
     106         720 :       _assembly, _lm_vector_jac, _lm_u_dof_indices, _qu_dof_indices, _u_face_var.scalingFactor());
     107         720 : }
     108             : 
     109             : void
     110         112 : DiffusionLHDGPrescribedGradientBC::jacobianSetup()
     111             : {
     112         112 :   _cached_elem = nullptr;
     113         112 :   _cached_side = libMesh::invalid_uint;
     114         112 : }
     115             : 
     116             : void
     117        2160 : DiffusionLHDGPrescribedGradientBC::computeOffDiagJacobian(const unsigned int)
     118             : {
     119        2160 :   if ((_cached_elem != _current_elem) || (_cached_side != _current_side))
     120             :   {
     121         720 :     computeJacobian();
     122         720 :     _cached_elem = _current_elem;
     123         720 :     _cached_side = _current_side;
     124             :   }
     125        2160 : }

Generated by: LCOV version 1.14