embedded3 item 10: the apertured cut-cell wall (AM-wall) — cutwall.rs classification, apertured projection with the compatible wall flux, cut predictor (V_u = αhA, averaged mass fluxes, implicit wall shear, inertia floor), cut load route; sphere MMS CutCell ≤ GhostBinary at n 12/24 (ratio 0.96), loads 9.3/10.7 % at n 24
CI / Build CPU-Only (Explicit) (push) Failing after 4s
Documentation / Build API Documentation (push) Failing after 4s
CI / Format Check (push) Failing after 12s
Documentation / Build User Guide (push) Successful in 5s
CI / Build (ubuntu-latest) (push) Failing after 1m50s
CI / Clippy Check (push) Failing after 2m5s
Performance Benchmarks / Run Benchmarks (push) Successful in 2m40s
CI / Build (macos-latest) (push) Canceled after 0s
CI / Test (ubuntu-latest) (push) Canceled after 0s
CI / Test (macos-latest) (push) Canceled after 0s
CI / Python Bindings (maturin) (macos-latest) (push) Canceled after 0s
CI / Distributed Training Tests (push) Canceled after 0s
CI / CI Success (push) Canceled after 0s
CI / Python Bindings (maturin) (ubuntu-latest) (push) Canceled after 0s
CI / WASM Build + Size Check (push) Canceled after 0s

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
Omar Sobh
2026-09-17 15:34:07 -05:00
co-authored by Claude Fable 5.1
parent d337afa8f9
commit 0e4c97ed24
8 changed files with 864 additions and 67 deletions
@@ -10,6 +10,7 @@
use super::Grid;
use super::body::Body;
use super::cut::CutGeometry;
use super::step::{Boundaries, Side};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
@@ -45,7 +46,7 @@ pub(crate) struct StencilNode {
}
#[derive(Debug, Clone)]
struct Ghost {
pub(super) struct Ghost {
idx: usize,
x: f64,
y: f64,
@@ -62,17 +63,20 @@ struct Ghost {
#[derive(Clone)]
pub struct Mask {
grid: Grid,
periodic_z: bool,
cell_fluid: Vec<bool>,
u_kind: Vec<FaceKind>,
v_kind: Vec<FaceKind>,
w_kind: Vec<FaceKind>,
u_ghosts: Vec<Ghost>,
v_ghosts: Vec<Ghost>,
w_ghosts: Vec<Ghost>,
anchor: usize,
fluid_cells: usize,
pub(super) grid: Grid,
pub(super) periodic_z: bool,
pub(super) cell_fluid: Vec<bool>,
pub(super) u_kind: Vec<FaceKind>,
pub(super) v_kind: Vec<FaceKind>,
pub(super) w_kind: Vec<FaceKind>,
pub(super) u_ghosts: Vec<Ghost>,
pub(super) v_ghosts: Vec<Ghost>,
pub(super) w_ghosts: Vec<Ghost>,
pub(super) anchor: usize,
pub(super) fluid_cells: usize,
/// The cut geometry of the apertured wall (`WallScheme::CutCell`,
/// `cutwall.rs`); `None` on the binary ghost wall.
pub(super) cut: Option<CutGeometry>,
}
/// The z lattice position of a query: the lower plane index, the upper
@@ -479,9 +483,38 @@ impl Mask {
w_ghosts,
anchor,
fluid_cells,
cut: None,
})
}
/// The cut geometry (apertured wall only).
#[must_use]
pub fn cut(&self) -> Option<&CutGeometry> {
self.cut.as_ref()
}
/// Fluid area fraction of a u / v / w face (1 on the binary wall).
#[inline]
#[must_use]
pub fn a_u(&self, idx: usize) -> f64 {
self.cut.as_ref().map_or(1.0, |c| c.a_u[idx])
}
#[inline]
#[must_use]
pub fn a_v(&self, idx: usize) -> f64 {
self.cut.as_ref().map_or(1.0, |c| c.a_v[idx])
}
#[inline]
#[must_use]
pub fn a_w(&self, idx: usize) -> f64 {
self.cut.as_ref().map_or(1.0, |c| c.a_w[idx])
}
/// Fluid volume fraction of a cell (1 on the binary wall).
#[inline]
#[must_use]
pub fn vol(&self, idx: usize) -> f64 {
self.cut.as_ref().map_or(1.0, |c| c.vol[idx])
}
#[inline]
#[must_use]
pub fn is_fluid_cell(&self, idx: usize) -> bool {