Crates
Ferro is split across a set of focused Rust crates under physics/ferro/crates/.
This is the reference to reach for if you're working in the Ferro source itself,
or deciding which crate to depend on for a given task.
| Crate | Purpose |
|---|---|
ferro-core | Core data structures for structural FEA — mesh, element, and node types. |
ferro-fem | The FEM formulations themselves: elements, materials, solvers, thermal, dynamics, contact, topology optimization, plasticity, and more. |
ferro-io | Mesh I/O — Gmsh, Nastran, and VTK readers/writers. |
ferro-config | Serializable configuration types. This is the API contract — the FerroRequest schema every surface (Prism, CLI, Python) ultimately produces. |
ferro-project | The multi-load-case project model — FerroCase and Environment, in the Ansys Mechanical style described in Cases & Environments. |
ferro-results | The canonical persisted results-of-record format (.fres, CBOR-encoded). |
ferro-runner | Filesystem-based execution — takes a ferro-config request and ferro-fem solver and runs it against files on disk. |
ferro-cli | The thin CLI wrapper around ferro-config/ferro-runner — see Workflow. |
ferro-export | Visualization data export — GLB/glTF, JSON, and binary formats for downstream viewers. |
ferro-py | Python bindings via PyO3 — see Workflow. |
ferro-config is the crate to read first if you're integrating
with Ferro programmatically — it defines FerroRequest, the single input
format every other surface converges on.
Building
From the physics/ workspace root (never from the repo root — see the
monorepo's root CLAUDE.md):
cd physics
cargo build -p ferro-cli --releaseValidation
cargo test -p ferro-validation -- --nocaptureruns Ferro's benchmark suite: NAFEMS reference cases (elliptic membrane, skew
plate, thick elliptic plate, several modal and buckling benchmarks) plus
classical closed-form comparisons (thick cylinder under pressure, a plate with a
central hole, conduction/convection, and a shear-locking comparison between
Tet10 and Hex8 elements). See physics/ferro/validation/README.md in the
source tree for the full table of cases and error margins.