LCOV - code coverage report
Current view: top level - src/kernels - CoupledForce.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 20 21 95.2 %
Date: 2025-07-17 01:28:37 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       77819 : CoupledForceTempl<is_ad>::validParams()
      20             : {
      21       77819 :   InputParameters params = GenericKernel<is_ad>::validParams();
      22             : 
      23       77819 :   params.addClassDescription("Implements a source term proportional to the value of a coupled "
      24             :                              "variable. Weak form: $(\\psi_i, -\\sigma v)$.");
      25       77819 :   params.addRequiredCoupledVar("v", "The coupled variable which provides the force");
      26      233457 :   params.addParam<Real>(
      27      155638 :       "coef", 1.0, "Coefficent ($\\sigma$) multiplier for the coupled force term.");
      28             : 
      29       77819 :   return params;
      30           0 : }
      31             : 
      32             : template <bool is_ad>
      33        3349 : CoupledForceTempl<is_ad>::CoupledForceTempl(const InputParameters & parameters)
      34             :   : GenericKernel<is_ad>(parameters),
      35        3345 :     _v_var(coupled("v")),
      36        3341 :     _v(this->template coupledGenericValue<is_ad>("v")),
      37        6690 :     _coef(this->template getParam<Real>("coef"))
      38             : {
      39        3341 :   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        3333 : }
      44             : 
      45             : template <bool is_ad>
      46             : GenericReal<is_ad>
      47   634230432 : CoupledForceTempl<is_ad>::computeQpResidual()
      48             : {
      49   634230432 :   return -_coef * _v[_qp] * _test[_i][_qp];
      50             : }
      51             : 
      52             : template <bool is_ad>
      53             : Real
      54    19738336 : 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    19738336 :   if (jvar == _v_var)
      63    19726816 :     return -_coef * _phi[_j][_qp] * _test[_i][_qp];
      64       11520 :   return 0.0;
      65             : }
      66             : 
      67             : template class CoupledForceTempl<false>;
      68             : template class CoupledForceTempl<true>;

Generated by: LCOV version 1.14