PERF-2: red-black symmetric Gauss–Seidel smoother behind a knob (MgSmoother::RedBlack; default lexicographic = the recorded regime, bit-identical) — red/black cell lists per level, the symmetric pair red,black,black,red, the operator cache keyed on the smoother; EmbeddedParameters::poisson_smoother, harness knobs RTX_FSI2O_MG_RB (overset) and RTX_FSI2_MG_RB (embedded, the noise probe); pin: solves the masked problem to the same stop, agrees with lexicographic to 2e-12, cached = uncached bit for bit
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 / Build CPU-Only (Explicit) (push) Failing after 5s
Documentation / Build API Documentation (push) Failing after 5s
Documentation / Build User Guide (push) Successful in 5s
CI / Format Check (push) Failing after 16s
CI / Build (ubuntu-latest) (push) Failing after 2m18s
CI / Clippy Check (push) Failing after 2m38s
Performance Benchmarks / Run Benchmarks (push) Successful in 4m13s

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01YJPeT6WA2e7YvAnS875AHL
This commit is contained in:
Omar Sobh
2026-09-15 23:48:55 -05:00
co-authored by Claude Fable 5.1
parent 26904e37d8
commit cb5771fa71
7 changed files with 208 additions and 5 deletions
@@ -384,6 +384,14 @@ pub fn run_march(case: BenchmarkCase, config: &MarchConfig) -> MarchResult {
solver.set_poisson_precision(rtx_cfd::solvers::incompressible::MgPrecision::F32);
println!(" poisson V-cycle precision: F32 (M1 probe)");
}
// PERF-2: `RTX_FSI2_MG_RB=1` — the red-black smoother on the embedded
// solver (the noise probe's regime gate).
if std::env::var("RTX_FSI2_MG_RB").is_ok_and(|v| v == "1") {
solver.set_poisson_smoother(rtx_cfd::solvers::incompressible::MgSmoother::RedBlack);
println!(
" multigrid smoother: RED-BLACK symmetric GaussSeidel (PERF-2 regime, RTX_FSI2_MG_RB)"
);
}
let dt_fluid = harness.dt_fluid;
let dt = dt_fluid * subcycle as f64;
let interface = &harness.interface;
@@ -300,6 +300,16 @@ impl OversetFluid {
},
poisson_solver: PoissonSolverKind::Multigrid,
poisson_precision: MgPrecision::F64,
// PERF-2: `RTX_FSI2O_MG_RB=1` selects the red-black smoother
// (a regime change, band-gated; default = the recorded regime).
poisson_smoother: if std::env::var("RTX_FSI2O_MG_RB").is_ok_and(|v| v == "1") {
println!(
" multigrid smoother: RED-BLACK symmetric GaussSeidel (PERF-2 regime, RTX_FSI2O_MG_RB)"
);
rtx_cfd::solvers::incompressible::MgSmoother::RedBlack
} else {
rtx_cfd::solvers::incompressible::MgSmoother::Lexicographic
},
convection_scheme: bg_convection(),
},
)?;