11 #include "MathUtils.h"
13 using namespace MathUtils;
21 InputParameters params = validParams<Kernel>();
22 params.addClassDescription(
"KKS model kernel to enforce the pointwise equality of phase chemical "
23 "potentials dFa/dca = dFb/dcb. The non-linear variable of this "
25 params.addRequiredCoupledVar(
26 "cb",
"Phase b concentration");
27 params.addRequiredParam<MaterialPropertyName>(
"fa_name",
28 "Base name of the free energy function "
29 "Fa (f_name in the corresponding "
30 "derivative function material)");
31 params.addRequiredParam<MaterialPropertyName>(
"fb_name",
32 "Base name of the free energy function "
33 "Fb (f_name in the corresponding "
34 "derivative function material)");
35 params.addParam<Real>(
"ka",
37 "Site fraction for the ca variable (specify this if ca is a sublattice "
38 "concentration, and make sure it is a true site fraction eg. 0.6666666) ");
39 params.addParam<Real>(
"kb",
41 "Site fraction for the cb variable (specify this if ca is a sublattice "
42 "concentration, and make sure it is a true site fraction eg. 0.6666666) ");
45 "Vector of further parameters to Fa (optional, to add in second cross derivatives of Fa)");
48 "Vector of further parameters to Fb (optional, to add in second cross derivatives of Fb)");
53 : DerivativeMaterialInterface<JvarMapKernelInterface<Kernel>>(parameters),
54 _cb_var(coupled(
"cb")),
55 _cb_name(getVar(
"cb", 0)->
name()),
57 _dfadca(getMaterialPropertyDerivative<Real>(
"fa_name", _var.
name())),
58 _dfbdcb(getMaterialPropertyDerivative<Real>(
"fb_name", _cb_name)),
60 _d2fadca2(getMaterialPropertyDerivative<Real>(
"fa_name", _var.
name(), _var.
name())),
61 _d2fbdcbca(getMaterialPropertyDerivative<Real>(
"fb_name", _cb_name, _var.
name())),
63 _ka(getParam<Real>(
"ka")),
64 _kb(getParam<Real>(
"kb"))
66 MooseVariableFEBase * arg;
70 _console <<
"KKSPhaseChemicalPotential(" <<
name() <<
") " << _var.name() <<
' ' <<
_cb_name
74 unsigned int nvar = _coupled_moose_vars.size();
78 for (i = 0; i < nvar; ++i)
81 arg = _coupled_moose_vars[i];
85 _d2fadcadarg[i] = &getMaterialPropertyDerivative<Real>(
"fa_name", _var.name(), arg->name());
93 validateNonlinearCoupling<Real>(
"fa_name");
94 validateNonlinearCoupling<Real>(
"fb_name");
115 const unsigned int cvar = mapJvarToCvar(jvar);
117 return _test[_i][_qp] * _phi[_j][_qp] *