LCOV - code coverage report
Current view: top level - src/constraints - XFEMEqualValueAtInterface.C (source / functions) Hit Total Coverage
Test: idaholab/moose xfem: #31405 (292dce) with base fef103 Lines: 37 40 92.5 %
Date: 2025-09-04 07:58:55 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 "XFEMEqualValueAtInterface.h"
      11             : #include "FEProblem.h"
      12             : #include "GeometricCutUserObject.h"
      13             : #include "XFEM.h"
      14             : 
      15             : registerMooseObject("XFEMApp", XFEMEqualValueAtInterface);
      16             : 
      17             : InputParameters
      18          32 : XFEMEqualValueAtInterface::validParams()
      19             : {
      20          32 :   InputParameters params = ElemElemConstraint::validParams();
      21          64 :   params.addRequiredParam<Real>("alpha", "Penalty parameter in penalty formulation.");
      22          64 :   params.addRequiredParam<Real>("value", "Prescribed value at the interface.");
      23          64 :   params.addParam<UserObjectName>(
      24             :       "geometric_cut_userobject",
      25             :       "Name of GeometricCutUserObject associated with this constraint.");
      26          32 :   params.addClassDescription("Enforce that the solution have the same value on opposing sides of "
      27             :                              "an XFEM interface.");
      28          32 :   return params;
      29           0 : }
      30             : 
      31          16 : XFEMEqualValueAtInterface::XFEMEqualValueAtInterface(const InputParameters & parameters)
      32          48 :   : ElemElemConstraint(parameters), _alpha(getParam<Real>("alpha")), _value(getParam<Real>("value"))
      33             : {
      34          48 :   _xfem = std::dynamic_pointer_cast<XFEM>(_fe_problem.getXFEM());
      35          16 :   if (_xfem == nullptr)
      36           0 :     mooseError("Problem casting to XFEM in XFEMEqualValueAtInterface");
      37             : 
      38             :   const UserObject * uo =
      39          32 :       &(_fe_problem.getUserObjectBase(getParam<UserObjectName>("geometric_cut_userobject")));
      40             : 
      41          16 :   if (dynamic_cast<const GeometricCutUserObject *>(uo) == nullptr)
      42           0 :     mooseError("UserObject casting to GeometricCutUserObject in XFEMEqualValueAtInterface");
      43             : 
      44          16 :   _interface_id = _xfem->getGeometricCutID(dynamic_cast<const GeometricCutUserObject *>(uo));
      45          16 : }
      46             : 
      47          48 : XFEMEqualValueAtInterface::~XFEMEqualValueAtInterface() {}
      48             : 
      49             : void
      50         609 : XFEMEqualValueAtInterface::reinitConstraintQuadrature(const ElementPairInfo & element_pair_info)
      51             : {
      52         609 :   ElemElemConstraint::reinitConstraintQuadrature(element_pair_info);
      53         609 : }
      54             : 
      55             : Real
      56       14096 : XFEMEqualValueAtInterface::computeQpResidual(Moose::DGResidualType type)
      57             : {
      58             :   Real r = 0;
      59             : 
      60       14096 :   switch (type)
      61             :   {
      62        7048 :     case Moose::Element:
      63        7048 :       r += _alpha * (_u[_qp] - _value) * _test[_i][_qp];
      64        7048 :       break;
      65             : 
      66        7048 :     case Moose::Neighbor:
      67        7048 :       r += _alpha * (_u_neighbor[_qp] - _value) * _test_neighbor[_i][_qp];
      68        7048 :       break;
      69             :   }
      70       14096 :   return r;
      71             : }
      72             : 
      73             : Real
      74       65792 : XFEMEqualValueAtInterface::computeQpJacobian(Moose::DGJacobianType type)
      75             : {
      76             :   Real r = 0;
      77             : 
      78       65792 :   switch (type)
      79             :   {
      80       16448 :     case Moose::ElementElement:
      81       16448 :       r += _alpha * _phi[_j][_qp] * _test[_i][_qp];
      82       16448 :       break;
      83             : 
      84       16448 :     case Moose::NeighborNeighbor:
      85       16448 :       r += _alpha * _phi_neighbor[_j][_qp] * _test_neighbor[_i][_qp];
      86       16448 :       break;
      87             : 
      88             :     default:
      89             :       break;
      90             :   }
      91             : 
      92       65792 :   return r;
      93             : }

Generated by: LCOV version 1.14