16 InputParameters params = validParams<DerivativeFunctionMaterialBase>();
19 params.addRequiredParam<std::vector<MaterialPropertyName>>(
20 "fi_names",
"List of free energies for the n phases");
21 params.addParam<std::vector<MaterialPropertyName>>(
22 "hi_names",
"Switching Function Materials that provide h(eta_i)");
25 params.addCoupledVar(
"args",
"Arguments of the fi free energies - use vector coupling");
26 params.addCoupledVar(
"displacement_gradients",
27 "Vector of displacement gradient variables (see "
28 "Modules/PhaseField/DisplacementGradients "
32 params.addParam<MaterialPropertyName>(
33 "g",
"g",
"Barrier Function Material that provides g(eta_i)");
34 params.addParam<Real>(
"W", 0.0,
"Energy barrier for the phase transformation from A to B");
40 : DerivativeFunctionMaterialBase(parameters),
41 _eta_index(_nargs, -1),
42 _num_etas(coupledComponents(
"etas")),
43 _eta_names(_num_etas),
45 _fi_names(getParam<std::vector<MaterialPropertyName>>(
"fi_names")),
46 _num_fi(_fi_names.size()),
51 _hi_names(getParam<std::vector<MaterialPropertyName>>(
"hi_names")),
52 _num_hi(_hi_names.size()),
54 _g(getMaterialProperty<Real>(
"g")),
58 _W(getParam<Real>(
"W"))
62 mooseError(
"Need to pass in as many hi_names as fi_names in DerivativeMultiPhaseBase ",
name());
65 for (
unsigned int i = 0; i <
_num_etas; ++i)
75 _dg[i] = &getMaterialPropertyDerivative<Real>(
"g",
_eta_names[i]);
77 if (_third_derivatives)
80 for (
unsigned int j = 0; j <
_num_etas; ++j)
84 if (_third_derivatives)
87 for (
unsigned int k = 0; k <
_num_etas; ++k)
88 _d3g[i][j][k] = &getMaterialPropertyDerivative<Real>(
95 for (
unsigned int n = 0; n <
_num_fi; ++n)
104 _hi[n] = &getMaterialPropertyByName<Real>(
_hi_names[n]);
106 for (
unsigned int i = 0; i < _nargs; ++i)
111 if (_third_derivatives)
114 for (
unsigned int j = 0; j < _nargs; ++j)
117 &getMaterialPropertyDerivative<Real>(
_fi_names[n], _arg_names[i], _arg_names[j]);
119 if (_third_derivatives)
123 for (
unsigned int k = 0; k < _nargs; ++k)
124 _prop_d3Fi[n][i][j][k] = &getMaterialPropertyDerivative<Real>(
125 _fi_names[n], _arg_names[i], _arg_names[j], _arg_names[k]);
135 for (
unsigned int n = 0; n <
_num_fi; ++n)
143 for (
unsigned n = 0; n <
_num_fi; ++n)
145 return F +
_W *
_g[_qp];