fsi2 harness: RTX_FSI2O_PATCH_CONVECTION knob (tvd default / upwind / none) on the overset patch, printed in the march's coupling header and the replay's PRESCRIBED header — P5-3's near-wake dispersion test on the ny 62 fixed-motion replay; harness files under the pinned toolchain's cargo fmt
CI / Build CPU-Only (Explicit) (push) Failing after 4s
Documentation / Build User Guide (push) Successful in 6s
CI / Clippy Check (push) Failing after 44s
Performance Benchmarks / Run Benchmarks (push) Successful in 2m57s
CI / Build (ubuntu-latest) (push) Failing after 2m6s
Documentation / Build API Documentation (push) Failing after 5s
CI / Format Check (push) Failing after 11s
CI / Build (macos-latest) (push) Failing after 10s
CI / Test (macos-latest) (push) Skipped
CI / Test (ubuntu-latest) (push) Skipped
CI / Python Bindings (maturin) (macos-latest) (push) Skipped
CI / Python Bindings (maturin) (ubuntu-latest) (push) Skipped
CI / WASM Build + Size Check (push) Skipped
CI / Distributed Training Tests (push) Skipped
CI / CI Success (push) Failing after 1s
CI / Build CPU-Only (Explicit) (push) Failing after 4s
Documentation / Build User Guide (push) Successful in 6s
CI / Clippy Check (push) Failing after 44s
Performance Benchmarks / Run Benchmarks (push) Successful in 2m57s
CI / Build (ubuntu-latest) (push) Failing after 2m6s
Documentation / Build API Documentation (push) Failing after 5s
CI / Format Check (push) Failing after 11s
CI / Build (macos-latest) (push) Failing after 10s
CI / Test (macos-latest) (push) Skipped
CI / Test (ubuntu-latest) (push) Skipped
CI / Python Bindings (maturin) (macos-latest) (push) Skipped
CI / Python Bindings (maturin) (ubuntu-latest) (push) Skipped
CI / WASM Build + Size Check (push) Skipped
CI / Distributed Training Tests (push) Skipped
CI / CI Success (push) Failing after 1s
Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01LzcjQX7tvgn87CQCyg9Cfr
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
754dcd3679
commit
ff7cc2d739
@@ -20,17 +20,17 @@ use std::cell::Cell;
|
||||
use std::sync::{Arc, RwLock};
|
||||
|
||||
use nalgebra::Vector3;
|
||||
use rtx_cfd::solvers::incompressible::{
|
||||
polygon_interface_velocity, polygon_signed_distance, AleBoundaries, ConvectionScheme,
|
||||
EmbeddedBody, EmbeddedParameters, EmbeddedPisoSolver, FlowField, PoissonSolverKind, PolygonSdf,
|
||||
SideBoundary,
|
||||
};
|
||||
use rtx_cfd::CfdConfig;
|
||||
use rtx_cfd::solvers::incompressible::{
|
||||
AleBoundaries, ConvectionScheme, EmbeddedBody, EmbeddedParameters, EmbeddedPisoSolver,
|
||||
FlowField, PoissonSolverKind, PolygonSdf, SideBoundary, polygon_interface_velocity,
|
||||
polygon_signed_distance,
|
||||
};
|
||||
use rtx_fea::assembly::dof_mapping::DofComponent;
|
||||
use rtx_fea::boundary::dirichlet::{DirichletBC, DirichletType};
|
||||
use rtx_fea::boundary::{BoundaryCondition, BoundaryConditionSet, SpatialFunction};
|
||||
use rtx_fea::mesh::{Element, ElementType, MaterialId, Mesh, Node, NodeId};
|
||||
use rtx_fsi::{smooth_tractions, FluidFace, WettedSurface};
|
||||
use rtx_fsi::{FluidFace, WettedSurface, smooth_tractions};
|
||||
|
||||
pub const L: f64 = 2.5;
|
||||
pub const H: f64 = 0.41;
|
||||
|
||||
@@ -12,8 +12,8 @@ use std::cell::Cell;
|
||||
use std::sync::{Arc, RwLock};
|
||||
|
||||
use nalgebra::Vector3;
|
||||
use rtx_cfd::mesh::patch_gen::cylinder_flag_patch_deformed;
|
||||
use rtx_cfd::mesh::PatchSide;
|
||||
use rtx_cfd::mesh::patch_gen::cylinder_flag_patch_deformed;
|
||||
use rtx_cfd::solvers::incompressible::{
|
||||
AleBoundaries, ConvectionScheme, CurvilinearParameters, CurvilinearPisoSolver,
|
||||
EmbeddedParameters, EmbeddedPisoSolver, FlowField, MgPrecision, NormalDiffusion, OversetField,
|
||||
@@ -24,7 +24,7 @@ use rtx_cfd::{CfdConfig, CfdResult};
|
||||
use rtx_fea::mesh::{Mesh, NodeId};
|
||||
use rtx_fsi::{FluidFace, WettedSurface};
|
||||
|
||||
use super::{flag_mesh, inflow_for, BenchmarkCase, Interface, FLAG_X1, H, L, NU_F, RHO_F};
|
||||
use super::{BenchmarkCase, FLAG_X1, H, Interface, L, NU_F, RHO_F, flag_mesh, inflow_for};
|
||||
|
||||
const CYL_CENTRE: [f64; 2] = [0.2, 0.2];
|
||||
const CYL_R: f64 = 0.05;
|
||||
@@ -45,6 +45,17 @@ fn patch_offset_h() -> f64 {
|
||||
.unwrap_or(6.0)
|
||||
}
|
||||
|
||||
/// The patch's convection scheme (`RTX_FSI2O_PATCH_CONVECTION`: `tvd`
|
||||
/// (default, van Albada), `upwind`, `none`) — P5-3's near-wake dispersion
|
||||
/// knob on the fixed-motion replay.
|
||||
pub fn patch_convection() -> PatchConvection {
|
||||
match std::env::var("RTX_FSI2O_PATCH_CONVECTION").as_deref() {
|
||||
Ok("upwind") => PatchConvection::Upwind,
|
||||
Ok("none") => PatchConvection::None,
|
||||
_ => PatchConvection::TvdVanAlbada,
|
||||
}
|
||||
}
|
||||
|
||||
/// The patch's across-rows (`RTX_FSI2O_PATCH_ROWS`, 12; scale it with the
|
||||
/// offset to keep the wall spacing).
|
||||
fn patch_rows() -> usize {
|
||||
@@ -327,7 +338,7 @@ impl OversetFluid {
|
||||
config,
|
||||
CurvilinearParameters {
|
||||
tolerance: 1e-5,
|
||||
convection: PatchConvection::TvdVanAlbada,
|
||||
convection: patch_convection(),
|
||||
normal_diffusion: NormalDiffusion::LineImplicit,
|
||||
..CurvilinearParameters::default()
|
||||
},
|
||||
|
||||
@@ -18,7 +18,7 @@ use rtx_fsi::{IqnIls, Subiterated};
|
||||
|
||||
use super::march::MarchResult;
|
||||
use super::overset::OversetFluid;
|
||||
use super::{clamp_left, env_or, median, mid_amp, BenchmarkCase};
|
||||
use super::{BenchmarkCase, clamp_left, env_or, median, mid_amp};
|
||||
|
||||
/// The overset march's knobs (`RTX_<PREFIX>_*`).
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -100,7 +100,7 @@ pub fn run_march_overset(case: BenchmarkCase, config: &OversetMarchConfig) -> Ov
|
||||
// Every setting the acceptance rule reads, printed once: P5-3 lost a
|
||||
// day to a floor of 2e-4 against the overnight marches' 1e-6.
|
||||
println!(
|
||||
" coupling: {} (reuse {}, ω0 {}, c1 {}), floor {:.1e}, rtol {:.1e}, stall accept {:.1e}, max subit {}, predictor {}, s = {}, patch offset {} h × {} rows",
|
||||
" coupling: {} (reuse {}, ω0 {}, c1 {}), floor {:.1e}, rtol {:.1e}, stall accept {:.1e}, max subit {}, predictor {}, s = {}, patch offset {} h × {} rows, patch convection {:?}",
|
||||
cfg.coupler,
|
||||
cfg.reuse,
|
||||
cfg.initial_relaxation,
|
||||
@@ -113,6 +113,7 @@ pub fn run_march_overset(case: BenchmarkCase, config: &OversetMarchConfig) -> Ov
|
||||
cfg.subcycle,
|
||||
std::env::var("RTX_FSI2O_PATCH_OFFSET").unwrap_or_else(|_| "6".into()),
|
||||
std::env::var("RTX_FSI2O_PATCH_ROWS").unwrap_or_else(|_| "12".into()),
|
||||
super::overset::patch_convection(),
|
||||
);
|
||||
|
||||
// Phase 1: rigid flag to t_release (`RTX_FSI2O_LOAD=dir` replaces the
|
||||
@@ -240,7 +241,11 @@ pub fn run_march_overset(case: BenchmarkCase, config: &OversetMarchConfig) -> Ov
|
||||
let mut worst_conservation = conservation0;
|
||||
println!(
|
||||
" release: {faces0} wall faces transferred (conservation defect {conservation0:.2e}); initial tip acceleration |a| = {:.3e}",
|
||||
(a_dofs.iter().map(|&k| flag_state.acceleration[k].powi(2)).sum::<f64>()).sqrt()
|
||||
(a_dofs
|
||||
.iter()
|
||||
.map(|&k| flag_state.acceleration[k].powi(2))
|
||||
.sum::<f64>())
|
||||
.sqrt()
|
||||
);
|
||||
|
||||
let fluid = RefCell::new(fluid);
|
||||
@@ -452,7 +457,8 @@ pub fn run_march_overset(case: BenchmarkCase, config: &OversetMarchConfig) -> Ov
|
||||
step + 1,
|
||||
total_subiterations as f64 / (step + 1) as f64,
|
||||
fl.rounds_total.get() as f64 / fl.correctors_total.get().max(1) as f64,
|
||||
fl.reclassified_total.get() as f64 / (rigid_steps + (step + 1) * cfg.subcycle * 4).max(1) as f64,
|
||||
fl.reclassified_total.get() as f64
|
||||
/ (rigid_steps + (step + 1) * cfg.subcycle * 4).max(1) as f64,
|
||||
fl.regen_seconds.get(),
|
||||
t_fluid.get(),
|
||||
phase_start.elapsed().as_secs_f64()
|
||||
|
||||
Reference in New Issue
Block a user