The Eshelby Library

simcoon.simmit.Eshelby_sphere(nu: SupportsFloat, copy: bool = True) numpy.typing.NDArray[numpy.float64]

Provides the Eshelby tensor of a spherical inclusion for isotropic linear elasticity.

Parameters:

nu (float) – the Poisson ratio

Returns:

Provides the Eshelby tensor of a spherical inclusion for isotropic linear elasticity as a numpy array, according to the conventions of a localisation tensor, as a function of the Poisson ratio \(\nu\)

Return type:

pybind11::array_t<double>

Notes

The Eshelby tensor for spherical inclusions is defined as:

\[\begin{split}\boldsymbol{S}=\left(\begin{matrix} \frac{7-5\nu}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & 0 & 0 & 0 \\ \frac{5\nu-1}{15(1-\nu)} & \frac{7-5\nu}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & 0 & 0 & 0 \\ \frac{5\nu-1}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & \frac{7-5\nu}{15(1-\nu)} & 0 & 0 & 0 \\ 0 & 0 & 0 & 2\frac{4-5\nu}{15(1-\nu)} & 0 & 0 \\ 0 & 0 & 0 & 0 & 2\frac{4-5\nu}{15(1-\nu)} & 0 \\ 0 & 0 & 0 & 0 & 0 & 2\frac{4-5\nu}{15(1-\nu)} \end{matrix}\right)\end{split}\]

Examples

import numpy as np
import simcoon as sim

nu = 0.3
S = sim.Eshelby_sphere(nu)
print(S)
simcoon.simmit.Eshelby_cylinder(nu: SupportsFloat, copy: bool = True) numpy.typing.NDArray[numpy.float64]

Provides the Eshelby tensor of a cylindrical inclusion for isotropic linear elasticity

Parameters:

nu (float) – the Poisson ratio

Returns:

Provides the Eshelby tensor of a cylindrical inclusion for isotropic linear elasticity as a numpy array according to the conventions of a localisation tensor, as a function of the Poisson ratio \(\nu\)

Return type:

pybind11::array_t<double>

Notes

The Eshelby tensor for spherical inclusions is defined as:

\[\begin{split}\boldsymbol{S}=\left(\begin{matrix} \frac{7-5\nu}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & 0 & 0 & 0 \\ \frac{5\nu-1}{15(1-\nu)} & \frac{7-5\nu}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & 0 & 0 & 0 \\ \frac{5\nu-1}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & \frac{7-5\nu}{15(1-\nu)} & 0 & 0 & 0 \\ 0 & 0 & 0 & 2\frac{4-5\nu}{15(1-\nu)} & 0 & 0 \\ 0 & 0 & 0 & 0 & 2\frac{4-5\nu}{15(1-\nu)} & 0 \\ 0 & 0 & 0 & 0 & 0 & 2\frac{4-5\nu}{15(1-\nu)} \end{matrix}\right)\end{split}\]

Examples

import numpy as np
import simcoon as sim

nu = 0.3
S = sim.Eshelby_sphere(nu)
print(S)
simcoon.simmit.Eshelby_prolate(nu: SupportsFloat, aspect_ratio: SupportsFloat, copy: bool = True) numpy.typing.NDArray[numpy.float64]

Provides the Eshelby tensor of a prolate spheroid inclusion for isotropic linear elasticity

Parameters:
  • nu (float) – the Poisson ratio

  • a_r (float) – Aspect ratio defined as \(a_r = \frac{a1}{a2} = \frac{a1}{a3}\)

Returns:

Provides the Eshelby tensor of a prolate spheroid inclusion for isotropic linear elasticity as a numpy array according to the conventions of a localisation tensor, as a function of the Poisson ratio \(\nu\) and the aspect ratio \(a_r = \frac{a1}{a2} = \frac{a1}{a3}\)

Return type:

pybind11::array_t<double>

Notes

The Eshelby tensor for prolate spheroidal inclusions is defined as:

