Skip to main content

Open-source rocket nozzle design, Method-of-Characteristics solver, and aerothermodynamic performance analysis.

Project description

AeroProp-X

Open-source rocket nozzle design, Method-of-Characteristics (MOC) solver, and aerothermodynamic performance analysis — in pure Python.

AeroProp-X turns chamber conditions and a target expansion into a mathematically-grounded converging–diverging (de Laval) nozzle contour. It generates minimum-length MOC bells, Rao thrust-optimised bells, and conical baselines; maps the supersonic flow field; analyses over/under-expansion and flow separation; and exports CAD (CSV / DXF / FreeCAD-STEP) you can open in Fusion 360, SolidWorks, or FreeCAD. No paywalled toolbox required.

Scope and honesty. AeroProp-X models steady, inviscid, adiabatic, shock-free flow of a calorically-perfect gas. Results are ideal preliminary-design estimates — excellent for learning, sizing, and early trade studies, but not a replacement for CFD or hot-fire testing. Every approximation is documented in docs/theory.md.


Architecture

            ┌─────────────────────────────────────────────┐
            │     High-pressure combustion chamber (p0,T0) │
            └───────────────────────┬─────────────────────┘
                                    ▼
                          Converging section
                       (subsonic acceleration)
                                    │
                                    ▼
                          Throat  (M = 1, sonic)
                                    │
                                    ▼
              ┌──────────────── Diverging section ───────────────┐
              │           supersonic expansion, M > 1            │
              │                                                  │
              │   gasdynamics ──► moc ──► nozzle ──► flowfield   │
              │   (isentropic +   (char.   (MOC/Rao/  (Mach/p/T   │
              │    Prandtl-Meyer)  mesh)    conical)   field)     │
              └──────────────────────┬───────────────────────────┘
                                    ▼
                 performance  ──►  cad_export / plotting
            (C_F, c*, Isp, thrust,   (CSV / DXF / FreeCAD-STEP,
             expansion regime)        contour & flow-field figures)
                                    │
                                    ▼
                    Optimal contour: max thrust, shock-free,
                            uniform axial exit

Note on the original project brief. The brief that seeded this repo contained pipeline labels copied from an unrelated speech/NLP template — "Linguistic & Acoustic Decomposition", "Neural Synthesis Module", "Linguistic/Acoustic Expansion Lane". Those concepts have no meaning in nozzle aerodynamics and are not implemented. The architecture above reflects the actual gas-dynamics pipeline.


Installation

git clone https://github.com/your-org/aeroprop-x
cd aeroprop-x
pip install .            # core (numpy, scipy)
pip install .[plot]      # add matplotlib for figures
pip install .[dev]       # add pytest for the test-suite

Requires Python ≥ 3.9.

Quick start (Python)

from aeroprop_x import moc_nozzle, evaluate, to_freecad_macro

# 1. Minimum-length MOC contour for exit Mach 2.6, 40 mm throat radius.
contour = moc_nozzle(exit_mach=2.6, n_characteristics=80, throat_radius=0.04)
print(contour.area_ratio, contour.length, contour.meta["area_ratio_error"])

# 2. Ideal performance at 10 km (pa ~ 26.5 kPa).
perf = evaluate(exit_mach=2.6, p0=5e6, pa=26_500, gamma=1.4,
                R=287, T0=3000, throat_area=3.14159 * 0.04**2)
print(perf.report())          # C_F, c*, Isp, thrust, expansion regime

# 3. Export a FreeCAD macro that revolves the contour and writes STEP.
to_freecad_macro(contour, "nozzle.FCMacro")

Quick start (CLI)

# Design a minimum-length MOC contour and save CSV + DXF + a PNG.
aeroprop-x design moc --exit-mach 2.4 --throat-radius 0.05 \
    --csv nozzle.csv --dxf nozzle.dxf --plot contour.png

# Design an 80% Rao bell from an area ratio.
aeroprop-x design bell --area-ratio 25 --throat-radius 0.05 --csv bell.csv

# Evaluate performance at altitude.
aeroprop-x analyze --area-ratio 25 --p0 7e6 --pa 26500 \
    --gamma 1.22 --R 320 --T0 3500 --throat-area 0.01

# Export an MOC design straight to a FreeCAD STEP macro.
aeroprop-x export moc --exit-mach 3.0 --throat-radius 0.04 --freecad nozzle.FCMacro

