6.9 KiB
Rotating cylinder validation against [Kan99b]
Goal
This validation should stay small, direct, and defensible.
The main design rules are:
- use the paper's direct numeric anchor at
Re = 100, alpha = 1.0as the main hard benchmark - use a low-rotation case to test the lift trend
- use suppression cases to test flow classification, not exact threshold fitting
- do not treat values read from figures near
alpha_Las tight amplitude targets
This keeps the matrix representative without overfitting to sensitive threshold points.
Strong numeric anchors from [Kan99b]
The strongest exact benchmark in the paper is the convergence case at Re = 100, alpha = 1.0.
| Quantity | Reference value |
|---|---|
St |
0.1655 |
mean C_L |
-2.4881 |
mean C_D |
1.1040 |
C'_L |
0.3631 |
C'_D |
0.0993 |
For low rotation at Re = 100, the paper also gives the mean lift trend
\overline{C_L} \approx -2.48\alpha
which is a good secondary benchmark for small alpha.
The suppression thresholds are given as trends:
| Reynolds number | Expected alpha_L |
|---|---|
| 60 | about 1.4 |
| 100 | about 1.8 |
| 160 | about 1.9 |
These threshold values should be used as regime guides, not as tight one-point numeric targets. In the suppression curve from [Kan99b] shown above, the boundary is exactly the kind of place where a small solver difference can change the observed state.
Fixed solver setup
| Item | Setting |
|---|---|
| Dimension | 2D |
| Lattice | D2Q9 |
| Streaming | double buffer |
| Curved boundary | current Bouzidi moving wall implementation |
| Inlet profile | uniform |
| Top and bottom boundaries | free slip |
| Outlet | neq extrapolation |
| LES | off |
| Precision | FP32 |
| Cylinder diameter | D = 30 lattice units |
| Cylinder radius | R = 15 lattice units |
| Rotation input | update body omega only |
The baseline domain remains the current medium far field unless a later boundary sensitivity check shows otherwise.
Inlet recommendation by collision model
Kan99b is an open-flow validation, not a confined-channel benchmark.
| Collision | Recommended inlet | Secondary choice | Avoid as primary |
|---|---|---|---|
| SRT | equilibrium |
regularized |
zou_he_local |
| TRT | regularized |
equilibrium |
zou_he_local until the anchor is stable |
| MRT | regularized or zou_he_local |
equilibrium |
channel_stabilized |
Keep one inlet family per collision model across the primary matrix.
Lattice-unit mapping
Use
U_\infty = 0.03
With D = 30,
\nu = \frac{U_\infty D}{Re} = \frac{0.9}{Re}
Re |
nu |
SRT equivalent omega |
|---|---|---|
| 60 | 0.015000 | 1.83486 |
| 100 | 0.009000 | 1.89753 |
| 160 | 0.005625 | 1.93470 |
The body rotation rate is
\omega_{body} = \frac{2 \alpha U_\infty}{D} = 0.002\alpha
alpha |
body omega |
|---|---|
| 0.5 | 0.0010 |
| 1.0 | 0.0020 |
| 1.6 | 0.0032 |
| 2.0 | 0.0040 |
Primary matrix
This is the recommended main validation set.
| Case | Re |
alpha |
Role |
|---|---|---|---|
| K1 | 100 | 0.5 | low-rotation lift trend check |
| K2 | 100 | 1.0 | strongest hard anchor |
| K3 | 60 | 1.6 | low-Re suppression classification |
| K4 | 100 | 2.0 | mid-Re suppression classification |
| K5 | 160 | 2.0 | high-Re suppression classification |
Optional baseline if needed for debugging or plots:
| Case | Re |
alpha |
Status |
|---|---|---|---|
| K0 | 100 | 0.0 | optional |
This matrix covers:
- one periodic low-rotation trend point
- one exact hard anchor with full force data
- suppression behavior at low, medium, and high Reynolds number
How to judge each case
K1
Use K1 to check the low-rotation lift law.
Target:
\overline{C_L} \approx -2.48 \times 0.5 \approx -1.24
This is a trend check, not a strict fluctuation-amplitude benchmark.
K2
Use K2 as the hard benchmark case.
Preferred agreement band:
| Quantity | Preferred band |
|---|---|
St |
within 3 percent |
mean C_L |
within 4 percent |
mean C_D |
within 5 percent |
C'_L |
within 8 percent |
C'_D |
within 10 percent |
K3 to K5
Use K3 to K5 as suppression classification cases.
Primary success signature:
C'_Lcollapses toward zero in the final window- no sustained alternating wake remains
- flow classification agrees with the expected suppressed regime
These are not exact threshold-fitting cases. Do not over-interpret a small residual fluctuation if the wake is otherwise clearly in the suppressed class.
Optional threshold bracket check
If later you want a more explicit threshold study, use pairs around alpha_L rather than a single point on the boundary.
Recommended pairs:
Re |
Lower point | Upper point |
|---|---|---|
| 60 | 1.3 | 1.5 |
| 100 | 1.7 | 1.9 |
| 160 | 1.8 | 2.0 |
These should still be treated as regime-location checks, not hard force targets.
Run policy
| Case type | Total steps | Warmup | Statistics |
|---|---|---|---|
| K1 and K2 | 180000 to 220000 | first 40 percent | last 60 percent |
| K3 to K5 | 220000 to 280000 | first 50 percent | last 50 percent |
The final statistics window should contain at least 20 shedding periods whenever the case remains periodic.
TRT re-entry rule
Bring TRT back in this order:
- K2 only
- if K2 is stable and credible, run K1
- only then run K3 to K5
This prevents TRT from expanding the matrix before the hard anchor is trustworthy.
Deliverables
For each collision model, deliver:
- one table of run settings including collision, inlet scheme, wall type,
Re,alpha,nu, and body omega - one CSV per run with force history
- selected field images for wake classification
- one summary table with
mean C_D,mean C_L,C'_D,C'_L, andSt - one short note stating whether suppression behavior matches [Kan99b]
Recommended primary settings summary
| Collision | Wall | Inlet | Status |
|---|---|---|---|
| SRT | free slip | equilibrium |
primary |
| TRT | free slip | regularized |
primary if K2 is stable |
| MRT | free slip | regularized or zou_he_local |
primary |
MRT-only runner mapping
The current executable entrypoint is tests/run_kan99b_rotating_cylinder.py, and this round uses MRT-only scheduling:
- primary matrix is
K1-K5withMRT + regularizedinlet - one extra control run is added at K2 with
MRT + zou_he_local - all runs keep
uniforminlet profile,free_slipy-wall,neq_extrapoutlet - output rows include
case_id,variant,collision,inlet_scheme,grid,steps,burn_in,St,St_error_pct(for K2), and force metrics - K2 gate uses this document's per-metric tolerances for
St,mean C_L,mean C_D,C'_L,C'_D
Example commands:
conda run -n pycuda_3_10 python tests/run_kan99b_rotating_cylinder.py \
--json-out tests/output/kan99b_validation/summary_runs.json
conda run -n pycuda_3_10 python tests/run_kan99b_rotating_cylinder.py \
--case K2 --save-vorticity
Reference
[Kan99b] S. Kang, H. Choi, and S. Lee, “Laminar flow past a rotating circular cylinder,” 1999.