* fem: DofKind/DofLayout and the shape-function library with second derivatives DofKind (Ux..Rz, T, P), DofSet, ElementDofs (per-node kinds and condensed internal unknowns) and DofLayout: mesh nodes by label, kinds in order, then reference points. basis::Basis covers line2/3, tri3/6, quad4/8/9, tet4/10, wedge6/15, pyramid5, hex8/20/27 with values, first and second natural derivatives (second-order forward AD, fem::jet) and the physical gradients, Hessians and Laplacians with the map's second-derivative term. Tested for Kronecker delta, partition of unity, polynomial completeness, finite differences, affine and curved maps. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * solver, explicit: number degrees of freedom with DofLayout The implicit mesh numbers its unknowns with a DofLayout (mesh nodes by label with the kinds their elements declare, then six per coupled reference point); assembly adds element blocks by (node, DofKind), so a node may carry any mix of kinds; couplings, boundary conditions, loads and results address (node, kind). The explicit system keeps node-major translations, now checked against its layout (NODE_DOFS). Solid formulations declare their ElementDofs. Every static, frequency and explicit result of the solver, explicit, engine and io test suites hashes bit-identically before and after (957 results). docs/fem.md describes the DOF model and the shape-function conventions. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * fem, solver: simplify after review Block offsets resolved once per node pair; add_scalar/add_diagonal take the kinds like add_block; one checked Jacobian inverse (dense::positive_inverse) for the solid kernels and the basis library; static natural-node tables; the Hessian path inverts the Jacobian once. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm --------- Co-authored-by: jyviko <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]>
ModelCraft
An open-source, clean-room CAE modeling application in pure Rust: geometry to analysis-ready finite element models, with robust tetrahedral and hexahedral meshing, solver decks for Abaqus, Nastran and LS-DYNA, and its own linear static and modal solver. Desktop, browser and AI agents drive the same commands.
Status: early. The workspace, quality gates, the FE model, the command engine and the geometry boundary (SolidCraft's kernel and tessellator) are in place; meshing is next. See ROADMAP.md.
Build
cargo xtask ci # fmt, assets, licences, layers, clippy, tests, wasm
cargo run -p modelcraft-cli -- commands # every command and its parameters
cargo run -p modelcraft-cli -- run script.json # run a command script
Rust 1.95 or later, with the wasm32-unknown-unknown target for cargo xtask ci.
Documentation
- Architecture: crates, layers and the meshing pipeline
- Libraries and licences
- Contributing and agent instructions
License
Dual-licensed under MIT or Apache-2.0, at your option. Notices are in NOTICE; third-party licences in THIRD-PARTY-LICENSES.txt.
ModelCraft is an independent project, not affiliated with, sponsored or endorsed by Dassault Systèmes, MSC Software, Siemens or Ansys. Abaqus, Nastran, MSC Nastran, Simcenter Nastran and LS-DYNA are trademarks of their owners and are named only to describe file compatibility.