Symbolic Displacement Notebook

[1]:
import sympy as sp

from mechpy.core.symbolic.coord import (
    SymbolicCartesianCoordSystem,
    SymbolicCylindricalCoordSystem,
)
from mechpy.core.symbolic.displacement import SymbolicDisplacement

Cartesian Coord

[2]:
data = sp.Array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
displacement_field = SymbolicDisplacement.create_linear(data=data)
display(displacement_field.data)
$\displaystyle \left[\begin{matrix}x + 2 y + 3 z & 4 x + 5 y + 6 z & 7 x + 8 y + 9 z\end{matrix}\right]$
[3]:
strain_tensor = displacement_field.strain_tensor()
display(strain_tensor.data)
display(strain_tensor.to_general().data)
$\displaystyle \left[\begin{matrix}1 & 5 & 9 & 6 & 14 & 10\end{matrix}\right]$
$\displaystyle \left[\begin{matrix}1 & 5 & 9\\5 & 3 & 7\\9 & 7 & 5\end{matrix}\right]$

Cylindrical Coord

[4]:
cartesian_system = SymbolicCartesianCoordSystem()
coord_system = cartesian_system.to_cylindrical()
display(*coord_system.basis)
$\displaystyle \sqrt{x^{2} + y^{2}}$
$\displaystyle \operatorname{atan}_{2}{\left(y,x \right)}$
$\displaystyle z$
[5]:
x1, x2, x3 = coord_system.basis
data = sp.NDimArray([x1*x1+x3, x2, x1+x3])
displacement_field = SymbolicDisplacement(coord_system=cartesian_system, data=data)
display(displacement_field.data)
$\displaystyle \left[\begin{matrix}x^{2} + y^{2} + z & \operatorname{atan}_{2}{\left(y,x \right)} & z + \sqrt{x^{2} + y^{2}}\end{matrix}\right]$
[6]:
strain_tensor = displacement_field.strain_tensor(cartesian_system)
display(strain_tensor.to_general().data)
$\displaystyle \left[\begin{matrix}2 x & \frac{x}{x^{2} + y^{2}} & 1\\\frac{x}{x^{2} + y^{2}} & y - \frac{y}{2 \left(x^{2} + y^{2}\right)} & \frac{y}{2 \sqrt{x^{2} + y^{2}}}\\1 & \frac{y}{2 \sqrt{x^{2} + y^{2}}} & \frac{x}{2 \sqrt{x^{2} + y^{2}}} + \frac{1}{2}\end{matrix}\right]$
[7]:
cartesian_system = SymbolicCartesianCoordSystem()
display(cartesian_system.basis)
x1, x2, x3 = cartesian_system.basis
cylindrical_system = SymbolicCylindricalCoordSystem()
display(cylindrical_system.basis)
y1, y2, y3 = cylindrical_system.basis
custom_basis = sp.Function(x1)(x1, x2), sp.Function(y2)(x1), y3
display(custom_basis)
(x, y, z)
(r, theta, z)
(x(x, y), theta(x), z)
[8]:
custom_cylindrical_system = SymbolicCylindricalCoordSystem(basis=custom_basis)
display(custom_cylindrical_system)
x1, x2, x3 = custom_cylindrical_system.basis
data = sp.NDimArray([x1 * x1, x1 + x2, x3 * x3])
displacement_field = SymbolicDisplacement.create(
    coord_system=custom_cylindrical_system,
    data=data,
    symbols_validation=False,
)
display(displacement_field.data)
SymbolicCylindricalCoordSystem(origin=(0, 0, 0), basis=(x(x, y), theta(x), z))
$\displaystyle \left[\begin{matrix}x^{2}{\left(x,y \right)} & \theta{\left(x \right)} + x{\left(x,y \right)} & z^{2}\end{matrix}\right]$
[9]:
strain_tensor = displacement_field.strain_tensor(cartesian_system)
display(strain_tensor.data)
display(strain_tensor.to_general().data)
$\displaystyle \left[\begin{matrix}2 x{\left(x,y \right)} \frac{\partial}{\partial x} x{\left(x,y \right)} & \frac{\partial}{\partial y} x{\left(x,y \right)} & 2 z & 2 x{\left(x,y \right)} \frac{\partial}{\partial y} x{\left(x,y \right)} + \frac{d}{d x} \theta{\left(x \right)} + \frac{\partial}{\partial x} x{\left(x,y \right)} & 0 & 0\end{matrix}\right]$
$\displaystyle \left[\begin{matrix}2 x{\left(x,y \right)} \frac{\partial}{\partial x} x{\left(x,y \right)} & \frac{\partial}{\partial y} x{\left(x,y \right)} & 2 z\\\frac{\partial}{\partial y} x{\left(x,y \right)} & x{\left(x,y \right)} \frac{\partial}{\partial y} x{\left(x,y \right)} + \frac{\frac{d}{d x} \theta{\left(x \right)}}{2} + \frac{\frac{\partial}{\partial x} x{\left(x,y \right)}}{2} & 0\\2 z & 0 & 0\end{matrix}\right]$