LCOV - code coverage report
Current view: top level - src/kernels - ACInterfaceKobayashi1.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #31405 (292dce) with base fef103 Lines: 33 44 75.0 %
Date: 2025-09-04 07:55:36 Functions: 4 5 80.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 "ACInterfaceKobayashi1.h"
      11             : 
      12             : registerMooseObject("PhaseFieldApp", ACInterfaceKobayashi1);
      13             : 
      14             : InputParameters
      15          40 : ACInterfaceKobayashi1::validParams()
      16             : {
      17          40 :   InputParameters params = JvarMapKernelInterface<KernelGrad>::validParams();
      18          40 :   params.addClassDescription("Anisotropic gradient energy Allen-Cahn Kernel Part 1");
      19          80 :   params.addParam<MaterialPropertyName>("mob_name", "L", "The mobility used with the kernel");
      20          80 :   params.addParam<MaterialPropertyName>("eps_name", "eps", "The anisotropic interface parameter");
      21          80 :   params.addParam<MaterialPropertyName>(
      22             :       "deps_name",
      23             :       "deps",
      24             :       "The derivative of the anisotropic interface parameter with respect to angle");
      25          80 :   params.addParam<MaterialPropertyName>(
      26             :       "depsdgrad_op_name",
      27             :       "depsdgrad_op",
      28             :       "The derivative of the anisotropic interface parameter eps with respect to grad_op");
      29          80 :   params.addParam<MaterialPropertyName>(
      30             :       "ddepsdgrad_op_name", "ddepsdgrad_op", "The derivative of deps with respect to grad_op");
      31          40 :   return params;
      32           0 : }
      33             : 
      34          21 : ACInterfaceKobayashi1::ACInterfaceKobayashi1(const InputParameters & parameters)
      35             :   : DerivativeMaterialInterface<JvarMapKernelInterface<KernelGrad>>(parameters),
      36          21 :     _L(getMaterialProperty<Real>("mob_name")),
      37          21 :     _dLdop(getMaterialPropertyDerivative<Real>("mob_name", _var.name())),
      38          42 :     _eps(getMaterialProperty<Real>("eps_name")),
      39          42 :     _deps(getMaterialProperty<Real>("deps_name")),
      40          42 :     _depsdgrad_op(getMaterialProperty<RealGradient>("depsdgrad_op_name")),
      41          63 :     _ddepsdgrad_op(getMaterialProperty<RealGradient>("ddepsdgrad_op_name"))
      42             : {
      43             :   // reserve space for derivatives
      44          21 :   _dLdarg.resize(_n_args);
      45          21 :   _depsdarg.resize(_n_args);
      46          21 :   _ddepsdarg.resize(_n_args);
      47             : 
      48             :   // Iterate over all coupled variables
      49          21 :   for (unsigned int i = 0; i < _n_args; ++i)
      50             :   {
      51           0 :     _dLdarg[i] = &getMaterialPropertyDerivative<Real>("mob_name", i);
      52           0 :     _depsdarg[i] = &getMaterialPropertyDerivative<Real>("eps_name", i);
      53           0 :     _ddepsdarg[i] = &getMaterialPropertyDerivative<Real>("deps_name", i);
      54             :   }
      55          21 : }
      56             : 
      57             : RealGradient
      58     2449408 : ACInterfaceKobayashi1::precomputeQpResidual()
      59             : {
      60             :   // Set modified gradient vector
      61     2449408 :   const RealGradient v(-_grad_u[_qp](1), _grad_u[_qp](0), 0);
      62             : 
      63             :   // Define anisotropic interface residual
      64     2449408 :   return _eps[_qp] * _deps[_qp] * _L[_qp] * v;
      65             : }
      66             : 
      67             : RealGradient
      68     3031040 : ACInterfaceKobayashi1::precomputeQpJacobian()
      69             : {
      70             :   // Set modified gradient vector
      71     3031040 :   const RealGradient v(-_grad_u[_qp](1), _grad_u[_qp](0), 0);
      72             : 
      73             :   // dvdgrad_op*_grad_phi
      74     3031040 :   const RealGradient dv(-_grad_phi[_j][_qp](1), _grad_phi[_j][_qp](0), 0);
      75             : 
      76             :   // Derivative of epsilon wrt nodal op values
      77     3031040 :   Real depsdop_i = _depsdgrad_op[_qp] * _grad_phi[_j][_qp];
      78     3031040 :   Real ddepsdop_i = _ddepsdgrad_op[_qp] * _grad_phi[_j][_qp];
      79             :   ;
      80             : 
      81             :   // Set the Jacobian
      82     3031040 :   RealGradient jac1 = _eps[_qp] * _deps[_qp] * dv;
      83     3031040 :   RealGradient jac2 = _deps[_qp] * depsdop_i * v;
      84     3031040 :   RealGradient jac3 = _eps[_qp] * ddepsdop_i * v;
      85             : 
      86     3031040 :   return _L[_qp] * (jac1 + jac2 + jac3);
      87             : }
      88             : 
      89             : Real
      90           0 : ACInterfaceKobayashi1::computeQpOffDiagJacobian(unsigned int jvar)
      91             : {
      92             :   // get the coupled variable jvar is referring to
      93             :   const unsigned int cvar = mapJvarToCvar(jvar);
      94             : 
      95             :   // Set modified gradient vector
      96           0 :   const RealGradient v(-_grad_u[_qp](1), _grad_u[_qp](0), 0);
      97             : 
      98             :   // Set off-diagonal jaocbian terms from mobility dependence
      99             :   Real dsum =
     100           0 :       _L[_qp] * (_deps[_qp] * (*_depsdarg[cvar])[_qp] * _phi[_j][_qp] * v * _grad_test[_i][_qp]);
     101           0 :   dsum +=
     102           0 :       _L[_qp] * (_eps[_qp] * (*_ddepsdarg[cvar])[_qp] * _phi[_j][_qp] * v * _grad_test[_i][_qp]);
     103           0 :   dsum += (*_dLdarg[cvar])[_qp] * _phi[_j][_qp] * _eps[_qp] * _deps[_qp] * v * _grad_test[_i][_qp];
     104             : 
     105           0 :   return dsum;
     106             : }

Generated by: LCOV version 1.14