85ba526663 mesh: one transfinite interpolation for mapped hex and mesh.block; stable oracle report (#52)
* mesh: one transfinite interpolation for mapped hex and mesh.block; stable oracle report

mesh.block's lattice is now built from the structured hex mesher's
transfinite code: faces by quad::transfinite_grid, the interior by the new
quad::transfinite_volume (Gordon-Thiel, blended by the block's graded
parameters), which hex::mapped now calls too. 2D patches are the
transfinite_grid of their sides. Edge curves return their corners exactly.

Oracle: a zero-reference quantity (rounding noise) keeps its absolute
tolerance as its fixture band, and docs/oracle.md shows such noise and
relative errors inside the fixture band as bounds, so the report no longer
changes with the order of floating-point operations (it failed the
'docs/oracle.md is current' check on main after #50). Scordelis-Lo moved by
1.4e-9 relative (an ill-conditioned thin shell of solids: sub-ulp node
changes) and is re-blessed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm

* simplify: shared face filling and lattice index; faces blended like the volume; exact ends for every edge

quad::transfinite_faces fills a block's six faces (with a per-face hook
that hex::mapped uses to project onto its B-rep faces) and
quad::lattice_index fixes the lattice layout for all three users.
transfinite_grid_blended blends faces by the block's graded parameters, so
faces and interior use one parametrisation and mesh.block reproduces its
earlier Gordon-Hall lattice (the Scordelis-Lo fixture is back to its
blessed value). Straight edges also return their corners exactly.

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]>
2026-10-13 22:50:20 -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 xtask test --heavy                        # the heavy (ignored) tests and the doc tests
cargo run -p modelcraft-cli -- commands         # every command and its parameters
cargo run -p modelcraft-cli -- run script.json  # run a command script
cargo run -p modelcraft-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

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%