Symbolic Elasticity Notebook

[1]:
import sympy as sp

from mechpy.core.symbolic.material import SymbolicIsotropicMaterial
from mechpy.core.symbolic.coord import SymbolicCartesianCoordSystem
from mechpy.core.symbolic.stress import SymbolicStressTensor
from mechpy.core.symbolic.strain import SymbolicStrainTensor
from mechpy.core.symbolic.elasticity import SymbolicLinearElasticity

Simple Traction

Compliance Tensor

[2]:
material_props = {"E": sp.symbols("E"), "nu": sp.symbols("nu")}
material = SymbolicIsotropicMaterial(**material_props)
display(material)
compliance_tensor = material.compliance_tensor()
display(compliance_tensor.data)
SymbolicIsotropicMaterial(E=E, nu=nu)
$\displaystyle \left[\begin{matrix}\frac{1}{E} & - \frac{\nu}{E} & - \frac{\nu}{E} & 0 & 0 & 0\\- \frac{\nu}{E} & \frac{1}{E} & - \frac{\nu}{E} & 0 & 0 & 0\\- \frac{\nu}{E} & - \frac{\nu}{E} & \frac{1}{E} & 0 & 0 & 0\\0 & 0 & 0 & \frac{2 \left(\nu + 1\right)}{E} & 0 & 0\\0 & 0 & 0 & 0 & \frac{2 \left(\nu + 1\right)}{E} & 0\\0 & 0 & 0 & 0 & 0 & \frac{2 \left(\nu + 1\right)}{E}\end{matrix}\right]$

Stress Tensor

[3]:
stress_tensor = SymbolicStressTensor.create(notation="voigt")
display(stress_tensor.data)
components_values = {
    1: 0,
    2: 0,
    3: 0,
    4: 0,
    5: 0,
}
stress_tensor.subs_tensor_components(components_values)
display(stress_tensor.data)
$\displaystyle \left[\begin{matrix}\sigma_{11} & \sigma_{22} & \sigma_{33} & \sigma_{23} & \sigma_{13} & \sigma_{12}\end{matrix}\right]$
$\displaystyle \left[\begin{matrix}\sigma_{11} & 0 & 0 & 0 & 0 & 0\end{matrix}\right]$

Result

[4]:
strain_tensor = SymbolicStrainTensor.create(notation="voigt")
strain_tensor_expr = SymbolicLinearElasticity.hookes_law(compliance_tensor, stress_tensor)
display(sp.Equality(strain_tensor.data, strain_tensor_expr.data))
display(*[sp.Equality(strain_tensor[_], strain_tensor_expr[_]) for _ in range(6)])
$\displaystyle \left[\begin{matrix}\epsilon_{11} & \epsilon_{22} & \epsilon_{33} & 2 \epsilon_{23} & 2 \epsilon_{13} & 2 \epsilon_{12}\end{matrix}\right] = \left[\begin{matrix}\frac{\sigma_{11}}{E} & - \frac{\sigma_{11} \nu}{E} & - \frac{\sigma_{11} \nu}{E} & 0 & 0 & 0\end{matrix}\right]$
$\displaystyle \epsilon_{11} = \frac{\sigma_{11}}{E}$
$\displaystyle \epsilon_{22} = - \frac{\sigma_{11} \nu}{E}$
$\displaystyle \epsilon_{33} = - \frac{\sigma_{11} \nu}{E}$
$\displaystyle 2 \epsilon_{23} = 0$
$\displaystyle 2 \epsilon_{13} = 0$
$\displaystyle 2 \epsilon_{12} = 0$

Simple Deformation

Stiffness Tensor

[5]:
material_props = {"E": sp.symbols("E"), "nu": sp.symbols("nu")}
material = SymbolicIsotropicMaterial(**material_props)
display(material)
stiffness_tensor = material.stiffness_tensor()
display(stiffness_tensor.data)
SymbolicIsotropicMaterial(E=E, nu=nu)
$\displaystyle \left[\begin{matrix}\frac{E \left(\nu - 1\right)}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & - \frac{E \nu}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & - \frac{E \nu}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & 0 & 0 & 0\\- \frac{E \nu}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & \frac{E \left(\nu - 1\right)}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & - \frac{E \nu}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & 0 & 0 & 0\\- \frac{E \nu}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & - \frac{E \nu}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & \frac{E \left(\nu - 1\right)}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & 0 & 0 & 0\\0 & 0 & 0 & \frac{E}{2 \left(\nu + 1\right)} & 0 & 0\\0 & 0 & 0 & 0 & \frac{E}{2 \left(\nu + 1\right)} & 0\\0 & 0 & 0 & 0 & 0 & \frac{E}{2 \left(\nu + 1\right)}\end{matrix}\right]$

Strain Tensor

[6]:
strain_tensor = SymbolicStrainTensor.create(notation="voigt")
display(strain_tensor.data)
components_values = {
    1: 0,
    2: 0,
    3: 0,
    4: 0,
    5: 0,
}
strain_tensor.subs_tensor_components(components_values)
display(strain_tensor.data)
$\displaystyle \left[\begin{matrix}\epsilon_{11} & \epsilon_{22} & \epsilon_{33} & 2 \epsilon_{23} & 2 \epsilon_{13} & 2 \epsilon_{12}\end{matrix}\right]$
$\displaystyle \left[\begin{matrix}\epsilon_{11} & 0 & 0 & 0 & 0 & 0\end{matrix}\right]$

Result

[7]:
stress_tensor = SymbolicStressTensor.create(notation="voigt")
stress_tensor_expr = SymbolicLinearElasticity.hookes_law_inverse(stiffness_tensor, strain_tensor)
display(sp.Equality(stress_tensor.data, stress_tensor_expr.data))
display(*[sp.Equality(stress_tensor[_], stress_tensor_expr[_]) for _ in range(6)])
$\displaystyle \left[\begin{matrix}\sigma_{11} & \sigma_{22} & \sigma_{33} & \sigma_{23} & \sigma_{13} & \sigma_{12}\end{matrix}\right] = \left[\begin{matrix}\frac{E \epsilon_{11} \left(\nu - 1\right)}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & - \frac{E \epsilon_{11} \nu}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & - \frac{E \epsilon_{11} \nu}{\left(\nu + 1\right) \left(2 \nu - 1\right)} & 0 & 0 & 0\end{matrix}\right]$
$\displaystyle \sigma_{11} = \frac{E \epsilon_{11} \left(\nu - 1\right)}{\left(\nu + 1\right) \left(2 \nu - 1\right)}$
$\displaystyle \sigma_{22} = - \frac{E \epsilon_{11} \nu}{\left(\nu + 1\right) \left(2 \nu - 1\right)}$
$\displaystyle \sigma_{33} = - \frac{E \epsilon_{11} \nu}{\left(\nu + 1\right) \left(2 \nu - 1\right)}$
$\displaystyle \sigma_{23} = 0$
$\displaystyle \sigma_{13} = 0$
$\displaystyle \sigma_{12} = 0$
[ ]: