www.mooseframework.org
Public Member Functions | Protected Member Functions | Private Attributes | List of all members
InclusionProperties Class Reference

This material calculates the stresses, strains, and elastic energies for an ellipsoidal inclusion in a 2D, plane strain configuration with in-plane dilatational eigenstrains only. More...

#include <InclusionProperties.h>

Inheritance diagram for InclusionProperties:
[legend]

Public Member Functions

 InclusionProperties (const InputParameters &parameters)
 

Protected Member Functions

virtual void computeQpProperties ()
 
virtual void precomputeInteriorProperties ()
 

Private Attributes

const Real _a
 Semimajor axes of the ellipsoidal inclusion. More...
 
const Real _b
 
const Real _lambda
 Elastic constants (isotropic) More...
 
const Real _mu
 
std::vector< Real > _misfit
 Misfit strains. More...
 
Real _nu
 Poisson's ratio. More...
 
Real _kappa
 Kolosov's first constant. More...
 
RankTwoTensor _stress_int
 Interior stress and strain values are constant so they only need to be calculated once. More...
 
RankTwoTensor _total_strain_int
 
RankTwoTensor _elastic_strain_int
 
Real _elastic_energy_int
 
MaterialProperty< RankTwoTensor > & _stress
 
MaterialProperty< RankTwoTensor > & _strain
 
MaterialProperty< Real > & _elastic_energy
 

Detailed Description

This material calculates the stresses, strains, and elastic energies for an ellipsoidal inclusion in a 2D, plane strain configuration with in-plane dilatational eigenstrains only.

Both inside and outside the inclusion are calculated. References: X. Jin et al., J. Elast., v. 114, 1-18 (2014) and X. Jin et al., J. Appl. Mech., v. 78, 031009 (2011).

Definition at line 29 of file InclusionProperties.h.

Constructor & Destructor Documentation

◆ InclusionProperties()

InclusionProperties::InclusionProperties ( const InputParameters &  parameters)

Definition at line 37 of file InclusionProperties.C.

38  : Material(parameters),
39  _a(getParam<Real>("a")),
40  _b(getParam<Real>("b")),
41  _lambda(getParam<Real>("lambda")),
42  _mu(getParam<Real>("mu")),
43  _misfit(getParam<std::vector<Real>>("misfit_strains")),
44  _stress(declareProperty<RankTwoTensor>(getParam<MaterialPropertyName>("stress_name"))),
45  _strain(declareProperty<RankTwoTensor>(getParam<MaterialPropertyName>("strain_name"))),
46  _elastic_energy(declareProperty<Real>(getParam<MaterialPropertyName>("energy_name")))
47 {
48  if (_misfit.size() != 2)
49  mooseError("Supply 2 misfit_strains in order eps_11, eps_22 in InclusionProperties.");
50 
51  _nu = _lambda / 2.0 / (_lambda + _mu);
52  _kappa = 3 - 4 * _nu;
54 }
std::vector< Real > _misfit
Misfit strains.
MaterialProperty< RankTwoTensor > & _strain
const Real _a
Semimajor axes of the ellipsoidal inclusion.
MaterialProperty< Real > & _elastic_energy
const Real _lambda
Elastic constants (isotropic)
Real _kappa
Kolosov&#39;s first constant.
MaterialProperty< RankTwoTensor > & _stress
virtual void precomputeInteriorProperties()
Real _nu
Poisson&#39;s ratio.

Member Function Documentation

◆ computeQpProperties()

void InclusionProperties::computeQpProperties ( )
protectedvirtual

Definition at line 57 of file InclusionProperties.C.

