diff --git a/ROADMAP.md b/ROADMAP.md index 7c6c229..a4a1002 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,16 +1,29 @@ # Roadmap -ModelCraft's goal is CAE pre-processing on par with Abaqus/CAE, Nastran pre-processors and -LS-PrePost, with hexahedral meshing as the centre of gravity, plus its own linear solver. +ModelCraft's goal is CAE modeling on par with Abaqus/CAE, Nastran pre-processors and LS-PrePost, +with hexahedral meshing as the centre of gravity, plus its own linear solver. Abaqus/CAE is the +reference for scope (its documentation is excellent and its solver strong); its application is +where we aim to be clearly better: parametric geometry from SolidCraft, sets that survive +remeshing, automatic hex partitioning, undo, a text-diffable model and agent control. +The capability checklist is [docs/parity.md](docs/parity.md). + +Order (revised 2026-10-13): one end-to-end slice first — *SolidCraft part → named faces → sets → +mesh → material and section → BCs and loads → static and frequency steps → Abaqus, Nastran and +LS-DYNA decks and our own solve → contour plot* — on tet meshes, so every hex mesher lands in a +pipeline that already produces solvable, verified models. Then hex: structured (sweep and mapped, +with partitions proposed automatically) before octree all-hex, because that is how analysts get +hex meshes today and it gives the best elements where stresses are read. | Milestone | Scope | Status | |---|---|---| -| M0 Foundation | Workspace, quality gates (`cargo xtask ci`), FE model, command engine with rollback and panic guard, CLI, geometry boundary on SolidCraft's kernel and tessellator | done | -| M1 Surface preparation | Geometry in: open `.solidcraft` designs, rebuilt by SolidCraft, with persistent face names (done); face-tagged 3MF files (`geometry.import.mesh`, docs/formats/tagged-mesh.md, done); the meshing test corpus: 16 SolidCraft recipes and 5 analytic shapes, `cargo xtask corpus` → docs/meshing/corpus.md (done); exact predicates (Shewchuk adaptive, symbolic perturbation, indirect LPI/TPI, done); weld, closed/manifold/orientation checks and feature edges on the tessellated boundary; mesh quality metrics and the certified validity gate (`modelcraft-mesh::quality`, `mesh.quality`, done) | in progress | -| M2 Tetrahedral meshing | Bowyer–Watson Delaunay, robust constrained Delaunay boundary recovery (Diazzi et al. 2023), Delaunay refinement to a size field, ODT smoothing, Klingner–Shewchuk sliver removal; linear and quadratic tets | planned | -| M3 Hexahedral meshing (core) | Octree/grid dual all-hex (valid on any input), then hex-dominant by tet recombination, then polycube for blocky parts; see docs/meshing/literature.md | planned | -| M4 Model definition | Materials, sections, sets and surfaces, boundary conditions, loads, steps, output requests | planned | -| M5 Solver decks | Abaqus input, Nastran bulk data, LS-DYNA keyword: writers first, then readers | planned | -| M6 Linear solver | Element library, sparse assembly, linear static and modal analysis, verified against analytic solutions | planned | -| M7 Desktop and agents | egui desktop app, control channel, MCP server, browser build | started: desktop app (viewport, model tree, commands, status bar) and control channel | -| M8 Post-processing | Results display: deformed shape, contours, probes | planned | +| M0 Foundation | Workspace, quality gates, FE model, command engine with rollback and panic guard, CLI, geometry boundary on SolidCraft | done | +| M1 Geometry in and surface preparation | Open `.solidcraft` designs with persistent face names, assemblies placed (done); face-tagged 3MF (done); test corpus, `cargo xtask corpus` (done); exact predicates (done); quality metrics and certified validity gate (done); weld, closed/manifold/orientation checks, feature edges | in progress | +| M2 Tet meshing and size field | Size field (global, per face and edge seeds, curvature and proximity); Bowyer–Watson Delaunay; robust CDT boundary recovery (Diazzi et al. 2023); Delaunay refinement, ODT smoothing, sliver removal; tet4 and tet10 with mid-side nodes on the B-rep; mesh verify per set | in progress | +| M3 First deck | Sets and surfaces bound to SolidCraft face, edge, vertex and body names, resolved after meshing; materials (isotropic and orthotropic elastic, density) with a unit-system label and consistency check; sections (solid, shell, beam profiles) assigned by set; element formulation per region mapped to each solver; BCs (fixed, displacement, symmetry); loads (force and moment on reference points, pressure, gravity); reference points with kinematic and distributing coupling; steps (linear static, frequency) with explicit per-step load and BC tables and output presets; writers for Abaqus input, Nastran SOL 101/103 and LS-DYNA implicit; the `.modelcraft` file | planned | +| M4 Own solver and first results | Linear static and modal solver (tet4/10, hex8, hex20; sparse direct, Lanczos), verified against analytic solutions; deformed shape, contours, mode shapes, probes, reaction sums | planned | +| M5 Structured hex | 2D quad meshing of faces; mapped hex of six-sided regions; sweep meshing; conforming interfaces and tet–hex transition; automatic decomposition into sweepable and mappable regions, proposed as SolidCraft splits | planned | +| M6 Automatic hex | Octree/grid-dual all-hex for any part; hex-dominant by tet recombination; polycube for blocky parts; smoothing, untangling, boundary padding, layers through thin walls; mesh editing and orphan-mesh import | planned | +| M7 Assemblies and contact | Part instances from SolidCraft occurrences; tie between non-matching meshes; general and pairwise contact with automatic pair detection, friction; bolt pretension, springs, point masses; amplitudes, multiple steps; nonlinear static steps in decks | planned | +| M8 Materials, explicit, shells, composites | Plasticity, hyperelasticity, damage data per solver; explicit dynamics decks (Abaqus/Explicit, LS-DYNA); midsurface shells; composite layups and material orientations, continuum shells on swept hex; heat transfer | planned | +| M9 Post-processing and deck readers | Results readers for public formats (Nastran OP2, LS-DYNA d3plot, Abaqus `.fil`); XY and path plots, cuts, display groups, free-body forces; deck readers that keep unknown keywords; mesh convergence studies | planned | +| Continuous: desktop and agents | Desktop app (viewport, model tree, commands, control channel: done), MCP server, browser build, command schema as the public API | started | diff --git a/docs/parity.md b/docs/parity.md new file mode 100644 index 0000000..a74b65b --- /dev/null +++ b/docs/parity.md @@ -0,0 +1,78 @@ +# Capability checklist (reference: Abaqus/CAE) + +What an analyst does in a full CAE pre-processor, grouped by milestone, with ModelCraft's status. +Scope comes from the public documentation of Abaqus/CAE and public analyst discussion, +described in our own words; nothing was taken from the product itself (AGENTS.md: no commercial +products are run, no documentation text is copied). Status: **done**, **started**, **planned**. +**HEX** marks items centred on hexahedral meshing, the core goal. + +## Where we aim to be better + +| # | Opportunity | Why analysts want it | ModelCraft approach | +|---|---|---|---| +| 1 | Hex meshes without manual partitioning | Partitioning a part into sweepable cells by hand is the most cited chore | Sweep and mapped meshing with automatic decomposition that proposes SolidCraft splits (M5); octree all-hex for anything else (M6) | +| 2 | Undo, redo, replay, crash recovery | No general undo; replay files are hard to reuse; corrupted model files | Every action is a journalled command with rollback | +| 3 | Sets that survive changes | Sets and loads break when geometry regenerates or is remeshed | Sets bind to SolidCraft's persistent face, edge and body names and resolve after meshing (M3) | +| 4 | An API that is not a bundled scripting runtime | Version breakage, slow scripts, geometry picked by position | JSON commands over CLI, control channel and MCP | +| 5 | Located diagnostics | Generic error messages | Errors name the element, face or keyword; `mesh.quality` lists failing elements | +| 6 | Lossless deck round trip | Unsupported keywords dropped on import | Deck readers keep unknown keywords and write them back (M9) | +| 7 | Safe, diffable model files | Binary model databases that corrupt or lock to a version | Text `.modelcraft` model, atomic saves, autosave (M3) | +| 8 | Geometry checked before meshing | Slivers and tiny faces fail late | Surface preparation reports defects with their location (M1) | +| 9 | No size caps, any solver | Node limits in learning editions; one solver per tool | Free, open source, three deck formats | +| 10 | Clear step history | Loads and BCs propagate between steps implicitly | An explicit step × load/BC table (M3) | + +## Checklist + +| Area | Capability | Milestone | HEX | Status | +|---|---|---|---|---| +| Geometry | Open SolidCraft designs, bodies, persistent face names, assemblies placed | M1 | | done | +| Geometry | Face-tagged mesh import (3MF) | M1 | | done | +| Geometry | Weld, closed/manifold/orientation and self-intersection checks, feature edges | M1 | yes | started | +| Geometry | Partitions and datums as SolidCraft features (split body/face, construction planes) | M5 | yes | planned | +| Geometry | Midsurface extraction for shells | M8 | | planned | +| Mesh | Size field: global, per face and edge seeds, bias, curvature and proximity refinement | M2 | yes | planned | +| Mesh | Free tet meshing (tet4, tet10 with mid-side nodes on the geometry) | M2 | | started | +| Mesh | Quality metrics, certified validity, verify per set | M1–M2 | yes | done (metrics, gate) | +| Mesh | 2D quad meshing of faces | M5 | yes | planned | +| Mesh | Mapped hex of six-sided regions | M5 | yes | planned | +| Mesh | Sweep hex (extrusions, revolutions) | M5 | yes | planned | +| Mesh | Automatic decomposition into sweepable and mappable regions | M5 | yes | planned | +| Mesh | Conforming interfaces, tet–hex transition with pyramids | M5 | yes | planned | +| Mesh | Octree/grid-dual all-hex for any part | M6 | yes | planned | +| Mesh | Hex-dominant by recombination; polycube | M6 | yes | planned | +| Mesh | Smoothing, untangling, boundary padding, layers through thin walls | M6 | yes | planned | +| Mesh | Mesh editing (move, merge, split, collapse, remesh region), imported orphan meshes | M6 | yes | started (node/element add/remove) | +| Model | Sets and surfaces bound to geometry names | M3 | yes | planned | +| Model | Materials: elastic (isotropic, orthotropic), density, unit-system check | M3 | | planned | +| Model | Materials: plasticity, hyperelasticity, damage, thermal | M8 | | planned | +| Model | Sections: solid, shell, beam profiles; assignment by set | M3 | | planned | +| Model | Composite layups, material orientations, continuum shells | M8 | yes | planned | +| Model | Element formulation per region (integration, incompatible modes, hybrid) mapped per solver | M3 | yes | planned | +| Model | Boundary conditions: fixed, displacement, symmetry | M3 | | planned | +| Model | Loads: force and moment, pressure, gravity, body force | M3 | | planned | +| Model | Reference points, kinematic and distributing coupling | M3 | | planned | +| Model | Steps: linear static, frequency; output presets | M3 | | planned | +| Model | Steps: nonlinear static, explicit dynamics, heat transfer; amplitudes | M7–M8 | | planned | +| Interaction | Tie between non-matching meshes | M7 | | planned | +| Interaction | Contact (general and pairs), friction, automatic pair detection | M7 | | planned | +| Interaction | Bolt pretension, springs, point masses, connectors | M7 | | planned | +| Decks | Abaqus input writer | M3 | | planned | +| Decks | Nastran bulk data writer (SOL 101, 103) | M3 | | planned | +| Decks | LS-DYNA keyword writer (implicit; explicit in M8) | M3 | | planned | +| Decks | Readers keeping unknown keywords | M9 | | planned | +| Solve | Own linear static and modal solver, verified against analytic solutions | M4 | yes | planned | +| Results | Deformed shape, contours, mode shapes, probes, reaction sums | M4 | | planned | +| Results | XY and path plots, cuts, display groups, free-body forces, animation | M9 | | planned | +| Results | Readers for public result formats (Nastran OP2, LS-DYNA d3plot, Abaqus `.fil`) | M9 | | planned | +| Results | Mesh convergence studies | M9 | | planned | +| App | Desktop viewport, model tree, commands, control channel | continuous | | done | +| App | Undo/redo on the command journal, autosave, `.modelcraft` file | M3 | | planned | +| App | MCP server, browser build | continuous | | planned | + +## Deck notes for the writers + +- Node order: the model stores Abaqus/VTK order. Nastran orders the mid-side nodes of 20-node hexes + and 15-node wedges differently; LS-DYNA takes tets and wedges as degenerate hexes and triangles + as degenerate quads. Every mapping is tested by the sign of the element Jacobian after writing. +- Each format's field widths, continuation rules, number forms and label limits are respected by + the writer and checked by golden-file tests on our own examples.