forked from 1b-agent/fieldcraft-upstream
* fem: DofKind/DofLayout and the shape-function library with second derivatives DofKind (Ux..Rz, T, P), DofSet, ElementDofs (per-node kinds and condensed internal unknowns) and DofLayout: mesh nodes by label, kinds in order, then reference points. basis::Basis covers line2/3, tri3/6, quad4/8/9, tet4/10, wedge6/15, pyramid5, hex8/20/27 with values, first and second natural derivatives (second-order forward AD, fem::jet) and the physical gradients, Hessians and Laplacians with the map's second-derivative term. Tested for Kronecker delta, partition of unity, polynomial completeness, finite differences, affine and curved maps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * solver, explicit: number degrees of freedom with DofLayout The implicit mesh numbers its unknowns with a DofLayout (mesh nodes by label with the kinds their elements declare, then six per coupled reference point); assembly adds element blocks by (node, DofKind), so a node may carry any mix of kinds; couplings, boundary conditions, loads and results address (node, kind). The explicit system keeps node-major translations, now checked against its layout (NODE_DOFS). Solid formulations declare their ElementDofs. Every static, frequency and explicit result of the solver, explicit, engine and io test suites hashes bit-identically before and after (957 results). docs/fem.md describes the DOF model and the shape-function conventions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * fem, solver: simplify after review Block offsets resolved once per node pair; add_scalar/add_diagonal take the kinds like add_block; one checked Jacobian inverse (dense::positive_inverse) for the solid kernels and the basis library; static natural-node tables; the Hessian path inverts the Jacobian once. 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>
89 lines
5.2 KiB
Markdown
89 lines
5.2 KiB
Markdown
# 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**.
|
||
|
||
Every element builds on the shared foundation of docs/fem.md: it declares its nodal degrees of
|
||
freedom (`DofKind`: translations, rotations, temperature, pressure) and condensed internal ones
|
||
(`ElementDofs`), the solvers number them with `DofLayout`, and its interpolation comes from the
|
||
shape-function library (`Basis`: line2/3, tri3/6, quad4/8/9, tet4/10, wedge6/15, pyramid5,
|
||
hex8/20/27 with first and second derivatives).
|
||
|
||
## 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); wedge15 and pyramid5 shape functions done |
|
||
| Hybrid (mixed u–p) solids | Nearly incompressible materials (rubber) | in progress (FEM foundation, phase C); pressure DOF kind done |
|
||
| 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 | in progress (FEM foundation, phase B); temperature DOF kind done |
|
||
| Acoustic | Fluid acoustics, structural–acoustic coupling | planned |
|
||
| Rigid elements | Rigid bodies from meshes | planned (M7) |
|