Commit Graph
316 Commits
Author SHA1 Message Date
Frank14f 73d3f6214e Add one predeclared mass-four paired VIV exploration 2026-11-01 00:35:34 +08:00
Frank14f 516975ef64 Add bounded paired Karman pinball VIV research driver 2026-10-31 23:21:27 +08:00
Frank14f e9213dd2cc Add matched diffusive resolution cases for pinball response 2026-10-31 19:00:53 +08:00
Frank14f 7b81584458 Predeclare zero-damping pinball development cases 2026-10-31 15:51:39 +08:00
Frank14f d0bcefa60c Use low-Mach wall speed for shared-motion GPU gate 2026-10-31 14:05:43 +08:00
Frank14f 33dcb422c6 Support bounded shared transverse motion and steady pinball demo 2026-10-31 13:58:19 +08:00
Astra (AI agent) d0968e6e91 research: reuse quadrature and clarify snapshot and VIV coordinates 2026-10-31 12:04:56 +08:00
Frank14f 4f17c3c586 motion: exercise real step ownership and move host test helpers out of src 2026-10-31 11:24:09 +08:00
3f7f303e17 research: VIV driver reads diagnostics by MovingTables.DIAG name; coupling-contract README
Index values are unchanged (1, 3, 7, 10, 13); the run recorded at fb507aa1
used the same columns. Research-only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:20:57 +08:00
ClaudeandClaude Opus 5.5 d5b13d7f31 motion: mark MovingCircle.advance as a test helper, not the production path
Docstring only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:24:35 +00:00
ClaudeandClaude Opus 5.5 353a7b03c4 stepper: bind moving-circle kernels only for D2Q9 double buffer
Both kernels are compiled under DIM == 2, but LBMStepper requested them for
every double-buffer module, so stationary D3Q19 double-buffer construction
would fail at get_function. Moving circles already reject D3Q19 and EsoPull
at initialize. Stale latch comment updated. Parametrized CPU test with a
module double that lacks the symbols.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:23:54 +00:00
ClaudeandClaude Opus 5.5 0d6df6e6b8 simulation: consume a zero-motion translation target; empty diagnostics shape
A pending target equal to the applied offset uploaded the same record, so
_run_moving saw no advance and never committed it: pending stayed latched,
blocking run(n > 1) and direct steps. Commit whenever a target was pending
(no_donor check and hold-record re-upload still only on advancing steps).
moving_diagnostics() without moving circles now returns (0, DIAG_FLOATS)
instead of the stale (0, 6). Tests for both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:23:04 +00:00
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