embedded3 S2-7b: the curved-wall instrument (tests/embedded3_wall_position_curved.rs: Taylor–Couette between embedded cylinders, rigid-rotation linear mode, outer-driven mode; walls' effective radii, pressure error by cell class against the exact p(r), wall-flux and ghost diagnostics); the sphere operator probe's sub-bands and force units; two host prototypes, default off, device refuses them: RTX_E3_WALL_EXCHANGE=axisfoot (the axis exchange takes the wall velocity at the axis foot — the S2-7 default read the solid face's own value, exact only for a uniform wall velocity: rigid rotation A 1.012 → 1.003) and RTX_E3_CONV_SIDES=exact (convective mass fluxes from the sides' own apertures; moves nothing)
CI / Build CPU-Only (Explicit) (push) Failing after 4s
Documentation / Build API Documentation (push) Failing after 4s
Documentation / Build User Guide (push) Successful in 4s
CI / Format Check (push) Failing after 10s
CI / Build (ubuntu-latest) (push) Failing after 1m25s
CI / Clippy Check (push) Failing after 1m47s
Performance Benchmarks / Run Benchmarks (push) Successful in 2m19s
CI / CI Success (push) Canceled after 0s
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

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
Omar Sobh
2026-09-20 07:54:01 -05:00
co-authored by Claude Fable 5.1
parent c430510802
commit d25a36d908
6 changed files with 417 additions and 6 deletions
@@ -221,6 +221,8 @@ impl Mask {
wall_exchange_axis: false,
cv_sides_exact: false,
wall_order2_centroid: false,
wall_exchange_foot: false,
conv_sides_exact: false,
grad_weights: None,
diffusion_centroid: false,
face_shifts: None,
@@ -435,6 +437,29 @@ impl Mask {
/// crosses a side (the in-plane momentum residual on oblique walls).
/// `None` at a domain side (the default stays).
fn exact_cv_sides(&self, cut: &CutGeometry, c: usize, p: [i64; 3]) -> Option<[[f64; 2]; 3]> {
let parts = self.exact_cv_side_parts(cut, c, p)?;
let mut ap = [[1.0; 2]; 3];
for d in 0..3 {
for side in 0..2 {
ap[d][side] = if d == c {
parts[d][side].0
} else {
0.5 * (parts[d][side].0 + parts[d][side].1)
};
}
}
Some(ap)
}
/// The parts of [`Self::exact_cv_sides`]: across `c`, the (far half of
/// `cell_minus`'s face, near half of `cell_plus`'s face) apertures per
/// side; along `c`, the centre plane's aperture (twice).
pub(super) fn exact_cv_side_parts(
&self,
cut: &CutGeometry,
c: usize,
p: [i64; 3],
) -> Option<[[(f64, f64); 2]; 3]> {
let lat = self.lattice();
let g = self.grid;
let mut pm = p;
@@ -456,7 +481,7 @@ impl Mask {
corner(cell, o)
}
};
let mut ap = [[1.0; 2]; 3];
let mut ap = [[(1.0, 1.0); 2]; 3];
for d in 0..3 {
if d == c {
// The two cells' centre planes across `c`: corners at the
@@ -469,7 +494,8 @@ impl Mask {
o[d2] = o2;
value(*cell, o, true)
};
ap[d][side] = super::cut::quad_fraction(mid(0, 0), mid(1, 0), mid(0, 1), mid(1, 1));
let a = super::cut::quad_fraction(mid(0, 0), mid(1, 0), mid(0, 1), mid(1, 1));
ap[d][side] = (a, a);
}
} else {
let e = 3 - c - d;
@@ -496,7 +522,7 @@ impl Mask {
super::cut::quad_fraction(at(0, 0), at(1, 0), at(0, 1), at(1, 1))
}
};
ap[d][side] = 0.5 * (half(cells[0], true) + half(cells[1], false));
ap[d][side] = (half(cells[0], true), half(cells[1], false));
}
}
}