rtx-cfd/rtx-fsi: overset A-P0 GATED + M1 precision probe — curvilinear collocated PISO: relative-reduction pressure stop (the absolute stop floored |du/dt| at 2e-4 on 64²), line-implicit-n sign fix, adjustPhi; gates: Cartesian reduction 1.37–1.40x the staggered error at orders 0.83/0.90; skewed stretched periodic annulus Stokes orders 2.30/2.06 (explicit and line-implicit), upwind 1.08/0.80; Poiseuille exact to 1e-9 on Cartesian and affine-sheared periodic channels (both diffusion variants), varying-skew channel order 2.02 (v 1.9), cell mass 1e-14; divergence ≤ 1e-11 relative every step; snapshot/restore bit-identical. M1: poisson.rs multigrid hierarchy generic over MgScalar (f32/f64), f64 CG keeps its own fine level; MgPrecision on MultigridParameters/EmbeddedParameters/PisoParameters, set_poisson_precision, harness RTX_FSI2_POISSON_F32 (march + noise probe, printed marker); f64 arm bit-identical in vivo (FSI2 default line-for-line with 08-31), f32 arm holds the noise floor and stall pins and the FSI2 band; poisson_equivalence f32 arm
Performance Benchmarks / Run Benchmarks (push) Canceled after 0s
CI / Format Check (push) Canceled after 0s
Documentation / Build API Documentation (push) Canceled after 0s
Documentation / Build User Guide (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

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01X2GmJXeQ2njUecEKiJZ1G2
This commit is contained in:
Omar Sobh
2026-09-04 12:40:43 -07:00
co-authored by Claude Fable 5.1
parent 52da75a3a9
commit c63d79c300
22 changed files with 341 additions and 77 deletions
@@ -122,6 +122,10 @@ pub struct MarchConfig {
/// is repeated as 2, 4, 8, 16, 32 coupled substeps of dt/n — see
/// `rescue.rs` and omni-cortex `docs/coupling_rescue_campaign.md`.
pub coupling_rescue: bool,
/// M1 precision probe (`RTX_{prefix}_POISSON_F32`, default off =
/// bit-identical): the pressure multigrid's V-cycle in single
/// precision inside the f64 CG (`overset_metal_campaign.md` §3.2 M1).
pub poisson_f32: bool,
/// Rung C (`RTX_{prefix}_CRESCUE_COARSE`, default 0 = off; needs
/// `coupling_rescue`): on a trigger, instead of the substep ladder,
/// reject the step and enter a coarse EPISODE of this many coupled
@@ -208,6 +212,7 @@ impl MarchConfig {
.and_then(|v| v.parse::<usize>().ok())
.unwrap_or(defaults.trace_from),
coupling_rescue: num("CRESCUE", f64::from(u8::from(defaults.coupling_rescue))) != 0.0,
poisson_f32: num("POISSON_F32", f64::from(u8::from(defaults.poisson_f32))) != 0.0,
coarse_episode: num("CRESCUE_COARSE", defaults.coarse_episode as f64) as usize,
inc_trace: std::env::var(key("INCTRACE")).ok().or(defaults.inc_trace),
increment_factor: num("CRESCUE_INC", defaults.increment_factor),
@@ -363,6 +368,7 @@ pub fn run_march(case: BenchmarkCase, config: &MarchConfig) -> MarchResult {
trace_steps,
trace_from,
coupling_rescue,
poisson_f32,
coarse_episode,
ref inc_trace,
increment_factor,
@@ -374,6 +380,10 @@ pub fn run_march(case: BenchmarkCase, config: &MarchConfig) -> MarchResult {
let (harness, mut solver, mut field) = Fsi2Harness::build_case(case, ny, flag_nx, smooth_in_h);
solver.set_mask_hysteresis(mask_hysteresis);
if poisson_f32 {
solver.set_poisson_precision(rtx_cfd::solvers::incompressible::MgPrecision::F32);
println!(" poisson V-cycle precision: F32 (M1 probe)");
}
let dt_fluid = harness.dt_fluid;
let dt = dt_fluid * subcycle as f64;
let interface = &harness.interface;