LCOV - code coverage report
Current view: top level - src/interfacekernels - InterfaceKernelBase.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 8601ad Lines: 41 43 95.3 %
Date: 2025-07-18 13:27:08 Functions: 3 4 75.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 "InterfaceKernelBase.h"
      11             : 
      12             : // MOOSE includes
      13             : #include "Assembly.h"
      14             : #include "MooseVariableFE.h"
      15             : #include "SystemBase.h"
      16             : 
      17             : #include "libmesh/quadrature.h"
      18             : 
      19             : InputParameters
      20      201487 : InterfaceKernelBase::validParams()
      21             : {
      22      201487 :   InputParameters params = NeighborResidualObject::validParams();
      23      201487 :   params += BoundaryRestrictable::validParams();
      24      201487 :   params += TwoMaterialPropertyInterface::validParams();
      25             : 
      26      604461 :   params.addParam<bool>("use_displaced_mesh",
      27      402974 :                         false,
      28             :                         "Whether or not this object should use the "
      29             :                         "displaced mesh for computation. Note that in "
      30             :                         "the case this is true but no displacements "
      31             :                         "are provided in the Mesh block the "
      32             :                         "undisplaced mesh will still be used.");
      33      201487 :   params.addParamNamesToGroup("use_displaced_mesh", "Advanced");
      34             : 
      35      201487 :   params.declareControllable("enable");
      36      201487 :   params.addRequiredCoupledVar("neighbor_var", "The variable on the other side of the interface.");
      37      201487 :   params.set<std::string>("_moose_base") = "InterfaceKernel";
      38      201487 :   params.registerSystemAttributeName("InterfaceKernel");
      39      201487 :   params.addParam<std::vector<AuxVariableName>>(
      40             :       "save_in",
      41             :       {},
      42             :       "The name of auxiliary variables to save this Kernel's residual contributions to. "
      43             :       " Everything about that variable must match everything about this variable (the "
      44             :       "type, what blocks it's on, etc.)");
      45      201487 :   params.addParam<std::vector<AuxVariableName>>(
      46             :       "diag_save_in",
      47             :       {},
      48             :       "The name of auxiliary variables to save this Kernel's diagonal Jacobian "
      49             :       "contributions to. Everything about that variable must match everything "
      50             :       "about this variable (the type, what blocks it's on, etc.)");
      51             : 
      52      201487 :   MultiMooseEnum save_in_var_side("m s");
      53      201487 :   params.addParam<MultiMooseEnum>(
      54             :       "save_in_var_side",
      55             :       save_in_var_side,
      56             :       "This parameter must exist if save_in variables are specified and must have the same length "
      57             :       "as save_in. This vector specifies whether the corresponding aux_var should save-in "
      58             :       "residual contributions from the primary ('p') or secondary side ('s').");
      59      201487 :   params.addParam<MultiMooseEnum>(
      60             :       "diag_save_in_var_side",
      61             :       save_in_var_side,
      62             :       "This parameter must exist if diag_save_in variables are specified and must have the same "
      63             :       "length as diag_save_in. This vector specifies whether the corresponding aux_var should "
      64             :       "save-in jacobian contributions from the primary ('p') or secondary side ('s').");
      65      201487 :   params.addParamNamesToGroup("diag_save_in save_in save_in_var_side diag_save_in_var_side",
      66             :                               "Residual and Jacobian debug output");
      67             : 
      68             :   // InterfaceKernels always need one layer of ghosting.
      69      201487 :   params.addRelationshipManager("ElementSideNeighborLayers",
      70             :                                 Moose::RelationshipManagerType::GEOMETRIC |
      71             :                                     Moose::RelationshipManagerType::ALGEBRAIC |
      72             :                                     Moose::RelationshipManagerType::COUPLING);
      73      402974 :   return params;
      74      201487 : }
      75             : 
      76             : // Static mutex definitions
      77             : Threads::spin_mutex InterfaceKernelBase::_resid_vars_mutex;
      78             : Threads::spin_mutex InterfaceKernelBase::_jacoby_vars_mutex;
      79             : 
      80         931 : InterfaceKernelBase::InterfaceKernelBase(const InputParameters & parameters)
      81             :   : NeighborResidualObject(parameters),
      82             :     BoundaryRestrictable(this, false), // false for _not_ nodal
      83             :     NeighborCoupleableMooseVariableDependencyIntermediateInterface(this, false, false),
      84             :     TwoMaterialPropertyInterface(this, Moose::EMPTY_BLOCK_IDS, boundaryIDs()),
      85             :     ElementIDInterface(this),
      86        1862 :     _current_elem(_assembly.elem()),
      87         931 :     _current_elem_volume(_assembly.elemVolume()),
      88         931 :     _neighbor_elem(_assembly.neighbor()),
      89         931 :     _neighbor_elem_volume(_assembly.neighborVolume()),
      90         931 :     _current_side(_assembly.side()),
      91         931 :     _current_side_elem(_assembly.sideElem()),
      92         931 :     _current_side_volume(_assembly.sideElemVolume()),
      93         931 :     _coord_sys(_assembly.coordSystem()),
      94         931 :     _q_point(_assembly.qPointsFace()),
      95         931 :     _qrule(_assembly.qRuleFace()),
      96         931 :     _JxW(_assembly.JxWFace()),
      97         931 :     _coord(_assembly.coordTransformation()),
      98         931 :     _save_in_var_side(parameters.get<MultiMooseEnum>("save_in_var_side")),
      99         931 :     _save_in_strings(parameters.get<std::vector<AuxVariableName>>("save_in")),
     100         931 :     _diag_save_in_var_side(parameters.get<MultiMooseEnum>("diag_save_in_var_side")),
     101        2793 :     _diag_save_in_strings(parameters.get<std::vector<AuxVariableName>>("diag_save_in"))
     102             : {
     103         931 : }
     104             : 
     105             : const Real &
     106           0 : InterfaceKernelBase::getNeighborElemVolume()
     107             : {
     108           0 :   return _assembly.neighborVolume();
     109             : }
     110             : 
     111             : void
     112       30740 : InterfaceKernelBase::prepareShapes(const unsigned int var_num)
     113             : {
     114       30740 :   _subproblem.prepareFaceShapes(var_num, _tid);
     115       30740 : }

Generated by: LCOV version 1.14