embedded3 S2-8 instrument: the load routes in PARTS per body — exchange split into diffusive / convective (cut_wall_exchange_parts), a diagnostic x window on every load route (exchange::set_load_window), the flag test as a 2D periodic slab (RTX_E3_FLAG_NZ) with an amplitude knob (RTX_E3_FLAG_AMP, 0 = frozen) and a PARTS summary; cut_wall_force / _per_span moved to exchange.rs (cutwall.rs line cap)
CI / Build (ubuntu-latest) (push) Failing after 4s
Documentation / Build API Documentation (push) Failing after 4s
CI / Build CPU-Only (Explicit) (push) Failing after 5s
Documentation / Build User Guide (push) Successful in 4s
CI / Format Check (push) Failing after 17s
CI / Clippy Check (push) Failing after 38s
Performance Benchmarks / Run Benchmarks (push) Successful in 1m47s
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
CI / Build (ubuntu-latest) (push) Failing after 4s
Documentation / Build API Documentation (push) Failing after 4s
CI / Build CPU-Only (Explicit) (push) Failing after 5s
Documentation / Build User Guide (push) Successful in 4s
CI / Format Check (push) Failing after 17s
CI / Clippy Check (push) Failing after 38s
Performance Benchmarks / Run Benchmarks (push) Successful in 1m47s
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:
co-authored by
Claude Fable 5.1
parent
3f0bd0650a
commit
5e1b3e0731
@@ -16,6 +16,7 @@
|
||||
use super::Grid;
|
||||
use super::body::Body;
|
||||
use super::cut::CutGeometry;
|
||||
use super::exchange::in_load_window;
|
||||
use super::field::Field;
|
||||
use super::step::{Boundaries, Side};
|
||||
use super::wall::{FaceKind, Mask};
|
||||
@@ -589,37 +590,6 @@ impl Mask {
|
||||
flux
|
||||
}
|
||||
|
||||
/// The cut-cell load route: the force on the body from the operators
|
||||
/// themselves — `Σ_c p_c W_c` over the cells plus the implicit wall
|
||||
/// shear `Σ_f μ A_w (u_f − U_b)/d_f` over the unknown faces. `None`
|
||||
/// without a cut geometry.
|
||||
pub fn cut_wall_force(&self, body: &Body, f: &Field, mu: f64, t: f64) -> Option<[f64; 3]> {
|
||||
let (p, s) = self.cut_wall_force_parts(body, f, mu, t)?;
|
||||
let x = self.cut_wall_exchange_force(body, f, mu, self.density, t, None)?;
|
||||
Some([p[0] + s[0] + x[0], p[1] + s[1] + x[1], p[2] + s[2] + x[2]])
|
||||
}
|
||||
|
||||
/// The cut-cell load route restricted to the cells (and faces) of the
|
||||
/// planes `k0..k1`, divided by the slab's thickness: the load per unit
|
||||
/// span on a body's mid-section.
|
||||
pub fn cut_wall_force_per_span(
|
||||
&self,
|
||||
body: &Body,
|
||||
f: &Field,
|
||||
mu: f64,
|
||||
t: f64,
|
||||
(k0, k1): (usize, usize),
|
||||
) -> Option<[f64; 3]> {
|
||||
let (p, s) = self.cut_wall_force_parts_in(body, f, mu, t, Some((k0, k1)))?;
|
||||
let x = self.cut_wall_exchange_force(body, f, mu, self.density, t, Some((k0, k1)))?;
|
||||
let lz = (k1 - k0) as f64 * self.grid.dz;
|
||||
Some([
|
||||
(p[0] + s[0] + x[0]) / lz,
|
||||
(p[1] + s[1] + x[1]) / lz,
|
||||
(p[2] + s[2] + x[2]) / lz,
|
||||
])
|
||||
}
|
||||
|
||||
/// The cut-cell load route split into its pressure and shear parts.
|
||||
pub fn cut_wall_force_parts(
|
||||
&self,
|
||||
@@ -631,7 +601,7 @@ impl Mask {
|
||||
self.cut_wall_force_parts_in(body, f, mu, t, None)
|
||||
}
|
||||
|
||||
fn cut_wall_force_parts_in(
|
||||
pub(super) fn cut_wall_force_parts_in(
|
||||
&self,
|
||||
body: &Body,
|
||||
f: &Field,
|
||||
@@ -646,8 +616,9 @@ impl Mask {
|
||||
let mut pressure = [0.0; 3];
|
||||
let mut force = [0.0; 3];
|
||||
for (idx, w) in cut.wall.iter().enumerate() {
|
||||
let k = g.kji(idx).0;
|
||||
if self.cell_fluid[idx] && k >= k0 && k < k1 {
|
||||
let (k, _, i) = g.kji(idx);
|
||||
if self.cell_fluid[idx] && k >= k0 && k < k1 && in_load_window((i as f64 + 0.5) * g.dx)
|
||||
{
|
||||
for c in 0..3 {
|
||||
pressure[c] += f.p[idx] * w[c];
|
||||
}
|
||||
@@ -676,7 +647,7 @@ impl Mask {
|
||||
1 => self.v_kind[idx],
|
||||
_ => self.w_kind[idx],
|
||||
};
|
||||
if kind != FaceKind::Fluid {
|
||||
if kind != FaceKind::Fluid || !in_load_window(lat.face_position(c, p)[0]) {
|
||||
continue;
|
||||
}
|
||||
let cv = self.cv_geometry(c, p);
|
||||
|
||||
Reference in New Issue
Block a user