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

Generated by: LCOV version 1.14