\[\begin{split}\boldsymbol{S}=\left(\begin{matrix} S_{11} & S_{12} & S_{12} & 0 & 0 & 0 \\ S_{21} & S_{22} & S_{23} & 0 & 0 & 0 \\ S_{21} & S_{23} & S_{22} & 0 & 0 & 0 \\ 0 & 0 & 0 & S_{44} & 0 & 0 \\ 0 & 0 & 0 & 0 & S_{44} & 0 \\ 0 & 0 & 0 & 0 & 0 & S_{66} \end{matrix}\right)\end{split}\]

with

\[\begin{split}\begin{matrix} S_{11} & = \frac{1}{2(1-\nu)}\left(1-2\nu+\frac{3a_r^2-1}{a_r^2-1}-g\left(1-2\nu+\frac{3a_r^2}{a_r^2-1}\right)\right) \\ S_{12} & = \frac{-1}{2(1-\nu)}\left(1-2\nu+\frac{1}{a_r^2-1}+g\left(1-2\nu+\frac{3}{a_r^2-1}\right)\right) \\ S_{21} & = \frac{-a_r^2}{2(1-\nu)}\left(a_r^2-1\right)+\frac{g}{4\left(1-\nu\right)}\left(\frac{3a_r^2}{a_r^2-1}-\left(1-2\nu\right)\right) \\ S_{22} & = \frac{3a_r^2}{8(1-\nu)}\left(a_r^2-1\right)+\frac{g}{4\left(1-\nu\right)}\left(1-2\nu-\frac{9}{4\left(a_r^2-1\right)}\right) \\ S_{23} & = \frac{1}{4(1-\nu)}\left(\frac{a_r^2}{2\left(a_r^2-1\right)}-g\left(1-2\nu+\frac{3}{4\left(a_r^2-1\right)}\right)\right) \\ S_{44} & = \frac{2}{4\left(1-\nu\right)}\left(1-2\nu-\frac{a_r^2+1}{a_r^2-1}-\frac{g}{2}\left(1-2\nu-\frac{3a_r^2+1}{a_r^2-1}\right)\right) \\ S_{66} & = \frac{2}{4\left(1-\nu\right)}\left(\frac{a_r^2}{2\left(a_r^2-1\right)}+g\left(1-2\nu-\frac{3}{4\left(a_r^2-1\right)}\right)\right) \end{matrix}\end{split}\]

considering \(g = a_r\frac{a_r\sqrt{a_r^2-1}}{\left(a_r^2-1\right)^{\frac{3}{2}}} - acos(a_r)\)

Examples

import numpy as np
import simcoon as sim

nu = 0.3
a_r = 2.0
S = sim.Eshelby_prolate(nu,a_r)
print(S)
simcoon.simmit.Eshelby_oblate(nu: SupportsFloat, aspect_ratio: SupportsFloat, copy: bool = True) numpy.typing.NDArray[numpy.float64]

Provides the Eshelby tensor of a oblate spheroid inclusion for isotropic linear elasticity

Parameters:
  • nu (float) – the Poisson ratio

  • a_r (float) – Aspect ratio defined as \(a_r = \frac{a1}{a2} = \frac{a1}{a3}\)

Returns:

Provides the Eshelby tensor of a oblate spheroid inclusion for isotropic linear elasticity as a numpy array according to the conventions of a localisation tensor, as a function of the Poisson ratio \(\nu\) and the aspect ratio \(a_r = \frac{a1}{a2} = \frac{a1}{a3}\)

Return type:

pybind11::array_t<double>

Notes

The Eshelby tensor for oblate spheroidal inclusions is defined as:

\[\begin{split}\boldsymbol{S}=\left(\begin{matrix} S_{11} & S_{12} & S_{12} & 0 & 0 & 0 \\ S_{21} & S_{22} & S_{23} & 0 & 0 & 0 \\ S_{21} & S_{23} & S_{22} & 0 & 0 & 0 \\ 0 & 0 & 0 & S_{44} & 0 & 0 \\ 0 & 0 & 0 & 0 & S_{44} & 0 \\ 0 & 0 & 0 & 0 & 0 & S_{66} \end{matrix}\right)\end{split}\]

