First ABD Stiffness
The simplest Tensyl workflow is a skin-only isotropic plate — no stiffeners, no surprises. It is the baseline you sanity-check everything else against before stiffener homogenization gets interesting.
from tensyl import IsotropicMaterial, isotropic_plate
aluminum_2024_like = IsotropicMaterial(
E=10.6e6, # psi
nu=0.33,
density=0.1, # workflow-selected consistent mass unit
)
stiffness = isotropic_plate(aluminum_2024_like, thickness=0.080)
print(stiffness.A) # membrane stiffness, lbf/in
print(stiffness.B) # zero for a symmetric mid-surface isotropic skin
print(stiffness.D) # bending stiffness, lbf*in
print(stiffness.As) # transverse shear stiffness, lbf/in
For an isotropic plate of thickness \(h\), Tensyl uses the plane-stress reduced stiffness:
\[
\mathbf Q =
\frac{E}{1-\nu^2}
\begin{bmatrix}
1 & \nu & 0 \\
\nu & 1 & 0 \\
0 & 0 & (1-\nu)/2
\end{bmatrix}.
\]
The mid-surface plate blocks are:
\[
\mathbf A=\mathbf Qh,\qquad
\mathbf B=\mathbf 0,\qquad
\mathbf D=\frac{\mathbf Qh^3}{12}.
\]
ABDStiffness is an operator, not only a matrix container. Its public
mechanics contract is stored energy:
from tensyl import generalized_strain
eta = generalized_strain([1.0e-4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
energy_density = stiffness.energy(eta)
resultants = stiffness.resultants(eta)
tangent = stiffness.tangent(eta)
tangent is constant for ABDStiffness, so stiffness.constant_tangent gives the
same \(8\times8\) operator without a strain input.