You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Solverang is a domain-agnostic numerical solver for nonlinear systems and least-squares problems. It has two personalities: a low-level Problem trait for raw equation systems, and a high-level V3 constraint system (ConstraintSystem, Sketch2DBuilder) where you describe entities and constraints and the solver figures out the rest.
Architecture: V3 "solver-first" -- the solver core never imports a geometry type. Domain-specific modules (sketch2d, sketch3d, assembly) implement the Entity and Constraint extension traits.
Codebase
Component
Files
Lines
solverang library (crates/solverang/src/)
~130
~49,400
macros crate (crates/macros/src/)
5
~1,400
Integration tests (crates/solverang/tests/)
17
~12,600
Benchmarks (crates/solverang/benches/)
3
~1,300
All tests passing, zero compiler warnings.
Module Map
Core (Tier 1)
Module
What it does
id
Generational index types: ParamId, EntityId, ConstraintId, ClusterId
Design-by-contract: trait compliance for all constraint/entity types
Solver comparison
1
NR vs LM vs AutoSolver consistency
Sparse tests
1
Sparse Jacobian, CSR, faer integration
LM tests
1
Levenberg-Marquardt edge cases
Parallel tests
1
Decomposition, component independence
Macro tests
1
#[auto_jacobian] symbolic differentiation
MINPACK verification
1
Reference validation against MINPACK
Solver basic tests
1
Basic solver functionality
Doc-tests
—
Inline examples in lib.rs
Benchmarks
Suite
What it measures
comprehensive.rs
NR vs LM vs AutoSolver, sparse vs dense crossover, parallel speedup
scaling.rs
Solver scaling across problem sizes, decomposition vs monolithic
nist_benchmarks.rs
MGH problem suite performance (requires --features nist)
Known Issues
Decomposition cascading -- when the solver decomposes into sub-clusters, solutions from earlier clusters don't always propagate to dependent clusters. Can cause SystemStatus::Solved to be returned despite non-zero residuals on cross-cluster constraints. Workaround: ensure free entities connect directly to fixed entities.