19 params.addClassDescription(
20 "Free energy contribution asymmetric across interfaces between arbitrary pairs of phases.");
21 params.addParam<std::vector<MaterialPropertyName>>(
22 "hi_names",
"Switching Function Materials that provide h(eta_i)");
27 const InputParameters & parameters)
31 const std::vector<MaterialPropertyName> & hi_names =
32 getParam<std::vector<MaterialPropertyName>>(
"hi_names");
34 paramError(
"hi_names",
"The number of hi_names must be equal to the number of coupled etas");
36 for (
unsigned int i = 0; i <
_num_eta; ++i)
38 _h[i] = &getMaterialProperty<Real>(hi_names[i]);
39 _dh[i] = &getMaterialPropertyDerivative<Real>(hi_names[i],
_eta_names[i]);
51 for (
unsigned int i = 0; i <
_num_eta; ++i)
52 for (
unsigned int j = i + 1; j <
_num_eta; ++j)
55 const Real ni = (*
_eta[i])[_qp];
56 const Real nj = (*
_eta[j])[_qp];
61 const Real hi = (*
_h[i])[_qp];
62 const Real hj = (*
_h[j])[_qp];
63 const Real dhi = (*
_dh[i])[_qp];
64 const Real dhj = (*
_dh[j])[_qp];
65 const Real d2hi = (*
_d2h[i])[_qp];
66 const Real d2hj = (*
_d2h[j])[_qp];
69 Real B, dBi, dBj, d2Bii, d2Bjj, d2Bij;
73 B = 16.0 * ni * ni * nj * nj;
74 dBi = 16.0 * 2.0 * ni * nj * nj;
75 dBj = 16.0 * 2.0 * ni * ni * nj;
76 d2Bii = 16.0 * 2.0 * nj * nj;
77 d2Bjj = 16.0 * 2.0 * ni * ni;
78 d2Bij = 16.0 * 4.0 * ni * nj;
91 mooseError(
"Internal error");
94 _prop_g[_qp] += (Wij * hi + Wji * hj) * B;
96 (*
_prop_dg[i])[_qp] += (Wij * hi + Wji * hj) * dBi + (Wij * dhi) * B;
97 (*
_prop_dg[j])[_qp] += (Wij * hi + Wji * hj) * dBj + (Wji * dhj) * B;
100 (Wij * hi + Wji * hj) * d2Bii + 2 * (Wij * dhi) * dBi + (Wij * d2hi) * B;
102 (Wij * hi + Wji * hj) * d2Bjj + 2 * (Wji * dhj) * dBj + (Wji * d2hj) * B;
105 (Wij * hi + Wji * hj) * (d2Bij) + (Wji * dhj) * dBi + (Wij * dhi) * dBj;