Commit Graph
304 Commits
Author SHA1 Message Date
ClaudeandClaude Opus 5.5 7886906517 docs: moving-circle docstrings — tables-attached guard, vx/vy meaning, center keyword
Docstring and documentation wording only; no code change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 16:33:12 +00:00
ClaudeandClaude Opus 5.5 48ee0982c9 tests/docs: unique-name driver loading; moving-path lifecycle and settings notes; VIV predeclare renamed
Tests load research drivers via importlib under unique module names
instead of a bare 'import run' (shared-process collision between the
Dütsch and VIV drivers). lifecycle.md qualifies immutable geometry and the
host-only get_flags for translating circles; supported_settings.md points to
the dense-only moving-circle feature; leontini_viv_predeclare.md is renamed
viv_re150_predeclare.md (Re 150 Kolahdouz/Qin case) with references updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 16:12:05 +00:00
ClaudeandClaude Opus 5.5 307468b671 docs: moving circles — current status and user guide, BC capability, stage-1 evidence
docs/moving_bodies.md gains a current status/user-guide section; the staged
contract below it is kept unchanged as the design record.
configs/CONFIG.md states the single dense outer-boundary package.
docs/validation/moving_bodies_stage1.md summarizes the Dütsch and VIV
evidence with SHAs and binding limitations. One stale source comment fixed
(comment only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 16:10:32 +00:00
ClaudeandClaude Opus 5.5 fb507aa1f2 research: VIV driver — fail closed on any non-finite recorded output
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:39:19 +00:00
ClaudeandClaude Opus 5.5 a9ca6a9a16 research: VIV driver — bounded --smoke --steps N (<=64) --D plumbing mode replaces --max-steps
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:31:42 +00:00
ClaudeandClaude Opus 5.5 bb83b3476d research: VIV driver — exact seed window, error status, no overwrite, bounded smoke flag
Seed quiet check reads states y_t, t in [n_seed - 5 T_n, n_seed); an
exception sets status 'error: ...' before the report is written; an output
directory that already holds report.json or steps.npy is refused; --max-steps
gives a plumbing smoke that is never scored. Predeclare states the code's
actual uniform-U fluid initial condition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:27:48 +00:00
ClaudeandClaude Opus 5.5 f08b5e671f docs: VIV predeclare header reflects agreement and implementation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:17:00 +00:00
ClaudeandClaude Opus 5.5 707fa8b5fc research: predeclared Re150 VIV driver and logic (research-only)
viv.py: exact undamped harmonic update under the last completed force,
y = 0 response cycles with eligibility, 10-cycle blocks, settle/score with
deterministic restart, conditional velocity seed, scoring metrics. run.py:
Simulation-API driver (set_body + run(1)), RHS = CME + Wen from the moving
diagnostics, raw CME/obs/node terms logged, fail-closed bounds, caps and
input rejection, outputs outside the checkout. CPU tests for the logic and
the real config loader. Predeclare: stale failure sentence removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:16:23 +00:00
ClaudeandClaude Opus 5.5 1abfe954cd docs: VIV predeclare — y=0 crossings, eligibility, seed reset, block rule with deterministic restart, stop semantics
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:10:03 +00:00
ClaudeandClaude Opus 5.5 0c9e041cd1 docs: VIV predeclare — crossing predicate, seed time level, block windows, counting, stop and dual caps
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:09:14 +00:00
ClaudeandClaude Opus 5.5 2564329e68 docs: VIV predeclare — unified step sequence, velocity seed, cycle/peak definitions, caps, failure set
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:01:54 +00:00
ClaudeandClaude Opus 5.5 78637faffc docs: VIV predeclare — (30D,30D) centre, conditional .01D seed, 150-cycle budget incl. scoring
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 14:59:52 +00:00
ClaudeandClaude Opus 5.5 778d3185e5 docs: VIV predeclare — source-verified box/position, seed, response-cycle window, instability definition
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 14:57:50 +00:00
ClaudeandClaude Opus 5.5 0899799e00 docs: VIV predeclare — Kolahdouz/Qin Re150 primary case, CME+Wen RHS, explicit lag
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 14:55:01 +00:00
ClaudeandClaude Opus 5.5 5c2b497a43 docs: VIV predeclare — U* = 5.0, verified f_N convention, c_crit and target OPEN
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 14:47:43 +00:00
ClaudeandClaude Opus 5.5 731629f5a3 docs: Leontini VIV predeclaration draft (not frozen)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 14:43:22 +00:00
ClaudeandClaude Opus 5.5 a0aea3b9bf research: Dütsch --dump-fields capture (research-only; default path unchanged)
At the first step of each scored phase bin in the declared cycles, write a
near-body crop (±8D × ±6D, float32 ux, uy, rho + fluid mask), an 8x
fluid-weighted downsample of the whole domain, the same-step force and the
analytic centre; at every bin read, append fluid-mean rho/ux/uy and crop,
inlet- and outlet-strip means to trend.npy. Fail closed if the crop leaves the
domain or clips the swept body. Without --dump-fields nothing changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 13:22:50 +00:00
ClaudeandClaude Opus 5.5 dd37883d3c research: Dütsch analyzer — horizon-limited coverage/events, Parseval HF weights
Coverage and no_donor/eq_only totals now stop at the horizon; HF energy
uses one-sided Parseval weights (interior bins x2, DC/Nyquist x1). Focused
regressions for both. run.py, src and thresholds unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 12:07:45 +00:00
ClaudeandClaude Opus 5.5 430bcf2fc3 research: Dütsch analyzer — complete-cycle check only for an explicit horizon
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:55:07 +00:00
ClaudeandClaude Opus 5.5 02421ae379 research: Dütsch analyzer — explicit opt-in horizon, complete-cycle check, HF component report
Default (no --horizon) keeps the original cap-11 scoring. --horizon N
requires complete cycles 1..N in every case, passes the horizon to
common_window and labels the JSON. The unqualified phase-locked HF force
component is reported per case. Protocol section 6b declares the D40/60D
31-cycle duration-only diagnostic.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:54:52 +00:00
ClaudeandClaude Opus 5.5 fd7cb541d3 research: Dütsch — pass_scope names the checked items per comparison mode
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:11:10 +00:00
ClaudeandClaude Opus 5.5 dc6713e951 research: Dütsch config from the shipped config_lbm.json schema; real-loader test
The generated config failed the real loader (KeyError: cuda). It now copies
src/CelerisLab/configs/config_lbm.json and overrides only grid, physics,
collision/streaming/storage, y walls, LES off and uniform inlet profile;
inlet scheme and outlet mode stay the template's and are recorded in
case.json. New CPU test loads the generated file with load_lbm_config.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:10:39 +00:00
ClaudeandClaude Opus 5.5 fbe7b2fb7c research: Dütsch — state the scope of the conservative pass in the JSON
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:08:35 +00:00
ClaudeandClaude Opus 5.5 3ecbc17cfc research: Dütsch — fix int-key dict test, emit conservative pass per comparison
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:06:18 +00:00
ClaudeandClaude Opus 5.5 c1c282b79c research: Dütsch error budget — settling at one fifth of comparison bands, conservative drift
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:04:25 +00:00
ClaudeandClaude Opus 5.5 9cfcd8bb96 research: Dütsch driver — periodic Morison bases from step mod T
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:00:06 +00:00
ClaudeandClaude Opus 5.5 04a33246a1 research: Dütsch driver — exact-point body mask, periodic geometry from step mod T
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 10:59:55 +00:00
ClaudeandClaude Opus 5.5 73c2f507f4 research: Dütsch analysis — Morison fit per force candidate, explicit --reference
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 10:58:48 +00:00
ClaudeandClaude Opus 5.5 b31a6141b3 research: Dütsch driver — continuous settling, domain criteria, profile coverage
common_window requires every pair from each case's own K_case to K+2;
a-priori domain criteria against the 60 D reference (separate from Table 1);
bilinear sampling returns the original fluid corner weight sum; analysis
time-averages bin samples, reports coverage/missing points and fails closed
on an empty common profile set; cases run to the end of cycle 11.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 10:58:05 +00:00
ClaudeandClaude Opus 5.5 6f95c34c0b research: one-shot Dütsch Re100/KC5 prescribed-oscillation driver (no production change)
protocol.py holds the pure arithmetic (phase/cycle bookkeeping from the right
turning point, 1-degree bins, interval-averaged Morison bases and fit with
added-mass c_i, solid-aware bilinear sampling, settling and common-window
rules). run.py drives the existing Simulation API (set_body + run(1) +
read_force + moving_diagnostics; macroscopic fields and flags only inside the
three phase bins) and writes raw data outside the checkout. analyze.py builds
the cycle ledger, K_case, the common window, Morison fits, Fy sanity and the
cross-resolution waveform difference. CPU tests cover the §6a arithmetic.
Carries the protocol doc from claude/duetsch-protocol 8c1f3c4d.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 10:54:59 +00:00
ClaudeandClaude Opus 5.5 653fd997a6 body: stage motion-record uploads in an owned page-locked buffer
memcpy_htod_async needs page-locked host memory. MovingTables allocates one
pinned FP64 buffer at construction (manager.py action pattern) and rewrites
it only when the records change; every upload is followed by a stream sync
in Simulation._run_moving before the next one, so no copy is in flight when
it is reused. The advance test fixture now binds the real LBMStepper.step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 09:16:28 +00:00
ClaudeandClaude Opus 5.5 25cc5cfd68 tests: a failed hold step refuses a real direct stepper call
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 09:05:34 +00:00
ClaudeandClaude Opus 5.5 6f9e40caa3 simulation: a failed moving step also blocks direct stepper calls
Tests cover failures at the first upload, the step-group sync, the no_donor
check, the hold-record upload and its asynchronous sync: before the commit
point the target stays pending, after it applied matches the moved device;
in every case run and direct stepper reuse are refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 09:01:28 +00:00
ClaudeandClaude Opus 5.5 c21a365eca docs/tests: state the S3a commit point; cover a failed hold-record upload
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 08:59:45 +00:00
ClaudeandClaude Opus 5.5 d50b8ba1be lbm: translating circles move with refill (S3a)
MovingCircleCells reclassifies swept-band cells from immutable old/new FP64
predicates: covered cells add their raw momentum and mass to diagnostics and
become solid; uncovered cells are refilled in all nine slots from donors
fluid in both geometries (mean density, NEQ from the best-aligned donor,
wall velocity at the cell), counting eq_only and no_donor. MovingCircleLinks
adds the translation velocity to the wall velocity. Simulation.run(1)
uploads the motion record, runs M1 then M2, synchronizes, rejects a nonzero
no_donor count and only then commits the target and uploads the hold
record; any failure marks the Simulation failed. Targets block direct
stepper calls and multi-step runs. get_flags reads device flags back when
translating circles exist. Contract section 10b.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 08:51:20 +00:00
ClaudeandClaude Opus 5.5 b920a303a4 simulation: keep the owner context active through moving diagnostics readback
moving_diagnostics is context_bound, so stream synchronization and the
DTOH copy run inside one owner activation. Tests: owner stays active
through sync and download; launch order moving -> static curved -> OneStep
with a real static link count and the buffer swap between steps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 07:58:40 +00:00
ClaudeandClaude Opus 5.5 e25828968b lbm: choose the moving-link fallback from FP64 q, as the host builder does
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 07:35:45 +00:00
ClaudeandClaude Opus 5.5 0f8a428f07 lbm: fixed-centre moving-circle cut links (S2a)
MovingCircleLinks computes the cut links of each translating circle from an
FP64 {cx, cy, r} table over its swept band (same q/hit/clamp/fallback order
as build_cut_links, explicit _rn operations) and applies the unchanged
apply_bouzidi_link with spin wall velocity. obs keeps its contract; a
separate per-body diagnostics buffer records CME, the Wen term u_w*dm,
link_dm and the link count. Moving tables are built at initialize and
attached to the stepper, which then launches the kernel before the static
curved kernel; until then direct and run steps stay blocked. Displacement
is disabled: set_body offset/vx/vy on a translating circle raises before
mutation. Contract section 10a documents S2a and the S3 pending rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 07:35:02 +00:00
ClaudeandClaude Opus 5.5 983020b625 tests: align closed-owner semantics; route moving-body checks in state regressions
test_failed_moving_step_marks_simulation_failed uses an owner double that
refuses activation after close like CudaContext and expects 'CUDA context
is closed'; test_passive_overlap_failure_keeps_live_state binds the real
moving-body validation methods and a stepper double.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 07:11:06 +00:00
ClaudeandClaude Opus 5.5 e1ed27b438 simulation: revert latch-only refresh (e682d16, 36eac713)
No reachable path leaves a stale latch (Grok review): initialize and
_recompile recompute it, and post-init removal of a translating circle
cannot commit. simulation.py is back to b448bc3f; the latch-only test is
dropped. The recompile, close-retry and tightened after-close tests stay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 06:57:02 +00:00
ClaudeandClaude Opus 5.5 71c12aedce tests: recompile installs a guarded stepper; refused close keeps failed state
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 06:55:26 +00:00
ClaudeandClaude Opus 5.5 36eac713f4 simulation: refresh the stepper latch only when a moving body is added or removed
Keeps the stationary add/remove path unchanged (test_surface_actuation builds
a Simulation without a stepper).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 06:53:35 +00:00
ClaudeandClaude Opus 5.5 e682d16c3a simulation: derive the stepper latch from moving bodies on add/remove
One helper sets stepper.blocked from _moving_bodies() after add_body,
pre-init remove_body, initialize and stepper recreation, so the latch never
disagrees with motion ownership. Tests: latch follows add/remove; the
after-close assertion checks the actual refusal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 06:53:12 +00:00
ClaudeandClaude Opus 5.5 b448bc3f71 lbm: guard direct stepper entry while translating circles exist
LBMStepper.step raises before any launch or buffer swap when the owner has
set 'blocked'; Simulation sets it when a translating circle is declared, at
initialize and after stepper recreation. Tests: direct-stepper guard (zero
launches, no swap, unchanged step count), spin/multi-step/checkpoint run
variants, run(0) keeps the pending target, static runs proceed, mixed
moving/static packing parity with the moving id absent, failure refusal of
checkpoint calls, no retry and no re-entry after close.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 06:45:13 +00:00
ClaudeandClaude Opus 5.5 8a8e8a03ff body: moving-step failure fails the Simulation; S1 acceptance tests
A failed MovingCircle.advance now calls the owner hook, so the Simulation
is marked failed (Jet lifecycle) and refuses run/step/sync until close().
Adds host tests for set_body routing on real objects, initialize band and
mode rejections before mutation, exclusion from static link packing, and
the Simulation failure lifecycle. Contract status line updated for S1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 06:43:16 +00:00
ClaudeandClaude Opus 5.5 305ab2409b body: host-only translating-circle state (S1, no kernels)
MovingCircle keeps the applied offset and an optional pending target apart,
validates targets against the applied offset (box, Euclidean 0.5-cell step,
speed, no sliding hold) and commits only after upload, step and sync succeed;
any failure after the upload attempt is fail-closed. Simulation.add_body
(translation=...) declares one; moving circles are excluded from the packed
static links, unsupported modes and swept-band placement are rejected at
initialize, and every positive-step run raises before any device write until
the moving kernels exist. Host tests include a refill-donor enumeration.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 06:34:06 +00:00
ClaudeandClaude Opus 5.5 c986343a15 docs: moving-bodies contract (from S0 26f29b09) with applied/pending fixes
Carries the reviewed S0 draft into the S1 branch and fixes: applied stores
only the offset, explicit 'pending is not None', reject a hold target with
nonzero translational velocity, single Euclidean 0.5-cell bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 06:31:26 +00:00
Frank14f b2034f87e0 docs: distinguish fresh and carried PTX evidence 2026-10-28 20:20:01 +08:00
ClaudeandClaude Opus 5.5 6d046f91c1 docs: sync src_coherence with the landed slices
Stage history and verification, historical label on the migration map,
host-preparation/device order, pair accessors, per-level state split into
fixed plan structure / mutable boundary data / runtime _Level, the two
block_collide families, and the deferred items with their evidence needs.
Doc-only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:13:06 +00:00
ClaudeandClaude Opus 5.5 3361e97d5f docs: src_coherence migration map for the combined _boundaries record
Final private names (_device_boundaries/_level_jets/_exchange_*/_level_blocks
-> _boundaries record fields / layout.block), public boundaries = host view,
and the plan-versus-device (_Level) lifecycle. Doc-only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:09:26 +00:00