11 #include "libmesh/utility.h"
20 params.addRequiredParam<MaterialPropertyName>(
21 "gamma",
"The interface profile coefficient to use with the kernel");
22 params.addClassDescription(
"Allen-Cahn kernel used when 'mu' is a function of variables");
29 _uname(getParam<NonlinearVariableName>(
"variable")),
30 _gamma_name(getParam<MaterialPropertyName>(
"gamma")),
31 _gamma(getMaterialPropertyByName<Real>(_gamma_name)),
32 _dmudvar(getMaterialPropertyDerivative<Real>(
"mu", _uname)),
33 _d2mudvar2(getMaterialPropertyDerivative<Real>(
"mu", _uname, _uname)),
34 _vname(getParam<std::vector<VariableName>>(
"v")),
37 for (
unsigned int i = 0; i <
_n_eta; ++i)
52 for (
unsigned int i = 0; i <
_n_eta; ++i)
53 df0dvar += (*
_vals[i])[_qp] * (*
_vals[i])[_qp];
55 df0dvar *= 2.0 *
_gamma[_qp] * _u[_qp];
56 df0dvar += _u[_qp] * _u[_qp] * _u[_qp] - _u[_qp];
62 mooseError(
"Invalid type passed in");
69 const unsigned int j = mapJvarToCvar(jvar);
71 Real df0deta_base = 0.0;
74 for (
unsigned int i = 0; i <
_n_eta; ++i)
76 sum_etai2 += (*
_vals[i])[_qp] * (*
_vals[i])[_qp];
78 df0deta_base = (*
_vals[j])[_qp] * (*
_vals[j])[_qp] - 1.0 +
79 2.0 *
_gamma[_qp] * (_u[_qp] * _u[_qp] + sum_etai2);
80 df0deta = (*
_vals[j])[_qp] * df0deta_base;
83 _test[_i][_qp] *
_L[_qp];
89 Real var_phase = 0.25 * _u[_qp] * _u[_qp] * _u[_qp] * _u[_qp] - 0.5 * _u[_qp] * _u[_qp];
91 Real eta_interface = 0.0;
94 for (
unsigned int i = 0; i <
_n_eta; ++i)
97 for (
unsigned int j = i + 1; j <
_n_eta; ++j)
98 sum_eta_j2 += (*
_vals[j])[_qp] * (*
_vals[j])[_qp];
102 eta_phase += 0.25 * Utility::pow<4>((*
_vals[i])[_qp]) - 0.5 * Utility::pow<2>((*
_vals[i])[_qp]);
104 (_u[_qp] * _u[_qp] + sum_eta_j2) * (*
_vals[i])[_qp] * (*
_vals[i])[_qp] *
_gamma[_qp];
106 return 0.25 + var_phase + eta_phase + eta_interface;