diff --git a/docs/moving_bodies.md b/docs/moving_bodies.md index 5d70ab8..9923f00 100644 --- a/docs/moving_bodies.md +++ b/docs/moving_bodies.md @@ -66,6 +66,20 @@ Per step n, before the existing step 1: Then the unchanged steps 1–3. M2 must follow M1 because a q < 1/2 link may read `k_f - c` at a fresh cell. +Exclusivity: moving bodies are never packed into the `CurvedBoundaryKernel` +link arrays (`n_curved` covers stationary/rotating bodies only), so M2 is the +sole writer of their solid slots and the sole source of their link force; no +double write and no double `obs`. The stationary path's packing, launch and +arithmetic are unchanged. + +Completeness: after M1, every (fluid cell, direction) pair in the swept band +whose neighbour is `in_new` is visited by M2. This holds because the band is +the circle AABB at the declared extreme offsets plus 2 cells, and the host +rejects per-step moves of 1 cell or more and bands touching the domain edge, +other bodies, sensors or force regions. Each M2 write lands at +`index_f(k_s, opp)`, the exact slot the adjacent fluid cell pulls, so every +fluid pull from a solid slot of a moving body is BFL-written. + ## 4. State, masks and authority - Host `ObjectState` is the single authority for `offset = (dx, dy)`, @@ -111,8 +125,15 @@ Hence, in exact arithmetic, with `B^n` external-boundary momentum (inlet/outlet/walls) and `S^n` forcing. So **`F_CME + node_cover - node_uncover`** is, by construction, the body momentum that balances the fluid ledger of *this* storage/update order. -To be checked analytically in review: q < 1/2 branch (reads `k_f - c`), -halfway fallback, and that every fluid pull from a solid slot is BFL-written. +Branch details: halfway fallback links (`f_r = f_t` plus the moving-wall +addend) and q < 1/2 links enter the link accumulators exactly like Bouzidi +links, with `c(f_t + f_r)`. In the q < 1/2 branch `G_dir(k_f - c)` is an +interpolation input only, not a fluid-momentum sink. Pull-slot completeness +is the section 3 contract. The scope excludes `ddf_shifting` (rejected), so +the unshifted force form applies. The balance is a fluid-side identity; it +does not close body+fluid globally in a domain with inlet/outlet/forcing +(`B^n`, `S^n`), and the solid-slot writes are boundary plumbing, not physical +streaming packets. The Wen 2014 relative-velocity link sum adds `-u_w (f_t - f_r) = u_w dm` per link (`dm = f_r - f_t`, the BFL mass defect). That term has no counterpart in @@ -154,9 +175,14 @@ Lattice units, rho0 = 1, per unit span. Step n uses `c^n`, `u^n` and yields `F^n`. Weak staggered update `v^{n+1} = v^n + (F^n - c v^n - k y^n)/m`, `y^{n+1} = y^n + v^{n+1}` (Newmark is an alternative; OPEN). Mass, natural frequency, damping and `U_r` -follow the chosen benchmark's own definitions (Leontini et al. JFS 2006 under -verification; vacuum vs in-fluid natural frequency must not be mapped -silently). Stability/convergence is gated by a halved-time-step run, not +follow the chosen benchmark's own definitions. Leontini, Thompson & Hourigan, +JFS 22:857–864 (2006), DOI 10.1016/j.jfluidstructs.2006.04.003, as read by +Grok from the full text: Re = 200, `m* = m/m_f = 10` (m_f displaced fluid +mass), `zeta = c/c_crit = 0.01`, `U* = U/(f_N D)` with `f_N` the natural +frequency in fluid assuming an inviscid added-mass term; the paper also +reports frequencies normalised by the in-vacuo value. Our runner derives `k` +from that in-fluid `f_N` (added-mass coefficient as stated in the paper) and +never from the vacuum formula; `c_crit` definition to be confirmed (OPEN). Stability/convergence is gated by a halved-time-step run, not assumed from the mass ratio. ## 9. Gates (map; tolerances OPEN, declared before runs)