a2086a59decf4b76b06fc684e71d0c2da0ca759c
6
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
a2086a59de |
P6-b: the fictitious added mass for the partitioned loop — rtx-fea NonlinearDynamicStepper::set_added_lumped_mass (a lumped per-DOF mass in the Newmark inertial residual and effective tangent, never the consistent mass or the rest state; zero = the plain stepper bit for bit) with its pin (compensated step reproduces the plain step to 2.5e-9, uncompensated moves it 11 %); the FSI2 overset harness carries RTX_FSI2O_FICT_MASS=α (α × ρ_f π (c/2)² spread over the wetted nodes) and adds the compensating load M_f ü_k of the previous subiterate to every structure solve (predictor and passes), printed in the header
CI / Format Check (push) Failing after 7s
CI / Build (macos-latest) (push) Waiting to run
CI / Test (macos-latest) (push) Blocked by required conditions
CI / Test (ubuntu-latest) (push) Blocked by required conditions
CI / Python Bindings (maturin) (macos-latest) (push) Blocked by required conditions
CI / Python Bindings (maturin) (ubuntu-latest) (push) Blocked by required conditions
CI / WASM Build + Size Check (push) Blocked by required conditions
CI / Distributed Training Tests (push) Blocked by required conditions
CI / CI Success (push) Blocked by required conditions
CI / Clippy Check (push) Failing after 5s
CI / Build (ubuntu-latest) (push) Failing after 5s
Performance Benchmarks / Run Benchmarks (push) Failing after 6s
Documentation / Build User Guide (push) Successful in 6s
Documentation / Build API Documentation (push) Failing after 25s
CI / Build CPU-Only (Explicit) (push) Failing after 1m15s
Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01YJPeT6WA2e7YvAnS875AHL |
||
|
|
e76271ac67 |
test(rtx-fsi): coupling-level rescue rung A (RTX_FSI{2,3}_CRESCUE, default off) + TRACE_FROM autopsy window
CI / Build CPU-Only (Explicit) (push) Canceled after 0s
Documentation / Build User Guide (push) Canceled after 0s
Performance Benchmarks / Run Benchmarks (push) Canceled after 0s
CI / Format Check (push) Canceled after 0s
CI / Clippy Check (push) Canceled after 0s
CI / Build (macos-latest) (push) Canceled after 0s
CI / Test (macos-latest) (push) Canceled after 0s
CI / Build (ubuntu-latest) (push) Canceled after 0s
CI / Test (ubuntu-latest) (push) Canceled after 0s
Documentation / Build API Documentation (push) Canceled after 0s
CI / Python Bindings (maturin) (macos-latest) (push) Canceled after 0s
CI / Python Bindings (maturin) (ubuntu-latest) (push) Canceled after 0s
CI / WASM Build + Size Check (push) Canceled after 0s
CI / Distributed Training Tests (push) Canceled after 0s
CI / CI Success (push) Canceled after 0s
Coupling-rescue campaign (omni-cortex docs/coupling_rescue_campaign.md).
Every recorded FSI2 s=1 coupling death is the END of a multi-step
runaway (74-march burst scan: green marches never exceed 2.4x their own
p95 tip jump; 27/28 deaths burst 5-37 steps first). The traced autopsy
of the (1.27, 2.0) death (replay digit-identical, CSV byte-identical)
shows a growing period-2 instability of the CONVERGED coupled scheme at
the tip's max-velocity crossing: increment x33 and converged load
1e4 -> 1e6 N over 200 steps with the coupling converging on 111 of the
first 112 steps.
- march.rs: RTX_{prefix}_TRACE_FROM (print-only autopsy window: per-pass
residual/load + one line per step with increment, tol_step, retry_at,
acceptable, outcome, committed tip jump); RTX_{prefix}_CRESCUE (default
off): on a fatal stall or a committed tip jump > 3x the running p95
(trailing 2000 non-rescued steps), reject the step and repeat the
interval as 2/4/8/16/32 coupled substeps of dt/n (Mayr-Wall-Gee
reduced-step repetition, five repetitions); per-rescue record printed,
MarchResult.coupling_rescues/_failures/rescue_records, rate cap 20
rescues per second of march (dies loudly).
- rescue.rs (new): the substep ladder — each substep a complete coupled
step at dt/n with its own predictor, fresh coupler, C1 velocity
chaining, tolerances at the substep's increment; the march's own step
path is NOT routed through it (digit identity by construction).
- rtx-fea NonlinearDynamicStepper::step_with_dt (step at an explicit dt;
step() delegates float-for-float); Fsi2Harness::advance_subcycled_with
(explicit fluid dt; advance_subcycled delegates).
Verified: FSI2 + FSI3 committed defaults and the noise probe
digit-identical knob-off vs same-day / 2026-08-31 baselines; knob ON
on the anchor u=1.00 r=1: green, zero rescues, CSV byte-identical to
TWIN-1's u1.00.csv; fmt + clippy clean on the touched files.
Verdict of rung A on the provocation set: REFUTED 3/3 by mechanism —
every rescued interval was carried but reproduced the rejected step's
motion (dt/2..dt/32 give the same jump), so the runaway lives in the
coupled LOAD at the crossing, not in the time integration; the
SUBCYCLE=2 closure marches through the same crossing. The knob stays,
default off, as the instrument that measured this.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01X2GmJXeQ2njUecEKiJZ1G2
|
||
|
|
10c779e96e |
rtx-fea: banded LU replaces the dense factorization on the Newton tangent — the march's cost center, fixed
Performance Benchmarks / Run Benchmarks (push) Canceled after 0s
CI / Format Check (push) Canceled after 0s
CI / Clippy Check (push) Canceled after 0s
CI / Build (macos-latest) (push) Canceled after 0s
CI / Build (ubuntu-latest) (push) Canceled after 0s
CI / Test (macos-latest) (push) Canceled after 0s
CI / Test (ubuntu-latest) (push) Canceled after 0s
CI / Build CPU-Only (Explicit) (push) Canceled after 0s
CI / Python Bindings (maturin) (macos-latest) (push) Canceled after 0s
CI / Python Bindings (maturin) (ubuntu-latest) (push) Canceled after 0s
CI / WASM Build + Size Check (push) Canceled after 0s
CI / Distributed Training Tests (push) Canceled after 0s
CI / CI Success (push) Canceled after 0s
Documentation / Build API Documentation (push) Canceled after 0s
Documentation / Build User Guide (push) Canceled after 0s
The 2026-08-29 profile attributed 98% of the structural step (79% of a coupled FSI pass) to LuDirect::factorize — nalgebra's dense full-pivot LU on the 560-DOF tangent, every Newton iteration. The tangent is banded (half-bandwidth ~26: the flag mesh numbers the short direction innermost). BandedLu (solvers/banded.rs): LAPACK dgbtrf-style column-major band storage, partial pivoting with kl fill rows, band limits measured from the CSR pattern per factorize, O(n·kl·(kl+ku)). Swapped into NonlinearDynamicStepper (tangent + rest-state mass solve); LuDirect untouched elsewhere. TDD: 10 manufactured-system tests green first run (recovery to 1e-12 vs exact and vs LuDirect across band shapes incl. full-bandwidth degeneration; zero-diagonal pivoting; indefinite shifted-stiffness tangent; singularity; per-solve refactorization). Solver-path change — full verification protocol run: - rtx-fea 29 binaries 0 failures; rtx-fsi lib/piston/transfer green. - FSI2 committed default: every printed digit IDENTICAL to the 2026-08-28 baseline (uy 3.7732±3.7920 mm, f 2.547, conservation 8.26e-12). FSI1 identical. Noise-probe floors reproduced. - Wall clock: FSI2 coupled phase 233 s -> 77 s (3.0x, 0.60 -> 0.20 s/step); FSI3 coupled 517 s -> 119 s (4.3x). Structure is no longer the cost center; the fluid's MG-caching consolidation is next. Finding 1: newton_rescue's vacuousness guard fired — the 2026-08-24 killer (symmetric 1e4 N mid-swing reversal) converges on the PLAIN path under partial-pivot rounding at every probed combo to 1e5 N. Re-provoked: asymmetric 1e4 -> +1e5 N reversal defeats plain Newton at swing steps 3, 4 AND 5 (not knife-edge); pinned at steps 4, whose coarse-vs-fine gap (0.66x of scale) sits inside the pre-registered 0.75 band — the band is untouched. Finding 2: the FSI3 release pin fired and the PIN was the finding. uy_mid (windowed mean over [4.0,4.2]) moved 44% (10.7684 -> 6.0229 mm) while amplitude (+7%), ux mid (+0.3%) and 5.2x growth all held; the baseline's 2 IQN history-reset retries became 0 — a rounding-level branch flip at unit density ratio (the traced bistable-mask sensitivity). The windowed mean of a growing 5-Hz oscillation is not a rounding-robust observable; its band now covers both measured branches (both recorded in the assertion), amp/ux re-centered at ±35%. New trajectory re-verified deterministic digit-for-digit twice before re-pinning; green in vivo under the new pins. Study-tier pins (FSI3 sticky-mask cycle, FSI2 s=1 benchmark cycle) re-verification launched; results to be recorded in solver_status.md. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01X2GmJXeQ2njUecEKiJZ1G2 |
||
|
|
d2c82af91b |
rtx-fea: rescue the nonlinear Newmark Newton — line search, then step subdivision
Performance Benchmarks / Run Benchmarks (push) Canceled after 0s
CI / Format Check (push) Canceled after 0s
CI / Clippy Check (push) Canceled after 0s
CI / Build (macos-latest) (push) Canceled after 0s
CI / Build (ubuntu-latest) (push) Canceled after 0s
CI / Test (macos-latest) (push) Canceled after 0s
CI / Test (ubuntu-latest) (push) Canceled after 0s
CI / Build CPU-Only (Explicit) (push) Canceled after 0s
CI / Python Bindings (maturin) (macos-latest) (push) Canceled after 0s
CI / Python Bindings (maturin) (ubuntu-latest) (push) Canceled after 0s
CI / WASM Build + Size Check (push) Canceled after 0s
CI / Distributed Training Tests (push) Canceled after 0s
CI / CI Success (push) Canceled after 0s
Documentation / Build API Documentation (push) Canceled after 0s
Documentation / Build User Guide (push) Canceled after 0s
Both FSI3 study deaths were the flag's SVK Newton returning
ConvergenceFailed{60} inside a coupling pass at a violent mid-cycle
load. The plain full-step Newton stays float-op identical (FSI2 and
FSI3 committed defaults re-verified digit-for-digit, Newton rescues
(0,0)); only on failure does the stepper retry: a backtracking line
search on ||R|| (Armijo, alpha down to 2^-29 — 2^-8 was measured too
shallow when the tangent K_T + M/(beta dt^2) is near singular and the
solved direction enormous and inexact), then 2/4/8/16 Newmark substeps
of dt/n, each line-searched. Rescues are counted and surfaced through
MarchResult and both FSI test printouts.
Measured before writing (tests/newton_rescue.rs): a static tip load
from rest NEVER defeats plain Newton (1e6 N converges in 19 its — from
a quiescent state the predictor is the current configuration and
M/(beta dt^2) regularizes the walk) — pinned as a negative result; the
killer is a mid-swing load REVERSAL (1e4 N tip load, 3 steps of swing
at dt 5e-3, then reversed: dead in 60 its), the FSI3 turning-point
shape — now rescued by the line search alone and consistent with a
dt/32 reference march of the same interval (-0.341 vs -0.195 m, same
branch), with determinism (bit-identical re-step) and
march-continuation pinned alongside.
Also: pin the s = 1 FSI2 benchmark cycle at study horizons (iqn /
subcycle 1, t_end >= 16: f in [1.85, 2.0], uy amp in [70e-3, 92e-3] —
the mode-2 s = 2 cycle fails both bands, so losing the benchmark cycle
stays loud).
Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Lnyrw33Lu6rUhW42E9KHwq
|
||
|
|
4534d90684 |
rtx-fea + rtx-cfd: the single-step seams FSI2 stands on
Performance Benchmarks / Run Benchmarks (push) Canceled after 0s
CI / Format Check (push) Canceled after 0s
CI / Clippy Check (push) Canceled after 0s
CI / Build (macos-latest) (push) Canceled after 0s
CI / Build (ubuntu-latest) (push) Canceled after 0s
CI / Test (macos-latest) (push) Canceled after 0s
CI / Test (ubuntu-latest) (push) Canceled after 0s
CI / Build CPU-Only (Explicit) (push) Canceled after 0s
Documentation / Build API Documentation (push) Canceled after 0s
Documentation / Build User Guide (push) Canceled after 0s
CI / Python Bindings (maturin) (macos-latest) (push) Canceled after 0s
CI / Python Bindings (maturin) (ubuntu-latest) (push) Canceled after 0s
CI / WASM Build + Size Check (push) Canceled after 0s
CI / Distributed Training Tests (push) Canceled after 0s
CI / CI Success (push) Canceled after 0s
rtx-fea: NonlinearDynamicAnalysis refactored onto a NonlinearDynamicStepper - set_nodal_forces on both (the interface load of a coupling subiteration, replaceable between steps and between subiterations of one step); - step(&DynamicState) is a pure function of the start-of-step state and the current forces - commits nothing, so a partitioned coupling re-runs one Newmark step to the interface fixed point (the piston semantics); - run() marches through the same stepper: one code path, pinned from both ends (linear limit, CSM3, and a new manual-drive == run() assertion); - new test: a nodal step load oscillates about the *static* nonlinear analysis's deflection (cross-code-path, mean within 3%, amplitude 6%), with re-run determinism and force-swap sensitivity asserted mid-march (a one-step response to a force change is ~ beta dt^2 - the first assertion draft demanded 10% and was corrected against the physics). rtx-cfd: the subiteration seam and the moving no-slip closure - EmbeddedPisoSolver::snapshot()/restore() (mask + time + init flag; the mask is now Clone): re-running a fluid step within a subiteration is bit-identical to never having diverted - proven on a moving body with cells flipping in the re-run window; - polygon_interface_velocity: nearest-edge linear interpolation of per-vertex velocities, exact for the linear-along-edge boundary data a finite-element interface hands over - the no-slip closure that replaces FSI1's zero-velocity polygon. Suites: rtx-fea 567, rtx-cfd 325, rtx-fsi piston+transfer - all green. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Lnyrw33Lu6rUhW42E9KHwq |
||
|
|
38ca5ef080 |
rtx-fea: S2 — nonlinear Newmark, and Turek–Hron CSM3 to 0.1–1.3%
analysis::nonlinear_dynamic::NonlinearDynamicAnalysis: Newmark-beta with a full Newton solve on the internal force inside every step — residual F_ext − f_int(u) − M a(u), consistent Jacobian K_T(u) + M/(beta dt^2), the same total-Lagrangian St. Venant–Kirchhoff / small-strain seam the nonlinear static analysis uses, consistent mass assembled once (element mass is configuration-independent in a total-Lagrangian setting), undamped, homogeneous Dirichlet only (prescribed interface motion arrives with the FSI rung). The existing NewmarkStepper stays what it is: the right tool for constant matrices. Verified (tests/nonlinear_newmark_csm3.rs): - linear limit (strains ~1e-9): the TL nonlinear stepper reproduces the verified linear NewmarkStepper on the same dense M, K, F to a max deviation of 1.7e-16 — 1.3e-9 of the oscillation amplitude — over 120 steps; - Turek–Hron CSM3 (35x2 Quad8, dt = 0.005, gravity switched on at rest, 6 s): ux(A) = −14.291 ± 14.291 mm vs the reference −14.305 ± 14.305 (0.1%); uy(A) = −63.644 ± 64.295 mm vs −63.607 ± 65.160 (0.06% mean, 1.3% amplitude); frequency 1.1020 Hz vs 1.0995 (0.23%); two Newton iterations per step throughout; the undamped amplitude persists (half-window drift 0.2%). rtx-fea 564 -> 566 green (full suite). With this the S-side of the Turek–Hron ladder is complete: statics (CSM1/CSM2) and dynamics (CSM3) both land on the benchmark. Next rung is the coupling: FSI1 with the embedded fluid, the TL flag, and rtx-fsi's transfer rebuilt on the deformed interface each subiteration. Co-Authored-By: Claude Fable 5 <[email protected]> |