LCOV - code coverage report
Current view: top level - src/kernels - CoupledForce.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 419b9d Lines: 20 21 95.2 %
Date: 2025-08-08 20:01:16 Functions: 7 8 87.5 %
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 "CoupledForce.h"
      11             : #include "MooseVariableFE.h"
      12             : #include "SystemBase.h"
      13             : 
      14             : registerMooseObject("MooseApp", CoupledForce);
      15             : registerMooseObject("MooseApp", ADCoupledForce);
      16             : 
      17             : template <bool is_ad>
      18             : InputParameters
      19       78295 : CoupledForceTempl<is_ad>::validParams()
      20             : {
      21       78295 :   InputParameters params = GenericKernel<is_ad>::validParams();
      22             : 
      23       78295 :   params.addClassDescription("Implements a source term proportional to the value of a coupled "
      24             :                              "variable. Weak form: $(\\psi_i, -\\sigma v)$.");
      25       78295 :   params.addRequiredCoupledVar("v", "The coupled variable which provides the force");
      26      234885 :   params.addParam<Real>(
      27      156590 :       "coef", 1.0, "Coefficent ($\\sigma$) multiplier for the coupled force term.");
      28             : 
      29       78295 :   return params;
      30           0 : }
      31             : 
      32             : template <bool is_ad>
      33        3588 : CoupledForceTempl<is_ad>::CoupledForceTempl(const InputParameters & parameters)
      34             :   : GenericKernel<is_ad>(parameters),
      35        3584 :     _v_var(coupled("v")),
      36        3580 :     _v(this->template coupledGenericValue<is_ad>("v")),
      37        7168 :     _coef(this->template getParam<Real>("coef"))
      38             : {
      39        3580 :   if (_var.number() == _v_var)
      40           8 :     paramError("v",
      41             :                "Coupled variable 'v' needs to be different from 'variable' with CoupledForce / "
      42             :                "ADCoupledForce, consider using the CoefReaction kernel or something similar");
      43        3572 : }
      44             : 
      45             : template <bool is_ad>
      46             : GenericReal<is_ad>
      47   688864496 : CoupledForceTempl<is_ad>::computeQpResidual()
      48             : {
      49   688864496 :   return -_coef * _v[_qp] * _test[_i][_qp];
      50             : }
      51             : 
      52             : template <bool is_ad>
      53             : Real
      54    22406880 : CoupledForceTempl<is_ad>::computeQpOffDiagJacobian(unsigned int jvar)
      55             : {
      56             :   // This function will never be called for the AD version. But because C++ does
      57             :   // not support an optional function declaration based on a template parameter,
      58             :   // we must keep this template for all cases.
      59             :   mooseAssert(!is_ad,
      60             :               "In ADCoupledForce, computeQpJacobian should not be called. Check computeJacobian "
      61             :               "implementation.");
      62    22406880 :   if (jvar == _v_var)
      63    22394080 :     return -_coef * _phi[_j][_qp] * _test[_i][_qp];
      64       12800 :   return 0.0;
      65             : }
      66             : 
      67             : template class CoupledForceTempl<false>;
      68             : template class CoupledForceTempl<true>;

Generated by: LCOV version 1.14