embedded3 S2-2b (host lever): narrow-band φ re-evaluation for moving bodies (max_surface_speed) — bit-identical, the flag body's ny 62 rebuild 3.54 → 0.30 s; the flag driver uses it
CI / Format Check (push) Failing after 4s
CI / Build (macos-latest) (push) Waiting to run
CI / Test (macos-latest) (push) Blocked by required conditions
CI / Test (ubuntu-latest) (push) Blocked by required conditions
CI / Python Bindings (maturin) (macos-latest) (push) Blocked by required conditions
CI / Python Bindings (maturin) (ubuntu-latest) (push) Blocked by required conditions
CI / WASM Build + Size Check (push) Blocked by required conditions
CI / Distributed Training Tests (push) Blocked by required conditions
CI / CI Success (push) Blocked by required conditions
CI / Clippy Check (push) Failing after 3s
CI / Build (ubuntu-latest) (push) Failing after 4s
Performance Benchmarks / Run Benchmarks (push) Failing after 5s
Documentation / Build User Guide (push) Successful in 6s
CI / Build CPU-Only (Explicit) (push) Failing after 1m5s
Documentation / Build API Documentation (push) Failing after 1m8s
CI / Format Check (push) Failing after 4s
CI / Build (macos-latest) (push) Waiting to run
CI / Test (macos-latest) (push) Blocked by required conditions
CI / Test (ubuntu-latest) (push) Blocked by required conditions
CI / Python Bindings (maturin) (macos-latest) (push) Blocked by required conditions
CI / Python Bindings (maturin) (ubuntu-latest) (push) Blocked by required conditions
CI / WASM Build + Size Check (push) Blocked by required conditions
CI / Distributed Training Tests (push) Blocked by required conditions
CI / CI Success (push) Blocked by required conditions
CI / Clippy Check (push) Failing after 3s
CI / Build (ubuntu-latest) (push) Failing after 4s
Performance Benchmarks / Run Benchmarks (push) Failing after 5s
Documentation / Build User Guide (push) Successful in 6s
CI / Build CPU-Only (Explicit) (push) Failing after 1m5s
Documentation / Build API Documentation (push) Failing after 1m8s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
aa096465a6
commit
c30e3dba34
@@ -74,6 +74,11 @@ pub struct Parameters {
|
||||
pub inner_stop_factor: f64,
|
||||
/// The wall treatment of an embedded body.
|
||||
pub wall_scheme: WallScheme,
|
||||
/// A moving body's largest surface speed: with it the cut geometry's
|
||||
/// φ is re-evaluated only within three cells of the surface each step
|
||||
/// (identical results; the far corners keep their sign). `None` =
|
||||
/// every corner every step.
|
||||
pub max_surface_speed: Option<f64>,
|
||||
}
|
||||
|
||||
impl Default for Parameters {
|
||||
@@ -87,6 +92,7 @@ impl Default for Parameters {
|
||||
convection_scheme: ConvectionScheme::Upwind,
|
||||
inner_stop_factor: 1e-2,
|
||||
wall_scheme: WallScheme::GhostBinary,
|
||||
max_surface_speed: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -182,10 +188,17 @@ impl Solver {
|
||||
self.mask = None;
|
||||
}
|
||||
|
||||
fn build_mask(&self, body: &Body, g: Grid, t: f64) -> Mask {
|
||||
fn build_mask(&self, body: &Body, g: Grid, t: f64, dt: f64) -> Mask {
|
||||
match self.params.wall_scheme {
|
||||
WallScheme::GhostBinary => Mask::build(body, g, t, self.params.boundaries),
|
||||
WallScheme::CutCell => Mask::build_cut(body, g, t, self.params.boundaries),
|
||||
WallScheme::CutCell => {
|
||||
let h = g.dx.min(g.dy).min(g.dz);
|
||||
let prev = match (self.params.max_surface_speed, &self.mask) {
|
||||
(Some(speed), Some(m)) => m.cut().map(|c| (c, 3.0 * h, speed * dt)),
|
||||
_ => None,
|
||||
};
|
||||
Mask::build_cut_from(body, g, t, self.params.boundaries, prev)
|
||||
}
|
||||
}
|
||||
.expect("embedded mask")
|
||||
}
|
||||
@@ -453,7 +466,7 @@ impl Solver {
|
||||
let t = self.time;
|
||||
if let Some(body) = &self.body {
|
||||
if self.mask.is_none() {
|
||||
self.mask = Some(self.build_mask(body, field.grid, t));
|
||||
self.mask = Some(self.build_mask(body, field.grid, t, 0.0));
|
||||
}
|
||||
}
|
||||
self.apply_boundary_normals(field, t);
|
||||
@@ -486,7 +499,7 @@ impl Solver {
|
||||
return 0;
|
||||
};
|
||||
let mut fresh_cells = 0;
|
||||
let mut new_mask = self.build_mask(body, field.grid, t_new);
|
||||
let mut new_mask = self.build_mask(body, field.grid, t_new, dt);
|
||||
if let Some(old_mask) = &self.mask {
|
||||
fresh_cells = refill_fresh_cells(old_mask, &new_mask, field);
|
||||
new_mask.set_step_apertures(old_mask);
|
||||
|
||||
Reference in New Issue
Block a user