with

\[\begin{split}\begin{matrix} S_{11} &= \frac{1}{2(1-\nu)}\left(1-2\nu+\frac{3a_r^2-1}{a_r^2-1}-g\left(1-2\nu+\frac{3a_r^2}{a_r^2-1}\right)\right) \\ S_{12} &= \frac{-1}{2(1-\nu)}\left(1-2\nu+\frac{1}{a_r^2-1}+g\left(1-2\nu+\frac{3}{a_r^2-1}\right)\right) \\ S_{21} &= \frac{-a_r^2}{2(1-\nu)}\left(a_r^2-1\right)+\frac{g}{4\left(1-\nu\right)}\left(\frac{3a_r^2}{a_r^2-1}-\left(1-2\nu\right)\right) \\ S_{22} &= \frac{3a_r^2}{8(1-\nu)}\left(a_r^2-1\right)+\frac{g}{4\left(1-\nu\right)}\left(1-2\nu-\frac{9}{4\left(a_r^2-1\right)}\right) \\ S_{23} &= \frac{1}{4(1-\nu)}\left(\frac{a_r^2}{2\left(a_r^2-1\right)}-g\left(1-2\nu+\frac{3}{4\left(a_r^2-1\right)}\right)\right) \\ S_{44} &= \frac{2}{4\left(1-\nu\right)}\left(1-2\nu-\frac{a_r^2+1}{a_r^2-1}-\frac{g}{2}\left(1-2\nu-\frac{3a_r^2+1}{a_r^2-1}\right)\right) \\ S_{66} &= \frac{2}{4\left(1-\nu\right)}\left(\frac{a_r^2}{2\left(a_r^2-1\right)}+g\left(1-2\nu-\frac{3}{4\left(a_r^2-1\right)}\right)\right) \end{matrix}\end{split}\]

considering \(g = a_r\frac{-a_r\sqrt{1-a_r^2}}{\left(1-a_r^2\right)^{\frac{3}{2}}} - acos(a_r)\)

Examples

import numpy as np
import simcoon as sim

nu = 0.3
a_r = 2.0
S = sim.Eshelby_oblate(nu,a_r)
print(S)
simcoon.simmit.Eshelby_penny(nu: SupportsFloat, copy: bool = True) numpy.typing.NDArray[numpy.float64]

Provides the Eshelby tensor of a penny-shaped (crack) inclusion for isotropic linear elasticity

Parameters:

nu (float) – the Poisson ratio

Returns:

Provides the Eshelby tensor of a penny-shaped (crack) inclusion for isotropic linear elasticity as a numpy array according to the conventions of a localisation tensor, as a function of the Poisson ratio \(\nu\). This corresponds to the limit case of an oblate spheroid when the aspect ratio \(a_r \rightarrow 0\).

Return type:

pybind11::array_t<double>

Notes

The penny-shaped inclusion is oriented such that the normal to the crack plane is the axis \(1\). The Eshelby tensor for penny-shaped (crack) inclusions is defined as:

\[\begin{split}\boldsymbol{S}=\left(\begin{matrix} 1 & \frac{\nu}{1-\nu} & \frac{\nu}{1-\nu} & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 \end{matrix}\right)\end{split}\]

This represents the limiting case where \(a_r = \frac{a_1}{a_2} = \frac{a_1}{a_3} \rightarrow 0\), corresponding to a flat disc or crack perpendicular to axis 1.

Examples

import numpy as np
import simcoon as sim

nu = 0.3
S = sim.Eshelby_penny(nu)
print(S)
simcoon.simmit.Eshelby(L: Annotated[numpy.typing.ArrayLike, numpy.float64], a1: SupportsFloat = 1.0, a2: SupportsFloat = 1.0, a3: SupportsFloat = 1.0, mp: SupportsInt = 50, np: SupportsInt = 50, copy: bool = True) numpy.typing.NDArray[numpy.float64]

Provides a numerical estimation of the Eshelby tensor of an ellipsoisal, possibly anisotropic inclusion,

