248 lines
6.9 KiB
Markdown
248 lines
6.9 KiB
Markdown
# 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.0` as 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_L` as 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'_L` collapses 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:
|
|
|
|
1. K2 only
|
|
2. if K2 is stable and credible, run K1
|
|
3. 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`, and `St`
|
|
- 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-K5` with `MRT + regularized` inlet
|
|
- one extra control run is added at K2 with `MRT + zou_he_local`
|
|
- all runs keep `uniform` inlet profile, `free_slip` y-wall, `neq_extrap` outlet
|
|
- 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:
|
|
|
|
```bash
|
|
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.
|