rtx-cfd: ALE on a moving tensor-product grid, DGCL-exact by construction
CI / Build (ubuntu-latest) (push) Canceled after 0s
CI / Test (macos-latest) (push) Canceled after 0s
CI / Test (ubuntu-latest) (push) Canceled after 0s
CI / Build CPU-Only (Explicit) (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
Performance Benchmarks / Run Benchmarks (push) Canceled after 0s
CI / Format Check (push) Canceled after 0s
CI / Clippy Check (push) Canceled after 0s
CI / Build (macos-latest) (push) Canceled after 0s
Documentation / Build API Documentation (push) Canceled after 0s
Documentation / Build User Guide (push) Canceled after 0s
CI / Build (ubuntu-latest) (push) Canceled after 0s
CI / Test (macos-latest) (push) Canceled after 0s
CI / Test (ubuntu-latest) (push) Canceled after 0s
CI / Build CPU-Only (Explicit) (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
Performance Benchmarks / Run Benchmarks (push) Canceled after 0s
CI / Format Check (push) Canceled after 0s
CI / Clippy Check (push) Canceled after 0s
CI / Build (macos-latest) (push) Canceled after 0s
Documentation / Build API Documentation (push) Canceled after 0s
Documentation / Build User Guide (push) Canceled after 0s
The first brick of the Turek-Hron frontier: PISO (explicit conservative
predictor + SOR projection) generalised to a staggered grid whose x- and
y-lines move arbitrarily each step while the domain boundary stays fixed.
The discretisation choice that carries everything: time-averaged face
areas (A^n + A^{n+1})/2 in both the fluid fluxes and the face-swept
volumes. For tensor-product motion the discrete geometric conservation
law then holds as an algebraic identity, so uniform flow is a
machine-precision fixed point, not a truncation-order one:
- DGCL test: uniform (0.7, -0.4) on a 16x12 grid with interior lines
wiggling out of phase, 400 steps: max deviation 7.9e-15 (~35 ulp).
Negative control with end-of-step areas (per-step cell error exactly
dw*dh/V, the cross term the identity absorbs): 1.5e-2 - a 1e12
separation, so the test can fail.
- Degeneracy: zero motion on a uniform grid vs fixed-grid PISO over
Taylor-Green steps: max difference 2.2e-16 - one ulp - pinning every
geometric generalisation to the verified implementation.
- Physics under motion: Taylor-Green on the wiggling mesh, L2 error
2.42e-2 -> 1.07e-2 (n=16 -> 32, order 1.17); moving-mesh error at
n=32 sits below the fixed-mesh 1.1532e-2 (PISO's published value to
four digits); energy decay unchanged by the motion.
One trap documented in the test: the projection's inner-stop floor
(0.1 * tolerance * reference_flux) at an engineering tolerance lets a
one-sweep partial p' accumulate into p, whose gradient perturbs the
velocities at ~1e-11 with the geometry blameless. The DGCL run must use
a rounding-level tolerance because machine-precision preservation is the
claim under test. Measured: 3.6e-11 at tol 1e-9, 7.9e-15 at 1e-13.
Incompressibility needs no mesh-velocity term: subtracting the GCL from
moving-cell mass conservation leaves plain div(u) = 0 on the current
geometry, so the projection is the fixed-grid one with non-uniform
coefficients.
292 rtx-cfd tests green (288 + 4).
Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Fable 5
parent
8071d5888d
commit
259c5baa63
@@ -9,6 +9,8 @@ use crate::{CfdConfig, CfdError, CfdResult};
|
||||
// use nalgebra::{DMatrix, DVector};
|
||||
// use std::collections::HashMap;
|
||||
|
||||
/// ALE solver on a moving tensor-product staggered grid
|
||||
pub mod ale;
|
||||
/// Boundary conditions
|
||||
pub mod boundary_conditions;
|
||||
/// Flow field data structures
|
||||
@@ -25,6 +27,7 @@ pub mod simple;
|
||||
pub mod simple_gpu;
|
||||
|
||||
// Re-export main types
|
||||
pub use ale::{AleField, AleParameters, AlePisoSolver, AleResult, SweptFaceRule};
|
||||
pub use boundary_conditions::{
|
||||
BoundaryCondition, BoundaryConditions, BoundaryLocation, BoundaryType,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user