CelerisLab/tests/Kan99b_validation.md

14 KiB

Rotating cylinder validation plan

Undermind

Rotating cylinder validation against [Kan99b]

This plan defines a practical validation campaign for 2D flow past a rotating circular cylinder using the current CelerisLab solver. The reference is the rotating cylinder study of Kang, Choi, and Lee [Kan99b]. The goal is not to reproduce their O type far field mesh exactly. The goal is to show that the present rectangular domain with uniform inflow, slip top and bottom boundaries, curved moving wall treatment, and open outlet can recover the same force, shedding, and suppression trends with controlled boundary sensitivity.

The validation focuses on three questions:

  • whether the moving curved wall treatment gives the correct mean force trend under rotation
  • whether the wake frequency and fluctuation amplitudes are credible before shedding is suppressed
  • whether the predicted critical rotation rate for shedding suppression is close to the literature value

Reference targets from [Kan99b]

The paper defines the Reynolds number and spin ratio as

Re = \frac{U_\infty D}{\nu}, \qquad \alpha = \frac{\omega_{body} D}{2 U_\infty}

and uses the standard force coefficients

C_D = \frac{2 F_x}{\rho U_\infty^2 D}, \qquad C_L = \frac{2 F_y}{\rho U_\infty^2 D}

The fluctuation amplitudes are half peak to peak values over one shedding period, not RMS values [Kan99b].

The most useful exact anchor point is the tabulated convergence case at `Re=100` and `\alpha=1.0` [Kan99b].

Quantity Reference value
`St` 0.1655
`\overline{C_L}` -2.4881
`\overline{C_D}` 1.1040
`C'_L` 0.3631
`C'_D` 0.0993

The same work gives the most important trend targets for the broader campaign [Kan99b].

Reynolds number Expected trend Practical target
60 shedding suppressed near `\alpha_L` about 1.4
100 shedding suppressed near `\alpha_L` about 1.8
160 shedding suppressed near `\alpha_L` about 1.9
60 low rotation mean lift slope `\overline{C_L} \approx -2.50\alpha`
100 low rotation mean lift slope `\overline{C_L} \approx -2.48\alpha`
160 low rotation mean lift slope `\overline{C_L} \approx -2.46\alpha`

The paper also reports that its outer boundary sensitivity is already very small at far field radius `R_D=50`, and that increasing the radius to `R_D=100` changes the main outputs by less than about half a percent for the anchor case [Kan99b]. That result motivates an explicit boundary independence check in the present rectangular setup.

Solver setup for this campaign

The campaign assumes the present code path and keeps all nonessential choices fixed.

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
Output cadence for force history every 100 steps
Sensors none
Flow diagnosis saved flow fields and derived images

This campaign evaluates SRT, TRT, and MRT separately. The same geometry, flow scales, and post processing rules should be used for all three collision models.

Parameter mapping in lattice units

The recommended inflow speed is

U_\infty = 0.03

This keeps the Mach number low while leaving enough dynamic range for the force signals.

With `D=30`, the required viscosity for each Reynolds number is

\nu = \frac{U_\infty D}{Re} = \frac{0.9}{Re}

which gives the following values.

`Re` `\nu` SRT equivalent `\omega = 1 \mathbin{/} (3\nu + 0.5)`
60 0.015000 1.83486
100 0.009000 1.89753
160 0.005625 1.93470

The body rotation rate in lattice units is

\omega_{body} = \frac{2 \alpha U_\infty}{D} = 0.002\alpha

which gives the following direct conversion table.

`\alpha` body omega
0.0 0.0000
0.5 0.0010
1.0 0.0020
1.4 0.0028
1.8 0.0036
1.9 0.0038
2.0 0.0040

Computational domain family

Because the current solver uses a rectangular box rather than the O type far field mesh of [Kan99b], boundary sensitivity must be checked explicitly. With free slip top and bottom boundaries, the lateral confinement error should be much weaker than with no slip walls, so a moderate family of domain sizes is sufficient for the first pass.

The recommended domain family is defined in cylinder diameters.

Domain Upstream distance Downstream distance Height Integer grid for `D=30`
S 12D 24D 16D 1081 by 481
M 15D 30D 20D 1351 by 601
L 20D 40D 24D 1801 by 721

The corresponding cylinder centers are

Domain Cylinder center
S 360, 240
M 450, 300
L 600, 360

These sizes are measured from the cylinder center to the inlet, outlet, and slip boundaries. The baseline domain should be M. Domain S and L are used only to establish boundary independence.

Test phases

Phase A

The first phase chooses a domain that is large enough for the rest of the campaign.

Run only the anchor case

Re = 100, \qquad \alpha = 1.0

with MRT on domains S, M, and L.

For each run, compute

  • `\overline{C_D}`
  • `\overline{C_L}`
  • `C'_D`
  • `C'_L`
  • `St`

Pick the smallest domain for which the change from the next larger domain is small enough.

Quantity Domain independence target
`St` less than 1 percent
`\overline{C_L}` less than 2 percent
`\overline{C_D}` less than 2 percent
`C'_L` less than 3 percent
`C'_D` less than 3 percent

If M satisfies these limits against L, the rest of the campaign should use M. If not, use L.

Phase B

Once the domain is fixed, run the same anchor case with all three collision models.

Collision model Required run
SRT `Re=100, \alpha=1.0`
TRT `Re=100, \alpha=1.0`
MRT `Re=100, \alpha=1.0`

Compare each run to the exact anchor values from [Kan99b].

Quantity Preferred agreement band
`St` within 3 percent
`\overline{C_L}` within 4 percent
`\overline{C_D}` within 5 percent
`C'_L` within 8 percent
`C'_D` within 10 percent

