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.