embedded3 S2-7b A1: the moving wall's mass flux from the body's true normal at the wall foot (RTX_E3_WALL_FLUX=true, host prototype, device refuses it) — the wall flux of a rotating cylinder 5e-3 → 1e-9 of ΩR h², the rotating wall's cut-cell pressure error 0.33 → 0.11 (n 16) / 0.30 → 0.09 (n 32) of ρ(ΩR)², full cells second order; the rotating wall's offset unchanged (−0.02 h)
Documentation / Build API Documentation (push) Failing after 4s
CI / Format Check (push) Failing after 11s
CI / Build CPU-Only (Explicit) (push) Failing after 4s
Documentation / Build User Guide (push) Successful in 4s
CI / Build (ubuntu-latest) (push) Failing after 1m39s
CI / Clippy Check (push) Failing after 1m52s
Performance Benchmarks / Run Benchmarks (push) Successful in 2m20s
CI / Build (macos-latest) (push) Canceled after 0s
CI / Test (macos-latest) (push) Canceled after 0s
CI / Test (ubuntu-latest) (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]>
This commit is contained in:
Omar Sobh
2026-09-20 07:58:10 -05:00
co-authored by Claude Fable 5.1
parent d25a36d908
commit 599023d786
4 changed files with 27 additions and 1 deletions
@@ -223,6 +223,7 @@ impl Mask {
wall_order2_centroid: false,
wall_exchange_foot: false,
conv_sides_exact: false,
wall_flux_true_normal: false,
grad_weights: None,
diffusion_centroid: false,
face_shifts: None,
@@ -699,6 +700,18 @@ impl Mask {
(j as f64 + 0.5) * g.dy,
(k as f64 + 0.5) * g.dz,
];
// S2-7b A1: the flux through the TRUE surface at the wall foot —
// `A_w (u_b · n)` with n the body's own normal into the body.
if self.wall_flux_true_normal {
let (s, n) = self.interpolant_distance_and_normal(cut, x);
let foot = [x[0] - s * n[0], x[1] - s * n[1], x[2] - s * n[2]];
let v = body.surface_velocity(foot[0], foot[1], foot[2], t);
let eps = 1e-6 * g.dx.min(g.dy).min(g.dz);
let (n1, n2, n3) = body.normal(foot[0], foot[1], foot[2], t, eps);
let a_w = (w[0] * w[0] + w[1] * w[1] + w[2] * w[2]).sqrt();
// `normal` points out of the solid: into the body is its negative.
return -a_w * (v.0 * n1 + v.1 * n2 + v.2 * n3);
}
let mut flux = 0.0;
for (c, wc) in w.iter().enumerate() {
flux += self.surface_velocity_at(body, x, c, t) * wc;