docs: Dütsch protocol — worked cycle-index example, sparse sampling, driver unit tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Claude
2026-10-30 10:48:30 +00:00
co-authored by Claude Opus 5.5
parent 10cea29e8e
commit 8505a723a5
@@ -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)`,