diff --git a/docs/validation/duetsch_re100_kc5_protocol.md b/docs/validation/duetsch_re100_kc5_protocol.md index b7807a8..db797d3 100644 --- a/docs/validation/duetsch_re100_kc5_protocol.md +++ b/docs/validation/duetsch_re100_kc5_protocol.md @@ -101,6 +101,15 @@ Order (closed): mean cylinder position) versus x2, at the scored phases. Lab frame throughout; if any body-frame intermediate is used, position and velocity are both transformed. +- Sampling cost: raw force and diagnostics counters are read every step + (small). Flags and velocity fields are read only at the steps inside the + three prescribed 1° phase bins (φ ∈ [180, 181), [210, 211), [330, 331), + T/360 steps each) of the cycles needed for settling and scoring, plus + sparse declared audits; never every step. +- Point set: fixed x2/D sample points per station, identical on every grid + and declared before running; per point the interpolation weights are + recorded; the scored set is the common subset valid on all compared grids + at that phase, with its coverage recorded; point sets never change silently. - Interpolation: bilinear on cell centres using only cells that are fluid at that step (flags read back via `get_flags()`); weights renormalized over the fluid corners; a sample with no fluid corner, or inside the circle at that @@ -124,6 +133,25 @@ force as denominator. three phases × four stations; - Morison `|dc_d| ≤ .02`, `|dc_i| ≤ .02`. - Rule: all metrics for N = 3 consecutive whole paper cycles → settled. + +Cycle indexing (worked example, binding). Paper cycle k spans +`s/T in [0.25 + (k-1), 0.25 + k)`, i.e. φ0 → φ0; cycle 0 is the startup +quarter `s/T < 0.25`. Pair p_k compares cycle k−1 with cycle k. + +- Discarded: cycles 0, 1, 2 (s/T < 2.25). Pairs are formed only between + cycles ≥ 3, so the first pair is p_4 (3 → 4). +- Settling proof for a case: the earliest K_case such that p_{K-2}, p_{K-1}, + p_K all pass (three consecutive pairs over cycles K−3 .. K). Earliest + possible: K_case = 6 (pairs 3→4, 4→5, 5→6). +- Scored window (after the proof): cycles K+1, K+2, K+3 with + K = max over compared cases of K_case. The case must stay settled + throughout: pairs p_{K+1}, p_{K+2}, p_{K+3} must pass as well, otherwise + FAIL-CLOSED. +- Cap: cycle k ends at s/T = 0.25 + k, so the window ends at s/T = K + 3.25 + ≤ 12 ⇒ K ≤ 8. Allowed: K = 6 (window 7–9, ends 9.25 T), 7 (8–10, + 10.25 T), 8 (9–11, 11.25 T). K_case > 8 for any case → FAIL-CLOSED. +- Every case is run to the end of cycle K + 3 (proportionally more native + steps on finer grids). - Discard: the initial quarter cycle plus the first 2 full paper cycles (s/T < 2.25). Settling is searched from cycle 3; cap 12 periods from s = 0; unsettled → FAIL-CLOSED (no literature, cross-resolution or VIV statistic). @@ -162,6 +190,15 @@ Superseded (earlier drafts): the velocity-jump start, guessed stations and phases, "C_M" for c_i, and the uncertainty wording; cycles 4–6, the 30-cycle cap and the earlier tolerance numbers. +## 6a. Driver unit tests (CPU, before any run) + +- Phase/cycle arithmetic: s ↔ (k, φ), cycle boundaries, bin membership, + window/cap selection for K = 6, 7, 8, 9. +- Solid-aware interpolation: all-fluid, partial-solid (renormalized weights), + no-fluid (MISSING) and inside-circle cases. +- Interval-averaged Morison bases and the two-parameter fit on a synthetic + waveform with known c_d, c_i. + ## 7. Order and scope Protocol review → one-shot Dütsch driver (analytic `set_body` + `run(1)`,