LCOV - code coverage report
Current view: top level - src/dgkernels - DGDiffusion.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 68 69 98.6 %
Date: 2025-07-17 01:28:37 Functions: 4 4 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 "DGDiffusion.h"
      11             : #include "MooseVariableFE.h"
      12             : 
      13             : #include "libmesh/utility.h"
      14             : 
      15             : registerMooseObject("MooseApp", DGDiffusion);
      16             : 
      17             : InputParameters
      18       15783 : DGDiffusion::validParams()
      19             : {
      20       15783 :   InputParameters params = DGKernel::validParams();
      21       15783 :   params.addClassDescription("Computes residual contribution for the diffusion operator using "
      22             :                              "discontinous Galerkin method.");
      23             :   // See header file for sigma and epsilon
      24       15783 :   params.addRequiredParam<Real>("sigma", "sigma");
      25       15783 :   params.addRequiredParam<Real>("epsilon", "epsilon");
      26       47349 :   params.addParam<MaterialPropertyName>(
      27       31566 :       "diff", 1., "The diffusion (or thermal conductivity or viscosity) coefficient.");
      28       15783 :   return params;
      29           0 : }
      30             : 
      31         787 : DGDiffusion::DGDiffusion(const InputParameters & parameters)
      32             :   : DGKernel(parameters),
      33         787 :     _epsilon(getParam<Real>("epsilon")),
      34         787 :     _sigma(getParam<Real>("sigma")),
      35         787 :     _diff(getMaterialProperty<Real>("diff")),
      36        1574 :     _diff_neighbor(getNeighborMaterialProperty<Real>("diff"))
      37             : {
      38         787 : }
      39             : 
      40             : Real
      41   152575856 : DGDiffusion::computeQpResidual(Moose::DGResidualType type)
      42             : {
      43   152575856 :   Real r = 0.0;
      44             : 
      45   152575856 :   const int elem_b_order = std::max(libMesh::Order(1), _var.order());
      46             :   const Real h_elem =
      47   152575856 :       _current_elem_volume / _current_side_volume * 1.0 / Utility::pow<2>(elem_b_order);
      48             : 
      49   152575856 :   switch (type)
      50             :   {
      51    76329760 :     case Moose::Element:
      52   152659520 :       r -= 0.5 *
      53    76329760 :            (_diff[_qp] * _grad_u[_qp] * _normals[_qp] +
      54    76329760 :             _diff_neighbor[_qp] * _grad_u_neighbor[_qp] * _normals[_qp]) *
      55    76329760 :            _test[_i][_qp];
      56    76329760 :       r += _epsilon * 0.5 * (_u[_qp] - _u_neighbor[_qp]) * _diff[_qp] * _grad_test[_i][_qp] *
      57    76329760 :            _normals[_qp];
      58    76329760 :       r += _sigma / h_elem * (_u[_qp] - _u_neighbor[_qp]) * _test[_i][_qp];
      59    76329760 :       break;
      60             : 
      61    76246096 :     case Moose::Neighbor:
      62   152492192 :       r += 0.5 *
      63    76246096 :            (_diff[_qp] * _grad_u[_qp] * _normals[_qp] +
      64    76246096 :             _diff_neighbor[_qp] * _grad_u_neighbor[_qp] * _normals[_qp]) *
      65    76246096 :            _test_neighbor[_i][_qp];
      66    76246096 :       r += _epsilon * 0.5 * (_u[_qp] - _u_neighbor[_qp]) * _diff_neighbor[_qp] *
      67   152492192 :            _grad_test_neighbor[_i][_qp] * _normals[_qp];
      68    76246096 :       r -= _sigma / h_elem * (_u[_qp] - _u_neighbor[_qp]) * _test_neighbor[_i][_qp];
      69    76246096 :       break;
      70             :   }
      71             : 
      72   152575856 :   return r;
      73             : }
      74             : 
      75             : Real
      76   223135712 : DGDiffusion::computeQpJacobian(Moose::DGJacobianType type)
      77             : {
      78   223135712 :   Real r = 0.0;
      79             : 
      80   223135712 :   const int elem_b_order = std::max(libMesh::Order(1), _var.order());
      81             :   const Real h_elem =
      82   223135712 :       _current_elem_volume / _current_side_volume * 1.0 / Utility::pow<2>(elem_b_order);
      83             : 
      84   223135712 :   switch (type)
      85             :   {
      86    55820216 :     case Moose::ElementElement:
      87    55820216 :       r -= 0.5 * _diff[_qp] * _grad_phi[_j][_qp] * _normals[_qp] * _test[_i][_qp];
      88    55820216 :       r += _epsilon * 0.5 * _phi[_j][_qp] * _diff[_qp] * _grad_test[_i][_qp] * _normals[_qp];
      89    55820216 :       r += _sigma / h_elem * _phi[_j][_qp] * _test[_i][_qp];
      90    55820216 :       break;
      91             : 
      92    55778744 :     case Moose::ElementNeighbor:
      93    55778744 :       r -= 0.5 * _diff_neighbor[_qp] * _grad_phi_neighbor[_j][_qp] * _normals[_qp] * _test[_i][_qp];
      94    55778744 :       r += _epsilon * 0.5 * -_phi_neighbor[_j][_qp] * _diff[_qp] * _grad_test[_i][_qp] *
      95    55778744 :            _normals[_qp];
      96    55778744 :       r += _sigma / h_elem * -_phi_neighbor[_j][_qp] * _test[_i][_qp];
      97    55778744 :       break;
      98             : 
      99    55778744 :     case Moose::NeighborElement:
     100    55778744 :       r += 0.5 * _diff[_qp] * _grad_phi[_j][_qp] * _normals[_qp] * _test_neighbor[_i][_qp];
     101    55778744 :       r += _epsilon * 0.5 * _phi[_j][_qp] * _diff_neighbor[_qp] * _grad_test_neighbor[_i][_qp] *
     102    55778744 :            _normals[_qp];
     103    55778744 :       r -= _sigma / h_elem * _phi[_j][_qp] * _test_neighbor[_i][_qp];
     104    55778744 :       break;
     105             : 
     106    55758008 :     case Moose::NeighborNeighbor:
     107    55758008 :       r += 0.5 * _diff_neighbor[_qp] * _grad_phi_neighbor[_j][_qp] * _normals[_qp] *
     108    55758008 :            _test_neighbor[_i][_qp];
     109    55758008 :       r += _epsilon * 0.5 * -_phi_neighbor[_j][_qp] * _diff_neighbor[_qp] *
     110   111516016 :            _grad_test_neighbor[_i][_qp] * _normals[_qp];
     111    55758008 :       r -= _sigma / h_elem * -_phi_neighbor[_j][_qp] * _test_neighbor[_i][_qp];
     112    55758008 :       break;
     113             :   }
     114             : 
     115   223135712 :   return r;
     116             : }

Generated by: LCOV version 1.14