12 #include "KernelGrad.h"
13 #include "JvarMapInterface.h"
14 #include "DerivativeMaterialInterface.h"
25 class CHBulk :
public DerivativeMaterialInterface<JvarMapKernelInterface<KernelGrad>>
28 CHBulk(
const InputParameters & parameters);
47 const MaterialProperty<T> &
_M;
50 const MaterialProperty<T> &
_dMdc;
53 std::vector<const MaterialProperty<T> *>
_dMdarg;
58 : DerivativeMaterialInterface<JvarMapKernelInterface<KernelGrad>>(parameters),
59 _M(getMaterialProperty<T>(
"mob_name")),
60 _dMdc(getMaterialPropertyDerivative<T>(
"mob_name", _var.
name()))
63 unsigned int nvar = _coupled_moose_vars.size();
69 for (
unsigned int i = 0; i < nvar; ++i)
70 _dMdarg[i] = &getMaterialPropertyDerivative<T>(
"mob_name", _coupled_moose_vars[i]->
name());
77 InputParameters params = ::validParams<KernelGrad>();
78 params.addClassDescription(
"Cahn-Hilliard base Kernel");
79 params.addParam<MaterialPropertyName>(
"mob_name",
"M",
"The mobility used with the kernel");
80 params.addCoupledVar(
"args",
"Vector of arguments of the mobility");
88 validateNonlinearCoupling<Real>(
"mob_name");
95 return _M[_qp] * computeGradDFDCons(Residual);
102 RealGradient grad_value = _M[_qp] * computeGradDFDCons(Jacobian) +
103 _dMdc[_qp] * _phi[_j][_qp] * computeGradDFDCons(Residual);
108 template <
typename T>
113 const unsigned int cvar = mapJvarToCvar(jvar);
115 return (*_dMdarg[cvar])[_qp] * _phi[_j][_qp] * computeGradDFDCons(Residual) * _grad_test[_i][_qp];