AeroForge — Starship Aero & Aerothermal Toolkit

User Guide

← Back to outcome

AeroForge — User Guide

This guide shows how an aerodynamics engineer uses AeroForge across the tasks the Starship Aero role calls for: understanding the flow field across regimes, producing aero/aerothermal predictions, gridding a watertight body, building the coefficient database GNC consumes, and reviewing post-flight data against pre-flight estimates.

0. Common interface

Every CLI subcommand prints a JSON document, so Python, Node, MATLAB, and shell all consume the same contract.

py -m aeroforge <flow|shock|atmos|aerodb|trajectory|postprocess> [options]
node scripts/aeroforge.mjs <same args>

1. Understand the flow field (subsonic → hypersonic)

py -m aeroforge flow --mach 2.0

Returns isentropic ratios (p/p0, T/T0, rho/rho0, A/A*), Prandtl-Meyer angle, Mach angle, the normal-shock jump, and the modified-Newtonian stagnation Cp,max. At M=2.0 these match NACA 1135 (p/p0 = 0.12780, A/A* = 1.68750, shock M2 = 0.57735, p02/p01 = 0.72087).

Shocks:

py -m aeroforge shock --mach 3.0 --type normal
py -m aeroforge shock --mach 3.0 --type oblique --theta 15   # beta_weak, beta_strong, theta_max, M2

In code:

import sys; sys.path.insert(0, "src")
from aeroforge import compressible as C
C.prandtl_meyer(3.0)          # 49.757 deg
C.beta_from_theta(2.0, 10.0)  # weak oblique-shock angle, 39.31 deg
C.area_mach_ratio(2.5)        # A/A* for a nozzle/intake station

2. Atmosphere (U.S. Standard 1976)

py -m aeroforge atmos --alt 30000     # T, p, rho, speed of sound at 30 km

3. Watertight geometry + gridding

from aeroforge import vehicles
mesh = vehicles.starship_entry_body()   # simplified sphere-cone stand-in
mesh.is_watertight()                     # True (closed-surface identity holds)
mesh.reference_area(), mesh.wetted_area()

SurfaceMesh panelizes any axisymmetric profile into panels with centroids, areas, and outward normals, and checks closure (sum(area*normal) ≈ 0) — the gate every watertight surface grid must pass before it is handed to a solver.

4. Hypersonic aerodynamics (modified Newtonian)

from aeroforge import hypersonic as H
H.aero_coefficients(mesh, mach=10.0, alpha_deg=20.0)
# -> CA, CN, CL, CD, Cm, L/D, Cp_max

For the sphere-cone stand-in at M=10, CN rises monotonically with α and L/D peaks near α≈20° at ≈0.42 — the expected blunt-body trim behavior.

5. Build the aero database (the GNC interface)

py -m aeroforge aerodb --vehicle ship --out aerodb_ship.json --full

Produces cd0_curve (zero-lift drag vs Mach with the transonic rise) and coefficients (per Mach/alpha CA/CN/CL/CD/Cm/L-D). Read it from MATLAB with matlab/load_aerodb.m or from Node with scripts/aeroforge.mjs.

6. Map a trajectory to its aero/aerothermal environment

py -m aeroforge trajectory --vehicle ship      # max-q, peak heat flux, heat load

Integrates a representative ballistic entry through the real atmosphere and reports Mach, dynamic pressure, Reynolds/Knudsen, flow regime, and Sutton-Graves stagnation heating at each point.

7. Review post-flight data vs pre-flight estimates

from aeroforge import postprocess as P
recon = P.reconcile(x=alphas, predicted=pred_CN, measured=flight_CN,
                    rel_tolerance=0.10, label="CN vs alpha @ M=10")
recon["rmse"], recon["r_squared"], recon["n_exceedances"]
svg = P.comparison_svg(recon, xlabel="alpha [deg]", ylabel="CN")

Computes RMSE, MAE, max error, bias, R², and flags points outside the agreed tolerance band, then renders a comparison figure.

8. One-command automated workflow

py scripts/run_workflow.py --vehicle ship
# or, on Linux/Unix:
./scripts/aeroforge.sh ship

Builds the geometry, runs the envelope predictions, maps the trajectory, reconciles against (synthetic) post-flight data, and writes JSON + SVG figures + a markdown summary under delivery-package/evidence/.