LCOV - code coverage report
Current view: top level - src/kernels - ACKappaFunction.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #31405 (292dce) with base fef103 Lines: 44 45 97.8 %
Date: 2025-09-04 07:55:36 Functions: 11 11 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 "ACKappaFunction.h"
      11             : 
      12             : registerMooseObject("PhaseFieldApp", ACKappaFunction);
      13             : registerMooseObject("PhaseFieldApp", ADACKappaFunction);
      14             : 
      15             : template <bool is_ad>
      16             : InputParameters
      17         133 : ACKappaFunctionTempl<is_ad>::validParams()
      18             : {
      19             :   InputParameters params = GenericKernel<is_ad>::validParams();
      20         133 :   params.addClassDescription("Gradient energy term for when kappa as a function of the variable");
      21         266 :   params.addParam<MaterialPropertyName>("mob_name", "L", "The mobility used with the kernel");
      22         266 :   params.addParam<MaterialPropertyName>("kappa_name", "kappa_op", "The kappa function name");
      23         266 :   params.addCoupledVar("v", "Vector of order parameters");
      24         133 :   return params;
      25           0 : }
      26             : template <bool is_ad>
      27          70 : ACKappaFunctionTempl<is_ad>::ACKappaFunctionTempl(const InputParameters & parameters)
      28             :   : DerivativeMaterialInterface<JvarMapKernelInterface<GenericKernel<is_ad>>>(parameters),
      29          70 :     _L(this->template getGenericMaterialProperty<Real, is_ad>("mob_name")),
      30          70 :     _kappa_name(this->template getParam<MaterialPropertyName>("kappa_name")),
      31         140 :     _dkappadvar(this->template getGenericMaterialProperty<Real, is_ad>(
      32          70 :         this->derivativePropertyNameFirst(_kappa_name, _var.name()))),
      33          70 :     _v_num(this->coupledComponents("v")),
      34         140 :     _grad_v(_v_num)
      35             : {
      36         128 :   for (unsigned int i = 0; i < _v_num; ++i)
      37          58 :     _grad_v[i] = &this->template coupledGenericGradient<is_ad>("v", i);
      38          70 : }
      39             : 
      40          36 : ACKappaFunction::ACKappaFunction(const InputParameters & parameters)
      41             :   : ACKappaFunctionTempl<false>(parameters),
      42          36 :     _dLdvar(getMaterialPropertyDerivative<Real>("mob_name", _var.name())),
      43          36 :     _d2kappadvar2(getMaterialPropertyDerivative<Real>(_kappa_name, _var.name(), _var.name())),
      44          36 :     _v_map(getParameterJvarMap("v")),
      45          36 :     _dLdv(_v_num),
      46          72 :     _d2kappadvardv(_v_num)
      47             : {
      48          60 :   for (unsigned int i = 0; i < _v_num; ++i)
      49             :   {
      50          24 :     auto v_name = coupledName("v", i);
      51          24 :     _dLdv[i] = &getMaterialPropertyDerivative<Real>("mob_name", v_name);
      52          24 :     _d2kappadvardv[i] = &getMaterialPropertyDerivative<Real>(_kappa_name, _var.name(), v_name);
      53             :   }
      54          36 : }
      55             : 
      56             : template <bool is_ad>
      57             : GenericReal<is_ad>
      58   139926400 : ACKappaFunctionTempl<is_ad>::computeQpResidual()
      59             : {
      60   139926400 :   return 0.5 * _test[_i][_qp] * _L[_qp] * _dkappadvar[_qp] * computeFg();
      61             : }
      62             : 
      63             : Real
      64     4326400 : ACKappaFunction::computeQpJacobian()
      65             : {
      66     4326400 :   Real pre_jac = 0.5 * _test[_i][_qp] * _phi[_j][_qp] * computeFg();
      67     4326400 :   Real term1 = _test[_i][_qp] * _L[_qp] * _dkappadvar[_qp] * _grad_u[_qp] * _grad_phi[_j][_qp];
      68             : 
      69     4326400 :   return pre_jac * (_dLdvar[_qp] * _dkappadvar[_qp] + _L[_qp] * _d2kappadvar2[_qp]) + term1;
      70             : }
      71             : 
      72             : Real
      73     4096000 : ACKappaFunction::computeQpOffDiagJacobian(unsigned int jvar)
      74             : {
      75             :   auto i = mapJvarToCvar(jvar, _v_map);
      76     4096000 :   if (i >= 0)
      77             :   {
      78     4096000 :     const Real pre_jac = 0.5 * _test[_i][_qp] * _phi[_j][_qp] * computeFg();
      79             :     const Real term1 =
      80     4096000 :         _test[_i][_qp] * _L[_qp] * _dkappadvar[_qp] * (*_grad_v[i])[_qp] * _grad_phi[_j][_qp];
      81     4096000 :     return pre_jac * ((*_dLdv[i])[_qp] * _dkappadvar[_qp] + _L[_qp] * (*_d2kappadvardv[i])[_qp]) +
      82     4096000 :            term1;
      83             :   }
      84             : 
      85             :   return 0.0;
      86             : }
      87             : 
      88             : template <bool is_ad>
      89             : GenericReal<is_ad>
      90   148348800 : ACKappaFunctionTempl<is_ad>::computeFg()
      91             : {
      92   138316800 :   GenericReal<is_ad> sum_grad_etai2 = 0.0;
      93   296124800 :   for (unsigned int i = 0; i < _v_num; ++i)
      94   147776000 :     sum_grad_etai2 += (*_grad_v[i])[_qp] * (*_grad_v[i])[_qp];
      95             : 
      96   286665600 :   return sum_grad_etai2 + _grad_u[_qp] * _grad_u[_qp];
      97             : }

Generated by: LCOV version 1.14