rtx-fea: ECSW model-order reduction — POD-Galerkin plus hyper-reduction, verified end to end
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
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
Documentation / Build API Documentation (push) Canceled after 0s
Documentation / Build User Guide (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
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
Documentation / Build API Documentation (push) Canceled after 0s
Documentation / Build User Guide (push) Canceled after 0s
The third Farhat gap. New rtx_fea::mor module:
- pod::pod_basis — orthonormal SVD basis with an energy-criterion
truncation. Verified: rank-2 data yields exactly 2 orthonormal modes that
reconstruct every snapshot to machine precision; a loose tolerance
truncates a dominant-mode-plus-noise set to one mode.
- nnls — Lawson-Hanson non-negative least squares with the early stop that
makes ECSW work: iteration ends at the requested residual, and the
active-set structure caps the support at one column per outer iteration,
so sparsity falls out of the stopping tolerance. Verified against KKT
conditions, exact positive solutions, negative-clipping, and a
sparsity-vs-tolerance case. Its thresholds are RELATIVE to the problem's
own scales — the first version used absolute cutoffs (1e-14) that
silently ended the iteration on ECSW's small-magnitude training systems
at 1.2e-3 instead of the requested 1e-4.
- ecsw::train_ecsw — element weights such that a small subset reproduces
the reduced internal force (the virtual work against the basis) over the
training snapshots. w = 1 solves the system exactly by construction, so
it is always consistent; nonnegativity is what keeps a sampled element
from producing energy.
- reduced::ReducedNonlinearModel — Newton in POD coordinates, assembling
either every element (POD-Galerkin) or the ECSW sample, on the same
per-element force/tangent machinery the nonlinear analysis uses.
End-to-end verification (tests/ecsw_mor.rs): a clamped nonlinear block,
snapshots from a 4-point load sweep, evaluated at an UNSEEN load factor:
POD modes: 2 ECSW sample: 5 of 24 elements
training residual 2.2e-7 (requested 1e-4)
error vs full solve: POD-Galerkin 3.09e-7, ECSW 3.08e-7
hyper-reduction cost (ECSW vs full ROM): 1.6e-8
And the assertion with the most teeth: the same 5 elements with their
weights forced to 1 read a relative error of 1.22 — a completely wrong
field — so the accuracy is carried by the WEIGHTS, not by the subset
happening to be representative.
Scope, stated plainly: geometrically linear, materially nonlinear,
homogeneous Dirichlet only (no lifting); the basis lives on the free DOFs.
559 rtx-fea tests, 0 failing.
Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Fable 5
parent
b321a9aba7
commit
8071d5888d
@@ -0,0 +1,29 @@
|
||||
//! Model-order reduction: POD-Galerkin projection with ECSW hyper-reduction.
|
||||
//!
|
||||
//! The pipeline, all offline steps verified by their own invariants:
|
||||
//!
|
||||
//! 1. Collect full-order solution snapshots (the caller's job — typically a
|
||||
//! parameter or load sweep of [`crate::analysis::NonlinearStaticAnalysis`]).
|
||||
//! 2. [`pod::pod_basis`] — orthonormal basis by SVD, truncated at an energy
|
||||
//! criterion.
|
||||
//! 3. [`ecsw::train_ecsw`] — nonnegative element weights so that a small
|
||||
//! element subset reproduces the reduced internal force over the
|
||||
//! training set ([`nnls`] with an early stop; sparsity comes from the
|
||||
//! stopping tolerance).
|
||||
//! 4. [`reduced::ReducedNonlinearModel`] — Newton in reduced coordinates,
|
||||
//! assembling only the sampled elements.
|
||||
//!
|
||||
//! Scope: geometrically linear, materially nonlinear (what the nonlinear
|
||||
//! analysis supports), homogeneous Dirichlet data. Lifting for
|
||||
//! inhomogeneous boundary values is not implemented and the basis is over
|
||||
//! the free DOFs only.
|
||||
|
||||
pub mod ecsw;
|
||||
pub mod nnls;
|
||||
pub mod pod;
|
||||
pub mod reduced;
|
||||
|
||||
pub use ecsw::{EcswModel, train_ecsw};
|
||||
pub use nnls::nnls;
|
||||
pub use pod::pod_basis;
|
||||
pub use reduced::ReducedNonlinearModel;
|
||||
Reference in New Issue
Block a user