TurboDesigner
The open-source turbomachinery designer
Axial Compressor |
Axial Casing |
Axial Rotor |
About
TurboDesigner is a parametric turbomachinery design tool that takes high-level thermodynamic inputs (pressure ratio, mass flow rate, RPM, etc.) and produces:
- Mean-line thermodynamic analysis — stage-by-stage temperature, pressure, and velocity calculations
- Blade flow analysis — spanwise velocity distributions via free-vortex theory, metal angle computation with empirical deviation correlations
- 3D CAD geometry — fully parametric blade, shaft, and casing models exported as STEP files
Currently focused on axial compressors, with plans to support axial turbines and turbopumps for liquid rocket engines.
Architecture
| Module | Description |
|---|---|
Turbomachinery |
Top-level compressor model: overall pressure ratio, efficiency, stage count, inlet conditions |
Stage |
Single compressor stage: temperature rise, reaction, rotor + stator blade rows |
FlowStation |
Thermodynamic state at a station: total/static T & P, velocity triangles, Mach number, density |
BladeRow |
Blade row geometry: aspect ratio, solidity, metal angles, airfoil profiles at multiple span stations |
Vortex |
Spanwise velocity distribution (currently Free Vortex: $r \cdot c_\theta = \text{const}$) |
MetalAngles |
Incidence and deviation via Johnsen-Bullock or equals-flow-angles methods |
AxialCompressorCadModel |
Full CAD assembly: shaft, casing, blades built in parallel via CadQuery |
Features
- Vortex methods: Free Vortex (constant work distribution)
- Airfoil types: NACA 65 series, Double Circular Arc (DCA/C4)
- Deviation models: Johnsen-Bullock empirical correlation, zero-deviation (metal = flow angles)
- CAD generation: Lofted 3D blades, shaft/disk, outer casing with clamps, fir-tree blade root attachments
- Parallel CAD builds: Multiprocessing with tessellation caching for fast iteration
- CLI: Full command-line interface for design management, analysis, and CAD export
- JSON analysis export: Auto-serialization with unit metadata annotations
Assumptions
- Ideal gas thermodynamic model
- Constant mean-line radius (set by hub-to-tip ratio)
- Blade calculations based on the mean radius station
- Free vortex spanwise distribution (more methods planned)
- Airfoil geometry limited to DCA and NACA 65 profiles
Installation
pip install turbodesigner
CAD Geometry Support
CAD commands (turbodesigner cad ...) require CadQuery, which depends on the OpenCASCADE kernel. If your system already has a compatible CadQuery installed, add it as an extra:
pip install "turbodesigner[cq]"
Otherwise, install CadQuery via conda first (recommended — handles the native OCC dependency):
# Install CadQuery (required for CAD geometry support)
conda install -c conda-forge -c cadquery cadquery=master
pip install turbodesigner
Development Setup
git clone --recurse-submodules https://github.com/OpenOrion/turbodesigner.git
cd turbodesigner
pip install -e ".[test,cq]"
Design Input
Designs are defined as JSON files with the following structure:
{
"machine_type": "axial",
"configuration": "compressor",
"meanline": {
"gamma": 1.4,
"axial_velocity": 136,
"rpm": 10000,
"gas_constant": 287,
"mass_flow_rate": 4.37,
"pressure_ratio": 3.0,
"inlet_total_pressure": 101000,
"inlet_total_temperature": 288,
"isentropic_efficiency": 0.878,
"num_stages": 5,
"stage_temperature_rise": "equal",
"stage_reaction": [0.5, 0.5, 0.5, 0.5, 0.5],
"inlet_blockage": 0.0,
"outlet_blockage": 0.0,
"hub_to_tip_ratio": 0.5,
"num_streams": 9,
"aspect_ratio": {"rotor": 3.0, "stator": 3.25},
"spacing_to_chord": {"rotor": 1.0, "stator": 1.0},
"max_thickness_to_chord": {"rotor": 0.1, "stator": 0.1},
"row_gap_to_chord": 0.25,
"stage_gap_to_chord": 0.5
}
}
Per-stage arrays are supported for non-uniform designs (e.g., higher reaction at inlet stages, variable aspect ratios).
CLI Usage
TurboDesigner includes a Click-based CLI for design management, analysis, and CAD generation:
# Design management
turbodesigner design create <name> --from <json>
turbodesigner design list
turbodesigner design show <name>
turbodesigner design export <name>
turbodesigner design schema # Print the JSON schema
# Analysis (requires an active design via `turbodesigner design use <name>`)
turbodesigner analyze machine # Overall machine parameters
turbodesigner analyze stages # Stage-by-stage summary
turbodesigner analyze flow-stations # All flow station properties
turbodesigner analyze blade-rows # Blade geometry per row
turbodesigner analyze full # Full JSON dump with unit metadata
# CAD generation
turbodesigner cad blade # Single blade profile
turbodesigner cad shaft # Shaft/disk assembly
turbodesigner cad casing # Outer casing
turbodesigner cad assembly # Full compressor assembly
turbodesigner cad annulus # Flow annulus visualization
All commands support --json for structured output. CAD commands accept --complex (high-fidelity geometry) and --visualize flags.
Workspace state is persisted in a .turbodesigner/ directory (similar to .git).
Outputs
TurboDesigner generates the following artifacts in .turbodesigner/designs/<name>/output/:
| Output | Description |
|---|---|
shaft-stage-{N}.step |
STEP file for each shaft/disk stage |
casing-stage-{N}.step |
STEP file for each casing stage |
blade-{N}-rotor.step |
Individual rotor blade STEP file |
blade-{N}-stator.step |
Individual stator blade STEP file |
BOM.csv |
Bill of materials (generated with --complex) |
report.ipynb |
Jupyter notebook with full design analysis |
report.html |
HTML export of the analysis report |
BOM.csv
Generated during cad assembly --complex. Columns: Part, Quantity, Category, Component. Includes all fasteners (heatsets, screws), blades, shaft disks, casing sections, and clamps with per-stage quantities.
Reports
Generated via turbodesigner axial compressor design report. Produces a Jupyter notebook and HTML report containing:
- Machine overview (pressure ratio, efficiency, RPM)
- Stage-by-stage thermodynamic properties
- Flow station velocity triangles and Mach numbers
- Annulus visualization (hub/tip radii)
- Blade row geometry (scalars and per-stream distributions)
Python API
from turbodesigner.turbomachinery import Turbomachinery
from turbodesigner.cad.compressor import AxialCompressorCadModel
from pathlib import Path
# Load a design
machine = Turbomachinery.from_file("tests/designs/mark1.json")
# Access computed properties
print(f"Overall temperature rise: {machine.overall_temperature_rise:.1f} K")
print(f"Outlet pressure: {machine.outlet_flow_station.total_pressure:.0f} Pa")
# Inspect a stage
stage = machine.stages[0]
print(f"Stage 1 rotor inlet Mach: {stage.rotor.flow_station.mach_number}")
# Generate CAD (STEP export)
turbomachinery = machine.to_cad_export()
results = AxialCompressorCadModel.build_all(
turbomachinery,
output_dir=Path("/tmp/turbodesigner"),
is_complex=True,
visualize=True,
)
print("Shaft STEP files:", results["shaft"])
print("Casing STEP files:", results["casing"])
Running Tests
pip install -e ".[test]"
python -m pytest tests/ -v
Help Wanted
Contributions are welcome in the following areas:
- Verifying thermodynamic calculations against published data
- CFD validation of generated geometries
- Additional vortex distributions (forced vortex, exponential)
- More airfoil families (NACA 4-digit, custom profiles)
- Axial turbine support
- GUI/web interface
Join the Discord for collaboration
Metadata
Release files for turbodesigner 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| turbodesigner-2.0.0.tar.gz | 220.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| turbodesigner-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 469.3 kB
Release files / turbodesigner-2.0.0.tar.gz
| Download URL | turbodesigner-2.0.0.tar.gz |
|---|---|
| Size | 220.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fbeb224abfafc4db99c8258fb869d919e3ee8a4af6094a85c1d97856e587a412
|
|
BLAKE2b-256 checksum How to use checksums |
c5380cdbde82bb56c8ccf3e15c179e29110dcd70bacb471607f16c19f22a861a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / turbodesigner-2.0.0-py3-none-any.whl
| Download URL | turbodesigner-2.0.0-py3-none-any.whl |
|---|---|
| Size | 249.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
925fd4beb896427c2c9f59744bf8793e77388fe001928ed174a6f2e0cd7f5950
|
|
BLAKE2b-256 checksum How to use checksums |
363d3eb20daf1cb8ba848b38945f58e28f8cd4091e74a9cf25e5be1ba39ac05f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Security for turbodesigner 2.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.