diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 76e01cb..e5efce7 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -15,6 +15,7 @@ is committed and listed here with its exports. | File | Author | Source | Licence | |---|---|---|---| | docs/media/ibeam-analysis.mp4, docs/media/ibeam-analysis.gif | FieldCraft contributors | Original: the FieldCraft window captured during an MCP session, generated by `tools/demo-video/make.py` | MIT OR Apache-2.0 | +| docs/media/bracket-partition.png, docs/media/bracket-hex.png, docs/media/bracket-stress.png, docs/media/setup-symbols.png | FieldCraft contributors | Original: FieldCraft renders (headless MCP screenshots and a window capture) of corpus parts and the cantilever sample | MIT OR Apache-2.0 | | crates/decks/tests/golden/nastran/*.bdf | FieldCraft contributors | Written by our Nastran writer from our own test models (crates/decks/tests/nastran.rs) | MIT OR Apache-2.0 | | assets/icons/assembly.instance.svg, assets/icons/assembly.instance.vectorcraft | FieldCraft contributors | Original toolbar icon drawn with VectorCraft from `assets/icons/src/assembly.instance.json` (`cargo xtask icons`) | MIT OR Apache-2.0 | | assets/icons/deck.read.svg, assets/icons/deck.read.vectorcraft | FieldCraft contributors | Original toolbar icon drawn with VectorCraft from `assets/icons/src/deck.read.json` (`cargo xtask icons`) | MIT OR Apache-2.0 | diff --git a/README.md b/README.md index 1887acc..1fe6440 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,13 @@ explicit, thermal and lattice Boltzmann solvers, and decks for Abaqus, Nastran a 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. Hex meshing is the centre of gravity; the next large step is the nonlinear -implicit solver that contact, elastomers and composites need. See [ROADMAP.md](ROADMAP.md). +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](ROADMAP.md). +**Want to help?** Pick an issue labelled +[good first issue](https://github.com/jyviko/fieldcraft/labels/good%20first%20issue) or +[help wanted](https://github.com/jyviko/fieldcraft/labels/help%20wanted) and read +[CONTRIBUTING.md](CONTRIBUTING.md). ![An AI agent analyses an I-beam cantilever in FieldCraft over MCP: open, hex mesh, steel, clamp and tip load, solve, von Mises contours, the deformed shape and an orbit round it](docs/media/ibeam-analysis.gif) @@ -17,34 +22,55 @@ solves, and shows the von Mises stress and the deformed shape (tip deflection 0. theory with shear 0.177 mm). [MP4](docs/media/ibeam-analysis.mp4) · regenerated by [tools/demo-video](tools/demo-video/README.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) | +|---|---|---| +| ![The bracket split into 30 coloured cells](docs/media/bracket-partition.png) | ![The all-hex mesh with O-grids round the holes](docs/media/bracket-hex.png) | ![Von Mises stress peaking at the hole, with the clamp cones and load arrows](docs/media/bracket-stress.png) | + ## 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; structured hex by sweeping, revolving and mapping (hex8, hex20; 16 of - the 21 corpus parts mesh all-hex); 2D quad and tri meshes; quality metrics per element and set. + 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, Johnson–Cook damage, thermal properties; fixed, displacement, + 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 `.fieldcraft` file. -- **Solvers:** linear static and frequency (supernodal Cholesky, block Lanczos); steady and +- **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 frames, probes and reaction sums; the analysis setup drawn in the viewport. + 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) in [`tests/oracle`](tests/oracle), with results frozen - so they cannot drift: [docs/oracle.md](docs/oracle.md). + (NAFEMS, MacNeal–Harder, Scordelis–Lo, the elastica, Hill's plastic cylinder, Rivlin's tube) in [`tests/oracle`](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](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](docs/features.md)). +![The FieldCraft window: a clamped cantilever with its supports, pressure, gravity and a coupled reference point drawn in the viewport](docs/media/setup-symbols.png) + ## Build ```sh diff --git a/docs/media/bracket-hex.png b/docs/media/bracket-hex.png new file mode 100644 index 0000000..d0ee4ad Binary files /dev/null and b/docs/media/bracket-hex.png differ diff --git a/docs/media/bracket-partition.png b/docs/media/bracket-partition.png new file mode 100644 index 0000000..18d2a46 Binary files /dev/null and b/docs/media/bracket-partition.png differ diff --git a/docs/media/bracket-stress.png b/docs/media/bracket-stress.png new file mode 100644 index 0000000..d175984 Binary files /dev/null and b/docs/media/bracket-stress.png differ diff --git a/docs/media/setup-symbols.png b/docs/media/setup-symbols.png new file mode 100644 index 0000000..7c92cdb Binary files /dev/null and b/docs/media/setup-symbols.png differ