Why a case builder
OpenFOAM is a CLI suite: dozens of small dictionary files per case, scattered across 0/, constant/, and system/, and the wrong one gets edited on a bad morning. GUIs exist but they hide the structure that makes the suite worth using in the first place. aeroBASE keeps the CLI but adds a layer above it — small declarative descriptors that compose into a runnable workspace, every choice diff-able, every render previewable before anything is written to disk.
Descriptors are data, not code. Templates live in libs/ and are the single source of truth for how each dictionary file looks. Tools merge descriptor knobs into tokens, render the templates, and only on opt-in write the result into a disposable workspace under .work/<runId>/. Curated cases get promoted into cases/ once they earn the slot.
What it is
Nine cases, one descriptor pattern, one library of templates. Each case lives under cases/<NAME>/ with a frozen descriptor set and a figs/ (or post/) directory of post-processed exports. The case naming itself encodes the physics: WEDGE_2D_COMP_Ma2-W15_Euler_shockFluid-reflect reads as 2-D compressible wedge at Mach 2, 15° angle, Euler with shockFluid solver, reflection setup — the directory tree is a sentence.
The cases span the canonical territory the OpenFOAM suite is built for: incompressible classical (lid-driven cavity, cylinder, backward-facing step, flat plate), compressible (Mach-2 oblique-shock baseline + reflection on a 15° wedge), and 3-D extensions (cube, Ahmed body, wing). Some are pedagogical exhibits; others are the in-house verification cases the workflow gets re-run against when the templates change.
Compose-first foundations and the LDC entry case
The lid-driven cavity is the entry case — Re=10k, laminar icoFoam, the README’s “first dry run”. It’s the simplest case the descriptor machinery can render end-to-end, and its purpose on the page is the same as its purpose in the repo: prove the pipeline runs from descriptor JSON to a fully-rendered runnable workspace before any of the harder cases come in. The mesh, the velocity magnitude on the steady solution, and the surface LCI quantitative output land in that order.
Incompressible canonical lineup
The next three cases are the OpenFOAM-suite classics on the same compose-first pipeline. Re=100 cylinder runs the laminar wake inside icoFoam; the mesh is the artefact that ships, the von-Kármán shedding result lives in the run. Backward-facing step at Re_h=25k uses the simpleFoam SST closure — the streamlines over a U_x slice draw the recirculation zone the case exists to capture. The zero-pressure-gradient flat plate uses the Spalart–Allmaras closure and is the workflow’s quantitative validation case: the U_x profile in the boundary layer, plotted in semilog y, is what the templates are checked against on every change.
Compressible payoff and the 3-D extension
The two wedge cases are the same Mach-2 / 15° geometry on the same templates, run with and without the reflection setup. The reflection case is the strongest single visual the repo currently ships — frame 49 of the U_mag animation, the incident shock and its reflection both visible on the same field. The mesh tells the second half of the story: a structured block-mesh, no surprises, the result is the templates doing their job. The baseline wedge sits next to it for comparison.
The 3-D cube is the smoke test for the 3-D pipeline — geometry-only right now; the result lives in the run timestamps and hasn’t been promoted to a canonical figure yet. The Ahmed body and the 3-D wing cases are configured but their canonical figures aren’t shipped — a deliberate honest gap, not a stub.
What it earns
aeroBASE’s payoff is not “I have OpenFOAM working on my machine.” It is every case I run is the same case the templates produced, and every change to the templates is a change I can diff. The discipline of separating descriptors from templates from workspaces — preview first, write second, curate third — is what makes a CFD workflow survive the second time it gets used. The next phase is whichever case earns its way into the canonical figure set next: a full-resolution Ahmed-body wake render, or a 3-D wing pressure-on-surface from the configured WING_3D_INC_Re3e6_AoA6 case, or the next compressible case after the wedge. The pipeline is what carries them in.
Compose-first entry — the lid-driven cavity
Incompressible canonicals — wake, recirculation, boundary layer
Compressible payoff and the 3-D extension