LCOV - code coverage report
Current view: top level - src/kernels - ACInterface.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #31613 (c7d555) with base 7323e9 Lines: 67 69 97.1 %
Date: 2025-11-06 14:16:56 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       12593 : ACInterface::validParams()
      16             : {
      17       12593 :   InputParameters params = JvarMapKernelInterface<Kernel>::validParams();
      18       12593 :   params.addClassDescription("Gradient energy Allen-Cahn Kernel");
      19       25186 :   params.addParam<MaterialPropertyName>("mob_name", "L", "The mobility used with the kernel");
      20       25186 :   params.addParam<MaterialPropertyName>("kappa_name", "kappa_op", "The kappa used with the kernel");
      21       25186 :   params.addParam<bool>("variable_L",
      22       25186 :                         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       12593 :   return params;
      27           0 : }
      28             : 
      29        6637 : ACInterface::ACInterface(const InputParameters & parameters)
      30             :   : DerivativeMaterialInterface<JvarMapKernelInterface<Kernel>>(parameters),
      31        6637 :     _L(getMaterialProperty<Real>("mob_name")),
      32       13274 :     _kappa(getMaterialProperty<Real>("kappa_name")),
      33       13274 :     _variable_L(getParam<bool>("variable_L")),
      34        6637 :     _dLdop(getMaterialPropertyDerivative<Real>("mob_name", _var.name())),
      35        6637 :     _d2Ldop2(getMaterialPropertyDerivative<Real>("mob_name", _var.name(), _var.name())),
      36        6637 :     _dkappadop(getMaterialPropertyDerivative<Real>("kappa_name", _var.name())),
      37        6637 :     _dLdarg(_n_args),
      38        6637 :     _d2Ldargdop(_n_args),
      39        6637 :     _d2Ldarg2(_n_args),
      40        6637 :     _dkappadarg(_n_args),
      41       13274 :     _gradarg(_n_args)
      42             : {
      43             :   // Get mobility and kappa derivatives and coupled variable gradients
      44        7084 :   for (unsigned int i = 0; i < _n_args; ++i)
      45             :   {
      46         447 :     MooseVariable * ivar = _coupled_standard_moose_vars[i];
      47             :     const VariableName iname = ivar->name();
      48         447 :     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         447 :     _dLdarg[i] = &getMaterialPropertyDerivative<Real>("mob_name", i);
      54         447 :     _dkappadarg[i] = &getMaterialPropertyDerivative<Real>("kappa_name", i);
      55         447 :     _d2Ldargdop[i] = &getMaterialPropertyDerivative<Real>("mob_name", iname, _var.name());
      56             : 
      57         447 :     _gradarg[i] = &(ivar->gradSln());
      58             : 
      59         447 :     _d2Ldarg2[i].resize(_n_args);
      60        1038 :     for (unsigned int j = 0; j < _n_args; ++j)
      61         591 :       _d2Ldarg2[i][j] = &getMaterialPropertyDerivative<Real>("mob_name", i, j);
      62             :   }
      63        6637 : }
      64             : 
      65             : void
      66        5530 : ACInterface::initialSetup()
      67             : {
      68       16590 :   validateCoupling<Real>("mob_name");
      69       11060 :   validateCoupling<Real>("kappa_name");
      70        5530 : }
      71             : 
      72             : RealGradient
      73  6109627312 : ACInterface::gradL()
      74             : {
      75  6109627312 :   RealGradient g = _grad_u[_qp] * _dLdop[_qp];
      76  6892260688 :   for (unsigned int i = 0; i < _n_args; ++i)
      77   782633376 :     g += (*_gradarg[i])[_qp] * (*_dLdarg[i])[_qp];
      78  6109627312 :   return g;
      79             : }
      80             : 
      81             : RealGradient
      82  4555653952 : ACInterface::nablaLPsi()
      83             : {
      84             :   // sum is the product rule gradient \f$ \nabla (L\psi) \f$
      85  4555653952 :   RealGradient sum = _L[_qp] * _grad_test[_i][_qp];
      86             : 
      87  4555653952 :   if (_variable_L)
      88  4343584400 :     sum += gradL() * _test[_i][_qp];
      89             : 
      90  4555653952 :   return sum;
      91             : }
      92             : 
      93             : RealGradient
      94  4535565952 : ACInterface::kappaNablaLPsi()
      95             : {
      96  4535565952 :   return _kappa[_qp] * nablaLPsi();
      97             : }
      98             : 
      99             : Real
     100  2754108432 : ACInterface::computeQpResidual()
     101             : {
     102  2754108432 :   return _grad_u[_qp] * kappaNablaLPsi();
     103             : }
     104             : 
     105             : Real
     106  1781457520 : ACInterface::computeQpJacobian()
     107             : {
     108             :   // dsum is the derivative \f$ \frac\partial{\partial \eta} \left( \nabla (L\psi) \right) \f$
     109             :   RealGradient dsum =
     110  1781457520 :       (_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  1781457520 :   if (_variable_L)
     114             :   {
     115             :     RealGradient dgradL =
     116  1607488736 :         _grad_phi[_j][_qp] * _dLdop[_qp] + _grad_u[_qp] * _phi[_j][_qp] * _d2Ldop2[_qp];
     117             : 
     118  1787879712 :     for (unsigned int i = 0; i < _n_args; ++i)
     119   180390976 :       dgradL += (*_gradarg[i])[_qp] * _phi[_j][_qp] * (*_d2Ldargdop[i])[_qp];
     120             : 
     121  1607488736 :     dsum += (_kappa[_qp] * dgradL + _dkappadop[_qp] * _phi[_j][_qp] * gradL()) * _test[_i][_qp];
     122             :   }
     123             : 
     124  1781457520 :   return _grad_phi[_j][_qp] * kappaNablaLPsi() + _grad_u[_qp] * dsum;
     125             : }
     126             : 
     127             : Real
     128   199923776 : 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   199923776 :   RealGradient dsum = ((*_dkappadarg[cvar])[_qp] * _L[_qp] + _kappa[_qp] * (*_dLdarg[cvar])[_qp]) *
     135   199923776 :                       _phi[_j][_qp] * _grad_test[_i][_qp];
     136             : 
     137             :   // compute the derivative of the gradient of the mobility
     138   199923776 :   if (_variable_L)
     139             :   {
     140   158554176 :     RealGradient dgradL = _grad_phi[_j][_qp] * (*_dLdarg[cvar])[_qp] +
     141   158554176 :                           _grad_u[_qp] * _phi[_j][_qp] * (*_d2Ldargdop[cvar])[_qp];
     142             : 
     143   394091136 :     for (unsigned int i = 0; i < _n_args; ++i)
     144   235536960 :       dgradL += (*_gradarg[i])[_qp] * _phi[_j][_qp] * (*_d2Ldarg2[cvar][i])[_qp];
     145             : 
     146   158554176 :     dsum += (_kappa[_qp] * dgradL + _dkappadop[_qp] * _phi[_j][_qp] * gradL()) * _test[_i][_qp];
     147             :   }
     148             : 
     149   199923776 :   return _grad_u[_qp] * dsum;
     150             : }

Generated by: LCOV version 1.14