58 {
59  Real x = _q_point[_qp](0);
60  Real y = _q_point[_qp](1);
61  if (x * x / _a / _a + y * y / _b / _b < 1)
62  {
63  // Inside the inclusion
64  _stress[_qp] = _stress_int;
67  }
68  else
69  {
70  // Outside the inclusion
71  Real l = 0.5 * (x * x + y * y - _a * _a - _b * _b // Parameter l called lambda in the paper
72  +
73  std::sqrt(Utility::pow<2>((x * x + y * y - _a * _a + _b * _b)) +
74  4 * (_a * _a - _b * _b) * y * y));
75  Real rho_a = _a / sqrt(_a * _a + l);
76  Real rho_b = _b / sqrt(_b * _b + l);
77  Real m_x = x / (_a * _a + l);
78  Real m_y = y / (_b * _b + l);
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;
83 
84  Real H11 = rho_a * _b * (_a * rho_b + _b * rho_a + 2 * _a * rho_a * rho_a * rho_b +
85  _b * Utility::pow<3>(rho_a)) /
86  Utility::pow<2>((_a * rho_b + _b * rho_a)) +
87  n_x * n_x * (2 - 6 * rho_a * rho_a + (8 * rho_a * rho_a + T_6) * n_x * n_x);
88 
89  Real H22 = rho_b * _a * (_a * rho_b + _b * rho_a + 2 * _b * rho_a * rho_b * rho_b +
90  _a * Utility::pow<3>(rho_b)) /
91  Utility::pow<2>((_a * rho_b + _b * rho_a)) +
92  n_y * n_y * (2 - 6 * rho_b * rho_b + (8 * rho_b * rho_b + T_6) * n_y * n_y);
93 
94  Real H12 = (_a * _a * rho_a * rho_a * rho_b * rho_b + _b * _b * rho_a * rho_a +
95  _a * _b * rho_a * rho_b) /
96  Utility::pow<2>((_a * rho_b + _b * rho_a)) -
97  rho_b * rho_b * n_x * n_x - rho_a * rho_a * n_y * n_y +
98  (4 * rho_a * rho_a + 4 * rho_b * rho_b + T_6) * n_x * n_x * n_y * n_y;
99 
100  Real H31 = 2 * (_b * rho_a / (_a * rho_b + _b * rho_a) - n_x * n_x);
101  Real H32 = 2 * (_a * rho_b / (_a * rho_b + _b * rho_a) - n_y * n_y);
102 
103  Real H41 = n_x * n_y *
104  (1 - 3 * rho_a * rho_a + (6 * rho_a * rho_a + 2 * rho_b * rho_b + T_6) * n_x * n_x);
105  Real H42 = n_x * n_y *
106  (1 - 3 * rho_b * rho_b + (2 * rho_a * rho_a + 6 * rho_b * rho_b + T_6) * n_y * n_y);
107 
108  _stress[_qp](0, 0) =
109  4 * _mu * rho_a * rho_b / (_kappa + 1) * (H11 * _misfit[0] + H12 * _misfit[1]);
110  _stress[_qp](1, 1) =
111  4 * _mu * rho_a * rho_b / (_kappa + 1) * (H12 * _misfit[0] + H22 * _misfit[1]);
112  _stress[_qp](2, 2) =
113  4 * _mu * rho_a * rho_b / (_kappa + 1) * _nu * (H31 * _misfit[0] + H32 * _misfit[1]);
114  _stress[_qp](0, 1) = _stress[_qp](1, 0) =
115  4 * _mu * rho_a * rho_b / (_kappa + 1) * (H41 * _misfit[0] + H42 * _misfit[1]);
116 
117  Real J1 = rho_a * rho_a * rho_b * _b / (_a * rho_b + _b * rho_a);
118  Real J11 = Utility::pow<4>(rho_a) * rho_b * _b / (3 * _a * _a) * (2 * _a * rho_b + _b * rho_a) /
119  Utility::pow<2>((_a * rho_b + _b * rho_a));
120  Real J12 = Utility::pow<3>(rho_a) * Utility::pow<3>(rho_b) /
121  Utility::pow<2>((_a * rho_b + _b * rho_a));
122  Real J2 = rho_b * rho_b * rho_a * _a / (_a * rho_b + _b * rho_a);
123  Real J22 = Utility::pow<4>(rho_b) * rho_a * _a / (3 * _b * _b) * (2 * _b * rho_a + _a * rho_b) /
124  Utility::pow<2>((_a * rho_b + _b * rho_a));
125 
126  Real G1111 = ((1 - 2 * _nu) * J1 + 3 * _a * _a * J11) / (2 * (1 - _nu)) +
127  rho_a * rho_b * n_x * n_x / (2 * (1 - _nu)) *
128  (2 + 2 * _nu - 6 * rho_a * rho_a + (8 * rho_a * rho_a + T_6) * n_x * n_x);
129  Real G1122 = ((2 * _nu - 1) * J1 + _b * _b * J12) / (2 * (1 - _nu)) +
130  rho_a * rho_b / (2 * (1 - _nu)) *
131  ((1 - rho_a * rho_a) * n_y * n_y + (1 - 2 * _nu - rho_b * rho_b) * n_x * n_x +
132  (4 * rho_a * rho_a + 4 * rho_b * rho_b + T_6) * n_x * n_x * n_y * n_y);
133  Real G2211 = ((2 * _nu - 1) * J2 + _a * _a * J12) / (2 * (1 - _nu)) +
134  rho_a * rho_b / (2 * (1 - _nu)) *
135  ((1 - rho_b * rho_b) * n_x * n_x + (1 - 2 * _nu - rho_a * rho_a) * n_y * n_y +
136  (4 * rho_a * rho_a + 4 * rho_b * rho_b + T_6) * n_x * n_x * n_y * n_y);
137  Real G2222 = ((1 - 2 * _nu) * J2 + 3 * _b * _b * J22) / (2 * (1 - _nu)) +
138  rho_a * rho_b * n_y * n_y / (2 * (1 - _nu)) *
139  (2 + 2 * _nu - 6 * rho_b * rho_b + (8 * rho_a * rho_a + T_6) * n_y * n_y);
140  Real G1211 =
141  rho_a * rho_b * n_x * n_y / (2 * (1 - _nu)) *
142  (1 - 3 * rho_a * rho_a + (6 * rho_a * rho_a + 2 * rho_b * rho_b + T_6) * n_x * n_x);
143  Real G1222 =
144  rho_a * rho_b * n_x * n_y / (2 * (1 - _nu)) *
145  (1 - 3 * rho_b * rho_b + (2 * rho_a * rho_a + 6 * rho_b * rho_b + T_6) * n_y * n_y);
146 
147  // Outside the inclusion, total strain = elastic strain so we only need to
148  // calculate one strain tensor
149  _strain[_qp](0, 0) = G1111 * _misfit[0] + G1122 * _misfit[1];
150  _strain[_qp](1, 1) = G2211 * _misfit[0] + G2222 * _misfit[1];
151  _strain[_qp](0, 1) = _strain[_qp](1, 0) = G1211 * _misfit[0] + G1222 * _misfit[1];
152 
153  _elastic_energy[_qp] = 0.5 * _stress[_qp].doubleContraction(_strain[_qp]);
154  }
155 }
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
Real _kappa
Kolosov&#39;s first constant.
RankTwoTensor _stress_int
Interior stress and strain values are constant so they only need to be calculated once...
MaterialProperty< RankTwoTensor > & _stress
Real _nu
Poisson&#39;s ratio.

