Segment-to-segment penalty contact between element faces: each secondary face and each main face facing it are projected onto the secondary face's plane, split into triangles, clipped (Sutherland–Hodgman) and integrated with a three-point rule per sub-triangle (Puso–Laursen segmentation, the penalty at the integration points as Fischer–Wriggers), so a uniform pressure gives the consistent nodal forces on both meshes and the contact patch test passes on non-matching meshes. Every contact runs both ways at half the penalty: pairs with each surface as the secondary, general and self contact face against face. A bucket grid of face boxes every increment, faces integrated in parallel and their forces added in face order: the same numbers on any thread count. The penalty per area ε = s γ min(m/A)/Δt² comes from the lumped masses, each node's directional area and the stable increment, bounded by Gershgorin's row sums so contact never shortens the increment. Coulomb friction with exponential decay by a regularised return map at the secondary nodes; rigid walls take Coulomb impulses. Contact work and friction dissipation join the energy balance; each contact reports its peak force, first and last contact, deepest penetration, friction and the nodes adjusted at the start (initial penetrations adjusted strain-free or refused with the node, face and depth); a cap on contact faces. Verified (crates/explicit/tests/contact.rs, tests/oracle/explicit-*): colliding bars (2L/c +1.2%, ρcAv₀/2, KE kept to 0.005%, contact energy back to 8e-5 of it), blocks sliding to a stop on a rigid wall and on a plate under constant and decaying friction (0.005–0.2%), the patch test (σ_zz uniform to 0.06%), two spheres colliding against Hertz (peak +2.3%, duration −0.4%; the oracle case waits for a graded sphere mesher), a free body untouched by general contact, determinism across threads. Oracle measures gain `over` (ratios). Existing fixtures do not move. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
FieldCraft
An open-source, clean-room CAE application in pure Rust: from a parametric SolidCraft part to a verified finite element analysis, with tetrahedral and hexahedral meshing, its own implicit, explicit, thermal and lattice Boltzmann solvers, and decks for Abaqus, Nastran and LS-DYNA. The desktop app, the command line and AI agents (over MCP) drive the same commands.
Status: early but working end to end — open a part, mesh it, define the analysis, solve, see the results — with a nonlinear implicit solver (large deformation, plasticity, rubber) now in place. Hex meshing is the centre of gravity. Next: buckling and arc-length, contact, then the wider material and multiphysics library. See ROADMAP.md. Want to help? Pick an issue labelled good first issue or help wanted and read CONTRIBUTING.md.
Claude driving FieldCraft through its MCP server: one prompt, and it opens the part, meshes it, defines and solves the analysis, then checks the tip deflection against beam theory. Real session, waits shortened. Full video.
An AI agent drives FieldCraft over MCP, each stage captioned with the tool it calls: it opens an I-beam, hex meshes it, defines the material, the clamp and a 1000 N tip load, solves, and shows the von Mises stress and the deformed shape (tip deflection 0.176 mm; beam theory with shear 0.177 mm). MP4 · regenerated by tools/demo-video.
Download
- macOS: open the
.dmgand drag FieldCraft into Applications (Apple silicon and Intel). - Windows: unzip and run
fieldcraft.exe. - Linux: the
.AppImage(allow it to run as a program), or the.tar.gz. - Browser: try it at jyviko.github.io/fieldcraft, no install.
- Command line:
fieldcraft-cliships in every package; AI agents connect to it over MCP (docs/mcp.md).
Every release lists its checksums in SHA256SUMS.txt. Building from source is in
CONTRIBUTING.md.
Hex meshing a part that does not sweep
A filleted L-bracket with a hole through each leg cannot be swept in one piece. Split into 30
cells in SolidCraft, FieldCraft meshes it all-hex as one conforming mesh — O-grids round the holes,
graded through the fillet — and its hex20 tip deflection matches a fine tet10 solution to 0.1 %.
The same part also meshes all-hex automatically with the octree mesher (mesh.hex.octree).
| Cells | Conforming hex mesh | Von Mises (clamp and load drawn) |
|---|---|---|
![]() |
![]() |
![]() |
What it does today
- Geometry in: SolidCraft designs (
.solidcraft) with persistent face, edge and body names, and face-tagged 3MF meshes; surface checks (weld, manifold, orientation, self-intersection). - Meshing: constrained Delaunay tetrahedra (tet4, tet10) with exact predicates and a
certified validity gate; Delaunay refinement, smoothing and sliver removal; structured hex by
sweeping, revolving and mapping (hex8, hex20), and conforming multi-block hex across a part
split into cells (
mesh.hex.blocks); unstructured octree all-hex for any part (mesh.hex.octree); 2D quad and tri meshes; quality metrics per element and set. - Elements: solids (tet4, tet10, wedge6, hex8 with incompatible modes, hex20 full and reduced, hybrid u–p for near-incompressible materials), plane stress, plane strain and axisymmetric, trusses, Timoshenko beams, MITC3/MITC4 shells, springs, dashpots and point masses.
- Model: sets bound to geometry names, so they survive remeshing; isotropic and orthotropic
elasticity, J2 plasticity (isotropic and kinematic hardening, Johnson–Cook), Johnson–Cook
damage, neo-Hookean, Mooney–Rivlin and Yeoh hyperelasticity, thermal properties; fixed, displacement,
symmetry and temperature conditions; forces, moments, pressure, gravity, centrifugal and heat
loads; reference points with kinematic and distributing couplings; undo, redo and a
text-diffable
.fieldcraftfile. - Solvers: linear static and frequency (supernodal Cholesky, block Lanczos); nonlinear static by Newton–Raphson with automatic increments — large deformation (total Lagrangian) on every solid element, follower pressure, finite- and small-strain plasticity sharing one return map with the explicit solver, rubber and thermal strain, with measured quadratic convergence; steady and transient heat transfer and coupled thermal stress; explicit dynamics with plasticity, damage, erosion and rigid walls; D3Q19 lattice Boltzmann flow with forces on the part's faces. Results never depend on the thread count.
- Decks: Abaqus, Nastran and LS-DYNA writers, each refusing by name what it cannot express.
- Results: contours of stress, strain and displacement with a legend, deformed shapes, mode shapes, explicit and nonlinear frames, probes and reaction sums; supports, loads, reference points and couplings drawn in the viewport.
- Verification: every capability is checked against closed forms and published benchmarks
(NAFEMS, MacNeal–Harder, Scordelis–Lo, the elastica, Hill's plastic cylinder, Rivlin's tube) in
tests/oracle, with results frozen so they cannot drift: 170 of 176 quantities pass in 50 cases, the 6 others documented known failures (docs/oracle.md). - Driving it: a desktop app in the Craft family's layout, a CLI, a JSON control channel and an MCP server; every capability is a command (docs/features.md).
Build
cargo xtask ci # fmt, assets, licences, layers, clippy, tests, wasm
cargo xtask test --heavy # the heavy (ignored) tests and the doc tests
cargo run -p fieldcraft-cli -- commands # every command and its parameters
cargo run -p fieldcraft-cli -- run script.json # run a command script
cargo run -p fieldcraft-cli -- mcp # MCP server on stdio for AI agents (docs/mcp.md)
Rust 1.95 or later, with the wasm32-unknown-unknown target for cargo xtask ci.
Documentation
- Architecture: crates, layers and the meshing pipeline
- Element library and verification and validation
- Capability checklist and roadmap
- Libraries and licences
- AI agents (MCP):
claude mcp add fieldcraft -- /path/to/fieldcraft-cli mcp - Control protocol: driving the desktop app
- Releasing: how a release is built, verified and published
- 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.
FieldCraft 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.





