This page was generated from
docs\source\notebooks/hoffman_symbolic.ipynb.
Symbolic manipulation of the Hoffman failure criterion#
[264]:
import sympy as sy
s11, s22, s33, s23, s13, s12, C1, C2, C3, C4, C5, C6, C7, C8, C9 = sy.symbols(
"s11, s22, s33, s23, s13, s12, C1, C2, C3, C4, C5, C6, C7, C8, C9"
)
Xc, Xt, Yc, Yt, Zc, Zt, S23, S13, S12 = sy.symbols(
"Xc, Xt, Yc, Yt, Zc, Zt, S23, S13, S12"
)
strengths = Xc, Xt, Yc, Yt, Zc, Zt, S23, S13, S12
stresses = s11, s22, s33, s23, s13, s12
coeffs = C1, C2, C3, C4, C5, C6, C7, C8, C9
hoffmann = (
C1 * (s22 - s33) ** 2
+ C2 * (s11 - s33) ** 2
+ C3 * (s22 - s11) ** 2
+ C4 * s11
+ C5 * s22
+ C6 * s33
+ C7 * s23
+ C8 * s13
+ C9 * s12
)
hoffmann
[264]:
$\displaystyle C_{1} \left(s_{22} - s_{33}\right)^{2} + C_{2} \left(s_{11} - s_{33}\right)^{2} + C_{3} \left(- s_{11} + s_{22}\right)^{2} + C_{4} s_{11} + C_{5} s_{22} + C_{6} s_{33} + C_{7} s_{23} + C_{8} s_{13} + C_{9} s_{12}$
[265]:
x = {s : 0.0 for s in stresses}
x[stresses[0]] = Xc
hoffmann.subs(x)
[265]:
$\displaystyle C_{2} Xc^{2} + C_{3} Xc^{2} + C_{4} Xc$
[266]:
A = sy.zeros(9, 9)
x = {s : 0.0 for s in stresses}
x[stresses[0]] = Xc
subs = hoffmann.subs(x)
A[0, :] = sy.Matrix([[subs.coeff(ci) for ci in coeffs]])
x = {s : 0.0 for s in stresses}
x[stresses[0]] = Xt
subs = hoffmann.subs(x)
A[1, :] = sy.Matrix([[subs.coeff(ci) for ci in coeffs]])
x = {s : 0.0 for s in stresses}
x[stresses[1]] = Yc
subs = hoffmann.subs(x)
A[2, :] = sy.Matrix([[subs.coeff(ci) for ci in coeffs]])
x = {s : 0.0 for s in stresses}
x[stresses[1]] = Yt
subs = hoffmann.subs(x)
A[3, :] = sy.Matrix([[subs.coeff(ci) for ci in coeffs]])
x = {s : 0.0 for s in stresses}
x[stresses[2]] = Zc
subs = hoffmann.subs(x)
A[4, :] = sy.Matrix([[subs.coeff(ci) for ci in coeffs]])
x = {s : 0.0 for s in stresses}
x[stresses[2]] = Zt
subs = hoffmann.subs(x)
A[5, :] = sy.Matrix([[subs.coeff(ci) for ci in coeffs]])
x = {s : 0.0 for s in stresses}
x[stresses[3]] = S23
subs = hoffmann.subs(x)
A[6, :] = sy.Matrix([[subs.coeff(ci) for ci in coeffs]])
x = {s : 0.0 for s in stresses}
x[stresses[4]] = S13
subs = hoffmann.subs(x)
A[7, :] = sy.Matrix([[subs.coeff(ci) for ci in coeffs]])
x = {s : 0.0 for s in stresses}
x[stresses[5]] = S12
subs = hoffmann.subs(x)
A[8, :] = sy.Matrix([[subs.coeff(ci) for ci in coeffs]])
A
[266]:
$\displaystyle \left[\begin{matrix}0 & Xc^{2} & Xc^{2} & Xc & 0 & 0 & 0 & 0 & 0\\0 & Xt^{2} & Xt^{2} & Xt & 0 & 0 & 0 & 0 & 0\\Yc^{2} & 0 & Yc^{2} & 0 & Yc & 0 & 0 & 0 & 0\\Yt^{2} & 0 & Yt^{2} & 0 & Yt & 0 & 0 & 0 & 0\\Zc^{2} & Zc^{2} & 0 & 0 & 0 & Zc & 0 & 0 & 0\\Zt^{2} & Zt^{2} & 0 & 0 & 0 & Zt & 0 & 0 & 0\\0 & 0 & 0 & 0 & 0 & 0 & S_{23} & 0 & 0\\0 & 0 & 0 & 0 & 0 & 0 & 0 & S_{13} & 0\\0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & S_{12}\end{matrix}\right]$
[267]:
inv_A = A.inv()
[268]:
inv_A.simplify()
inv_A
[268]:
$\displaystyle \left[\begin{matrix}- \frac{1}{2 Xc \left(Xc - Xt\right)} & \frac{1}{2 Xt \left(Xc - Xt\right)} & \frac{1}{2 Yc \left(Yc - Yt\right)} & - \frac{1}{2 Yt \left(Yc - Yt\right)} & \frac{1}{2 Zc \left(Zc - Zt\right)} & - \frac{1}{2 Zt \left(Zc - Zt\right)} & 0 & 0 & 0\\\frac{1}{2 Xc \left(Xc - Xt\right)} & - \frac{1}{2 Xt \left(Xc - Xt\right)} & - \frac{1}{2 Yc \left(Yc - Yt\right)} & \frac{1}{2 Yt \left(Yc - Yt\right)} & \frac{1}{2 Zc \left(Zc - Zt\right)} & - \frac{1}{2 Zt \left(Zc - Zt\right)} & 0 & 0 & 0\\\frac{1}{2 Xc \left(Xc - Xt\right)} & - \frac{1}{2 Xt \left(Xc - Xt\right)} & \frac{1}{2 Yc \left(Yc - Yt\right)} & - \frac{1}{2 Yt \left(Yc - Yt\right)} & - \frac{1}{2 Zc \left(Zc - Zt\right)} & \frac{1}{2 Zt \left(Zc - Zt\right)} & 0 & 0 & 0\\- \frac{Xt}{Xc \left(Xc - Xt\right)} & \frac{Xc}{Xt \left(Xc - Xt\right)} & 0 & 0 & 0 & 0 & 0 & 0 & 0\\0 & 0 & - \frac{Yt}{Yc \left(Yc - Yt\right)} & \frac{Yc}{Yt \left(Yc - Yt\right)} & 0 & 0 & 0 & 0 & 0\\0 & 0 & 0 & 0 & - \frac{Zt}{Zc \left(Zc - Zt\right)} & \frac{Zc}{Zt \left(Zc - Zt\right)} & 0 & 0 & 0\\0 & 0 & 0 & 0 & 0 & 0 & \frac{1}{S_{23}} & 0 & 0\\0 & 0 & 0 & 0 & 0 & 0 & 0 & \frac{1}{S_{13}} & 0\\0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \frac{1}{S_{12}}\end{matrix}\right]$
[269]:
from sympy import pycode
pycode(inv_A)
[269]:
'ImmutableDenseMatrix([[-(1/2)/(Xc*(Xc - Xt)), (1/2)/(Xt*(Xc - Xt)), (1/2)/(Yc*(Yc - Yt)), -(1/2)/(Yt*(Yc - Yt)), (1/2)/(Zc*(Zc - Zt)), -(1/2)/(Zt*(Zc - Zt)), 0, 0, 0], [(1/2)/(Xc*(Xc - Xt)), -(1/2)/(Xt*(Xc - Xt)), -(1/2)/(Yc*(Yc - Yt)), (1/2)/(Yt*(Yc - Yt)), (1/2)/(Zc*(Zc - Zt)), -(1/2)/(Zt*(Zc - Zt)), 0, 0, 0], [(1/2)/(Xc*(Xc - Xt)), -(1/2)/(Xt*(Xc - Xt)), (1/2)/(Yc*(Yc - Yt)), -(1/2)/(Yt*(Yc - Yt)), -(1/2)/(Zc*(Zc - Zt)), (1/2)/(Zt*(Zc - Zt)), 0, 0, 0], [-Xt/(Xc*(Xc - Xt)), Xc/(Xt*(Xc - Xt)), 0, 0, 0, 0, 0, 0, 0], [0, 0, -Yt/(Yc*(Yc - Yt)), Yc/(Yt*(Yc - Yt)), 0, 0, 0, 0, 0], [0, 0, 0, 0, -Zt/(Zc*(Zc - Zt)), Zc/(Zt*(Zc - Zt)), 0, 0, 0], [0, 0, 0, 0, 0, 0, 1/S23, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1/S13, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1/S12]])'
[270]:
new_coeffs = inv_A @ sy.Matrix([1 for _ in range(len(coeffs))])
[271]:
len(coeffs), len(new_coeffs)
[271]:
(9, 9)
[272]:
new_coeffs[-1]
[272]:
$\displaystyle \frac{1}{S_{12}}$
[273]:
hoffmann
[273]:
$\displaystyle C_{1} \left(s_{22} - s_{33}\right)^{2} + C_{2} \left(s_{11} - s_{33}\right)^{2} + C_{3} \left(- s_{11} + s_{22}\right)^{2} + C_{4} s_{11} + C_{5} s_{22} + C_{6} s_{33} + C_{7} s_{23} + C_{8} s_{13} + C_{9} s_{12}$
[274]:
coeffs
[274]:
(C1, C2, C3, C4, C5, C6, C7, C8, C9)
[275]:
new_hoffman = hoffmann.subs({k:v for k, v in zip(coeffs, new_coeffs)})
new_hoffman
[275]:
$\displaystyle s_{11} \left(\frac{Xc}{Xt \left(Xc - Xt\right)} - \frac{Xt}{Xc \left(Xc - Xt\right)}\right) + s_{22} \left(\frac{Yc}{Yt \left(Yc - Yt\right)} - \frac{Yt}{Yc \left(Yc - Yt\right)}\right) + s_{33} \left(\frac{Zc}{Zt \left(Zc - Zt\right)} - \frac{Zt}{Zc \left(Zc - Zt\right)}\right) + \left(- s_{11} + s_{22}\right)^{2} \cdot \left(\frac{1}{2 Zt \left(Zc - Zt\right)} - \frac{1}{2 Zc \left(Zc - Zt\right)} - \frac{1}{2 Yt \left(Yc - Yt\right)} + \frac{1}{2 Yc \left(Yc - Yt\right)} - \frac{1}{2 Xt \left(Xc - Xt\right)} + \frac{1}{2 Xc \left(Xc - Xt\right)}\right) + \left(s_{11} - s_{33}\right)^{2} \left(- \frac{1}{2 Zt \left(Zc - Zt\right)} + \frac{1}{2 Zc \left(Zc - Zt\right)} + \frac{1}{2 Yt \left(Yc - Yt\right)} - \frac{1}{2 Yc \left(Yc - Yt\right)} - \frac{1}{2 Xt \left(Xc - Xt\right)} + \frac{1}{2 Xc \left(Xc - Xt\right)}\right) + \left(s_{22} - s_{33}\right)^{2} \left(- \frac{1}{2 Zt \left(Zc - Zt\right)} + \frac{1}{2 Zc \left(Zc - Zt\right)} - \frac{1}{2 Yt \left(Yc - Yt\right)} + \frac{1}{2 Yc \left(Yc - Yt\right)} + \frac{1}{2 Xt \left(Xc - Xt\right)} - \frac{1}{2 Xc \left(Xc - Xt\right)}\right) + \frac{s_{23}}{S_{23}} + \frac{s_{13}}{S_{13}} + \frac{s_{12}}{S_{12}}$
[276]:
new_hoffman = new_hoffman.expand()
new_hoffman
[276]:
$\displaystyle \frac{Xc s_{11}}{Xc Xt - Xt^{2}} - \frac{Xt s_{11}}{Xc^{2} - Xc Xt} + \frac{Yc s_{22}}{Yc Yt - Yt^{2}} - \frac{Yt s_{22}}{Yc^{2} - Yc Yt} + \frac{Zc s_{33}}{Zc Zt - Zt^{2}} - \frac{Zt s_{33}}{Zc^{2} - Zc Zt} - \frac{2 s_{11}^{2}}{2 Xc Xt - 2 Xt^{2}} + \frac{2 s_{11}^{2}}{2 Xc^{2} - 2 Xc Xt} - \frac{2 s_{11} s_{22}}{2 Zc Zt - 2 Zt^{2}} + \frac{2 s_{11} s_{22}}{2 Yc Yt - 2 Yt^{2}} + \frac{2 s_{11} s_{22}}{2 Xc Xt - 2 Xt^{2}} + \frac{2 s_{11} s_{22}}{2 Zc^{2} - 2 Zc Zt} - \frac{2 s_{11} s_{22}}{2 Yc^{2} - 2 Yc Yt} - \frac{2 s_{11} s_{22}}{2 Xc^{2} - 2 Xc Xt} + \frac{2 s_{11} s_{33}}{2 Zc Zt - 2 Zt^{2}} - \frac{2 s_{11} s_{33}}{2 Yc Yt - 2 Yt^{2}} + \frac{2 s_{11} s_{33}}{2 Xc Xt - 2 Xt^{2}} - \frac{2 s_{11} s_{33}}{2 Zc^{2} - 2 Zc Zt} + \frac{2 s_{11} s_{33}}{2 Yc^{2} - 2 Yc Yt} - \frac{2 s_{11} s_{33}}{2 Xc^{2} - 2 Xc Xt} - \frac{2 s_{22}^{2}}{2 Yc Yt - 2 Yt^{2}} + \frac{2 s_{22}^{2}}{2 Yc^{2} - 2 Yc Yt} + \frac{2 s_{22} s_{33}}{2 Zc Zt - 2 Zt^{2}} + \frac{2 s_{22} s_{33}}{2 Yc Yt - 2 Yt^{2}} - \frac{2 s_{22} s_{33}}{2 Xc Xt - 2 Xt^{2}} - \frac{2 s_{22} s_{33}}{2 Zc^{2} - 2 Zc Zt} - \frac{2 s_{22} s_{33}}{2 Yc^{2} - 2 Yc Yt} + \frac{2 s_{22} s_{33}}{2 Xc^{2} - 2 Xc Xt} - \frac{2 s_{33}^{2}}{2 Zc Zt - 2 Zt^{2}} + \frac{2 s_{33}^{2}}{2 Zc^{2} - 2 Zc Zt} + \frac{s_{23}}{S_{23}} + \frac{s_{13}}{S_{13}} + \frac{s_{12}}{S_{12}}$
[277]:
new_hoffman = new_hoffman.simplify()
new_hoffman
[277]:
$\displaystyle \frac{s_{33}}{Zt} + \frac{s_{33}}{Zc} - \frac{s_{11} s_{22}}{Zc Zt} + \frac{s_{11} s_{33}}{Zc Zt} + \frac{s_{22} s_{33}}{Zc Zt} - \frac{s_{33}^{2}}{Zc Zt} + \frac{s_{22}}{Yt} + \frac{s_{22}}{Yc} + \frac{s_{11} s_{22}}{Yc Yt} - \frac{s_{11} s_{33}}{Yc Yt} - \frac{s_{22}^{2}}{Yc Yt} + \frac{s_{22} s_{33}}{Yc Yt} + \frac{s_{11}}{Xt} + \frac{s_{11}}{Xc} - \frac{s_{11}^{2}}{Xc Xt} + \frac{s_{11} s_{22}}{Xc Xt} + \frac{s_{11} s_{33}}{Xc Xt} - \frac{s_{22} s_{33}}{Xc Xt} + \frac{s_{23}}{S_{23}} + \frac{s_{13}}{S_{13}} + \frac{s_{12}}{S_{12}}$
[278]:
pycode(new_hoffman)
[278]:
's33/Zt + s33/Zc - s11*s22/(Zc*Zt) + s11*s33/(Zc*Zt) + s22*s33/(Zc*Zt) - s33**2/(Zc*Zt) + s22/Yt + s22/Yc + s11*s22/(Yc*Yt) - s11*s33/(Yc*Yt) - s22**2/(Yc*Yt) + s22*s33/(Yc*Yt) + s11/Xt + s11/Xc - s11**2/(Xc*Xt) + s11*s22/(Xc*Xt) + s11*s33/(Xc*Xt) - s22*s33/(Xc*Xt) + s23/S23 + s13/S13 + s12/S12'
Plates and Shells#
[279]:
hoffman_PS = new_hoffman.subs({s33:0,})
hoffman_PS.simplify()
hoffman_PS
[279]:
$\displaystyle - \frac{s_{11} s_{22}}{Zc Zt} + \frac{s_{22}}{Yt} + \frac{s_{22}}{Yc} + \frac{s_{11} s_{22}}{Yc Yt} - \frac{s_{22}^{2}}{Yc Yt} + \frac{s_{11}}{Xt} + \frac{s_{11}}{Xc} - \frac{s_{11}^{2}}{Xc Xt} + \frac{s_{11} s_{22}}{Xc Xt} + \frac{s_{23}}{S_{23}} + \frac{s_{13}}{S_{13}} + \frac{s_{12}}{S_{12}}$
[280]:
hoffman_PS = hoffman_PS.simplify()
hoffman_PS
[280]:
$\displaystyle - \frac{s_{11} s_{22}}{Zc Zt} + \frac{s_{22}}{Yt} + \frac{s_{22}}{Yc} + \frac{s_{11} s_{22}}{Yc Yt} - \frac{s_{22}^{2}}{Yc Yt} + \frac{s_{11}}{Xt} + \frac{s_{11}}{Xc} - \frac{s_{11}^{2}}{Xc Xt} + \frac{s_{11} s_{22}}{Xc Xt} + \frac{s_{23}}{S_{23}} + \frac{s_{13}}{S_{13}} + \frac{s_{12}}{S_{12}}$
[281]:
pycode(hoffman_PS)
[281]:
'-s11*s22/(Zc*Zt) + s22/Yt + s22/Yc + s11*s22/(Yc*Yt) - s22**2/(Yc*Yt) + s11/Xt + s11/Xc - s11**2/(Xc*Xt) + s11*s22/(Xc*Xt) + s23/S23 + s13/S13 + s12/S12'
Membranes#
[282]:
hoffman_membrane = new_hoffman.subs({s33:0, s23:0, s13:0})
hoffman_membrane.simplify()
hoffman_membrane
[282]:
$\displaystyle - \frac{s_{11} s_{22}}{Zc Zt} + \frac{s_{22}}{Yt} + \frac{s_{22}}{Yc} + \frac{s_{11} s_{22}}{Yc Yt} - \frac{s_{22}^{2}}{Yc Yt} + \frac{s_{11}}{Xt} + \frac{s_{11}}{Xc} - \frac{s_{11}^{2}}{Xc Xt} + \frac{s_{11} s_{22}}{Xc Xt} + \frac{s_{12}}{S_{12}}$
[283]:
hoffman_membrane = hoffman_membrane.simplify()
hoffman_membrane
[283]:
$\displaystyle - \frac{s_{11} s_{22}}{Zc Zt} + \frac{s_{22}}{Yt} + \frac{s_{22}}{Yc} + \frac{s_{11} s_{22}}{Yc Yt} - \frac{s_{22}^{2}}{Yc Yt} + \frac{s_{11}}{Xt} + \frac{s_{11}}{Xc} - \frac{s_{11}^{2}}{Xc Xt} + \frac{s_{11} s_{22}}{Xc Xt} + \frac{s_{12}}{S_{12}}$
[284]:
pycode(hoffman_membrane)
[284]:
'-s11*s22/(Zc*Zt) + s22/Yt + s22/Yc + s11*s22/(Yc*Yt) - s22**2/(Yc*Yt) + s11/Xt + s11/Xc - s11**2/(Xc*Xt) + s11*s22/(Xc*Xt) + s12/S12'