# Sah04 St validation matrix

##### [**Undermind**](https://undermind.ai)

---

## 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.py`` uses a band around the
  paper target shedding frequency ``f0 = St_target * U_max / D`` and reports
  **two** Strouhal numbers: **raw** (plain band-limited dominant peak) and
  **guided** (same band with a mild Gaussian weight toward ``f0`` to reduce
  harmonic ambiguity in narrow channels). The **5% / 10%** hard-case rules
  apply to **guided** ``St``; **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 DIR`` writes ``case{id}_{COLL}.npz`` (lift, drag samples, LBM step index per sample, post-burn ``freqs_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\] gives systematic confined flow St targets at the onset of periodic shedding in Table IV, plus a small number of direct supercritical DNS values in Section IV.B. It does not provide a full Cartesian table of supercritical St values for low, mid, and high blockage at three common Reynolds numbers. The matrix above is therefore built to maximize direct paper anchors rather than to force a mathematically neat but weakly supported grid.

## 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\] 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,” Apr. 02, 2004. doi: [10.1063/1.1668285](https://doi.org/10.1063/1.1668285).
