diff --git a/docs/moving_bodies.md b/docs/moving_bodies.md index df78935..dc04213 100644 --- a/docs/moving_bodies.md +++ b/docs/moving_bodies.md @@ -212,10 +212,14 @@ refilled cells, `B_m` external-boundary mass flux; collision conserves mass). Sample point (fixed): post-collision storage after the swap of step n, i.e. the same level `G` that M1 reads at step n+1; both ledgers are evaluated -there. Ledger residual = left side minus every listed term. In a closed -domain (no inlet/outlet, no forcing) `B = S = 0` and the residual must be -rounding-level; with open boundaries `B`, `S` are not separately measured, so -the residual is reported as their estimate and is not a pass criterion. +there. Ledger residual = left side minus every listed term. Zero mass flux +does not imply zero momentum exchange: closed walls (bounce-back, free-slip) +still exchange momentum, so "no inlet/outlet, no forcing" does NOT give +`B = S = 0`. The rounding-level momentum check therefore uses either a +momentum-isolated case (periodic in both directions, no forcing) or counts +the wall impulse explicitly as part of `B`; the mass check may use a closed +domain. Otherwise `B`, `S` are not separately measured, the residual is +reported as their estimate and is not a pass criterion. Both ledger identities are **proposed, unreviewed**: they are not called proven until review and a host replay agree. @@ -242,7 +246,10 @@ above the declared bound. - Host motion state is committed only after the upload *and* the following synchronization of the step group succeed (section 4); any failure in between makes the simulation unusable and no host/device match is reported. -- Device-side soft diagnostics (refill fallbacks) are counters, not errors. +- The only soft device diagnostic is `eq_only` (NEQ part omitted, counted). + `no_donor > 0` is a hard failure: it is checked after the step group and + before the step is committed or any results are returned; on failure the + simulation is unusable (section 5). ## 8. Coupling and units (CANDIDATE)