11 #include "libmesh/utility.h"
21 params.addRequiredParam<Real>(
"a",
"Ellipse semiaxis");
22 params.addRequiredParam<Real>(
"b",
"Ellipse semiaxis");
23 params.addRequiredParam<Real>(
"lambda",
"Lame's first parameter");
24 params.addRequiredParam<Real>(
"mu",
"Shear modulus (aka Lame's second parameter)");
25 params.addRequiredParam<std::vector<Real>>(
"misfit_strains",
26 "Vector of misfit strains in order eps_11, eps_22");
27 params.addRequiredParam<MaterialPropertyName>(
28 "stress_name",
"Name of the material property where analytical stresses will be stored");
29 params.addRequiredParam<MaterialPropertyName>(
30 "strain_name",
"Name of the material property where analytical total strains will be stored");
31 params.addRequiredParam<MaterialPropertyName>(
33 "Name of the material property where analytical elastic energies will be stored");
39 : Material(parameters),
40 _a(getParam<Real>(
"a")),
41 _b(getParam<Real>(
"b")),
42 _lambda(getParam<Real>(
"lambda")),
43 _mu(getParam<Real>(
"mu")),
44 _misfit(getParam<std::vector<Real>>(
"misfit_strains")),
45 _stress(declareProperty<
RankTwoTensor>(getParam<MaterialPropertyName>(
"stress_name"))),
46 _strain(declareProperty<
RankTwoTensor>(getParam<MaterialPropertyName>(
"strain_name"))),
47 _elastic_energy(declareProperty<Real>(getParam<MaterialPropertyName>(
"energy_name")))
50 mooseError(
"Supply 2 misfit_strains in order eps_11, eps_22 in InclusionProperties.");
60 Real x = _q_point[_qp](0);
61 Real y = _q_point[_qp](1);
62 if (x * x /
_a /
_a + y * y /
_b /
_b < 1)
72 Real l = 0.5 * (x * x + y * y -
_a *
_a -
_b *
_b
74 std::sqrt(Utility::pow<2>((x * x + y * y -
_a *
_a +
_b *
_b)) +
76 Real rho_a =
_a / sqrt(
_a *
_a + l);
77 Real rho_b =
_b / sqrt(
_b *
_b + l);
78 Real m_x = x / (
_a *
_a + l);
79 Real m_y = y / (
_b *
_b + l);
80 Real n_x = m_x / std::sqrt(m_x * m_x + m_y * m_y);
81 Real n_y = m_y / std::sqrt(m_x * m_x + m_y * m_y);
82 Real T_6 = rho_a * rho_a + rho_b * rho_b - 4 * rho_a * rho_a * n_x * n_x -
83 4 * rho_b * rho_b * n_y * n_y - 4;
85 Real H11 = rho_a *
_b * (
_a * rho_b +
_b * rho_a + 2 *
_a * rho_a * rho_a * rho_b +
86 _b * Utility::pow<3>(rho_a)) /
87 Utility::pow<2>((
_a * rho_b +
_b * rho_a)) +
88 n_x * n_x * (2 - 6 * rho_a * rho_a + (8 * rho_a * rho_a + T_6) * n_x * n_x);
90 Real H22 = rho_b *
_a * (
_a * rho_b +
_b * rho_a + 2 *
_b * rho_a * rho_b * rho_b +
91 _a * Utility::pow<3>(rho_b)) /
92 Utility::pow<2>((
_a * rho_b +
_b * rho_a)) +
93 n_y * n_y * (2 - 6 * rho_b * rho_b + (8 * rho_b * rho_b + T_6) * n_y * n_y);
95 Real H12 = (
_a *
_a * rho_a * rho_a * rho_b * rho_b +
_b *
_b * rho_a * rho_a +
96 _a *
_b * rho_a * rho_b) /
97 Utility::pow<2>((
_a * rho_b +
_b * rho_a)) -
98 rho_b * rho_b * n_x * n_x - rho_a * rho_a * n_y * n_y +
99 (4 * rho_a * rho_a + 4 * rho_b * rho_b + T_6) * n_x * n_x * n_y * n_y;
101 Real H31 = 2 * (
_b * rho_a / (
_a * rho_b +
_b * rho_a) - n_x * n_x);
102 Real H32 = 2 * (
_a * rho_b / (
_a * rho_b +
_b * rho_a) - n_y * n_y);
104 Real H41 = n_x * n_y *
105 (1 - 3 * rho_a * rho_a + (6 * rho_a * rho_a + 2 * rho_b * rho_b + T_6) * n_x * n_x);
106 Real H42 = n_x * n_y *
107 (1 - 3 * rho_b * rho_b + (2 * rho_a * rho_a + 6 * rho_b * rho_b + T_6) * n_y * n_y);
118 Real J1 = rho_a * rho_a * rho_b *
_b / (
_a * rho_b +
_b * rho_a);
119 Real J11 = Utility::pow<4>(rho_a) * rho_b *
_b / (3 *
_a *
_a) * (2 *
_a * rho_b +
_b * rho_a) /
120 Utility::pow<2>((
_a * rho_b +
_b * rho_a));
121 Real J12 = Utility::pow<3>(rho_a) * Utility::pow<3>(rho_b) /
122 Utility::pow<2>((
_a * rho_b +
_b * rho_a));
123 Real J2 = rho_b * rho_b * rho_a *
_a / (
_a * rho_b +
_b * rho_a);
124 Real J22 = Utility::pow<4>(rho_b) * rho_a *
_a / (3 *
_b *
_b) * (2 *
_b * rho_a +
_a * rho_b) /
125 Utility::pow<2>((
_a * rho_b +
_b * rho_a));
127 Real G1111 = ((1 - 2 *
_nu) * J1 + 3 *
_a *
_a * J11) / (2 * (1 -
_nu)) +
128 rho_a * rho_b * n_x * n_x / (2 * (1 -
_nu)) *
129 (2 + 2 *
_nu - 6 * rho_a * rho_a + (8 * rho_a * rho_a + T_6) * n_x * n_x);
130 Real G1122 = ((2 *
_nu - 1) * J1 +
_b *
_b * J12) / (2 * (1 -
_nu)) +
131 rho_a * rho_b / (2 * (1 -
_nu)) *
132 ((1 - rho_a * rho_a) * n_y * n_y + (1 - 2 *
_nu - rho_b * rho_b) * n_x * n_x +
133 (4 * rho_a * rho_a + 4 * rho_b * rho_b + T_6) * n_x * n_x * n_y * n_y);
134 Real G2211 = ((2 *
_nu - 1) * J2 +
_a *
_a * J12) / (2 * (1 -
_nu)) +
135 rho_a * rho_b / (2 * (1 -
_nu)) *
136 ((1 - rho_b * rho_b) * n_x * n_x + (1 - 2 *
_nu - rho_a * rho_a) * n_y * n_y +
137 (4 * rho_a * rho_a + 4 * rho_b * rho_b + T_6) * n_x * n_x * n_y * n_y);
138 Real G2222 = ((1 - 2 *
_nu) * J2 + 3 *
_b *
_b * J22) / (2 * (1 -
_nu)) +
139 rho_a * rho_b * n_y * n_y / (2 * (1 -
_nu)) *
140 (2 + 2 *
_nu - 6 * rho_b * rho_b + (8 * rho_a * rho_a + T_6) * n_y * n_y);
142 rho_a * rho_b * n_x * n_y / (2 * (1 -
_nu)) *
143 (1 - 3 * rho_a * rho_a + (6 * rho_a * rho_a + 2 * rho_b * rho_b + T_6) * n_x * n_x);
145 rho_a * rho_b * n_x * n_y / (2 * (1 -
_nu)) *
146 (1 - 3 * rho_b * rho_b + (2 * rho_a * rho_a + 6 * rho_b * rho_b + T_6) * n_y * n_y);
162 Real T11 = 1 + 2 / t;
165 Real T22 = 1 + 2 * t;
166 Real T31 = (3 -
_kappa) / 2 * (1 + 1 / t);
167 Real T32 = (3 -
_kappa) / 2 * (1 + t);
176 Real S11 = t * (t + 3 +
_kappa * (1 + t));
177 Real S12 = t * (1 + 3 * t -
_kappa * (1 + t));
178 Real S21 = t + 3 -
_kappa * (1 + t);
179 Real S22 = 1 + 3 * t +
_kappa * (1 + t);