LCOV - code coverage report
Current view: top level - src/kernels - ACInterface.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #31405 (292dce) with base fef103 Lines: 67 71 94.4 %
Date: 2025-09-04 07:55:36 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             :     {
      50           0 :       if (isCoupled("args"))
      51           0 :         paramError("args",
      52             :                    "The kernel variable should not be specified in the coupled `args` parameter.");
      53             :       else
      54           0 :         paramError("coupled_variables",
      55             :                    "The kernel variable should not be specified in the coupled `coupled_variables` "
      56             :                    "parameter.");
      57             :     }
      58             : 
      59         447 :     _dLdarg[i] = &getMaterialPropertyDerivative<Real>("mob_name", i);
      60         447 :     _dkappadarg[i] = &getMaterialPropertyDerivative<Real>("kappa_name", i);
      61         447 :     _d2Ldargdop[i] = &getMaterialPropertyDerivative<Real>("mob_name", iname, _var.name());
      62             : 
      63         447 :     _gradarg[i] = &(ivar->gradSln());
      64             : 
      65         447 :     _d2Ldarg2[i].resize(_n_args);
      66        1038 :     for (unsigned int j = 0; j < _n_args; ++j)
      67         591 :       _d2Ldarg2[i][j] = &getMaterialPropertyDerivative<Real>("mob_name", i, j);
      68             :   }
      69        6637 : }
      70             : 
      71             : void
      72        5530 : ACInterface::initialSetup()
      73             : {
      74       16590 :   validateCoupling<Real>("mob_name");
      75       11060 :   validateCoupling<Real>("kappa_name");
      76        5530 : }
      77             : 
      78             : RealGradient
      79  6109899632 : ACInterface::gradL()
      80             : {
      81  6109899632 :   RealGradient g = _grad_u[_qp] * _dLdop[_qp];
      82  6892533008 :   for (unsigned int i = 0; i < _n_args; ++i)
      83   782633376 :     g += (*_gradarg[i])[_qp] * (*_dLdarg[i])[_qp];
      84  6109899632 :   return g;
      85             : }
      86             : 
      87             : RealGradient
      88  4555926272 : ACInterface::nablaLPsi()
      89             : {
      90             :   // sum is the product rule gradient \f$ \nabla (L\psi) \f$
      91  4555926272 :   RealGradient sum = _L[_qp] * _grad_test[_i][_qp];
      92             : 
      93  4555926272 :   if (_variable_L)
      94  4343856720 :     sum += gradL() * _test[_i][_qp];
      95             : 
      96  4555926272 :   return sum;
      97             : }
      98             : 
      99             : RealGradient
     100  4535838272 : ACInterface::kappaNablaLPsi()
     101             : {
     102  4535838272 :   return _kappa[_qp] * nablaLPsi();
     103             : }
     104             : 
     105             : Real
     106  2754380752 : ACInterface::computeQpResidual()
     107             : {
     108  2754380752 :   return _grad_u[_qp] * kappaNablaLPsi();
     109             : }
     110             : 
     111             : Real
     112  1781457520 : ACInterface::computeQpJacobian()
     113             : {
     114             :   // dsum is the derivative \f$ \frac\partial{\partial \eta} \left( \nabla (L\psi) \right) \f$
     115             :   RealGradient dsum =
     116  1781457520 :       (_dkappadop[_qp] * _L[_qp] + _kappa[_qp] * _dLdop[_qp]) * _phi[_j][_qp] * _grad_test[_i][_qp];
     117             : 
     118             :   // compute the derivative of the gradient of the mobility
     119  1781457520 :   if (_variable_L)
     120             :   {
     121             :     RealGradient dgradL =
     122  1607488736 :         _grad_phi[_j][_qp] * _dLdop[_qp] + _grad_u[_qp] * _phi[_j][_qp] * _d2Ldop2[_qp];
     123             : 
     124  1787879712 :     for (unsigned int i = 0; i < _n_args; ++i)
     125   180390976 :       dgradL += (*_gradarg[i])[_qp] * _phi[_j][_qp] * (*_d2Ldargdop[i])[_qp];
     126             : 
     127  1607488736 :     dsum += (_kappa[_qp] * dgradL + _dkappadop[_qp] * _phi[_j][_qp] * gradL()) * _test[_i][_qp];
     128             :   }
     129             : 
     130  1781457520 :   return _grad_phi[_j][_qp] * kappaNablaLPsi() + _grad_u[_qp] * dsum;
     131             : }
     132             : 
     133             : Real
     134   199923776 : ACInterface::computeQpOffDiagJacobian(unsigned int jvar)
     135             : {
     136             :   // get the coupled variable jvar is referring to
     137             :   const unsigned int cvar = mapJvarToCvar(jvar);
     138             : 
     139             :   // dsum is the derivative \f$ \frac\partial{\partial \eta} \left( \nabla (L\psi) \right) \f$
     140   199923776 :   RealGradient dsum = ((*_dkappadarg[cvar])[_qp] * _L[_qp] + _kappa[_qp] * (*_dLdarg[cvar])[_qp]) *
     141   199923776 :                       _phi[_j][_qp] * _grad_test[_i][_qp];
     142             : 
     143             :   // compute the derivative of the gradient of the mobility
     144   199923776 :   if (_variable_L)
     145             :   {
     146   158554176 :     RealGradient dgradL = _grad_phi[_j][_qp] * (*_dLdarg[cvar])[_qp] +
     147   158554176 :                           _grad_u[_qp] * _phi[_j][_qp] * (*_d2Ldargdop[cvar])[_qp];
     148             : 
     149   394091136 :     for (unsigned int i = 0; i < _n_args; ++i)
     150   235536960 :       dgradL += (*_gradarg[i])[_qp] * _phi[_j][_qp] * (*_d2Ldarg2[cvar][i])[_qp];
     151             : 
     152   158554176 :     dsum += (_kappa[_qp] * dgradL + _dkappadop[_qp] * _phi[_j][_qp] * gradL()) * _test[_i][_qp];
     153             :   }
     154             : 
     155   199923776 :   return _grad_u[_qp] * dsum;
     156             : }

Generated by: LCOV version 1.14