This phase also checks collision model consistency. SRT, TRT, and MRT should not disagree strongly if the moving wall and force extraction are implemented correctly.

Phase C

After the anchor case is established, run the main rotation scan at `Re=100` for all three collision models.

Case `\alpha` body omega
A0 0.0 0.0000
A1 0.5 0.0010
A2 1.0 0.0020
A3 1.5 0.0030
A4 1.7 0.0034
A5 1.8 0.0036
A6 1.9 0.0038
A7 2.0 0.0040

The expected signatures from the paper are [Kan99b]:

  • mean lift becomes more negative roughly linearly at low `\alpha`
  • mean drag decreases as `\alpha` increases
  • Strouhal number stays nearly constant while periodic shedding exists
  • shedding disappears near `\alpha \approx 1.8`

The low rotation linear fit gives a strong consistency check.

\overline{C_L} \approx -2.48\alpha \qquad Re=100

Phase D

The final phase checks whether the code recovers the Reynolds number dependence of the suppression threshold.

Run the following reduced sets for all three collision models.

Reynolds number `\alpha` values
60 0.0, 0.5, 1.0, 1.2, 1.4, 1.6
160 0.0, 0.5, 1.0, 1.5, 1.8, 1.9, 2.0

The expected signatures are [Kan99b]:

  • `Re=60` should lose periodic shedding near `\alpha \approx 1.4`
  • `Re=160` should lose periodic shedding near `\alpha \approx 1.9`
  • the low rotation lift slopes should be about `-2.50\alpha` at `Re=60` and about `-2.46\alpha` at `Re=160`

Run length and output policy

The lattice time step is very small, so dense output is unnecessary. Integrated quantities should be written every 100 steps. Full field dumps should be much less frequent.

The recommended policy is

Output type Cadence
force and torque history every 100 steps
full field dump during warmup every 2000 steps
full field dump during statistics window every 1000 steps
final image export for report selected representative times only

The minimum full field content is

  • density
  • `u_x`
  • `u_y`

Derived images should be generated in post processing.

Image Purpose
vorticity identify alternating vortex shedding and its suppression
velocity magnitude show wake width and accelerated side of the rotating cylinder
streamwise velocity show wake recovery and reverse flow region

No sensors are required for this campaign. Flow images plus the integrated force history are sufficient.

Statistics window

The force history should be split into a warmup window and a statistics window. Near the suppression threshold, transients decay slowly, so longer runs are needed.

Case type Total steps Warmup Statistics
anchor case 180000 to 220000 first 40 percent last 60 percent
near critical `\alpha` 220000 to 280000 first 50 percent last 50 percent
clearly periodic or clearly steady case 140000 to 180000 first 40 percent last 60 percent

The final statistics window should contain at least 20 shedding periods whenever the case is periodic.

Post processing rules

Compute the force coefficients from the saved force history using

C_D = \frac{2 F_x}{\rho U_\infty^2 D}, \qquad C_L = \frac{2 F_y}{\rho U_\infty^2 D}

For periodic cases, compute

  • `\overline{C_D}` and `\overline{C_L}` as time averages over the statistics window
  • `C'_D` and `C'_L` as half peak to peak values over each period, then average those amplitudes over the statistics window
  • `St` from the dominant frequency of `C_L`

The preferred frequency estimate is FFT of `C_L`. A zero crossing estimate may be used as a cross check.

A case should be classified as steady when both conditions hold:

  • the last part of the `C_L` signal no longer shows a sustained periodic component above noise level
  • the vorticity images no longer show an alternating Karman street

A practical threshold for suppression is that the measured `C'_L` in the final window falls below 5 percent of the `\alpha=0` value at the same Reynolds number and collision model.

Deliverables for the coder

The coder should deliver the following for each completed phase.

  • one configuration table listing domain, collision model, Reynolds number, viscosity, `\alpha`, body omega, and total step count
  • one CSV file per run with force history sampled every 100 steps
  • one folder of selected field snapshots
  • one post processing table with `\overline{C_D}`, `\overline{C_L}`, `C'_D`, `C'_L`, and `St`
  • one summary plot of `\overline{C_L}` versus `\alpha`
  • one summary plot of `\overline{C_D}` versus `\alpha`
  • one summary plot of `C'_L` versus `\alpha`
  • one summary plot of `St` versus `\alpha`
  • one domain sensitivity comparison for the anchor case
  • one short note stating whether shedding suppression occurs near the expected `\alpha_L`

Executable driver for this deliverable set:

Example commands:

conda run -n pycuda_3_10 python tests/run_kan99b_rotating_cylinder.py --phase a
conda run -n pycuda_3_10 python tests/run_kan99b_rotating_cylinder.py --phase b --domain M
conda run -n pycuda_3_10 python tests/run_kan99b_rotating_cylinder.py --phase all --minimal --domain M

Minimum run set

If compute budget is tight, the minimum useful run set is the following.

Phase Runs
domain choice MRT on S, M, L for `Re=100, \alpha=1.0`
anchor comparison SRT, TRT, MRT on the chosen domain for `Re=100, \alpha=1.0`
main trend check SRT, TRT, MRT on the chosen domain for `Re=100` with `\alpha = 0.0, 1.0, 1.5, 1.8, 2.0`
threshold check SRT, TRT, MRT on the chosen domain for `Re=60, \alpha=1.4` and `Re=160, \alpha=1.9`

This reduced set is enough to answer the main validation question. A larger scan can be added only after the anchor and threshold cases behave correctly.


References

Kan99b