◆ precomputeInteriorProperties()

void InclusionProperties::precomputeInteriorProperties ( )
protectedvirtual

Definition at line 158 of file InclusionProperties.C.

Referenced by InclusionProperties().

159 {
160  Real t = _b / _a;
161  Real T11 = 1 + 2 / t;
162  Real T12 = 1;
163  Real T21 = 1;
164  Real T22 = 1 + 2 * t;
165  Real T31 = (3 - _kappa) / 2 * (1 + 1 / t);
166  Real T32 = (3 - _kappa) / 2 * (1 + t);
167 
168  _stress_int(0, 0) =
169  -4 * _mu * t / (_kappa + 1) / (1 + t) / (1 + t) * (T11 * _misfit[0] + T12 * _misfit[1]);
170  _stress_int(1, 1) =
171  -4 * _mu * t / (_kappa + 1) / (1 + t) / (1 + t) * (T21 * _misfit[0] + T22 * _misfit[1]);
172  _stress_int(2, 2) =
173  -4 * _mu * t / (_kappa + 1) / (1 + t) / (1 + t) * (T31 * _misfit[0] + T32 * _misfit[1]);
174 
175  Real S11 = t * (t + 3 + _kappa * (1 + t));
176  Real S12 = t * (1 + 3 * t - _kappa * (1 + t));
177  Real S21 = t + 3 - _kappa * (1 + t);
178  Real S22 = 1 + 3 * t + _kappa * (1 + t);
179 
180  _total_strain_int(0, 0) =
181  1 / (_kappa + 1) / (1 + t) / (1 + t) * (S11 * _misfit[0] + S12 * _misfit[1]);
182  _total_strain_int(1, 1) =
183  1 / (_kappa + 1) / (1 + t) / (1 + t) * (S21 * _misfit[0] + S22 * _misfit[1]);
184  // Inside the inclusion, elastic strain = total strain - eigenstrain
185  _elastic_strain_int(0, 0) = _total_strain_int(0, 0) - _misfit[0];
186  _elastic_strain_int(1, 1) = _total_strain_int(1, 1) - _misfit[1];
187 
188  _elastic_energy_int = 0.5 * _stress_int.doubleContraction(_elastic_strain_int);
189 }
std::vector< Real > _misfit
Misfit strains.
const Real _a
Semimajor axes of the ellipsoidal inclusion.
RankTwoTensor _total_strain_int
Real _kappa
Kolosov&#39;s first constant.
RankTwoTensor _stress_int
Interior stress and strain values are constant so they only need to be calculated once...
RankTwoTensor _elastic_strain_int

