P6-b design 2: the Robin wall on the patch's Inner side — RobinWall { alpha, datum } with the wall velocity u_s + (t_f − datum)/α (explicit, damped by the wall's own viscous gain μ/(α d)) and the compliant-wall pressure term |S| p'/α implicit in the projection (the added-mass operator in the fluid's own response); Dirichlet bit for bit when off; MMS pin on the skewed annulus (orders 2.46/2.13 at α = 10 and 100 μ/h, the Dirichlet values; a 1e12 wall reproduces Dirichlet to 2e-6); OversetPisoSolver::patch_mut; harness knob RTX_FSI2O_ROBIN_ALPHA with the previous pass's tractions as the datum, printed in the header
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 / Build (ubuntu-latest) (push) Failing after 7s
CI / Format Check (push) Failing after 17s
Documentation / Build User Guide (push) Successful in 19s
Documentation / Build API Documentation (push) Failing after 1m51s
CI / Build CPU-Only (Explicit) (push) Failing after 1m58s
CI / Clippy Check (push) Failing after 2m13s
Performance Benchmarks / Run Benchmarks (push) Successful in 2m54s

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01YJPeT6WA2e7YvAnS875AHL
This commit is contained in:
Omar Sobh
2026-09-15 10:46:35 -05:00
co-authored by Claude Fable 5.1
parent c144a5f733
commit c3dbd5040a
12 changed files with 333 additions and 20 deletions
@@ -18,7 +18,7 @@ use rtx_cfd::solvers::incompressible::{
AleBoundaries, ConvectionScheme, CurvilinearParameters, CurvilinearPisoSolver,
EmbeddedParameters, EmbeddedPisoSolver, FlowField, MgPrecision, NormalDiffusion, OversetField,
OversetParameters, OversetPisoSolver, OversetResult, OversetSolverState, PatchConvection,
PatchField, PoissonSolverKind, SideBoundary,
PatchField, PoissonSolverKind, RobinWall, SideBoundary,
};
use rtx_cfd::{CfdConfig, CfdResult};
use rtx_fea::mesh::{Mesh, NodeId};
@@ -967,6 +967,24 @@ impl OversetFluid {
Ok(())
}
/// The fluid's traction on every Inner (wall) face, in the patch's
/// Inner-face order — the Robin wall's datum for the next pass.
pub fn inner_tractions(&self) -> Vec<[f64; 2]> {
self.solver
.patch()
.wall_tractions(&self.field.patch, PatchSide::Inner, self.solver.time())
.into_iter()
.map(|(_, _, _, t)| t)
.collect()
}
/// Put the Robin wall (impedance `alpha`, datum per Inner face) on the
/// patch, or remove it.
pub fn set_robin(&mut self, alpha: f64, datum: Option<Vec<[f64; 2]>>) {
self.solver
.patch_mut()
.set_robin_wall(datum.map(|d| RobinWall { alpha, datum: d }));
}
/// Drag and lift on cylinder + flag from the patch's wall stress.
pub fn measure_force(&self) -> (f64, f64) {
let f = self