BlidReview's picture
weights, code, eval script
bdce880 verified
|
Raw
History Blame Contribute Delete
3.05 kB
# 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`.