A Python finite element analysis tool for beam structures using NASTRAN BDF input format. Supports static analysis (SOL 101) and normal modes (SOL 103) via Euler-Bernoulli beam theory, plus static aeroelastics (SOL 144): steady vortex-lattice aerodynamics, flexible trim, stability derivatives, divergence, monitor-point section loads, and DLM-free quasi-steady transient maneuver loads (ZAERO-style MLOADS).
License: MIT (see LICENSE) — free to use, modify, and redistribute, including commercially.
- Python 3.9+
- pip
Clone the repository and create a virtual environment:
git clone <repo-url>
cd sbeam
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activateInstall the package and its dependencies in editable mode:
pip install -e .The editable install registers sbeam into the active environment so it is importable from anywhere — including inside Streamlit.
streamlit run sbeam/viewer/app.pyThe viewer opens in your browser. Upload a *.dat bulk data file to inspect model geometry, define case control, and launch analyses.
A sample model is provided at sample/simple_beam.dat — a 10 m steel cantilever beam (5 CBAR elements, SI units).
python -m sbeam.main path/to/model.bdfThe solver reads the case control file (.bdf), which uses INCLUDE to reference the bulk data file (.dat). Results are written to a .f06 file in NASTRAN format.
pytestFull documentation lives in docs/, organised into four sections:
code standard (10_standard/), theory & worked examples (20_theory/), future development
(30_future/), and historic record (40_history/). Start at the
documentation index.
- Define geometry in a
*.datbulk data file (GRID, CBAR, PBAR, MAT1, SPC, FORCE, etc.; for aeroelastic models add the AEROS/CAERO1/SPLINE2/TRIM card set) - Open the Streamlit viewer to inspect the model and run GPWG (mass/CG summary)
- Define case control in the viewer UI and export a
*.bdffile (SOL 144 trim/divergence/maneuver cases are authored directly in the BDF) - Run the solver against the exported
*.bdf - Review results in the
*.f06output file or load them back into the viewer (SOL 144 adds trimmed flight-load / maneuver-load BDF exports and a monitor-loads CSV)
| Category | Cards |
|---|---|
| Geometry | GRID, CORD2R |
| Elements | CBAR, CBUSH, PLOTEL, RBE2, RBE3, RBAR |
| Properties | PBAR, PBUSH |
| Material | MAT1 |
| Mass | CONM2 |
| Constraints | SPC, SPC1, SUPORT |
| Loads | FORCE, MOMENT, LOAD, GRAV |
| Eigenvalue | EIGRL |
| Aero geometry | AEROS, CAERO1, PAERO1, AEFACT, PSTRIP, STRIPK |
| Aero corrections | W2GJ, WKK, AECORR |
| Splining | SET1, SPLINE0, SPLINE1*, SPLINE2, ATTACH |
| Trim / divergence | AESTAT, AESURF, AELIST, TRIM, DIVERG, TRIMVAR, TRIMOBJ, TRIMCON |
| Monitor points | MONPNT1, MONPNT3, AECOMP |
| Transient maneuver | MLOADS, MLDTRIM, MLDTIME, MLDCOMD, MLDPRNT, TABLED1 |
* SPLINE1 is parsed but not yet implemented (use SPLINE2).
Full field-by-field definitions: docs/10_standard/02_card_reference.md.
- SOL 101 — Linear statics: nodal displacements, SPC reactions, CBAR end forces/moments, stress recovery, CBUSH element forces
- SOL 103 — Normal modes: natural frequencies (Hz and rad/s), normalised mode shapes, modal mass fractions
- SOL 144 — Static aeroelastic trim (steady VLM): determined and over-determined trim, rigid + elastic-restrained stability derivatives, hinge-moment derivatives, divergence dynamic pressure (
DIVERG), balanced maneuver loads with inertia relief, monitor-point integrated section loads, trimmed flight-load export - SOL 144 +
MLOADS— DLM-free quasi-steady transient maneuver loads (Phase G0, Level 1): open-loop commanded control histories integrated by Newmark-β from a trimmed initial condition, with time-history output and critical-sample load export
- Euler-Bernoulli only — Timoshenko shear correction (PBAR K1/K2) is not applied. K1/K2 fields are parsed but silently ignored, which is the correct assumption for slender beams where shear deformation is negligible.
- Uniform cross-section only — tapered beams are not supported.
PBARL(standard shape library) is not supported; cross-section properties must be entered directly viaPBAR.
CORD2Ronly —CORD2C,CORD2S, andCORD1Rare not supported.GRAVrequires CID=0 — a non-zero CID on aGRAVcard raises a parse error.
RBE3simplified — uses same-DOF weighted averaging; rotation-to-translation lever-arm coupling across an offset is not applied. UseRBARfor kinematically exact rigid connections when grid offsets are present.CBUSHrequires CID=0 — element offsets are not supported.
PLOAD1not supported — distributed beam loads are not implemented. APLOAD1card in the BDF is currently silently dropped with no user-visible warning. Do not usePLOAD1; a pre-solve validator warning is planned for a future release.
- SOL 101, SOL 103, and SOL 144 only — frequency response (SOL 108 / SOL 111), transient response (SOL 109 / SOL 112), and buckling (SOL 105) are not yet implemented.
- Steady, subsonic VLM only — Mach ≥ 1 is rejected; no doublet-lattice (DLM) unsteady aerodynamics or flutter solution yet. Transient maneuver loads are quasi-steady (valid for reduced frequency k ≲ 0.1).
- Full-span models only —
AEROSSYMXZ/SYMXY half-span symmetry is rejected; mirror the model to full span. - Unrestrained (mean-axis) stability derivatives not yet computed — rigid and elastic-restrained columns are output; the trim solution itself is unaffected.
- No hard element count limit; memory and compute time are the practical constraints.
- Results are not certified for safety-critical or regulated structural design — see the Disclaimer below.
Sean O'Meara — sean.c.omeara74@gmail.com
Bug reports and pull requests are welcome via the GitHub issue tracker.
sbeam implements standard, well-published finite element methods (Euler-Bernoulli beam theory, consistent mass matrix, direct stiffness assembly) using established numerical libraries. It is intended as an educational and exploratory engineering tool.
Results are not certified for safety-critical or regulated structural design. The implementation uses simplified assumptions (uniform cross-sections, no shear deformation, global coordinate frame, dense direct solver). Verify any results against an established commercial solver and competent engineering judgement before relying on them for design decisions.
The software is provided "as is", without warranty of any kind. See the LICENSE file for the full disclaimer of liability.
Released under the MIT License. Copyright (c) 2026 Sean O'Meara.