Structure — first FEM case
water-tank support beam, 2g vertical transport. Solid FEM of the actual hollow section — gmsh
2nd-order tets → CalculiX C3D10 → parsed .frd → machine-written report, gated by pytest.
Results vs allowables
40.8 MPa
max von Mises (span)
allowable 177.5 MPa (S355 / SF 2.0)
0.329 mm
max deflection
allowable 3.6 mm (span/250)
0.23 ×
stress utilization
31,855 C3D10
elements · 63,757 nodes
2nd-order tetrahedra
utilization 23 % — the beam has margin; a lighter profile is a candidate optimization once all load cases exist.
Why the number is trustworthy
- Independent theory cross-check in the gate: pytest recomputes Euler–Bernoulli simply-supported UDL stress/deflection from the same YAML and requires the FEM within [0.4, 1.5]× — a broken load path, BC error or unit mistake cannot pass silently.
- Singularity honesty: support-corner peaks (St. Venant) are excluded from the governing span stress but still reported: peak incl. singularities 232.0 MPa.
- Falsified on purpose: a 10 g load factor drives σ to 203.8 MPa → gates FAIL; restored → green. The gate demonstrably bites.
Solver-pipeline defects caught while building (all fixed)
- gmsh↔CalculiX tet10 midside-node ordering differs → nonpositive-Jacobian abort → permutation fix.
- .frd DISP block parsed with 6 columns instead of 3 → deflection silently read as 0.
- Support face-classification matched nothing after the boolean cut → beam fully unconstrained → 8×1011 mm "displacement" next to a plausible-looking stress. Switched to coordinate-based node selection with an emptiness assert.
source: simulation/structural/tank_beam_report.json · parameters/structure.yaml ·
tests/structural/test_tank_beam.py