Member Data Documentation

◆ _a

const Real InclusionProperties::_a
private

Semimajor axes of the ellipsoidal inclusion.

Definition at line 40 of file InclusionProperties.h.

Referenced by computeQpProperties(), and precomputeInteriorProperties().

◆ _b

const Real InclusionProperties::_b
private

Definition at line 41 of file InclusionProperties.h.

Referenced by computeQpProperties(), and precomputeInteriorProperties().

◆ _elastic_energy

MaterialProperty<Real>& InclusionProperties::_elastic_energy
private

Definition at line 66 of file InclusionProperties.h.

Referenced by computeQpProperties().

◆ _elastic_energy_int

Real InclusionProperties::_elastic_energy_int
private

Definition at line 62 of file InclusionProperties.h.

Referenced by computeQpProperties(), and precomputeInteriorProperties().

◆ _elastic_strain_int

RankTwoTensor InclusionProperties::_elastic_strain_int
private

Definition at line 61 of file InclusionProperties.h.

Referenced by precomputeInteriorProperties().

◆ _kappa

Real InclusionProperties::_kappa
private

Kolosov's first constant.

Definition at line 53 of file InclusionProperties.h.

Referenced by computeQpProperties(), InclusionProperties(), and precomputeInteriorProperties().

◆ _lambda

const Real InclusionProperties::_lambda
private

Elastic constants (isotropic)

Definition at line 44 of file InclusionProperties.h.

Referenced by InclusionProperties().

◆ _misfit

std::vector<Real> InclusionProperties::_misfit
private

Misfit strains.

Definition at line 48 of file InclusionProperties.h.

Referenced by computeQpProperties(), InclusionProperties(), and precomputeInteriorProperties().

◆ _mu

const Real InclusionProperties::_mu
private

◆ _nu

Real InclusionProperties::_nu
private

Poisson's ratio.

Definition at line 51 of file InclusionProperties.h.

Referenced by computeQpProperties(), and InclusionProperties().

◆ _strain

MaterialProperty<RankTwoTensor>& InclusionProperties::_strain
private

Definition at line 65 of file InclusionProperties.h.

Referenced by computeQpProperties().

◆ _stress

MaterialProperty<RankTwoTensor>& InclusionProperties::_stress
private

Definition at line 64 of file InclusionProperties.h.

Referenced by computeQpProperties().

◆ _stress_int

RankTwoTensor InclusionProperties::_stress_int
private

Interior stress and strain values are constant so they only need to be calculated once.

Definition at line 59 of file InclusionProperties.h.

Referenced by computeQpProperties(), and precomputeInteriorProperties().

◆ _total_strain_int

RankTwoTensor InclusionProperties::_total_strain_int
private

Definition at line 60 of file InclusionProperties.h.

Referenced by computeQpProperties(), and precomputeInteriorProperties().


The documentation for this class was generated from the following files: