18 InputParameters params = validParams<CoupledTimeDerivative>();
19 params.addClassDescription(
20 "Coupled time derivative Kernel that multiplies the time derivative by "
21 "$\\frac{dh_\\alpha}{d\\eta_i} F_\\alpha + \\frac{dh_\\beta}{d\\eta_i} F_\\beta + \\dots)");
22 params.addRequiredParam<std::vector<MaterialPropertyName>>(
23 "Fj_names",
"List of functions for each phase. Place in same order as hj_names!");
24 params.addRequiredParam<std::vector<MaterialPropertyName>>(
25 "hj_names",
"Switching Function Materials that provide h. Place in same order as Fj_names!");
26 params.addCoupledVar(
"args",
"Vector of arguments of Fj and hj");
31 : DerivativeMaterialInterface<JvarMapKernelInterface<CoupledTimeDerivative>>(parameters),
32 _nvar(_coupled_moose_vars.size()),
33 _v_name(getVar(
"v", 0)->
name()),
34 _Fj_names(getParam<std::vector<MaterialPropertyName>>(
"Fj_names")),
35 _num_j(_Fj_names.size()),
38 _prop_dFjdarg(_num_j),
39 _hj_names(getParam<std::vector<MaterialPropertyName>>(
"hj_names")),
40 _prop_dhjdetai(_num_j),
41 _prop_d2hjdetai2(_num_j),
42 _prop_d2hjdetaidarg(_num_j)
46 paramError(
"hj_names",
"Need to pass in as many hj_names as Fj_names");
49 for (
unsigned int n = 0; n <
_num_j; ++n)
61 for (
unsigned int i = 0; i <
_nvar; ++i)
63 MooseVariableFEBase * cvar = _coupled_moose_vars[i];
77 for (
unsigned int n = 0; n <
_num_j; ++n)
79 validateNonlinearCoupling<Real>(
_Fj_names[n]);
80 validateNonlinearCoupling<Real>(
_hj_names[n]);
88 for (
unsigned int n = 0; n <
_num_j; ++n)
91 return CoupledTimeDerivative::computeQpResidual() * sum;
98 for (
unsigned int n = 0; n <
_num_j; ++n)
101 return CoupledTimeDerivative::computeQpResidual() * sum * _phi[_j][_qp];
108 const unsigned int cvar = mapJvarToCvar(jvar);
114 for (
unsigned int n = 0; n <
_num_j; ++n)
119 return _phi[_j][_qp] * sum * _test[_i][_qp];
123 for (
unsigned int n = 0; n <
_num_j; ++n)
127 return CoupledTimeDerivative::computeQpResidual() * sum * _phi[_j][_qp];