| # ezflow_v2/cfd β OpenFOAM RANS data-generation pipeline |
| |
| Generates the high-Re training dataset: parametric/ModelNet geometry β OpenFOAM |
| steady RANS k-Ο-SST β per-case fields + QC metadata. Runs in WSL2 Ubuntu with |
| OpenFOAM v2512 (see `../../OPENFOAM_GUIDE.md` for the environment). |
|
|
| ## Scripts |
|
|
| | Script | Role | |
| |---|---| |
| | `family_to_stl.py` | Build a normalized (max-extent L=1, centered) STL from a scripted family OR a ModelNet STL; computes the frontal (y-z) area for Cd. | |
| | `gen_dataset_jobs.py` | `calib` (80-case diverse subset) or `full` (~1350: 14 external families Γ 15 LHS + 240 ModelNet, each at 3 cases with **independent log-uniform Re β [500,1e5]** + random yaw). Exports STLs + writes `manifest_*.csv`. | |
| | `of_produce_case.sh` | One case: STL β `surfaceFeatureExtract` + `snappyHexMesh` (feature capture + 4 boundary layers) β `simpleFoam` k-Ο-SST β forceCoeffs + in-solver yβΊ β export `internal.vtu`+`boundary.vtm`+`meta.json` β delete raw case. Args: `cid source stl Aref Re yaw layers dataset_dir`. | |
| | `of_produce_batch.sh` | Parallel (N-wide), **resumable** driver over a manifest (skips cases with an existing `meta.json`), retries mesh failures with no layers, collects `results.csv`. Args: `manifest [maxjobs]`. | |
| | `of_external.sh` / `of_sphere.sh` | Generic single-STL case / unit-sphere cross-check (vs experiment & Kratos). | |
| | `of_export.sh`, `render_of.py` | foamToVTK export + pyvista off-screen figures. | |
| | `of_status.sh`, `of_cdcheck.sh` | Live monitoring (active cases, Cd stability). | |
| | `of_install.sh` | Install OpenFOAM v2512 in Ubuntu (reproducibility). | |
|
|
| ## Conventions |
| - **Non-dimensional**: `U_inf=1`, `rho=1`, body `L_ref=1`, `nu=1/Re`. Air enters only at serving (see `gnn/fluids.py`). |
| - **QC / convergence gate** in `meta.json`: `converged_force` (1 if Cd std over last 100 iters < 2% of \|Cd\|), `cd_rel_drift`, `final_res_U/p`, `yplus_{min,max,avg}`. The ETL keeps only `converged_force==1`. |
|
|
| ## Run (from WSL, repo at /mnt/c/dev/EZFlow) |
| ```bash |
| # generate STLs + manifest (on Windows python: gmsh+trimesh) |
| python gen_dataset_jobs.py full manifest_full.csv |
| # run the sweep (in WSL; resumable). Output dir via $EZFLOW_DATASET_DIR or the default. |
| tr -d '\r' < of_produce_batch.sh > /tmp/b.sh && bash /tmp/b.sh manifest_full.csv 12 |
| ``` |
|
|
| ## Paths |
| Scripts currently default the dataset output to `C:\dev\ezflow_eval\dataset_of` |
| (`/mnt/c/...` in WSL). `of_produce_batch.sh` honors `$EZFLOW_DATASET_DIR`. STL + |
| manifest live in `C:\dev\ezflow_eval\` during generation. These are the working |
| copies; the live run is driven from `ezflow_eval` (scratch). After a sweep completes, |
| the dataset can be relocated to a permanent home (see `../docs/DATASET.md`). |
|
|
| > Hard-won gotchas baked in: isolate `$@` before `source`-ing the OpenFOAM bashrc |
| > (it sources `$1` as a settings file); compute yβΊ via the in-solver functionObject |
| > (generic `postProcess` can't load the turbulence model); strip CRLF from |
| > Windows-authored `.sh` (`tr -d '\r'`); solve in the Linux fs, not `/mnt/c`. |
|
|