From e688f6f9343c654ca5cb98b3ab2470f968da05f3 Mon Sep 17 00:00:00 2001 From: Irakli Kourtis Date: Tue, 13 Oct 2026 18:36:44 -0400 Subject: [PATCH] docs: element library plan, family by family (#30) Owner 2026-10-13: cover the element families a full CAE code offers, simple ones first (1D and 2D). docs/elements.md lists point/discrete, 1D, 2D, shell/membrane, 3D and special-purpose families with status and the task that brings each. 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 --- ROADMAP.md | 2 +- docs/elements.md | 82 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 docs/elements.md diff --git a/ROADMAP.md b/ROADMAP.md index ada507b..4781f18 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -22,7 +22,7 @@ hex meshes today and it gives the best elements where stresses are read. | 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 and self-intersection checks, feature edges (`modelcraft-mesh::surface`, `mesh.surface.check`, done) | in progress | | M2 Tet meshing and size field | Size field (global, per face and edge seeds, curvature and proximity; the `modelcraft_mesh::size::SizeField` trait and edge-division helpers are in); Bowyer–Watson Delaunay (exact, symbolic perturbation, verified; `modelcraft-mesh::delaunay`, done); 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; `model.check` naming every missing or bad item; `model.*` and `mesh.tag` commands (model definition: done); writers for Abaqus input (done: `deck.write`), Nastran SOL 101/103 (done: `deck.write`) and LS-DYNA implicit (done); the `.modelcraft` file (text definition, binary mesh, geometry references reopened on load, journal; atomic saves, autosave and recovery; undo/redo on the journal: done) | in progress | -| M4 Own solver and first results | Linear static and modal solver (tet4/10, wedge6, hex8, hex20; sparse direct, Lanczos), verified against analytic solutions (solver: done — `modelcraft-fem` kernels, `modelcraft-solver` with nested dissection, sparse Cholesky and block Lanczos, `solve.static`/`solve.frequency`/`solve.probe`, patch, cantilever, Lamé, Kirsch and beam-frequency tests; reference points with kinematic and distributing couplings and moments by master–slave constraint elimination, verified by rigid motion, clamping, Saint-Venant tension, bending and tube torsion); deformed shape, contours, mode shapes, probes, reaction sums | started | +| M4 Own solver and first results | Element library per docs/elements.md (1D and 2D first); Linear static and modal solver (tet4/10, wedge6, hex8, hex20; sparse direct, Lanczos), verified against analytic solutions (solver: done — `modelcraft-fem` kernels, `modelcraft-solver` with nested dissection, sparse Cholesky and block Lanczos, `solve.static`/`solve.frequency`/`solve.probe`, patch, cantilever, Lamé, Kirsch and beam-frequency tests; reference points with kinematic and distributing couplings and moments by master–slave constraint elimination, verified by rigid motion, clamping, Saint-Venant tension, bending and tube torsion); deformed shape, contours, mode shapes, probes, reaction sums | started | | M5 Structured hex | 2D quad meshing of faces (`modelcraft-mesh::quad`: transfinite mapped meshes, free all-quad meshes of polygons with holes on prescribed boundary nodes, exact planar quad validity, shared `SizeField` and even edge divisions; done for planar 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 | started | | 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 | diff --git a/docs/elements.md b/docs/elements.md new file mode 100644 index 0000000..ef0b727 --- /dev/null +++ b/docs/elements.md @@ -0,0 +1,82 @@ +# Element library + +ModelCraft's finite element library (`crates/fem`), family by family, with status. The scope is +modelled on what a full CAE code offers (Abaqus's element library is the reference for breadth); +names, formulations and tests are our own, written from the published literature. Deck writers map +each of our elements to each solver's name (see `crates/decks`). Simple elements first: 1D and 2D, +then shells, special-purpose and multiphysics elements. + +Status: **done** (on main, verified against analytic solutions), **in progress** (an agent task is +open), **planned**. + +## Point and discrete elements + +| Element | Use | Status | +|---|---|---| +| Point mass | Lumped mass at a node or reference point (isotropic or per direction) | in progress (1D elements I) | +| Rotary inertia | Inertia tensor at a 6-DOF node | in progress (1D elements I) | +| Spring to ground / two-point spring | Linear spring in a fixed direction or along the line of nodes | in progress (1D elements I) | +| Dashpot to ground / two-point | Linear viscous damper (dynamic steps; ignored in static) | in progress (1D elements I) | +| Nonstructural mass | Mass spread over a region without stiffness | planned | +| Connectors | Kinematic joints (hinge, slot, universal…) with elasticity, damping, stops | planned (M7) | + +## 1D elements + +| Element | Use | Status | +|---|---|---| +| Truss, 2-node (2D and 3D) | Axial members, cables (compression allowed) | in progress (1D elements I) | +| Truss, 3-node (2D and 3D) | Curved axial members | in progress (1D elements I) | +| Beam, 2-node Timoshenko, 3D | Frames, stiffeners; shear deformable | in progress (shells and beams) | +| Beam, 2-node Euler–Bernoulli (cubic), 2D and 3D | Slender frames; exact for end-loaded prismatic members | planned (1D elements II) | +| Beam, 3-node Timoshenko (quadratic), 2D and 3D | Curved and stocky beams | planned (1D elements II) | +| Beam, 2D (planar frames) | In-plane frames with 3 DOFs per node | planned (1D elements II) | +| Pipe / elbow | Pipes with internal pressure, ovalisation | planned (1D elements II) | +| Open-section beams with warping | Thin-walled sections in torsion | planned | +| Rebar / stringers | Reinforcement along edges or embedded | planned | + +## 2D elements + +| Element | Use | Status | +|---|---|---| +| Plane stress tri3, tri6, quad4, quad8 | Thin plates loaded in their plane | in progress (2D elements) | +| Plane strain tri3, tri6, quad4, quad8 | Long sections (dams, tunnels, extrusions) | in progress (2D elements) | +| Axisymmetric tri3, tri6, quad4, quad8 | Revolved solids (shafts, vessels, discs) | in progress (2D elements) | +| Incompatible-mode and reduced-integration quads | Bending-accurate and cheap variants | in progress (2D elements) | +| Generalized plane strain | Plane strain with a free out-of-plane strain | planned | +| Axisymmetric with twist | Revolved parts under torsion | planned | +| Axisymmetric shells (2-node, 3-node) | Thin revolved shells (tanks, domes) | planned | +| Hybrid (mixed u–p) variants | Nearly incompressible materials | planned | + +## Shells and membranes + +| Element | Use | Status | +|---|---|---| +| Shell quad4 (MITC4), triangle (locking-free) | Thin and thick shells | in progress (shells and beams) | +| Shell quad8 / tri6 | Curved thick shells | planned | +| Continuum shells (8-node, on swept hex) | Thick-to-thin shells, composites through thickness | planned (M8) | +| Membranes (tri3, quad4, quad8) | Fabrics, inflatables, skins without bending | planned | +| Surface elements | Massless surfaces for loads and contact | planned | +| Composite layups on shells | Ply tables, orientations | planned (M8) | + +## 3D solids + +| Element | Use | Status | +|---|---|---| +| tet4, tet10 | Free meshes of any part | done | +| hex8 (full, incompatible modes), hex20 (full, reduced) | Structured and swept meshes | done | +| wedge6 | Swept meshes from triangles, transitions | done | +| hex8 one-point with hourglass control, nodal-pressure tet4 (explicit) | Explicit dynamics | done | +| wedge15, pyramid5/13 | Quadratic transitions, tet–hex transition | planned (M5) | +| Hybrid (mixed u–p) solids | Nearly incompressible materials (rubber) | planned (M8) | +| Modified quadratic tet (tet10 for contact/plasticity) | Robust quadratic tets | planned | + +## Special-purpose and multiphysics + +| Element | Use | Status | +|---|---|---| +| Cohesive (2D, 3D) | Adhesive layers, delamination | planned | +| Gasket | Through-thickness gasket behaviour | planned | +| Infinite elements | Unbounded domains | planned | +| Heat transfer (all shapes), coupled temperature–displacement | Thermal and thermal-stress analyses | planned (M8) | +| Acoustic | Fluid acoustics, structural–acoustic coupling | planned | +| Rigid elements | Rigid bodies from meshes | planned (M7) |