What it does

  1. Nozzle contour generation. A rigorous planar minimum-length MOC solver (sharp-corner centred expansion, shock-free wall cancellation), plus a Rao thrust-optimised parabolic bell and a conical baseline. Enter exit Mach or area ratio.
  2. Supersonic flow-field plotting. Extract Mach, pressure, and temperature over the characteristic mesh and interpolate onto a regular grid for colour-mapped field plots.
  3. Expansion & separation analysis. Classify perfectly / under / over- expanded operation against ambient pressure and flag likely flow separation (Summerfield criterion).
  4. CAD export. Write CSV, ASCII DXF polylines, or a FreeCAD .FCMacro that revolves the contour to a solid and exports STEP for SolidWorks / Fusion 360 / FreeCAD.

Repository layout

aeroprop-x/
├── src/aeroprop_x/
│   ├── gasdynamics.py     isentropic + Prandtl-Meyer relations
│   ├── moc.py             Method-of-Characteristics min-length solver
│   ├── nozzle.py          MOC / Rao bell / conical contour generators
│   ├── flowfield.py       mesh -> Mach/p/T field extraction & gridding
│   ├── performance.py     C_F, c*, Isp, thrust, expansion analysis
│   ├── cad_export.py      CSV / DXF / FreeCAD-STEP export
│   ├── plotting.py        contour, mesh, and field figures (matplotlib)
│   └── cli.py             `aeroprop-x` command-line interface
├── tests/                 pytest suite (gas dynamics, MOC, nozzle, perf)
├── examples/              quickstart.py, design_ssme_like.py
├── docs/theory.md         equations, derivations, assumptions
├── validation_cases/      comparison vs tables & historical engines
├── pyproject.toml         packaging + console-script entry point
├── CHANGELOG.md  CONTRIBUTING.md  LICENSE (MIT)

Validation

  • Isentropic and Prandtl–Meyer outputs match standard compressible-flow tables to table precision.
  • The MOC solver self-tests: for planar flow the exit height ratio converges to the exact isentropic A/A* (relative error ≈ 3×10⁻⁴ at n = 160 for M = 2.4), the peak centreline Mach equals the design Mach, and the exit flow leaves parallel to the axis.

See validation_cases/README.md for the full tables and reproduction commands.

Key limitations (read before trusting a number)

  • Planar MOC. The MOC solver is 2-D. Revolving its contour as axisymmetric overshoots the design area ratio by √(A/A*); for accurate axisymmetric area ratios use rao_bell. A true axisymmetric MOC is on the roadmap.
  • Ideal gas, inviscid. No boundary layers, finite-rate chemistry, heat transfer, or real-gas effects; Isp and thrust are ideal upper estimates.
  • Approximate defaults. Rao wall angles are coarse chart interpolations; the Summerfield separation threshold is an engineering estimate.

License

MIT — see LICENSE. Contributions welcome; see CONTRIBUTING.md.

References

Anderson, Modern Compressible Flow (MOC, minimum-length nozzle) · Sutton & Biblarz, Rocket Propulsion Elements · Rao, "Exhaust Nozzle Contour for Optimum Thrust" (1958).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aeroprop_x-0.1.0.tar.gz (30.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aeroprop_x-0.1.0-py3-none-any.whl (28.2 kB view details)

Uploaded Python 3

File details

Details for the file aeroprop_x-0.1.0.tar.gz.

File metadata

  • Download URL: aeroprop_x-0.1.0.tar.gz
  • Upload date:
  • Size: 30.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.13

File hashes

Hashes for aeroprop_x-0.1.0.tar.gz
Algorithm Hash digest
SHA256 88c6e2fd43bdfecbb6bbd9d4da1d2c76207958dfaae38da278b5b3665b1d2b95
MD5 d13d62fb2eee777ab2ba3177541f1ff6
BLAKE2b-256 34ab7bf9293acddbbf67b9b8b47ab4620b784f7870dd9601c2752306bf1362ae

See more details on using hashes here.

File details

Details for the file aeroprop_x-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: aeroprop_x-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 28.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.13

File hashes

Hashes for aeroprop_x-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 efe11b3a5c4e70b6f6f8015dc8af0333f0dd7d209dabfe759c081a804d11ed3d
MD5 eb0b4e2c5378dde23964aaf2d771c989
BLAKE2b-256 834bcd5224938cbae86c33234085c73d63b2295abe93d37931de42e80078a407

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page