7.1 KiB
Sah04 St validation matrix
Undermind
Sah04 St validation matrix
A Strouhal based matrix should lean on cases where [Sah04] gives an explicit frequency target, or a target that can be derived directly from a stated shedding period. With cylinder diameter fixed at D = 30, that rules out a strict low to mid to high blockage Cartesian grid if every cell is meant to carry a hard 5 percent St gate. The paper simply does not publish a dense 3 by 3 table of supercritical confined flow frequencies. The most defensible 27 run plan is therefore a nine case matrix chosen to maximize paper anchored St targets, then run with SRT, TRT, and MRT on each case.
Fixed setup
- Geometry follows [Sah04]
- Upstream length is 40D
- Downstream length is 40D
- Total fluid length is 80D
- With D = 30, use nx = 80D + 2 = 2402
- Cylinder radius is 15
- Cylinder x center is 40D + 0.5 = 1200.5
- Inlet profile is parabolic
- Reynolds number is defined with U_max and D
- Strouhal number is defined as St = fD U_max^-1
- For all cases, keep U_max fixed and set viscosity from Re = U_max D nu^-1
Blockage levels
The table below gives the three blockage levels to use with D fixed at 30.
| Blockage tier | Nominal beta | H | ny | Realized beta | Cylinder center |
|---|---|---|---|---|---|
| Low | 0.5 | 60 | 62 | 0.5000 | 1200.5, 30.5 |
| Mid | 0.8 | 38 | 40 | 0.7895 | 1200.5, 19.5 |
| High | 0.9 | 33 | 35 | 0.9091 | 1200.5, 17.0 |
The low blockage tier is exact on the D = 30 grid. The two higher blockage tiers use the nearest integer channel heights. This keeps the matrix practical while staying close to the [Sah04] confined flow regime where supercritical St values are actually reported.
Nine Sah04 cases
Run every row below with SRT, TRT, and MRT. That gives 27 total runs.
| Case | Blockage tier | Re | Target St | Target class |
|---|---|---|---|---|
| 1 | Low beta 0.5 | 124.09 | 0.3393 | Direct from Table IV |
| 2 | Low beta 0.5 | 160 | 0.3450 | Interpolated between Table IV and Re 200 |
| 3 | Low beta 0.5 | 200 | 0.3513 | Direct from Section IV.B |
| 4 | Mid beta 0.8 | 110.24 | 0.5363 | Direct from Table IV |
| 5 | Mid beta 0.8 | 160 | 0.5537 | Derived from stated period T ≈ 1.806 |
| 6 | Mid beta 0.8 | 200 | 0.5510 | Derived from stated period T ≈ 1.815 |
| 7 | High beta 0.9 | 162.82 | 0.5202 | Direct from Table IV |
| 8 | High beta 0.9 | 180 | 0.5254 | Interpolated between Table IV and Re 200 |
| 9 | High beta 0.9 | 200 | 0.5314 | Direct from Section IV.B |
How to use the targets
The nine cases are not equal in evidential weight.
-
Hard pass fail cases
- Case 1
- Case 3
- Case 4
- Case 5
- Case 6
- Case 7
- Case 9
These have targets stated directly in [Sah04], or obtained directly from a shedding period stated in the paper. A 5 percent St gate is reasonable here.
-
Soft trend cases
- Case 2
- Case 8
These are useful to see whether each collision model follows the same St trend between two paper anchored points. They should not carry the same weight as the hard cases.
Recommended run settings
Use one sampling and averaging policy across the whole matrix so the comparisons stay clean.
-
D = 30 for all runs
-
record_every = 5
-
double buffer streaming
-
same inlet formulation and force extraction for all collisions
-
same FFT windowing and same St extraction routine for all runs
The automated runner
tests/run_sah04_st_matrix.pyuses a band around the paper target shedding frequencyf0 = St_target * U_max / Dand reports two Strouhal numbers: raw (plain band-limited dominant peak) and guided (same band with a mild Gaussian weight towardf0to reduce harmonic ambiguity in narrow channels). The 5% / 10% hard-case rules apply to guidedSt; raw is for diagnosing pick ambiguity (e.g. supercritical mid/high cases).
For the lower Re onset cases, the frequency estimate is more sensitive to burn in and window length. A conservative default is:
-
Cases 1, 4, 7
- 80k total steps
- 30k burn
-
Cases 2, 3, 5, 6, 8, 9
- 60k total steps
- 20k burn
If TRT is visibly noisier on the onset cases, extend TRT alone to the longer window rather than changing the matrix.
Runner (repo): tests/run_sah04_st_matrix.py
- Full MRT sweep:
conda run -n pycuda_3_10 python tests/run_sah04_st_matrix.py --collision MRT - All collisions (27 runs):
... --collision all - Quick wiring check: add
--smoke(short steps; St only qualitative) - Single case:
--case 4; JSON:--json-out path.json - Override length:
--steps/--burn(ignored with--smoke) - Long archive:
--dump-npz-dir DIRwritescase{id}_{COLL}.npz(lift, drag samples, LBM step index per sample, post-burnfreqs_hz/ power, band mask, guided Gaussian weight) plus.meta.json
Long runs (cases 6 and 9)
For spectrum stability checks (not the 9-case matrix gate), a minimal set is six runs: MRT/TRT/SRT × case 6 and case 9. Suggested first budget: steps 200000, burn 80000, record_every=5 (same as matrix), with --dump-npz-dir so raw vs guided can be recomputed offline from power_post_burn and the saved band weights.
Evaluation rule
Judge each collision model on the hard cases first.
-
Primary rule
- At least 5 of the 7 hard cases within 5 percent in St
- No hard case worse than 10 percent
-
Secondary rule
- Cases 2 and 8 should lie between their neighboring hard target values in the correct order
- SRT, TRT, and MRT should preserve the same beta and Re trend even when their absolute errors differ slightly
Why this matrix and not a strict Cartesian 3 by 3
Sah04
Exact beta alternative
If exact blockage ratios on the D = 30 grid matter more than supercritical St anchor density, use beta = 0.1, 0.3, and 0.5 instead. That gives exact channel heights H = 300, 100, and 60. The tradeoff is that [Sah04] supplies far fewer direct supercritical St targets in that lower blockage band, so the resulting matrix is less suitable for a clean 5 percent St gate.
References
Sah04