Track the research dossiers, section freezes, supporting manuscript materials, and round-aware agent controls so future drafting decisions can be reviewed across both repository mirrors. Co-authored-by: Cursor <cursoragent@cursor.com>
511 lines
28 KiB
Markdown
511 lines
28 KiB
Markdown
# CelerisLab Validation Dossier for JFM Writing
|
|
|
|
**Purpose.** This document is an agent-facing index of the CelerisLab solver, its validation contracts, and the qualification artifacts currently retained under `CelerisLab/tests/output/steady_jfm_qualification/`. It is intentionally more detailed than manuscript prose. It records what was validated, how it was measured, what the reference papers establish, and what must not be claimed.
|
|
|
|
**Scope.** CelerisLab is the current CFD tool library developed for the DynamisLab programme. `LegacyCelerisLab` is the preceding solver generation and is a separate evidence chain. This dossier concerns current CelerisLab only unless explicitly stated otherwise.
|
|
|
|
**Status date.** 2026-08-09.
|
|
|
|
**Important evidence warning.** The qualification directory contains complete physics runs for only Kan99b K2 and Sah04 S2. The validation runners define larger K1--K5 and S1--S4 matrices, but those other cases are not present in this qualification directory. Smoke runs are wiring/development diagnostics and are not physics qualification.
|
|
|
|
---
|
|
|
|
## 1. Fast agent index
|
|
|
|
| Question | Read this first |
|
|
|---|---|
|
|
| What is CelerisLab? | `CelerisLab/README.md` |
|
|
| What is the current solver revision? | parent gitlink `c918ac0...`; submodule commit `6e3756c...` |
|
|
| What exact outputs were retained? | `CelerisLab/tests/output/steady_jfm_qualification/MANIFEST.json` |
|
|
| What is the rotating-cylinder contract? | `CelerisLab/tests/specs/Kan99b_validation.md` and `tests/validation/run_kan99b_rotating_cylinder.py` |
|
|
| What is the confined-cylinder contract? | `CelerisLab/tests/specs/Sah04_validation.md` and `tests/validation/run_sah04_st_matrix.py` |
|
|
| What passed in the retained artifacts? | Sections 7 and 8 below |
|
|
| What failed or remains incomplete? | Section 10 below |
|
|
| How are forces and sensors read? | `CelerisLab/README.md`, Sections “Obs telemetry model” and “Sensor special handling” |
|
|
| What can be written in a JFM methods section? | Section 11 below |
|
|
| What should not be written? | Section 12 below |
|
|
|
|
Search terms for later agents: `CelerisLab validation`, `steady_jfm_qualification`, `Kan99b K2`, `Sah04 S2`, `MRT`, `D2Q9`, `Bouzidi`, `curved boundary`, `neq_extrap`, `channel_stabilized`, `St_error_pct`, `mean_Cd`, `sensor accuracy`, `FP32`, `EsoPull`, `FP16S`.
|
|
|
|
---
|
|
|
|
## 2. Software identity and solver role
|
|
|
|
DynamisLab is the larger research programme for ML-assisted CFD and active flow control of a two-dimensional fluidic pinball. CelerisLab was written as the modern CFD infrastructure for that programme. It provides:
|
|
|
|
- GPU-accelerated D2Q9 and D3Q19 LBM;
|
|
- SRT, TRT and MRT collision operators;
|
|
- optional Smagorinsky LES;
|
|
- double-buffer and EsoPull streaming paths;
|
|
- moving curved boundaries using Bouzidi interpolation;
|
|
- runtime rotating-body actuation;
|
|
- force, torque and area-averaged velocity-sensor readback;
|
|
- Python control-loop and asynchronous CUDA-stream APIs;
|
|
- checkpoint/snapshot and runtime body-topology synchronization.
|
|
|
|
The qualification experiments are not a proof that every solver feature is equally validated. They are targeted anchors for the combinations needed by the current research and paper setting.
|
|
|
|
### Solver revision provenance
|
|
|
|
- DynamisLab parent revision that points to the solver: `c918ac0de44d4f5106249c31ad7f8a10f4c53450`.
|
|
- CelerisLab submodule revision: `6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0`.
|
|
- Submodule commit message: `fix(esopull): correct init layout and pre-streaming semantics (v0.5.1)`.
|
|
- Parent commit message: `Update CelerisLab submodule to v0.5.1 (6e3756c)`.
|
|
|
|
For a reproducible paper, cite the solver revision actually used by the run and preserve the artifact manifest. Do not cite only the repository name while omitting the solver version and configuration.
|
|
|
|
---
|
|
|
|
## 3. Governing numerical model and core implementation
|
|
|
|
The solver advances a low-Mach incompressible approximation using a D2Q9 lattice in the retained two-dimensional qualification cases. The collision path used by the retained Kan99b and Sah04 full runs is MRT. The main stepping path is GPU CUDA code orchestrated through Python/PyCUDA.
|
|
|
|
The qualification configurations use:
|
|
|
|
- lattice model: D2Q9;
|
|
- collision: MRT;
|
|
- storage: FP32;
|
|
- LES: disabled;
|
|
- streaming: double buffer;
|
|
- curved-body treatment: current Bouzidi moving-wall implementation;
|
|
- outlet: `neq_extrap`;
|
|
- rotating-cylinder validation inlet: uniform profile with `regularized` primary inlet and one `zou_he_local` sensitivity run;
|
|
- confined-cylinder validation inlet: parabolic profile with `channel_stabilized` inlet;
|
|
- open-domain lateral boundaries: free slip for Kan99b;
|
|
- confined-channel lateral boundaries: no slip, represented by the channel geometry/configuration for Sah04.
|
|
|
|
### Configuration semantics that matter for writing
|
|
|
|
`inlet.profile` and `inlet.scheme` are different concepts:
|
|
|
|
- `profile` defines the physical target profile, uniform or parabolic;
|
|
- `scheme` defines the numerical inlet closure, e.g. `regularized`, `zou_he_local` or `channel_stabilized`.
|
|
|
|
The body rotation input is a runtime angular velocity. Changing `omega` does not require recompilation because it does not change object topology or telemetry layout. Geometry changes do require topology rebuilding/reinitialization.
|
|
|
|
The solver-generated kernel configuration headers under `src/CelerisLab/lbm/kernels/config/*.h` are generated artifacts. They are not hand-edited scientific inputs; the JSON config and compiler generation path are authoritative.
|
|
|
|
---
|
|
|
|
## 4. Telemetry, force and sensor contracts
|
|
|
|
The GPU body kernels accumulate telemetry in the `obs_gpu` buffer. The buffer has force, torque and sensor segments. The standard `run(steps)` path clears the observation buffer and resets the internal accumulated-step count by default, advances the requested number of LBM steps, and downloads telemetry to a pinned host buffer.
|
|
|
|
For force and torque:
|
|
|
|
- `read_force(id, normalize=True)` returns the accumulated force divided by the number of accumulated time steps;
|
|
- `read_force(id, normalize=False)` returns the raw accumulated sum;
|
|
- the validation runners explicitly use `normalize=False` after a one-step accumulation in their fine-grained loop, so each recorded force is a one-step quantity.
|
|
|
|
For sensors:
|
|
|
|
- sensor readings are always area-normalized by the number of cells in the sensor footprint;
|
|
- `normalize=True` additionally divides by the accumulated time count;
|
|
- the sensor area normalization is independent of the time normalization flag.
|
|
|
|
This distinction is essential when comparing solver readback with a manually computed field average or when reconstructing force coefficients from CSV output.
|
|
|
|
The dedicated sensor test places four circular sensors at `(120,50)`, `(120,64)`, `(120,78)` and `(150,64)` on a `256 x 128` D2Q9 MRT free-slip uniform-flow setup. It compares each GPU sensor value with a CPU arithmetic mean over exactly the sensor cell footprint and uses an absolute tolerance of `1e-4` in each velocity component. The test is an implementation/readback validation, not a fluid-physics validation.
|
|
|
|
---
|
|
|
|
## 5. Validation architecture
|
|
|
|
The CelerisLab test hierarchy has three levels:
|
|
|
|
1. `tests/unit/`: CPU-only isolated logic such as pending edits, flag masks and equilibrium helpers.
|
|
2. `tests/integration/`: GPU tests for body-topology synchronization, DDF patching, unified action/observation handling and stream APIs.
|
|
3. `tests/validation/`: long GPU physics-regression runners against published rotating-cylinder and confined-cylinder references, plus sensor accuracy and performance diagnostics.
|
|
|
|
The two physics references serve different purposes:
|
|
|
|
- [Kan99] is an open-flow rotating-cylinder benchmark. It checks the moving curved boundary, rotation input, force integration, shedding frequency and rotation-dependent mean/fluctuating force coefficients.
|
|
- [Sah04] is a confined stationary-cylinder benchmark. It checks parabolic channel inflow, no-slip wall confinement, blockage mapping, developed velocity normalization, wake shedding frequency and high-blockage geometry handling.
|
|
|
|
These are validation anchors for solver behaviour. They are not validation of the full fluidic-pinball DRL controller, the symbolic-regression pipeline, or any hydrodynamic-cloaking claim.
|
|
|
|
---
|
|
|
|
## 6. Kan99b rotating-cylinder contract
|
|
|
|
### 6.1 Reference problem
|
|
|
|
[Kang, Choi and Lee, “Laminar flow past a rotating circular cylinder”] studies fully developed two-dimensional flow around a circular cylinder rotating steadily in a uniform viscous stream. The paper uses
|
|
|
|
\[
|
|
Re = U_\infty D/\nu,
|
|
\qquad
|
|
\alpha = \frac{\omega D}{2U_\infty},
|
|
\]
|
|
|
|
and reports Strouhal number, mean lift and drag, and lift/drag fluctuation amplitudes. It also studies suppression of vortex shedding as the rotation parameter increases.
|
|
|
|
The strongest exact numeric anchor selected in the repository is the paper's `Re=100`, `alpha=1.0` convergence case:
|
|
|
|
| Quantity | Kan99 reference |
|
|
|---|---:|
|
|
| `St` | 0.1655 |
|
|
| mean `C_L` | -2.4881 |
|
|
| mean `C_D` | 1.1040 |
|
|
| `C'_L` | 0.3631 |
|
|
| `C'_D` | 0.0993 |
|
|
|
|
The paper also supports a low-rotation lift trend near `Re=100`, approximately `mean C_L ≈ -2.48 alpha`, and qualitative suppression thresholds near `alpha=1.4` at `Re=60`, `alpha=1.8` at `Re=100`, and `alpha=1.9` at `Re=160`. The repository correctly treats those threshold values as regime guides rather than exact single-point gates.
|
|
|
|
### 6.2 Lattice mapping
|
|
|
|
The runner fixes:
|
|
|
|
\[
|
|
U_\infty=0.03,\qquad D=30,\qquad R=15,
|
|
\]
|
|
|
|
so
|
|
|
|
\[
|
|
\nu=\frac{U_\infty D}{Re}=\frac{0.9}{Re},
|
|
\qquad
|
|
\omega_{body}=\frac{2\alpha U_\infty}{D}=0.002\alpha.
|
|
\]
|
|
|
|
For the retained K2 run:
|
|
|
|
- `Re=100`;
|
|
- `alpha=1.0`;
|
|
- `nu=0.009`;
|
|
- body omega `=0.002`;
|
|
- medium domain `M = 1351 x 601`;
|
|
- cylinder diameter `D=30` lattice cells;
|
|
- total steps `280000` (`80000` burn-in + `200000` measured);
|
|
- force recorded every 100 steps;
|
|
- 2800 recorded samples per run.
|
|
|
|
The runner uses the exact force definitions
|
|
|
|
\[
|
|
C_D=\frac{2F_x}{U_\infty^2D},
|
|
\qquad
|
|
C_L=\frac{2F_y}{U_\infty^2D}.
|
|
\]
|
|
|
|
The fluctuation amplitude is half the peak-to-peak range over the post-burn time series, using cycle-aware crossing logic when sufficient crossings are present.
|
|
|
|
### 6.3 Primary and sensitivity variants
|
|
|
|
The retained full package has two K2 runs:
|
|
|
|
1. **Primary baseline:** MRT + uniform profile + `regularized` inlet.
|
|
2. **Inlet sensitivity:** MRT + uniform profile + `zou_he_local` inlet.
|
|
|
|
Both use double-buffer streaming, FP32 storage, no LES, free-slip y boundaries and `neq_extrap` outlet. The second run is not a separate physical reference case; it tests sensitivity to the inlet numerical closure.
|
|
|
|
### 6.4 Retained full results
|
|
|
|
| Variant | St | St error | mean CL | mean CD | C'L | C'D |
|
|
|---|---:|---:|---:|---:|---:|---:|
|
|
| MRT + regularized | 0.1696483 | 2.5065% | +2.5881365 | 1.1430751 | 0.3529538 | 0.0984419 |
|
|
| MRT + zou_he_local | 0.1685349 | 1.8338% | +2.5764851 | 1.1294693 | 0.3488342 | 0.0952994 |
|
|
| Kan99 reference | 0.1655 | — | -2.4881 | 1.1040 | 0.3631 | 0.0993 |
|
|
|
|
The frequency, drag and fluctuation magnitudes are close to the reference. The mean lift has the opposite sign relative to the stored Kan99 anchor in both variants, with a relative magnitude error of approximately 204%. The manifest therefore classifies the Kan99b full result as a **partial pass**, not an aggregate pass: `St`, `C_D` and fluctuation amplitudes pass their declared bands, but the mean-`C_L` sign/convention mismatch fails the all-metric gate.
|
|
|
|
This is scientifically important. Do not write “all Kan99b metrics agree” or call the sign mismatch a minor rounding issue. Before using the rotating-cylinder lift in a mechanism argument, the object orientation, wall-point velocity convention, positive rotation direction, force sign convention and reference-paper coordinate convention must be audited.
|
|
|
|
### 6.5 Declared K2 bands
|
|
|
|
The spec declares the following preferred relative bands:
|
|
|
|
- `St`: within 3%;
|
|
- mean `C_L`: within 4%;
|
|
- mean `C_D`: within 5%;
|
|
- `C'_L`: within 8%;
|
|
- `C'_D`: within 10%.
|
|
|
|
For the two retained runs, the band results are:
|
|
|
|
| Variant | St | mean CL | mean CD | C'L | C'D | aggregate |
|
|
|---|---|---|---|---|---|---|
|
|
| regularized | pass | fail | pass | pass | pass | partial pass |
|
|
| zou_he_local | pass | fail | pass | pass | pass | partial pass |
|
|
|
|
### 6.6 Matrix specified but not retained here
|
|
|
|
The runner/spec defines:
|
|
|
|
- K1: `Re=100`, `alpha=0.5`, lift-trend check;
|
|
- K2: `Re=100`, `alpha=1.0`, hard anchor;
|
|
- K3: `Re=60`, `alpha=1.6`, suppression classification;
|
|
- K4: `Re=100`, `alpha=2.0`, suppression classification;
|
|
- K5: `Re=160`, `alpha=2.0`, suppression classification;
|
|
- optional K0: `Re=100`, `alpha=0`.
|
|
|
|
Those cases are not present in `steady_jfm_qualification`; only K2 baseline and K2 inlet sensitivity are present. The current dossier therefore treats K1 and K3--K5 as **specified/planned validation cases**, not completed qualification evidence.
|
|
|
|
---
|
|
|
|
## 7. Sah04 confined-cylinder contract
|
|
|
|
### 7.1 Reference problem
|
|
|
|
[Sahin and Owens, “A numerical investigation of wall effects up to high blockage ratios on two-dimensional flow past a confined circular cylinder”] studies a stationary circular cylinder midway between parallel no-slip walls. The paper defines
|
|
|
|
\[
|
|
\beta=D/H,
|
|
\qquad
|
|
Re=U_{max}D/\nu,
|
|
\qquad
|
|
St=\frac{D}{TU_{max}}.
|
|
\]
|
|
|
|
The paper covers blockage ratios up to approximately 0.9 and Reynolds numbers up to approximately 280. It documents Hopf shedding, pitchfork symmetry breaking, asymmetric states and high-blockage wall/wake interactions.
|
|
|
|
The selected direct periodic anchors are:
|
|
|
|
| Case | beta | Re | target St |
|
|
|---|---:|---:|---:|
|
|
| S1 | 0.3 | 100 | 0.2115 |
|
|
| S2 | 0.5 | 200 | 0.3513 |
|
|
| S3 | 0.8 | 160 | approximately 0.5537 |
|
|
| S4 | 0.9 | 200 | 0.5314 |
|
|
|
|
The repository deliberately avoids using values interpolated from figures or critical-onset points as hard numerical gates.
|
|
|
|
### 7.2 Retained S2 setup
|
|
|
|
The full retained run uses:
|
|
|
|
- case S2;
|
|
- nominal `beta=0.5`;
|
|
- nominal `Re=200`;
|
|
- physical target profile: parabolic;
|
|
- numerical inlet scheme: `channel_stabilized`;
|
|
- collision: MRT;
|
|
- outlet: `neq_extrap`;
|
|
- no-slip confined walls;
|
|
- `D=30` lattice cells;
|
|
- fluid height `H=60` cells;
|
|
- realized `beta=30/60=0.5`;
|
|
- wall gap: 15 cells;
|
|
- grid: `2402 x 62` including boundary rows;
|
|
- `120000` total steps;
|
|
- `45000` burn-in steps;
|
|
- forces sampled every 5 steps;
|
|
- 24000 stored lift/drag samples.
|
|
|
|
The analysis measures the developed downstream `U_max,real`, and reports
|
|
|
|
\[
|
|
Re_{real}=\frac{U_{max,real}D}{\nu}.
|
|
\]
|
|
|
|
The spectrum is computed from the post-burn lift signal using a mean-subtracted Hanning-windowed real FFT, a target-guided frequency band, and local log-parabolic sub-bin interpolation.
|
|
|
|
### 7.3 Retained full S2 result
|
|
|
|
| Quantity | Result |
|
|
|---|---:|
|
|
| nominal Re | 200 |
|
|
| realized Re | 204.8809 |
|
|
| nominal beta | 0.5 |
|
|
| realized beta | 0.5 |
|
|
| target St | 0.3513 |
|
|
| measured St | 0.3566902 |
|
|
| relative St error | 1.5344% |
|
|
| gate | pass, threshold 5% |
|
|
| mean Cd | 2.5801072 |
|
|
| realized Umax | 0.10244045 |
|
|
| curved links | 292 |
|
|
| fallback links | 0 |
|
|
| low-q links | 72 |
|
|
| final rho range | 0.9820464 to 1.0512210 |
|
|
|
|
The full run passes the declared S2 Strouhal gate. It is a solver/reference anchor at a specific confined-channel setup. It is not evidence that all high-blockage cases, all collision models or all bifurcation boundaries have been validated.
|
|
|
|
The saved NPZ contains:
|
|
|
|
- 24000 lift samples;
|
|
- 24000 drag samples;
|
|
- sample lattice steps;
|
|
- burn index and recording interval;
|
|
- post-burn frequencies and power spectrum;
|
|
- final `rho`, `ux`, `uy` fields;
|
|
- measured `St`, peak frequency, realized `Re`, and realized `beta`.
|
|
|
|
### 7.4 Smoke S2 result and interpretation
|
|
|
|
The smoke run uses only `5000` steps with `1500` burn-in and retains 1000 force samples. It gives:
|
|
|
|
- realized `Re=161.4173` rather than the nominal 200;
|
|
- measured `St=0.3039154`;
|
|
- relative error `13.4884%`;
|
|
- gate fail.
|
|
|
|
This is expected diagnostic behaviour: the short run has not developed the target state and has insufficient statistical duration. It must be labelled wiring/initialization diagnostic only and must never be quoted as a failed physical validation of CelerisLab.
|
|
|
|
### 7.5 Matrix specified but not retained here
|
|
|
|
The runner/spec defines S1--S4, with high-blockage refinement recommended for S3/S4. The retained qualification directory contains only S2 full and S2 smoke. S1, S3 and S4 are not completed artifacts in this directory.
|
|
|
|
The specification requires realized blockage and realized Reynolds number to be reported, especially at high blockage. It also recommends at least approximately doubled resolution for `beta >= 0.8` before treating S3/S4 results as validation-quality. This is a methodological requirement, not evidence that those refined cases have already been run.
|
|
|
|
---
|
|
|
|
## 8. Manifest and artifact inventory
|
|
|
|
The manifest schema is `steady-pinball-cfd-anchor-qualification/v1`.
|
|
|
|
### Manifest interpretation
|
|
|
|
- `kan99b_full`: partial pass; frequency, drag and fluctuation amplitudes pass, but mean lift sign/convention mismatch fails aggregate gate.
|
|
- `sah04_full`: pass; S2 Strouhal error 1.534% is below the 5% gate.
|
|
- `smoke`: diagnostic only; insufficient duration for physics gates.
|
|
|
|
### Retained artifact hashes
|
|
|
|
| Relative artifact | SHA-256 |
|
|
|---|---|
|
|
| `kan99b_full/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv` | `e5ba55a789254322408b6657c175b0c1ac82ce92c3db4216716727ff8cc7df1c` |
|
|
| `kan99b_full/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv` | `84b999757c13c0d975be968f22b7e4cbf9ad9229d9ce91eb096c5ecdc92bbf72` |
|
|
| `kan99b_full/summary_runs.csv` | `b009ffc75615d65ec6d0d351da37a2d99ac4e57378d8ee635207e65e7edc6677` |
|
|
| `kan99b_full_summary.json` | `18b19b15bd426c68d5d919d3449f436a2284386726e2cd19e8334ccba2f0c6bf` |
|
|
| `sah04_full/s2_mrt.npz` | `6e3ef38de8cd1bc5c67ffa693868b1c6fd97453e1d7721a9287ca6fdf741f5ec` |
|
|
| `sah04_full_summary.json` | `e212fb4e0653e9ca3a3715fefef1d552e7dfac8acc1e46cd732769c0d7ce13e1` |
|
|
| `kan99b_smoke/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv` | `049382058562dbfda0aedb836827311302878d6589d790a94942aa973dee6262` |
|
|
| `kan99b_smoke/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv` | `45552003e8c9f8149d06eaac9f8696691e1e8607d92fd0e57135ea0919a664e4` |
|
|
| `kan99b_smoke/summary_runs.csv` | `468188a9cbf54b4491999f306b0e82352be91880038fd58487cdb040034518a3` |
|
|
| `kan99b_smoke_summary.json` | `24c101fcc7d1568c1ea0c4e8a9fe7c00b9427f9046b183bc9018624b65f76247` |
|
|
| `sah04_smoke/s2_mrt.npz` | `40438246e8b9c63dd1b28c9982a273d48885f6d378ba9756afae3db61b8eafd5` |
|
|
| `sah04_smoke_summary.json` | `902b211d28ca2c4d4205aae12cdd1ab6f563231e31ab23a8bed626d55451871` |
|
|
|
|
The manifest is the hash authority. The full artifact files are the evidence, not this prose dossier.
|
|
|
|
---
|
|
|
|
## 9. Additional CelerisLab validation relevant to setting writing
|
|
|
|
### 9.1 Sensor accuracy
|
|
|
|
`tests/validation/test_sensor_accuracy.py` validates the sensor kernel against a direct CPU average over the same sensor footprint. It uses four sensor locations, a free-slip uniform-flow MRT test, and an absolute component-wise difference threshold of `1e-4`. The test establishes that area-averaged sensor readback is consistent with the underlying macroscopic field sampling for the tested setup.
|
|
|
|
This supports using area-averaged probes in a DRL observation loop. It does not establish full-field observability, sensor optimality, or equivalence between sparse sensor DTW and full-field wake error.
|
|
|
|
### 9.2 Streaming equivalence
|
|
|
|
CelerisLab v0.5.1 includes an EsoPull single-buffer streaming path. The README records verification for D2Q9 curved-boundary MRT configurations, including fixed/rotating-cylinder Kan99b K2 comparisons and runtime body synchronization. The current documented scope is two-dimensional D2Q9; D3Q19 EsoPull is not yet implemented in that verification statement.
|
|
|
|
The README reports approximate Kan99b K2 drag comparisons between EsoPull and double-buffer for `D=20` and `D=30`, with differences below approximately 3.2% and 5.6%, respectively. These are implementation equivalence diagnostics and should not be confused with the retained `steady_jfm_qualification` full-run manifest.
|
|
|
|
### 9.3 FP16S limitation
|
|
|
|
FP16S stores the distribution function in half precision with FP32 computation and scaling. The documented validation found that FP16S combined with Bouzidi curved boundaries can produce approximately 30--40% drag error even with DDF shifting, while no shifting can exceed 100% error for Kan99b K2. Sah04 S2 Strouhal can remain within approximately 1.5%, but force-critical curved-boundary work should use FP32.
|
|
|
|
Therefore the JFM steady/cloaking qualification should use FP32 storage when force or torque is interpreted scientifically. A good Strouhal result under FP16S is not enough to authorize force-mechanism claims.
|
|
|
|
### 9.4 DDF shifting
|
|
|
|
DDF shifting stores `f_i-w_i` rather than `f_i` to improve half-precision accuracy. The documented supported scope includes D2Q9 MRT with double-buffer or EsoPull and the tested inlet families. It is important for FP16S but does not cure all Bouzidi/quantization force errors. The retained steady qualification uses ordinary FP32 and `ddf_shifting=false`.
|
|
|
|
### 9.5 Performance
|
|
|
|
The CelerisLab README reports approximately 4400 MLUPS for a 384 x 192 D2Q9 V100 benchmark under Re100 MRT no-LES, for both double-buffer and EsoPull at the stated benchmark level. The performance runner is a separate engineering benchmark. MLUPS is not a validation of physical accuracy and should be reported separately from physics metrics.
|
|
|
|
---
|
|
|
|
## 10. Known limitations and unresolved issues
|
|
|
|
1. **Kan99 mean-lift sign mismatch.** This is the most important unresolved physics-validation issue in the retained package. The magnitude is close but the sign is opposite to the Kan99 anchor. Audit coordinate and force conventions before interpreting rotating-cylinder lift.
|
|
2. **Qualification matrix is partial.** Only K2 and S2 full runs are retained in this directory. Do not claim K0--K5 or S1--S4 as completed based only on runner definitions or README tables.
|
|
3. **Smoke runs are not physics evidence.** The S2 smoke run demonstrates that the setup runs but has realized Re drift and insufficient periodic duration.
|
|
4. **No uncertainty estimate.** The retained artifacts are deterministic solver runs, not independent ensembles. They provide no statistical confidence interval.
|
|
5. **No mesh-convergence result in this manifest.** Domain/grid choices are documented in the runners/specs, but the qualification directory does not contain a multi-resolution convergence package.
|
|
6. **No full field snapshots for Kan99 full.** The retained Kan99 full output contains force histories and summaries, not vorticity images or field snapshots.
|
|
7. **Sah04 high-blockage cases remain unqualified here.** High blockage is especially sensitive to narrow wall gaps, realized Re and geometry resolution.
|
|
8. **Reference/solver contract differences matter.** Agreement is expected only after matching Re definition, inlet profile, wall condition, outlet treatment, rotation convention, coefficient normalization and analysis window.
|
|
9. **No mechanism proof.** A benchmark match validates selected numerical observables; it does not prove a particular wake mechanism or guarantee transfer to the three-cylinder pinball.
|
|
10. **No Legacy equivalence.** LegacyCelerisLab results cannot be silently pooled with current CelerisLab results. The two solver generations have different APIs, accumulation semantics, generated kernels, boundary implementation details and provenance.
|
|
|
|
---
|
|
|
|
## 11. Writing-ready methods language
|
|
|
|
The following is suitable as a starting point, subject to checking the final artifact paths and solver revision:
|
|
|
|
> The flow solver was implemented in CelerisLab, a CUDA-accelerated D2Q9 lattice-Boltzmann code with MRT collision, double-buffer streaming and Bouzidi interpolation for moving curved boundaries. Force and velocity-sensor observables were accumulated on the GPU and read back through the Python API; force coefficients were formed from the accumulated force using the same diameter and free-stream normalization as the reference problem. Before applying the solver to the fluidic-pinball control problem, we qualified selected numerical components against two canonical single-cylinder benchmarks. For a steadily rotating cylinder, the `Re=100`, `alpha=1` case reproduced the reference Strouhal number, mean drag and fluctuation amplitudes within the declared tolerance bands, although the mean-lift sign convention remained discrepant and was therefore not used as an accepted validation observable without further convention auditing. For a stationary cylinder in a confined channel at `beta=0.5`, `Re=200`, the measured Strouhal number was `0.35669` compared with the reference value `0.3513`, a relative error of `1.53%`. These tests qualify the selected solver/configuration combination for the reported numerical setting; they do not constitute a proof of universal solver accuracy or of the later flow-control mechanism.
|
|
|
|
### What to put in a table
|
|
|
|
At minimum include:
|
|
|
|
- solver revision;
|
|
- lattice model and dimension;
|
|
- collision model;
|
|
- streaming path;
|
|
- storage precision;
|
|
- LES state;
|
|
- inlet physical profile and numerical scheme;
|
|
- outlet mode;
|
|
- wall condition;
|
|
- diameter and grid;
|
|
- `Re`, `nu`, `U_inf` or `U_max` definition;
|
|
- body rotation parameter and physical omega;
|
|
- burn-in and statistics window;
|
|
- sample interval;
|
|
- target and measured `St`;
|
|
- measured force metrics where accepted;
|
|
- artifact path and manifest/hash identifier.
|
|
|
|
---
|
|
|
|
## 12. Claims that are authorized, bounded or prohibited
|
|
|
|
### Authorized with scope
|
|
|
|
- CelerisLab implements a GPU-accelerated D2Q9 MRT LBM suitable for the tested two-dimensional rotating and confined cylinder configurations.
|
|
- The retained Sah04 S2 full run passes the declared 5% Strouhal gate.
|
|
- The retained Kan99b K2 full runs reproduce frequency, drag and fluctuation magnitudes within their selected bands.
|
|
- The selected sensor readback path can be checked against direct area averages over the tested footprints.
|
|
- FP32 is the appropriate storage choice for force-critical curved-boundary calculations in the documented validation scope.
|
|
|
|
### Bounded / conditional
|
|
|
|
- The Kan99b K2 result is a partial pass because mean-lift sign/convention agreement is unresolved.
|
|
- The `regularized` versus `zou_he_local` K2 comparison is an inlet sensitivity check, not evidence that one inlet scheme is universally superior.
|
|
- The Sah04 result qualifies one moderate-blockage confined-channel point, not all blockage ratios or bifurcation regimes.
|
|
- EsoPull equivalence is bounded to the documented D2Q9 MRT configurations and comparison metrics.
|
|
- Performance figures describe hardware/configuration throughput, not accuracy.
|
|
|
|
### Prohibited without new evidence
|
|
|
|
- “All Kan99b K0--K5 and Sah04 S1--S4 cases passed.”
|
|
- “The solver is validated for all Reynolds numbers, all blockage ratios or all collision models.”
|
|
- “The mean-lift sign mismatch is irrelevant.”
|
|
- “A matching Strouhal number proves force accuracy, boundary accuracy or hydrodynamic mechanism.”
|
|
- “The solver validation proves the DRL policy, SR law, CCD interpretation or cloaking mechanism.”
|
|
- “LegacyCelerisLab and CelerisLab are numerically interchangeable.”
|
|
- “Smoke output is a physical benchmark result.”
|
|
|
|
---
|
|
|
|
## 13. Reference papers
|
|
|
|
- [Kan99] S. Kang, H. Choi and S. Lee, “Laminar flow past a rotating circular cylinder,” *Physics of Fluids* 11, 3312--3321 (1999). DOI: `10.1063/1.870190`.
|
|
- [Sah04] M. Sahin and R. G. Owens, “A numerical investigation of wall effects up to high blockage ratios on two-dimensional flow past a confined circular cylinder,” *Physics of Fluids* 16, 1305--1320 (2004). DOI: `10.1063/1.1668285`.
|
|
|
|
Undermind cite-key resolution in the DynamisLab workspace: `Kan99` and `Sah04`. In Undermind workspace Markdown, use bare markers `[Kan99]` and `[Sah04]`; in manuscript prose, resolve them through the project's bibliography workflow.
|
|
|
|
---
|
|
|
|
## 14. Reproduction entry points
|
|
|
|
From the `CelerisLab/` directory, the validation runners are:
|
|
|
|
```bash
|
|
conda run -n pycuda_3_10 python tests/validation/run_kan99b_rotating_cylinder.py
|
|
conda run -n pycuda_3_10 python tests/validation/run_sah04_st_matrix.py
|
|
conda run -n pycuda_3_10 python tests/validation/test_sensor_accuracy.py
|
|
```
|
|
|
|
The retained qualification artifacts should not be overwritten. New runs must use a new no-clobber output directory and must record the exact command, environment, GPU, solver revision, configuration, artifact hashes and gate interpretation.
|
|
|
|
**Final operational rule:** read the code and manifest before quoting any number. This dossier is an index and interpretation aid; the JSON/NPZ/CSV artifacts and current validation code remain the numerical authority.
|