Open-source CFD workbench for hypersonic, reentry and rarefied-flow analysis (SU2 + SPARTA + Gmsh + ParaView orchestration)
Project description
AeroRare Studio
Open-source CFD workbench for hypersonic, atmospheric reentry and rarefied-flow / DSMC analysis. AeroRare Studio is not a solver: it orchestrates SU2 (continuum CFD), SPARTA (DSMC), Gmsh (meshing) and ParaView/VTK (post-processing) behind a single physics-first workflow. You describe the physical problem; the studio generates geometry, meshes, solver input files, run commands and reports.
The full product concept is described (in Turkish) in
docs/hyperrare_studio_spec.md. This package is the
engine layer: every screen of the planned GUI maps onto a module here.
Toolchain status (this machine)
All five external tools are installed and detected by aerorare tools:
SU2 8.0.0, SPARTA (24 Sep 2025, built from ../sparta-master), Gmsh 4.14,
ParaView 5.11.2 (pvpython in the app bundle), Open MPI 5.0.8. Python side:
CadQuery 2.5.2 (bundled OCCT 7.7 kernel via OCP) and VTK 9.3.1; OCCT 7.9.3
(brew) and FreeCAD 1.x (/Applications/FreeCAD.app) for CAD work.
Status — v0.3.0 ("slip-regime physics + scope")
v0.3.0 deepens the physics that is the product's niche and broadens the template/report scope:
- Slip walls — Smoluchowski-Maxwell velocity-slip / temperature-jump walls (NEMO); a no-slip vs slip vs DSMC case study shows slip halving the continuum–DSMC heating discrepancy at Kn=0.01.
- Catalytic walls — non/partial/supercatalytic (NEMO); a case study shows supercatalytic heating +38.5% once dissociation is active (with the high-altitude frozen-flow finding documented).
- New templates —
compression-ramp(SWBLI) and anozzleinternal-flow path (inlet/outlet, verified subsonic→supersonic). - Quality & reporting — mesh quality report (§9.1), CAD surface
patch splitting (§4.2), LaTeX report export (§16), an
aerorare comparemulti-run overlay,generate --restart-fromwarm starts. - GUI — Validation page with a Generate+Run+Check pipeline and a live SPARTA field stream on the Run page.
The Lofthouse heating band was closed with a definitive finding: refining the continuum wall widens the SU2–DSMC gap (it is continuum-breakdown physics — missing temperature jump — not mesh resolution), for which slip walls are the remedy.
Earlier hardening (v0.2.0): staged NEMO convergence (CFL ladder,
mesh-scaled budgets, post-run bow-shock gate), exact B-rep prism BL on
all four 3D templates, concave-corner BL handling, generate --robust.
| Concept (spec §) | Module | State |
|---|---|---|
| System check (§2) | aerorare/tools.py |
✅ detects SU2, SPARTA, Gmsh, ParaView, MPI |
| Project Setup (§3) | aerorare/project.py |
✅ project.yaml, folder layout, run versioning |
| Geometry Studio (§4) | aerorare/geometry.py |
✅ parametric 2D/axisymmetric templates (blunt cone, capsule, sphere, cylinder, wedge, flat plate); CAD import planned |
| Geometry Health Check (§5) | Contour.health_check |
✅ basic checks |
| Boundary Assignment (§6) | aerorare/boundaries.py |
✅ types, auto-detection, consistency check, colour legend |
| Physics Wizard (§7) | aerorare/freestream.py, aerorare/atmosphere.py, aerorare/gas.py |
✅ US76 atmosphere, altitude & direct modes, gas models |
| Regime Selector (§8) | aerorare/regime.py |
✅ Kn bands, solver recommendation, override warnings |
| Mesh Studio (§9) | aerorare/meshing.py, aerorare/sparta.py |
✅ mesh plan + Gmsh .geo + SU2 mesh; DSMC grid plan w/ λ checks |
| Solver Setup (§10) | aerorare/su2.py, aerorare/sparta.py |
✅ SU2 .cfg and SPARTA input generation |
| Case Validation (§11) | aerorare/validation.py |
✅ Ready/Warning/Error gate |
| Run Monitor (§12) | aerorare/runner.py |
✅ aerorare run: MPI launch + live residual/particle tracking |
| Results Viewer (§13) | aerorare/postprocess.py |
✅ pvpython offscreen contours (percentile-clamped, body-framed) + dependency-free SVG wall/convergence plots |
| Comparison Studio (§14) | results.compare_surfaces |
✅ common arc-length resampling, % differences, overlay plots |
| Common Result Model (§15) | aerorare/results.py |
✅ SU2 CSV/VTU + SPARTA dump parsers → shared surface/volume model |
| Report Generator (§16) | aerorare/report.py |
✅ Markdown case report |
| 3D geometries (§4) | aerorare/geometry3d.py |
✅ CadQuery solids (sphere, blunt cone, capsule, cone-cylinder), revolve-from-contour, STL export, watertight check |
| CAD import (§4.2) | aerorare/cad.py |
✅ STEP/IGES/BREP/STL/OBJ, unit scaling, health report |
| SPARTA 3D | sparta.write_surface_file_3d etc. |
✅ triangle surfaces + 3D grid plan + input (verified with a live 3D run) |
| SSH / SLURM environments (§12) | aerorare/hpc.py |
✅ aerorare env + remote stage/submit/fetch, sbatch generation |
| Desktop GUI | aerorare/gui.py |
✅ MVP: PySide6, software-rendered geometry viewport, clickable boundary assignment (§6 colour legend), workflow sidebar, live run log, results gallery (aerorare gui) |
| SU2 NEMO (§7.2) | su2.py (--thermal two-temperature) |
✅ AIR-5 two-temperature configs patterned on SU2's nonequilibrium test cases; NEMO_EULER verified converging on SU2 8.0.0 |
| 3D SU2 mesh from STEP | meshing.py (MeshPlan3D) |
✅ gmsh OpenCASCADE boolean (STEP body − sphere farfield), body/farfield markers, distance-field refinement; verified with a live 3D SU2 run |
| 3D boundary-layer inflation | blmesh.py (generate --bl) |
✅ prism layers via gmsh extrudeBoundaryLayer (smooth bodies; sharp edges fall back to isotropic); hybrid prism+tet mesh verified in SU2 |
| 3D results (§13–15) | results.py 3D loaders |
✅ meridional collapse (x, r → s) + azimuthal averaging, slice/surface pvpython renders, SU2-vs-SPARTA comparison on the meridian |
| HTML/PDF reports (§16) | report.py (report --format html/pdf) |
✅ dependency-free MD→HTML with figures embedded (base64/inline SVG); PDF via Qt QPdfWriter |
| Geometry auto-repair (§5) | geometry3d.repair_mesh (new --repair) |
✅ duplicate removal, winding fix, small-hole fill |
| Docker environment (§12) | hpc.docker_command (env --kind docker) |
✅ containerised runs with live monitoring (command-generation tested; docker not installed here) |
| Restart flows | generate --restart |
✅ SU2 RESTART_SOL + staged 2nd-order upgrade; SPARTA read_restart continuation (verified live) |
| Analysis tools (§13.3) | analysis.py (aerorare analyze) |
✅ stagnation region, shock stand-off vs Billig, centerline probes |
| Mesh Studio GUI | gui.py Mesh page |
✅ plan editor with persisted overrides + live residual/particle charts |
Development history and roadmap: DEVELOPMENT.md.
Install
cd aerorare_studio
python3 -m pip install -e ".[dev]" # engine + tests
# optional external tools:
# gmsh -> mesh generation (brew install gmsh / pip install gmsh)
# SU2 -> continuum solver (https://su2code.github.io/download.html)
# SPARTA -> DSMC solver (https://sparta.github.io/download.html)
Building SPARTA from source (macOS)
The vendored tree in ../sparta-master builds with CMake; clang/libc++
needs the C++11 hash-map flag:
cd ../sparta-master && mkdir -p build install && cd build
cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_MPI=ON \
-DCMAKE_CXX_FLAGS="-DSPARTA_UNORDERED_MAP" ../cmake
make -j8 && make install
ln -sf "$PWD/../install/bin/spa_" /opt/homebrew/bin/spa_
The studio locates SPARTA's species/VSS data files (air.species,
air.vss, ...) next to the executable or via $SPARTA_DATA_DIR, and
copies them into each run directory.
Doc-compliance notes (validated against the vendored sources)
- SPARTA — generated inputs follow the manual and the
examples/axicase:boundary oo ar pp+ boxylo=0+global ... weight cell radiusfor axisymmetric models (manual §6.2); surface files obey theread_surfright-hand orientation rule (outward normalN = z × (p2−p1)) and the watertight rule (endpoints exactly on a box edge — near-axis points are snapped toy=0); open profiles ending off-axis are auto-closed at the base. Dump columns usexlo/ylo/xhi/yhi(there is noxc/yc). - SU2 — every emitted option exists in
SU2-master/config_template.cfg; viscous cases setINIT_OPTION= TD_CONDITIONS,FREESTREAM_OPTION= TEMPERATURE_FSplusREYNOLDS_NUMBER(required by SU2 8.x for NAVIER_STOKES). Verified by running SU2_CFD 8.0.0 on a generated case. - Gmsh —
.geoscripts use OpenCASCADE factory +Physical Curvegroups whose names become SU2 markers viagmsh -2 -format su2. Verified with Gmsh 4.14 (markers arrive in the.su2mesh intact).
Quick start — Mach 15 blunt-body reentry at 80 km
aerorare tools # check SU2/SPARTA/Gmsh/MPI
aerorare new reentry --template blunt-cone \
--param nose_radius=0.05 --param half_angle_deg=15 --param length=0.3
aerorare physics reentry --mach 15 --altitude 80000 --wall-temp 1000
aerorare regime reentry # -> slip regime, su2+sparta
aerorare generate reentry --quick # coarse preview setup (drop --quick for production)
aerorare validate reentry # pre-run gate
aerorare run reentry --ranks 4 # SU2 + SPARTA with live monitoring
aerorare results reentry # contour PNGs, wall SVGs, SU2-vs-SPARTA comparison
aerorare report reentry # reports/case_report.md
With the full toolchain the quick demo takes ~20 s of solver time and
produces, under results/run_NNN/: ParaView Mach/pressure/temperature/
density contours framed on the body, SU2 wall pressure / heat-flux / Cp and
convergence plots, SPARTA wall distributions, overlaid SU2-vs-SPARTA
comparison charts and a comparison.md with mean/max percentage
differences.
Everything needed to reproduce a case lives in project.yaml; each
generate allocates a fresh solvers/run_NNN/ so earlier setups are kept.
Tests
python3 -m pytest tests/ -q
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aerorare_studio-0.3.0.tar.gz.
File metadata
- Download URL: aerorare_studio-0.3.0.tar.gz
- Upload date:
- Size: 148.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9198c78b0651e594f79bcfc2f76d826aa17480dcf46c33b78cf8efff862d6abf
|
|
| MD5 |
da46e5f8a1be2a34cc97f474656a368b
|
|
| BLAKE2b-256 |
f7130a32c306b7c28b809bdab590742b7f87b497d02a4fab6f9acdbc311390b4
|
Provenance
The following attestation bundles were made for aerorare_studio-0.3.0.tar.gz:
Publisher:
release.yml on nsclk/aerorare-studio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aerorare_studio-0.3.0.tar.gz -
Subject digest:
9198c78b0651e594f79bcfc2f76d826aa17480dcf46c33b78cf8efff862d6abf - Sigstore transparency entry: 2172970497
- Sigstore integration time:
-
Permalink:
nsclk/aerorare-studio@d0bd6b2351c6099b22ff0e98a209ad3429791d28 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/nsclk
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d0bd6b2351c6099b22ff0e98a209ad3429791d28 -
Trigger Event:
push
-
Statement type:
File details
Details for the file aerorare_studio-0.3.0-py3-none-any.whl.
File metadata
- Download URL: aerorare_studio-0.3.0-py3-none-any.whl
- Upload date:
- Size: 129.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76d17a8d809142a577f54cd37f168c20efa5754f6548e0f8c371580cfd7d34a4
|
|
| MD5 |
a9189191030bfad8542112309abd8415
|
|
| BLAKE2b-256 |
62bb97614985aec1b55a5cca783f520230bebfacd4db0c2f9c27c7615c360722
|
Provenance
The following attestation bundles were made for aerorare_studio-0.3.0-py3-none-any.whl:
Publisher:
release.yml on nsclk/aerorare-studio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aerorare_studio-0.3.0-py3-none-any.whl -
Subject digest:
76d17a8d809142a577f54cd37f168c20efa5754f6548e0f8c371580cfd7d34a4 - Sigstore transparency entry: 2172970515
- Sigstore integration time:
-
Permalink:
nsclk/aerorare-studio@d0bd6b2351c6099b22ff0e98a209ad3429791d28 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/nsclk
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d0bd6b2351c6099b22ff0e98a209ad3429791d28 -
Trigger Event:
push
-
Statement type: