rtx-cfd: overset_cfd1 prints five CV boxes (all outside the fringe ring), the wall pressure/viscous split and the fringe extents at the settled state
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
Performance Benchmarks / Run Benchmarks (push) Canceled after 0s
CI / Format Check (push) Canceled after 0s
CI / Clippy Check (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

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-06 10:14:43 -07:00
co-authored by Claude Fable 5.1
parent 134ac03870
commit cbec40b999
@@ -285,6 +285,65 @@ async fn run_cfd1(ny: usize) -> CfdResult<Cfd1> {
100.0 * (ring.0 - hole.0) / wall[0],
100.0 * (hole.0 - wall[0]) / wall[0],
);
// The wall load split and the fringe ring's extent (the tight box in
// the sensitivity list must stay outside it).
let (mut jmin, mut jmax, mut imin, mut imax) = (usize::MAX, 0, usize::MAX, 0);
for e in &solver.overlap().fringe_cells {
jmin = jmin.min(e.j);
jmax = jmax.max(e.j);
imin = imin.min(e.i);
imax = imax.max(e.i);
}
println!(
" wall load split: pressure ({:.4}, {:.4}) viscous ({:.4}, {:.4}); fringe ring cells i {imin}{imax} (x {:.3}{:.3}) j {jmin}{jmax} (y {:.3}{:.3})",
load.pressure[0],
load.pressure[1],
load.viscous[0],
load.viscous[1],
imin as f64 * h,
(imax + 1) as f64 * h,
jmin as f64 * h,
(jmax + 1) as f64 * h
);
// Box sensitivity of the control-volume route: the same balance on
// other rectangles, all outside the fringe ring (x 0.1100.640, y
// 0.1100.290 at ny = 41 — a first list had a box at x0 = 0.12 cutting
// through it and read 21 %). A route that moves with the box by more
// than its own formula error cannot arbitrate the gap.
for (x0, x1, y0, y1) in [
(0.10, 0.75, 0.05, 0.36),
(0.09, 0.70, 0.07, 0.34),
(0.08, 1.00, 0.03, 0.38),
(0.10, 1.50, 0.05, 0.36),
(0.10, 0.75, 0.02, 0.39),
] {
let boxc = (
(x0 / h).round() as usize,
(x1 / h).round() as usize,
(y0 / h).round() as usize,
(y1 / h).round() as usize,
);
let (bx, by) = solver
.background()
.mask()
.expect("mask")
.control_volume_force(
&field.background.u,
&field.background.v,
&field.background.p,
&field.background.u_old,
&field.background.v_old,
dt,
RHO,
mu,
None,
boxc,
);
println!(
" CV box x {x0:.2}{x1:.2} y {y0:.2}{y1:.2}: drag {bx:.4} ({:+.2}% vs wall) lift {by:.4}",
100.0 * (bx - wall[0]) / wall[0]
);
}
Ok(Cfd1 {
drag_surface: load.total()[0],
lift_surface: load.total()[1],