57b4b2f4d2 Model definition: sets by geometry name, materials, sections, couplings, BCs, loads, steps, check (#16)
* model: split nodes and elements into a mesh module (no behaviour change)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm

* model: sets by geometry name, materials and units, sections, couplings, BCs, loads, steps and the check

Sets bind to persistent geometry names through the mesh's geometry tags
(element, element face/edge and node classification) and resolve against
the current mesh, so they survive a remesh. Steps list their active loads
and boundary conditions explicitly. Model::check names every missing or
bad item; Model::resolve gives the writers' view.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm

* engine: model definition commands (sets, materials, sections, RPs, couplings, BCs, loads, steps, tags, check)

Each definition has create/edit/delete with its model JSON form as
parameters; model.step.activate and model.activity drive the explicit step
table; mesh.tag records where the mesh lies on the geometry; model.check
and model.set.resolve report against the current mesh. Hostile params run
against an empty and a fully defined session.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm

* docs: model definition in architecture and roadmap

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm

* model, engine: review cleanups

Validated deserialization (a file replays through the checked methods),
interned geometry tags by index, set resolution with tag bitsets and sorted
vectors, one delete policy (a load or BC listed by a step is in use),
shared helpers (context, remove_existing, step_mut, opt/req/name/listed),
dead code removed, Resolved without a per-element section map.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm

* model: mesh-independent force distribution, tractions, stable reference point labels

Force and moment on a set default to a total, split by consistent nodal
weights over the set's faces (or equally over a node set); per_node is an
explicit opt-in. Traction is force per area. resolve() expands them to
nodal values for every writer and the solver. Reference points keep a
stored node label taken from the top of the label range.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm

---------

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:19:54 -04:00

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

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.

S
Description
Tier 1: clean mirror of github.com/tangency-labs/fieldcraft (FieldCraft, pure-Rust CAE: FEA meshing, thermal, lattice-Boltzmann CFD, MIT OR Apache-2.0). Upstream remote = original GitHub repo for sync. NO REBRAND HAPPENS HERE. Working fork: OneCAD-Simulation.
Readme
97 MiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 96.9%
JavaScript 1.1%
Python 0.6%
TypeScript 0.5%
KCL 0.3%
Other 0.5%