11 #include "libmesh/utility.h" 20 "solution to the inclusion problem.");
26 "Vector of misfit strains in order eps_11, eps_22");
28 "stress_name",
"Name of the material property where analytical stresses will be stored");
30 "strain_name",
"Name of the material property where analytical total strains will be stored");
33 "Name of the material property where analytical elastic energies will be stored");
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.");
73 + std::sqrt(Utility::pow<2>((
x *
x +
y *
y -
_a *
_a +
_b *
_b)) +
79 Real n_x = m_x / std::sqrt(m_x * m_x + m_y * m_y);
80 Real n_y = m_y / std::sqrt(m_x * m_x + m_y * m_y);
81 Real T_6 = rho_a * rho_a + rho_b * rho_b - 4 * rho_a * rho_a * n_x * n_x -
82 4 * rho_b * rho_b * n_y * n_y - 4;
85 (
_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);
91 (
_a * rho_b +
_b * rho_a + 2 *
_b * rho_a * rho_b * rho_b +
92 _a * Utility::pow<3>(rho_b)) /
93 Utility::pow<2>((
_a * rho_b +
_b * rho_a)) +
94 n_y * n_y * (2 - 6 * rho_b * rho_b + (8 * rho_b * rho_b + T_6) * n_y * n_y);
96 Real H12 = (
_a *
_a * rho_a * rho_a * rho_b * rho_b +
_b *
_b * rho_a * rho_a +
97 _a *
_b * rho_a * rho_b) /
98 Utility::pow<2>((
_a * rho_b +
_b * rho_a)) -
99 rho_b * rho_b * n_x * n_x - rho_a * rho_a * n_y * n_y +
100 (4 * rho_a * rho_a + 4 * rho_b * rho_b + T_6) * n_x * n_x * n_y * n_y;
102 Real H31 = 2 * (
_b * rho_a / (
_a * rho_b +
_b * rho_a) - n_x * n_x);
103 Real H32 = 2 * (
_a * rho_b / (
_a * rho_b +
_b * rho_a) - n_y * n_y);
105 Real H41 = n_x * n_y *
106 (1 - 3 * rho_a * rho_a + (6 * rho_a * rho_a + 2 * rho_b * rho_b + T_6) * n_x * n_x);
107 Real H42 = n_x * n_y *
108 (1 - 3 * rho_b * rho_b + (2 * rho_a * rho_a + 6 * rho_b * rho_b + T_6) * n_y * n_y);
119 Real J1 = rho_a * rho_a * rho_b *
_b / (
_a * rho_b +
_b * rho_a);
120 Real J11 = Utility::pow<4>(rho_a) * rho_b *
_b / (3 *
_a *
_a) * (2 *
_a * rho_b +
_b * rho_a) /
121 Utility::pow<2>((
_a * rho_b +
_b * rho_a));
122 Real J12 = Utility::pow<3>(rho_a) * Utility::pow<3>(rho_b) /
123 Utility::pow<2>((
_a * rho_b +
_b * rho_a));
124 Real J2 = rho_b * rho_b * rho_a *
_a / (
_a * rho_b +
_b * rho_a);
125 Real J22 = Utility::pow<4>(rho_b) * rho_a *
_a / (3 *
_b *
_b) * (2 *
_b * rho_a +
_a * rho_b) /
126 Utility::pow<2>((
_a * rho_b +
_b * rho_a));
128 Real G1111 = ((1 - 2 *
_nu) * J1 + 3 *
_a *
_a * J11) / (2 * (1 -
_nu)) +
129 rho_a * rho_b * n_x * n_x / (2 * (1 -
_nu)) *
130 (2 + 2 *
_nu - 6 * rho_a * rho_a + (8 * rho_a * rho_a + T_6) * n_x * n_x);
131 Real G1122 = ((2 *
_nu - 1) * J1 +
_b *
_b * J12) / (2 * (1 -
_nu)) +
132 rho_a * rho_b / (2 * (1 -
_nu)) *
133 ((1 - rho_a * rho_a) * n_y * n_y + (1 - 2 *
_nu - rho_b * rho_b) * n_x * n_x +
134 (4 * rho_a * rho_a + 4 * rho_b * rho_b + T_6) * n_x * n_x * n_y * n_y);
135 Real G2211 = ((2 *
_nu - 1) * J2 +
_a *
_a * J12) / (2 * (1 -
_nu)) +
136 rho_a * rho_b / (2 * (1 -
_nu)) *
137 ((1 - rho_b * rho_b) * n_x * n_x + (1 - 2 *
_nu - rho_a * rho_a) * n_y * n_y +
138 (4 * rho_a * rho_a + 4 * rho_b * rho_b + T_6) * n_x * n_x * n_y * n_y);
139 Real G2222 = ((1 - 2 *
_nu) * J2 + 3 *
_b *
_b * J22) / (2 * (1 -
_nu)) +
140 rho_a * rho_b * n_y * n_y / (2 * (1 -
_nu)) *
141 (2 + 2 *
_nu - 6 * rho_b * rho_b + (8 * rho_a * rho_a + T_6) * n_y * n_y);
143 rho_a * rho_b * n_x * n_y / (2 * (1 -
_nu)) *
144 (1 - 3 * rho_a * rho_a + (6 * rho_a * rho_a + 2 * rho_b * rho_b + T_6) * n_x * n_x);
146 rho_a * rho_b * n_x * n_y / (2 * (1 -
_nu)) *
147 (1 - 3 * rho_b * rho_b + (2 * rho_a * rho_a + 6 * rho_b * rho_b + T_6) * n_y * n_y);
163 Real T11 = 1 + 2 / t;
166 Real T22 = 1 + 2 * t;
178 Real S12 = t * (1 + 3 * t -
_kappa * (1 + t));
const MooseArray< Point > & _q_point
registerMooseObject("SolidMechanicsApp", InclusionProperties)
This material calculates the stresses, strains, and elastic energies for an ellipsoidal inclusion in ...
std::vector< Real > _misfit
Misfit strains.
MaterialProperty< RankTwoTensor > & _strain
const Real _a
Semimajor axes of the ellipsoidal inclusion.
MaterialProperty< Real > & _elastic_energy
RankTwoTensor _total_strain_int
const Real _lambda
Elastic constants (isotropic)
const std::vector< double > y
Real _kappa
Kolosov's first constant.
RankTwoTensor _stress_int
Interior stress and strain values are constant so they only need to be calculated once...
static InputParameters validParams()
const std::vector< double > x
InclusionProperties(const InputParameters ¶meters)
MaterialProperty< RankTwoTensor > & _stress
The stress tensor.
Real doubleContraction(const RankTwoTensorTempl< Real > &a) const
virtual void precomputeInteriorProperties()
Real _nu
Poisson's ratio.
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh
RankTwoTensor _elastic_strain_int
virtual void computeQpProperties()
void mooseError(Args &&... args) const