LCOV - code coverage report
Current view: top level - src/kernels - ACInterface.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #32971 (54bef8) with base c6cf66 Lines: 67 69 97.1 %
Date: 2026-05-29 20:38:39 Functions: 9 9 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 "ACInterface.h"
      11             : 
      12             : registerMooseObject("PhaseFieldApp", ACInterface);
      13             : 
      14             : InputParameters
      15        8885 : ACInterface::validParams()
      16             : {
      17        8885 :   InputParameters params = JvarMapKernelInterface<Kernel>::validParams();
      18        8885 :   params.addClassDescription("Gradient energy Allen-Cahn Kernel");
      19       17770 :   params.addParam<MaterialPropertyName>("mob_name", "L", "The mobility used with the kernel");
      20       17770 :   params.addParam<MaterialPropertyName>("kappa_name", "kappa_op", "The kappa used with the kernel");
      21       17770 :   params.addParam<bool>("variable_L",
      22       17770 :                         true,
      23             :                         "The mobility is a function of any MOOSE variable (if "
      24             :                         "this is set to false L must be constant over the "
      25             :                         "entire domain!)");
      26        8885 :   return params;
      27           0 : }
      28             : 
      29        4785 : ACInterface::ACInterface(const InputParameters & parameters)
      30             :   : DerivativeMaterialInterface<JvarMapKernelInterface<Kernel>>(parameters),
      31        4785 :     _L(getMaterialProperty<Real>("mob_name")),
      32        9570 :     _kappa(getMaterialProperty<Real>("kappa_name")),
      33        9570 :     _variable_L(getParam<bool>("variable_L")),
      34        4785 :     _dLdop(getMaterialPropertyDerivative<Real>("mob_name", _var.name())),
      35        4785 :     _d2Ldop2(getMaterialPropertyDerivative<Real>("mob_name", _var.name(), _var.name())),
      36        4785 :     _dkappadop(getMaterialPropertyDerivative<Real>("kappa_name", _var.name())),
      37        4785 :     _dLdarg(_n_args),
      38        4785 :     _d2Ldargdop(_n_args),
      39        4785 :     _d2Ldarg2(_n_args),
      40        4785 :     _dkappadarg(_n_args),
      41        9570 :     _gradarg(_n_args)
      42             : {
      43             :   // Get mobility and kappa derivatives and coupled variable gradients
      44        5086 :   for (unsigned int i = 0; i < _n_args; ++i)
      45             :   {
      46         301 :     MooseVariable * ivar = _coupled_standard_moose_vars[i];
      47             :     const VariableName iname = ivar->name();
      48         301 :     if (iname == _var.name())
      49           0 :       paramError("coupled_variables",
      50             :                  "The kernel variable should not be specified in the coupled `coupled_variables` "
      51             :                  "parameter.");
      52             : 
      53         301 :     _dLdarg[i] = &getMaterialPropertyDerivative<Real>("mob_name", i);
      54         301 :     _dkappadarg[i] = &getMaterialPropertyDerivative<Real>("kappa_name", i);
      55         301 :     _d2Ldargdop[i] = &getMaterialPropertyDerivative<Real>("mob_name", iname, _var.name());
      56             : 
      57         301 :     _gradarg[i] = &(ivar->gradSln());
      58             : 
      59         301 :     _d2Ldarg2[i].resize(_n_args);
      60         698 :     for (unsigned int j = 0; j < _n_args; ++j)
      61         397 :       _d2Ldarg2[i][j] = &getMaterialPropertyDerivative<Real>("mob_name", i, j);
      62             :   }
      63        4785 : }
      64             : 
      65             : void
      66        3940 : ACInterface::initialSetup()
      67             : {
      68       11820 :   validateCoupling<Real>("mob_name");
      69        7880 :   validateCoupling<Real>("kappa_name");
      70        3940 : }
      71             : 
      72             : RealGradient
      73  5128332352 : ACInterface::gradL()
      74             : {
      75  5128332352 :   RealGradient g = _grad_u[_qp] * _dLdop[_qp];
      76  5787394704 :   for (unsigned int i = 0; i < _n_args; ++i)
      77   659062352 :     g += (*_gradarg[i])[_qp] * (*_dLdarg[i])[_qp];
      78  5128332352 :   return g;
      79             : }
      80             : 
      81             : RealGradient
      82  3818218960 : ACInterface::nablaLPsi()
      83             : {
      84             :   // sum is the product rule gradient \f$ \nabla (L\psi) \f$
      85  3818218960 :   RealGradient sum = _L[_qp] * _grad_test[_i][_qp];
      86             : 
      87  3818218960 :   if (_variable_L)
      88  3640846976 :     sum += gradL() * _test[_i][_qp];
      89             : 
      90  3818218960 :   return sum;
      91             : }
      92             : 
      93             : RealGradient
      94  3801435760 : ACInterface::kappaNablaLPsi()
      95             : {
      96  3801435760 :   return _kappa[_qp] * nablaLPsi();
      97             : }
      98             : 
      99             : Real
     100  2304228544 : ACInterface::computeQpResidual()
     101             : {
     102  2304228544 :   return _grad_u[_qp] * kappaNablaLPsi();
     103             : }
     104             : 
     105             : Real
     106  1497207216 : ACInterface::computeQpJacobian()
     107             : {
     108             :   // dsum is the derivative \f$ \frac\partial{\partial \eta} \left( \nabla (L\psi) \right) \f$
     109             :   RealGradient dsum =
     110  1497207216 :       (_dkappadop[_qp] * _L[_qp] + _kappa[_qp] * _dLdop[_qp]) * _phi[_j][_qp] * _grad_test[_i][_qp];
     111             : 
     112             :   // compute the derivative of the gradient of the mobility
     113  1497207216 :   if (_variable_L)
     114             :   {
     115             :     RealGradient dgradL =
     116  1351706688 :         _grad_phi[_j][_qp] * _dLdop[_qp] + _grad_u[_qp] * _phi[_j][_qp] * _d2Ldop2[_qp];
     117             : 
     118  1505712576 :     for (unsigned int i = 0; i < _n_args; ++i)
     119   154005888 :       dgradL += (*_gradarg[i])[_qp] * _phi[_j][_qp] * (*_d2Ldargdop[i])[_qp];
     120             : 
     121  1351706688 :     dsum += (_kappa[_qp] * dgradL + _dkappadop[_qp] * _phi[_j][_qp] * gradL()) * _test[_i][_qp];
     122             :   }
     123             : 
     124  1497207216 :   return _grad_phi[_j][_qp] * kappaNablaLPsi() + _grad_u[_qp] * dsum;
     125             : }
     126             : 
     127             : Real
     128   170389888 : ACInterface::computeQpOffDiagJacobian(unsigned int jvar)
     129             : {
     130             :   // get the coupled variable jvar is referring to
     131             :   const unsigned int cvar = mapJvarToCvar(jvar);
     132             : 
     133             :   // dsum is the derivative \f$ \frac\partial{\partial \eta} \left( \nabla (L\psi) \right) \f$
     134   170389888 :   RealGradient dsum = ((*_dkappadarg[cvar])[_qp] * _L[_qp] + _kappa[_qp] * (*_dLdarg[cvar])[_qp]) *
     135   170389888 :                       _phi[_j][_qp] * _grad_test[_i][_qp];
     136             : 
     137             :   // compute the derivative of the gradient of the mobility
     138   170389888 :   if (_variable_L)
     139             :   {
     140   135778688 :     RealGradient dgradL = _grad_phi[_j][_qp] * (*_dLdarg[cvar])[_qp] +
     141   135778688 :                           _grad_u[_qp] * _phi[_j][_qp] * (*_d2Ldargdop[cvar])[_qp];
     142             : 
     143   335918848 :     for (unsigned int i = 0; i < _n_args; ++i)
     144   200140160 :       dgradL += (*_gradarg[i])[_qp] * _phi[_j][_qp] * (*_d2Ldarg2[cvar][i])[_qp];
     145             : 
     146   135778688 :     dsum += (_kappa[_qp] * dgradL + _dkappadop[_qp] * _phi[_j][_qp] * gradL()) * _test[_i][_qp];
     147             :   }
     148             : 
     149   170389888 :   return _grad_u[_qp] * dsum;
     150             : }

Generated by: LCOV version 1.14