15 ADACInterface, ADKernel, params.addClassDescription(
"Gradient energy Allen-Cahn Kernel");
16 params.addParam<MaterialPropertyName>(
"mob_name",
"L",
"The mobility used with the kernel");
17 params.addParam<MaterialPropertyName>(
"kappa_name",
19 "The kappa used with the kernel");
20 params.addCoupledVar(
"args",
"Vector of nonlinear variable arguments this object depends on");
21 params.addParam<
bool>(
"variable_L",
23 "The mobility is a function of any MOOSE variable (if "
24 "this is set to false L must be constant over the "
27 template <ComputeStage compute_stage>
29 : ADKernel<compute_stage>(parameters),
30 _prop_L(getADMaterialProperty<Real>(
"mob_name")),
31 _name_L(getParam<MaterialPropertyName>(
"mob_name")),
32 _kappa(getADMaterialProperty<Real>(
"kappa_name")),
33 _variable_L(getParam<bool>(
"variable_L")),
35 ? &getADMaterialProperty<Real>(derivativePropertyNameFirst(_name_L, _var.
name()))
37 _nvar(Coupleable::_coupled_standard_moose_vars.size()),
43 for (
unsigned int i = 0; i <
_nvar; ++i)
45 MooseVariable * ivar = _coupled_standard_moose_vars[i];
46 const VariableName iname = ivar->name();
47 if (iname == _var.name())
49 "The kernel variable should not be specified in the coupled `args` parameter.");
51 _dLdarg[i] = &getADMaterialProperty<Real>(derivativePropertyNameFirst(
_name_L, iname));
52 _gradarg[i] = &(ivar->adGradSln<compute_stage>());
56 template <ComputeStage compute_stage>
61 ADRealVectorValue nabla_Lpsi = _prop_L[_qp] * _grad_test[_i][_qp];
65 ADRealVectorValue grad_L = _grad_u[_qp] * (*_dLdop)[_qp];
66 for (
unsigned int i = 0; i < _nvar; ++i)
67 grad_L += (*_gradarg[i])[_qp] * (*_dLdarg[i])[_qp];
69 nabla_Lpsi += grad_L * _test[_i][_qp];
72 return _grad_u[_qp] * _kappa[_qp] * nabla_Lpsi;