124 lines
7.4 KiB
Markdown
124 lines
7.4 KiB
Markdown
# Single-cylinder free transverse VIV — PREDECLARATION DRAFT (not frozen)
|
||
|
||
Stage goal (Yanqi via TRON): prescribed Dütsch case + one VIV case both
|
||
"reasonably close" to a predeclared reference = development-stage success, then
|
||
cleanup. The frozen Dütsch settling failure (0/28 pairs at 31.25 T) stays on
|
||
record. Practical closeness is not a formal validation claim. No code until
|
||
this page is jointly agreed.
|
||
|
||
## Primary case (one case)
|
||
|
||
- Reference: Qin et al., arXiv:2003.12186, §4.5 (maximum amplitudes at
|
||
U_red = 3…8: .075, .551, .520, .459, .370, .084 D in the text, as quoted by
|
||
Grok/Astra) for the target; setup from Kolahdouz et al., arXiv:2003.12046,
|
||
§4.1.1 (read 2026-10-30 via ar5iv): U* sweep 3–8 with amplitudes only in
|
||
Fig. 3(b) (no text values), domain [−30, 45] D × [−30, 30] D with the
|
||
cylinder "initially at rest and centered at the origin", uniform inflow on
|
||
the left, zero normal traction and tangential velocity at the outlet, zero
|
||
normal velocity and tangential traction on y = ±30 D; no initial
|
||
perturbation and no total simulated time stated.
|
||
- Re = 150, U* = U/(f_n D) = 5, m/(rho D²) = 2 (m* = rho_s/rho_f = 8/pi),
|
||
zeta = 0, f_n = sqrt(K/M)/(2 pi) in vacuum. Transverse DOF only.
|
||
- Target: A_max = .520 D (peak amplitude, Qin §4.5). Multi-code reference
|
||
(Kolahdouz ILE-NS, Qin II-LBM). Reference uncertainty: not stated; the
|
||
spread between codes is not quantified here.
|
||
|
||
## Our reproduction (declared differences)
|
||
|
||
- D = 40, MRT, dense double buffer; U_lat = .04, nu = U D / 150 = .010667,
|
||
tau = .532.
|
||
- Box [0, 75 D] × [0, 60 D] (3000 × 2400) with the cylinder centre at
|
||
(30 D, 30 D): 30 D from the inlet, 45 D from the outlet, centred in y
|
||
(Kolahdouz §4.1.1). Qin's own box ([0, 40 D] × [0, 20 D], centre (10 D, 10 D))
|
||
is the target paper's, not ours.
|
||
- Boundaries: uniform Zou–He inlet, NEQ outlet (rho = 1, backflow clamp),
|
||
free-slip y walls. Kolahdouz uses a traction outlet: declared mismatch.
|
||
- Qin's own VIV box (40 D × 20 D) is not used; a smaller box would be a
|
||
declared cost cut with more blockage, not "the same case".
|
||
- Allowed y offset ±1.5 D; peak transverse speed ≈ .026 cells/step (bound .5).
|
||
|
||
## Structure, coupling and time levels
|
||
|
||
- M = 2 rho D² (lattice rho = 1), f_n = U/(5 D) = 2e-4 per step, K = M (2 pi f_n)²,
|
||
zeta = 0. Equation of motion uses the structural mass only.
|
||
- Per-step sequence (binding): known (y_n, v_n) and the last completed force
|
||
F_last → candidate (y_{n+1}, v_{n+1}) by the update below → `set_body` with
|
||
offset y_{n+1} and wall velocity (y_{n+1} − y_n)/dt with lattice dt = 1 (interval average; a
|
||
different quantity from the endpoint v_{n+1}) → `run(1)` → only on success:
|
||
commit y_n ← y_{n+1}, v_n ← v_{n+1}, F_last ← force read for that step. Any
|
||
failure leaves the Simulation failed (existing lifecycle). Whether the
|
||
measured force represents the interval's start, midpoint or end is not
|
||
asserted; the one-step lag is declared, not corrected.
|
||
- Initial state: fluid at rest except the uniform inlet; y_0 = v_0 = 0;
|
||
F_last = 0 for the first step; geometry initialized at the declared centre.
|
||
- Structural update over one step with constant force F = F_last (exact
|
||
harmonic solution, zeta = 0): y_e = F/K, w = 2 pi f_n,
|
||
y^{n+1} = y_e + (y^n − y_e) cos w + (v^n / w) sin w,
|
||
v^{n+1} = −(y^n − y_e) w sin w + v^n cos w.
|
||
- Primary RHS (single coupled run): CME + Wen (theory-motivated stage choice:
|
||
Galilean-invariant link correction; G4 could not separate it from CME).
|
||
Raw CME and the node terms are logged as diagnostics of that trajectory;
|
||
the node impulse is not added. A run with CME-only as RHS is a separate,
|
||
labelled sensitivity case, decided separately. Neither RHS is claimed proven.
|
||
|
||
## Window, failure semantics, acceptance (engineering, development stage)
|
||
|
||
Clocks: lattice dt = 1; T_n = 1/f_n = 5,000 steps. Response cycles are
|
||
counted from the measured signal; T_n is used only for the seed check.
|
||
|
||
- Start (source-faithful): fluid at rest except the uniform inlet, body at
|
||
rest at the declared centre, y_0 = v_0 = 0, F_last = 0.
|
||
- Seed (conditional, one time, declared): at step n_seed = 200,000
|
||
(t = 40 T_n), if max |y| over steps [175,000, 200,000) is below .01 D, then
|
||
in that step, after the check and before the candidate update, set
|
||
v_n += 2 pi f_n (.01 D) (F_last unchanged) and proceed normally; the
|
||
geometry moves continuously through the update. `seed_applied`, step and
|
||
size are logged; never repeated or changed.
|
||
- Cycle boundary (discrete): step n closes a cycle iff y[n−1] < m and
|
||
y[n] ≥ m, where m = time-mean of y over the previous completed cycle
|
||
(m = 0 before the first completed cycle); y_0 = 0 is not a crossing, and no
|
||
boundary is accepted fewer than 2 samples after the previous one.
|
||
- Per cycle: positive peak max(y), negative peak min(y), mean offset
|
||
(time-mean of y), amplitude a = (max − min)/2.
|
||
- Budget counting: a completed cycle counts toward the 150-cycle budget only
|
||
if a ≥ .01 D (pre-seed numerical chatter does not consume it).
|
||
- Windows: adjacent non-overlapping blocks of 10 counted cycles
|
||
(1–10, 11–20, ...); W_k = mean amplitude of block k.
|
||
- Settled at the end of block k (k ≥ 2) iff W_{k−1} ≥ 1e-6 D and
|
||
|W_k − W_{k−1}| / W_{k−1} ≤ .02, and the last 5 cycle amplitudes lie
|
||
within 1 % of their mean. Otherwise not yet settled (no NaN pass).
|
||
- Scoring: the 20 counted cycles after settling. They must remain settled:
|
||
each 10-cycle block of the 20 satisfies the same 2 % (against the previous
|
||
block) and 1 % rules, else FAIL-CLOSED. Success stop: after the 20th
|
||
scoring cycle; the run does not continue to 150.
|
||
- Caps (both always armed; the first hit wins and is reported): 150 counted
|
||
response cycles including the 20 scoring cycles (so settling must complete
|
||
by counted cycle 130) → `timeout_response_cycles`; 1,000,000 native steps
|
||
(200 T_n) → `timeout_native_steps`.
|
||
- Durations reported: total steps, t U/D, counted and uncounted cycles,
|
||
measured T_resp (mean boundary interval); N_resp / f_n only as a labelled
|
||
secondary clock.
|
||
- Growth is not a failure: initial VIV growth is physical. Checked every
|
||
step (FAIL-CLOSED): non-finite y, v or force; |y| > 1.0 D (the tighter
|
||
gate; about twice the largest reference peak, .551 D) or the ±1.5 D offset
|
||
box reached; no_donor > 0; a failed upload/step/sync.
|
||
- All failures are reported as they are (no sub-iteration, no RHS or
|
||
parameter retune, no automatic second case).
|
||
- Target metric over the 20 scoring cycles: A_max/D = max over those cycles
|
||
of max(|positive peak|, |negative peak|) about y = 0 (Qin reports "maximum
|
||
amplitude"); also reported: mean amplitude, positive and negative peaks,
|
||
mean offset, f/f_n (no target).
|
||
- Acceptance: |A_max − .520 D| ≤ .052 D (±10 %), stated together with the
|
||
boundary mismatch and the absence of a quoted reference uncertainty. A pass
|
||
is "reasonably close" for the stage: not grid convergence, not force-RHS
|
||
validation, and it does not touch the Dütsch settling record.
|
||
- Driver reads force and the small diagnostics per step only; field reads
|
||
only at a few predeclared snapshots. No runtime claim: there is no measured
|
||
timing on this grid yet (the D40/60D receipt is a different, sampled case).
|
||
|
||
## Queued, not in this stage
|
||
|
||
Leontini et al. JFS 22 (2006) Re = 200, m* = 10, zeta = 0.01, U* = 5.0 (needs
|
||
the owners' c_crit convention and a Fig. 1 digitization). D80, literature
|
||
claims, pinball, AMR, BC redesign, threshold changes.
|