fsi2 harness: RTX_FSI2O_BG_CONVECTION knob (tvd default / upwind) on the background, printed in both headers beside the patch's — the patch scheme was excluded as the h-term's carrier (upwind ladder +1.52 vs TVD +1.73 W/m from ny 41 to 62), the background's wake dissipation is the registered next probe
CI / Clippy Check (push) Failing after 7s
CI / Format Check (push) Failing after 6s
CI / Build (ubuntu-latest) (push) Failing after 7s
Performance Benchmarks / Run Benchmarks (push) Failing after 7s
Documentation / Build User Guide (push) Successful in 5s
CI / Build CPU-Only (Explicit) (push) Failing after 56s
Documentation / Build API Documentation (push) Failing after 1m1s
CI / Test (macos-latest) (push) Skipped
CI / Test (ubuntu-latest) (push) Skipped
CI / CI Success (push) Failing after 0s
CI / Build (macos-latest) (push) Failing after 8s
CI / Python Bindings (maturin) (macos-latest) (push) Skipped
CI / Python Bindings (maturin) (ubuntu-latest) (push) Skipped
CI / WASM Build + Size Check (push) Skipped
CI / Distributed Training Tests (push) Skipped

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01LzcjQX7tvgn87CQCyg9Cfr
This commit is contained in:
Omar Sobh
2026-09-12 23:01:57 -05:00
co-authored by Claude Fable 5.1
parent ff7cc2d739
commit c7d2870580
3 changed files with 16 additions and 3 deletions
@@ -45,6 +45,17 @@ fn patch_offset_h() -> f64 {
.unwrap_or(6.0) .unwrap_or(6.0)
} }
/// The background's convection scheme (`RTX_FSI2O_BG_CONVECTION`: `tvd`
/// (default, van Albada), `upwind`) — P5-3's wake-dissipation knob on the
/// fixed-motion replay (the patch's scheme was excluded as the h-term's
/// carrier: both ladders move +1.51.7 W/m from ny 41 to 62).
pub fn bg_convection() -> ConvectionScheme {
match std::env::var("RTX_FSI2O_BG_CONVECTION").as_deref() {
Ok("upwind") => ConvectionScheme::Upwind,
_ => ConvectionScheme::TvdVanAlbada,
}
}
/// The patch's convection scheme (`RTX_FSI2O_PATCH_CONVECTION`: `tvd` /// The patch's convection scheme (`RTX_FSI2O_PATCH_CONVECTION`: `tvd`
/// (default, van Albada), `upwind`, `none`) — P5-3's near-wake dispersion /// (default, van Albada), `upwind`, `none`) — P5-3's near-wake dispersion
/// knob on the fixed-motion replay. /// knob on the fixed-motion replay.
@@ -244,7 +255,7 @@ impl OversetFluid {
}, },
poisson_solver: PoissonSolverKind::Multigrid, poisson_solver: PoissonSolverKind::Multigrid,
poisson_precision: MgPrecision::F64, poisson_precision: MgPrecision::F64,
convection_scheme: ConvectionScheme::TvdVanAlbada, convection_scheme: bg_convection(),
}, },
)?; )?;
background.set_boundary_velocity(move |x, y, t| { background.set_boundary_velocity(move |x, y, t| {
@@ -100,7 +100,7 @@ pub fn run_march_overset(case: BenchmarkCase, config: &OversetMarchConfig) -> Ov
// Every setting the acceptance rule reads, printed once: P5-3 lost a // Every setting the acceptance rule reads, printed once: P5-3 lost a
// day to a floor of 2e-4 against the overnight marches' 1e-6. // day to a floor of 2e-4 against the overnight marches' 1e-6.
println!( println!(
" coupling: {} (reuse {}, ω0 {}, c1 {}), floor {:.1e}, rtol {:.1e}, stall accept {:.1e}, max subit {}, predictor {}, s = {}, patch offset {} h × {} rows, patch convection {:?}", " coupling: {} (reuse {}, ω0 {}, c1 {}), floor {:.1e}, rtol {:.1e}, stall accept {:.1e}, max subit {}, predictor {}, s = {}, patch offset {} h × {} rows, patch convection {:?}, bg convection {:?}",
cfg.coupler, cfg.coupler,
cfg.reuse, cfg.reuse,
cfg.initial_relaxation, cfg.initial_relaxation,
@@ -114,6 +114,7 @@ pub fn run_march_overset(case: BenchmarkCase, config: &OversetMarchConfig) -> Ov
std::env::var("RTX_FSI2O_PATCH_OFFSET").unwrap_or_else(|_| "6".into()), std::env::var("RTX_FSI2O_PATCH_OFFSET").unwrap_or_else(|_| "6".into()),
std::env::var("RTX_FSI2O_PATCH_ROWS").unwrap_or_else(|_| "12".into()), std::env::var("RTX_FSI2O_PATCH_ROWS").unwrap_or_else(|_| "12".into()),
super::overset::patch_convection(), super::overset::patch_convection(),
super::overset::bg_convection(),
); );
// Phase 1: rigid flag to t_release (`RTX_FSI2O_LOAD=dir` replaces the // Phase 1: rigid flag to t_release (`RTX_FSI2O_LOAD=dir` replaces the
@@ -413,10 +413,11 @@ fn fsi2_overset_prescribed_motion() {
let dt = fluid.dt_fluid; let dt = fluid.dt_fluid;
let (d_rigid, l_rigid) = fluid.measure_force(); let (d_rigid, l_rigid) = fluid.measure_force();
println!( println!(
" PRESCRIBED ny = {ny}: dt {dt:.3e}, rigid drag {d_rigid:.2} lift {l_rigid:.2}, replay from t = {t0} (ramp {ramp_w} s) to {t_end}; patch offset {} h × {} rows, patch convection {:?}", " PRESCRIBED ny = {ny}: dt {dt:.3e}, rigid drag {d_rigid:.2} lift {l_rigid:.2}, replay from t = {t0} (ramp {ramp_w} s) to {t_end}; patch offset {} h × {} rows, patch convection {:?}, bg convection {:?}",
std::env::var("RTX_FSI2O_PATCH_OFFSET").unwrap_or_else(|_| "6".into()), std::env::var("RTX_FSI2O_PATCH_OFFSET").unwrap_or_else(|_| "6".into()),
std::env::var("RTX_FSI2O_PATCH_ROWS").unwrap_or_else(|_| "12".into()), std::env::var("RTX_FSI2O_PATCH_ROWS").unwrap_or_else(|_| "12".into()),
fsi2_harness::overset::patch_convection(), fsi2_harness::overset::patch_convection(),
fsi2_harness::overset::bg_convection(),
); );
let mut csv = std::env::var("RTX_FSI2O_CSV").ok().map(|p| { let mut csv = std::env::var("RTX_FSI2O_CSV").ok().map(|p| {
use std::io::Write as _; use std::io::Write as _;