embedded3 flag wake: RTX_E3_FLAG_DEPTH — the duct's z extent as a knob (default H); the inflow paraboloid, the flag's centring and the full/free tag follow it (the wide-duct exploration: the benchmark-span flag with free ends in a 0.82 m duct)
CI / Python Bindings (maturin) (macos-latest) (push) Blocked by required conditions
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) (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 / Format Check (push) Failing after 4s
CI / Build (ubuntu-latest) (push) Failing after 5s
Performance Benchmarks / Run Benchmarks (push) Failing after 5s
Documentation / Build User Guide (push) Successful in 4s
CI / Clippy Check (push) Failing after 40s
CI / Build CPU-Only (Explicit) (push) Failing after 1m23s
Documentation / Build API Documentation (push) Failing after 1m25s
CI / Python Bindings (maturin) (macos-latest) (push) Blocked by required conditions
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) (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 / Format Check (push) Failing after 4s
CI / Build (ubuntu-latest) (push) Failing after 5s
Performance Benchmarks / Run Benchmarks (push) Failing after 5s
Documentation / Build User Guide (push) Successful in 4s
CI / Clippy Check (push) Failing after 40s
CI / Build CPU-Only (Explicit) (push) Failing after 1m23s
Documentation / Build API Documentation (push) Failing after 1m25s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
e9fe155c4b
commit
f016f0f96f
@@ -212,21 +212,29 @@ fn flag_2d_analytic(x: f64, y: f64, t: f64) -> (f64, f64) {
|
|||||||
(best - FLAG_HALF, v_best)
|
(best - FLAG_HALF, v_best)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The flag's span: `RTX_E3_FLAG_SPAN` (default 0.2); at the channel's
|
/// The flag's span: `RTX_E3_FLAG_SPAN` (default 0.2); at the duct's
|
||||||
/// full width the flag is the 2D geometry extruded (S2-3b).
|
/// full depth the flag is the 2D geometry extruded (S2-3b).
|
||||||
fn flag_span() -> f64 {
|
fn flag_span() -> f64 {
|
||||||
env_f("RTX_E3_FLAG_SPAN", FLAG_SPAN)
|
env_f("RTX_E3_FLAG_SPAN", FLAG_SPAN)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The duct's depth (the z extent): `RTX_E3_FLAG_DEPTH` (default H, the
|
||||||
|
/// square duct). A wider duct than the flag's span (2026-09-22, the
|
||||||
|
/// "wide span" exploration) puts a finite-span plate in free flow between
|
||||||
|
/// the side walls — not the benchmark's geometry.
|
||||||
|
fn duct_depth() -> f64 {
|
||||||
|
env_f("RTX_E3_FLAG_DEPTH", H)
|
||||||
|
}
|
||||||
|
|
||||||
/// The flag in 3D: the extruded capsule cut to the span with edges
|
/// The flag in 3D: the extruded capsule cut to the span with edges
|
||||||
/// rounded to radius `r` (no cut at the full width).
|
/// rounded to radius `r` (no cut at the full width).
|
||||||
fn flag_3d(x: f64, y: f64, z: f64, t: f64, r: f64) -> (f64, (f64, f64)) {
|
fn flag_3d(x: f64, y: f64, z: f64, t: f64, r: f64) -> (f64, (f64, f64)) {
|
||||||
let (d2, v) = flag_2d(x, y, t);
|
let (d2, v) = flag_2d(x, y, t);
|
||||||
let span = flag_span();
|
let span = flag_span();
|
||||||
if span >= H {
|
if span >= duct_depth() {
|
||||||
return (d2, v);
|
return (d2, v);
|
||||||
}
|
}
|
||||||
let zc = 0.5 * H;
|
let zc = 0.5 * duct_depth();
|
||||||
let q1 = d2 + r;
|
let q1 = d2 + r;
|
||||||
let q2 = (z - zc).abs() - 0.5 * span + r;
|
let q2 = (z - zc).abs() - 0.5 * span + r;
|
||||||
let outside = (q1.max(0.0).powi(2) + q2.max(0.0).powi(2)).sqrt();
|
let outside = (q1.max(0.0).powi(2) + q2.max(0.0).powi(2)).sqrt();
|
||||||
@@ -234,7 +242,8 @@ fn flag_3d(x: f64, y: f64, z: f64, t: f64, r: f64) -> (f64, (f64, f64)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn inflow(y: f64, z: f64) -> f64 {
|
fn inflow(y: f64, z: f64) -> f64 {
|
||||||
16.0 * U_M * y * z * (H - y) * (H - z) / (H * H * H * H)
|
let d = duct_depth();
|
||||||
|
16.0 * U_M * y * z * (H - y) * (d - z) / (H * H * d * d)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -247,7 +256,11 @@ fn flag_wake_on_the_device() {
|
|||||||
// `RTX_E3_FLAG_NZ=4`: a thin slab periodic in z with the 2D inflow (Ū = 1) — the
|
// `RTX_E3_FLAG_NZ=4`: a thin slab periodic in z with the 2D inflow (Ū = 1) — the
|
||||||
// flag as a 2D problem, minutes per rung: the instrument for the load routes' parts.
|
// flag as a 2D problem, minutes per rung: the instrument for the load routes' parts.
|
||||||
let slab_nz = env_f("RTX_E3_FLAG_NZ", 0.0) as usize;
|
let slab_nz = env_f("RTX_E3_FLAG_NZ", 0.0) as usize;
|
||||||
let nz = if slab_nz > 0 { slab_nz } else { ny };
|
let nz = if slab_nz > 0 {
|
||||||
|
slab_nz
|
||||||
|
} else {
|
||||||
|
(duct_depth() / h).round() as usize
|
||||||
|
};
|
||||||
// S2-9b: the 3D run with the slab's 2D inflow (uniform in z) and/or slip
|
// S2-9b: the 3D run with the slab's 2D inflow (uniform in z) and/or slip
|
||||||
// side walls — the decomposition of the 3D-over-slab drag.
|
// side walls — the decomposition of the 3D-over-slab drag.
|
||||||
let inflow_2d = std::env::var("RTX_E3_FLAG_INFLOW").is_ok_and(|v| v == "2d");
|
let inflow_2d = std::env::var("RTX_E3_FLAG_INFLOW").is_ok_and(|v| v == "2d");
|
||||||
@@ -491,7 +504,7 @@ fn flag_wake_on_the_device() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if phase_due {
|
if phase_due {
|
||||||
let tag = if flag_span() >= H { "full" } else { "free" };
|
let tag = if flag_span() >= duct_depth() { "full" } else { "free" };
|
||||||
let path = std::path::Path::new(vtk_dir.as_ref().unwrap())
|
let path = std::path::Path::new(vtk_dir.as_ref().unwrap())
|
||||||
.join(format!("flag_{tag}_ny{ny}_phase{next_phase:02}.vtk"));
|
.join(format!("flag_{tag}_ny{ny}_phase{next_phase:02}.vtk"));
|
||||||
write_vtk(&path, &field, Some(mask)).expect("vtk");
|
write_vtk(&path, &field, Some(mask)).expect("vtk");
|
||||||
|
|||||||
Reference in New Issue
Block a user