Orthogrid Panel and Barrel
This example adds stiffeners to the skin, computes a homogenized ABD stiffness, and attaches the result to a cylindrical midsurface. The numbers are illustrative, not allowables.
Orthogrid Panel
Build an orthogrid panel about the skin reference surface. Stringers run along
local e1; ribs run along local e2. Both stiffener families are external to
the +n side of the skin reference surface, so positive eccentricity should
create membrane-bending coupling.
from tensyl import (
BeamSection,
EnergyHomogenizer,
IsotropicMaterial,
ValidityContext,
isotropic_plate,
orthogrid_cell,
)
skin = isotropic_plate(
IsotropicMaterial(E=10.6e6, nu=0.33, density=0.1),
thickness=0.080,
)
section = BeamSection(
EA=3.2e6,
EIy=2.4e4,
EIz=6.5e3,
GJ=4.0e3,
kGAy=1.1e6,
kGAz=0.9e6,
)
cell = orthogrid_cell(
skin=skin,
stringer_section=section,
rib_section=section,
stringer_spacing=6.0,
rib_spacing=8.0,
stringer_eccentricity=0.45,
rib_eccentricity=0.45,
)
result = EnergyHomogenizer().compute(
cell,
validity_context=ValidityContext(
characteristic_height=0.50,
pitch=8.0,
min_radius=120.0,
response_length=80.0,
),
)
stiffness = result.stiffness
assert stiffness.C8.shape == (8, 8)
assert result.diagnostics["symmetric"]
assert result.diagnostics["positive_semidefinite"]
assert stiffness.B[0, 0] > 0.0
Review result.validity.warnings before using the ABD stiffness downstream.
Selected Output
These inputs match the walkthrough in Homogenization and Results, so the blocks come out the same; that page reads them term by term.
Rounded diagonal values:
| Block | Diagonal values |
|---|---|
A |
1.485e6, 1.352e6, 3.990e5 lbf/in |
B |
2.400e5, 1.800e5, -3.609e4 lbf |
D |
1.133e5, 8.559e4, 1.670e4 lbf*in |
As |
4.157e5, 3.782e5 lbf/in |
Interpretation
The diagonal A terms show membrane stiffness added by the grid. Nonzero B
comes from eccentric stiffeners relative to the reference surface. Diagnostics
confirm the assembled tangent is symmetric and positive semidefinite for this
model; they do not prove local stiffener strength, crippling resistance, or a
shell buckling margin.
Constant-Stiffness Barrel
Attach the same orthogrid stiffness to a cylindrical midsurface. This binds the
constant C8 tangent to the cylinder frame at the requested point; it does not
recompute the local stiffened cell.
from tensyl import ConstantStiffnessField, Cylinder
radius = 120.0
surface = Cylinder(radius=radius, length=300.0)
field = ConstantStiffnessField(result.stiffness)
stiffness_at_midbay = field.stiffness_at(surface, 150.0, 0.0)
assert stiffness_at_midbay.frame.label == "cylinder"
assert stiffness_at_midbay.C8.shape == (8, 8)
assert result.validity.p_over_R == 8.0 / radius
For Cylinder, e1 is axial, e2 is circumferential, and n points outward.
The orthogrid constructor maps stringers to e1 and ribs to e2.
The barrel radius enters the validity ratio p_over_R; it does not recalculate
the local orthogrid stiffness. This is still stiffness-property preparation.
Loads, boundary conditions, knockdown factors, and buckling margins belong to a
separate workflow.
Check the frame before the solver sees it
A constant field keeps the matrix fixed, but the solver still consumes stiffness in local directions. Confirm the axial and circumferential axes before exporting the property. A swapped axis produces a perfectly well-formatted, perfectly wrong result.