Parameters:
  • L (numpy array) – the stiffness tensor of the considered material

  • a1 (float) – the aspect ratio in the direction \(1\)

  • a2 (float) – the aspect ratio in the direction \(2\)

  • a3 (float) – the aspect ratio in the direction \(3\)

  • mp (int) – the number of integration points in the direction \(1\)

  • np (int) – the number of integration points in the direction \(2\)

Returns:

Provides the numerical estimation of the Eshelby tensor of an ellispoid in the general case of anisotropic media, as a function of the stiffness tensor, and the three semi-axis length of the ellipsoid in the direction \(1\), \(2\) and \(3\), respectively. It also requires the list of integration points and their respective weight for the numerical integration, as well as the number of integration points in the \(1\) and \(2\) directions. The points and weights are calculated using the point function that require to be called previously.

Return type:

pybind11::array_t<double>

Notes

The Eshelby tensor is defined as:

\[\begin{split}\boldsymbol{S}=\left(\begin{matrix} S_{11} & S_{12} & S_{12} & 0 & 0 & 0 \\ S_{21} & S_{22} & S_{23} & 0 & 0 & 0 \\ S_{21} & S_{23} & S_{22} & 0 & 0 & 0 \\ 0 & 0 & 0 & S_{44} & 0 & 0 \\ 0 & 0 & 0 & 0 & S_{44} & 0 \\ 0 & 0 & 0 & 0 & 0 & S_{66} \end{matrix}\right)\end{split}\]

Examples

import numpy as np
import simcoon as sim

mat L = sim.L_iso(210000., 0.3, "Enu");
double a1 = 2.0;
double a2 = 1.0;
double a3 = 1.0;
int mp = 4;
int np = 4;
mat S = Eshelby(L, a1, a2, a3, mp, np);
print(S)
simcoon.simmit.T_II(L: Annotated[numpy.typing.ArrayLike, numpy.float64], a1: SupportsFloat = 1.0, a2: SupportsFloat = 1.0, a3: SupportsFloat = 1.0, mp: SupportsInt = 50, np: SupportsInt = 50, copy: bool = True) numpy.typing.NDArray[numpy.float64]

Provides a numerical estimation of the Hill interaction tensor of an ellipsoisal, possibly anisotropic inclusion,

Parameters:
  • L (numpy array) – the stiffness tensor of the considered material

  • a1 (float) – the aspect ratio in the direction \(1\)

  • a2 (float) – the aspect ratio in the direction \(2\)

  • a3 (float) – the aspect ratio in the direction \(3\)

  • mp (int) – the number of integration points in the direction \(1\)

  • np (int) – the number of integration points in the direction \(2\)

Returns:

Provides the numerical estimation of the Hill interaction tensor of an ellispoid in the general case of anisotropic media, as a function of the stiffness tensor, and the three semi-axis length of the ellipsoid in the direction \(1\), \(2\) and \(3\), respectively. It also requires the list of integration points and their respective weight for the numerical integration, as well as the number of integration points in the \(1\) and \(2\) directions. The points and weights are calculated using the point function that require to be called previously.

Return type:

pybind11::array_t<double>

Notes

The Hill interaction tensor is defined as:

\[\begin{split}\boldsymbol{T}=\left(\begin{matrix} T_{11} & T_{12} & T_{12} & 0 & 0 & 0 \\ T_{21} & T_{22} & T_{23} & 0 & 0 & 0 \\ T_{21} & T_{23} & T_{22} & 0 & 0 & 0 \\ 0 & 0 & 0 & T_{44} & 0 & 0 \\ 0 & 0 & 0 & 0 & T_{44} & 0 \\ 0 & 0 & 0 & 0 & 0 & T_{66} \end{matrix}\right)\end{split}\]

Examples

import numpy as np
import simcoon as sim

mat L = sim.L_iso(210000., 0.3, "Enu");
double a1 = 2.0;
double a2 = 1.0;
double a3 = 1.0;
int mp = 4;
int np = 4;
mat S = T_II(L, a1, a2, a3, mp, np);
print(S)