From 457c6fa88dc4bb0df6812d679c255ad9a5705695 Mon Sep 17 00:00:00 2001 From: Omar Sobh Date: Mon, 21 Sep 2026 21:02:11 -0500 Subject: [PATCH] =?UTF-8?q?R4-d:=20RTX=5FFSI2O=5FTOL=5FFLOOR=5FDT2=20?= =?UTF-8?q?=E2=80=94=20the=20coupling=20floor=20scaled=20with=20(dt/3.44e-?= =?UTF-8?q?4)=C2=B2=20(the=20FSI3=20force=20spikes=20are=20the=20displacem?= =?UTF-8?q?ent=20floor's=20acceleration=20noise;=20R4-c=20held=20the=20sca?= =?UTF-8?q?ling=20at=20ny=2082)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- .../rtx-fsi/tests/fsi2_harness/overset_march.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/crates/specialized/rtx-fsi/tests/fsi2_harness/overset_march.rs b/crates/specialized/rtx-fsi/tests/fsi2_harness/overset_march.rs index d7b4bbf..5c5f6a8 100644 --- a/crates/specialized/rtx-fsi/tests/fsi2_harness/overset_march.rs +++ b/crates/specialized/rtx-fsi/tests/fsi2_harness/overset_march.rs @@ -91,10 +91,25 @@ pub struct OversetMarchResult { } pub fn run_march_overset(case: BenchmarkCase, config: &OversetMarchConfig) -> OversetMarchResult { - let cfg = config.clone(); + let mut cfg = config.clone(); let mut fluid = OversetFluid::build_case(case, cfg.ny, cfg.flag_nx, cfg.sweeps, cfg.max_rounds) .expect("overset fluid"); let dt_fluid = fluid.dt_fluid; + // R4-d (2026-09-21): the acceleration-scaled floor. The loop converges + // the displacement; the fluid feels its second difference over dt², so + // a fixed floor's admissible acceleration noise quadruples per rung + // (R4: the FSI3 force spikes). `RTX_FSI2O_TOL_FLOOR_DT2=` sets floor = value · (dt_fluid / 3.44e-4)². + if let Some(f0) = std::env::var("RTX_FSI2O_TOL_FLOOR_DT2") + .ok() + .and_then(|v| v.parse::().ok()) + { + cfg.tol_floor = f0 * (dt_fluid / 3.44e-4).powi(2); + println!( + " floor scaled with dt² (R4-d): {:.3e} at dt {:.3e} (from {f0:.1e} at 3.44e-4)", + cfg.tol_floor, dt_fluid + ); + } let dt = dt_fluid * cfg.subcycle as f64; let zero_d = vec![0.0; 2 * fluid.interface.wetted.len()]; // Every setting the acceptance rule reads, printed once: P5-3 lost a