embedded3 S2-5: the cut wall sat ½(1−α)h inside the body — cross diffusion over the open-part centroid spacing (RTX_E3_DIFFUSION_CENTROID; host + e3_cut.cu, shift tables, point-implicit excess); flat-wall effective-position instrument; DFG 2D-1 ladder tests (device + host); knobs tried and refuted along the way (oblique distance, axis exchange, centroid pressure gradient)
Documentation / Build API Documentation (push) Failing after 4s
Documentation / Build User Guide (push) Successful in 4s
CI / Clippy Check (push) Failing after 2m24s
CI / Build CPU-Only (Explicit) (push) Failing after 3s
CI / Format Check (push) Failing after 11s
CI / Build (ubuntu-latest) (push) Failing after 1m58s
Performance Benchmarks / Run Benchmarks (push) Successful in 2m44s
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-18 10:54:52 -05:00
co-authored by Claude Fable 5.1
parent 4c3e58fa27
commit fdfb6da769
12 changed files with 667 additions and 22 deletions
@@ -99,6 +99,17 @@ pub struct Mask {
pub(super) density: f64,
/// The cut wall's shear closure order (S2-4).
pub(super) wall_order: u8,
/// The oblique wall distance of the cut faces (S2-5).
pub(super) wall_distance_oblique: bool,
/// The axis-distance implicit wall exchange (S2-5).
pub(super) wall_exchange_axis: bool,
/// The centroid prototype's pressure-gradient weights per u / v / w face.
/// The centroid-distance cross diffusion (S2-5).
pub(super) diffusion_centroid: bool,
/// The open-part centroid shifts per u / v / w face, three components
/// interleaved (built with `diffusion_centroid`).
pub(super) face_shifts: Option<[Vec<f64>; 3]>,
pub(super) grad_weights: Option<(Vec<f64>, Vec<f64>, Vec<f64>)>,
}
/// The z lattice position of a query: the lower plane index, the upper
@@ -512,6 +523,11 @@ impl Mask {
scheme: crate::solvers::incompressible::ConvectionScheme::Upwind,
density: 1.0,
wall_order: 1,
wall_distance_oblique: false,
wall_exchange_axis: false,
grad_weights: None,
diffusion_centroid: false,
face_shifts: None,
})
}
@@ -616,6 +632,15 @@ impl Mask {
/// Fluid volume fraction of a cell (1 on the binary wall).
#[inline]
#[must_use]
pub fn grad_weight(&self, c: usize, idx: usize) -> f64 {
self.grad_weights.as_ref().map_or(1.0, |w| match c {
0 => w.0[idx],
1 => w.1[idx],
_ => w.2[idx],
})
}
#[inline]
#[must_use]
pub fn vol(&self, idx: usize) -> f64 {
self.cut.as_ref().map_or(1.0, |c| c.vol[idx])
}