forked from 1b-agent/fieldcraft-upstream
Shells and beams: MITC4/MITC3 shells, Timoshenko beams, six-DOF nodes (M4) (#47)
* fem: MITC4/MITC3 flat shells and Timoshenko beams with profile properties (ElementDofs STRUCTURAL) Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * solver: shells and beams on the DofLayout beside solids, 2D elements and trusses; analytic verification and tagged benchmarks Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * engine: probe rotations, reaction moments and shell and beam element results; docs for shells and beams 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]>
This commit is contained in:
18 files changed
+2411
-48
No files matched your search
+24
-9
@@ -150,13 +150,20 @@ module docs; ADR 0001 records why the linear algebra is our own.
|
||||
the unknowns their nodes are given (`discrete::needs`, `discrete::dof_of`); dashpots are
|
||||
ignored with a warning (no velocities in static and frequency steps). Every reference point a
|
||||
coupling or a discrete element uses gets six degrees of freedom (translations, rotations) after
|
||||
the mesh's. Shells
|
||||
and beams return "not supported yet". The step's boundary conditions prescribe translations
|
||||
(rotations do not exist on solid nodes) and a coupled point's six directions; its loads become
|
||||
a load vector: forces and tractions from `Resolved::nodal_loads`, forces and moments on coupled
|
||||
reference points, pressure as consistent face loads, gravity and body forces through the
|
||||
element shape functions.
|
||||
2. **Assembly** on the node graph (3 × 3 blocks for solids, 2 × 2 in 2D models, elements in label order, so sums are
|
||||
the mesh's. Shell sections make quad4 (MITC4) and tri3 (MITC3) flat shells with a drilling
|
||||
rotation (`modelcraft_fem::shell`; quad8 and tri6 shells are "not supported yet"), beam
|
||||
sections two-node Timoshenko beams with the profile's section properties and the section's
|
||||
orientation vector (`modelcraft_fem::beam`); both declare `ElementDofs::new(DofSet::STRUCTURAL)`
|
||||
(`system::Structural`), so their nodes carry translations and rotations and the solids and
|
||||
trusses sharing those nodes add into the translations. Shells and beams need isotropic
|
||||
materials until material orientations exist, and are 3D only. The step's boundary conditions
|
||||
prescribe the kinds a node carries (rotations of solid-only nodes are ignored) and a coupled
|
||||
point's six directions; its loads become a load vector: forces, moments and tractions from
|
||||
`Resolved::nodal_loads`, forces and moments on coupled reference points, pressure as
|
||||
consistent face loads (shell faces too), gravity and body forces through the element shape
|
||||
functions (consistent forces and moments on shells and beams).
|
||||
2. **Assembly** on the node graph (one dense block per node pair: 3 × 3 for solids, 2 × 2 in 2D
|
||||
models, up to 6 × 6 at shell and beam nodes; elements in label order, so sums are
|
||||
reproducible bit for bit).
|
||||
3. **Ordering and elimination** (`constraints`). Nested dissection of the nodes by coordinate
|
||||
bisection. Couplings become linear constraint rows: kinematic = rigid link of each coupled
|
||||
@@ -170,8 +177,10 @@ module docs; ADR 0001 records why the linear algebra is our own.
|
||||
numbers are those of plain elimination, bit for bit.
|
||||
4. **Static solution.** Up-looking sparse Cholesky (the factor size is computed and capped before
|
||||
any value), reactions T_pᵀ (K u − f) (at nodes and at prescribed reference points, forces and
|
||||
moments), integration-point stresses extrapolated to the nodes and averaged, von Mises. A zero
|
||||
pivot names the node or reference point and direction that can move freely.
|
||||
moments), integration-point stresses extrapolated to the nodes and averaged, von Mises. Shells
|
||||
report section forces and bottom, middle and top stresses at their nodes (their top surface
|
||||
joins the nodal average), beams their end section forces; nodes report rotations and reaction
|
||||
moments. A zero pivot names the node or reference point and direction that can move freely.
|
||||
5. **Frequency.** Shift-invert block Lanczos (block 6, full reorthogonalization) on
|
||||
K − σM, σ = 0 for a supported structure and slightly negative for a free one, so rigid-body
|
||||
modes come out at zero; mass-normalized shapes, participation factors and effective masses.
|
||||
@@ -196,6 +205,12 @@ a kinematically coupled point (twist and shear stress). `crates/solver/tests/one
|
||||
forces of determinate trusses (a plane Pratt truss, a space tripod) against the method of joints,
|
||||
the three-bar truss, a rod3 constant-stress patch and a bar hanging under its weight, spring–mass,
|
||||
skew springs, the two-mass chain, a bar with a tip mass and the torsional pendulum.
|
||||
`crates/solver/tests/structural.rs`: membrane and bending patch tests of quad4 and tri3 shells
|
||||
in a tilted plane, the simply supported plate under pressure against Navier's series (deflection
|
||||
and first frequency), cantilever beams against Timoshenko (exact) and Euler–Bernoulli
|
||||
frequencies, a portal frame against slope-deflection, solids continued by rods and skinned by
|
||||
shells. `crates/solver/tests/benchmarks.rs` (published reference values, tagged with their
|
||||
source, separate from the analytic gate): the Scordelis–Lo roof and the pinched cylinder.
|
||||
|
||||
## Explicit solver
|
||||
|
||||
|
||||
+2
-2
@@ -32,7 +32,7 @@ hex8/20/27 with first and second derivatives).
|
||||
|---|---|---|
|
||||
| Truss, 2-node (2D and 3D) | Axial members, cables (compression allowed) | done (rod2: implicit, in plane models with their two unknowns per node; explicit, corotational under nonlinear geometry; Abaqus T3D2 / T2D2, Nastran CROD, LS-DYNA truss beam (3D models)) |
|
||||
| Truss, 3-node (2D and 3D) | Curved axial members | done (rod3: implicit, plane models too; explicit with small displacements; Abaqus T3D3 / T2D3; no Nastran or LS-DYNA counterpart) |
|
||||
| Beam, 2-node Timoshenko, 3D | Frames, stiffeners; shear deformable | in progress (shells and beams) |
|
||||
| Beam, 2-node Timoshenko, 3D | Frames, stiffeners; shear deformable | done (exact interdependent interpolation, profile properties, orientation vector; `modelcraft_fem::beam`) |
|
||||
| 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) |
|
||||
@@ -57,7 +57,7 @@ hex8/20/27 with first and second derivatives).
|
||||
|
||||
| Element | Use | Status |
|
||||
|---|---|---|
|
||||
| Shell quad4 (MITC4), triangle (locking-free) | Thin and thick shells | in progress (shells and beams) |
|
||||
| Shell quad4 (MITC4), triangle (locking-free) | Thin and thick shells | done (flat MITC4 and MITC3 with a Hughes–Brezzi drilling rotation; `modelcraft_fem::shell`) |
|
||||
| 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 |
|
||||
|
||||
+1
-1
@@ -135,7 +135,7 @@ shown greyed with the roadmap milestone that brings them (ROADMAP.md).
|
||||
| Display | Contours — Contours of displacement and stress, with a legend | ready | `results.contour` |
|
||||
| Display | Mode Shapes — Mode shapes and frequencies of a frequency step | ready | `results.modes` |
|
||||
| Display | Animate — Animate the deformed shape, a mode or an explicit step's frames | ready | `results.animate`, `results.frame` |
|
||||
| Query | Probe — Displacement, reaction and stress at nodes, a mode shape, or an explicit field frame (or click the model) | ready | `solve.probe`, `solve.history` |
|
||||
| Query | Probe — Displacement, rotation, reaction and stress at nodes, element section forces, a mode shape, or an explicit field frame (or click the model) | ready | `solve.probe`, `solve.history` |
|
||||
| Query | Reactions — Reaction force and moment sums per set | ready | `results.reactions` |
|
||||
| Query | Free Body — Free-body forces across a cut | coming soon (M9) | |
|
||||
| Plots | XY Plot — Plot a quantity against time or another | coming soon (M9) | |
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ products are run, no documentation text is copied). Status: **done**, **started*
|
||||
| Decks | Nastran bulk data writer (`deck.write`, SOL 101 or 103 per deck; reports what Nastran cannot express) | M3 | | done |
|
||||
| Decks | LS-DYNA keyword writer (implicit; explicit in M8) | M3 | | done (implicit static and eigenvalue; beam sections planned) |
|
||||
| Decks | Readers keeping unknown keywords | M9 | | planned |
|
||||
| Solve | Own linear static and modal solver, verified against analytic solutions | M4 | yes | started (solid elements: tet4, tet10, wedge6, hex8, hex20; 2D plane stress, plane strain and axisymmetric tri3, tri6, quad4 (full, incompatible modes), quad8 (full, reduced); reference points, kinematic and distributing couplings, moments; centrifugal loads) |
|
||||
| Solve | Own linear static and modal solver, verified against analytic solutions | M4 | yes | started (solid elements: tet4, tet10, wedge6, hex8, hex20; 2D plane stress, plane strain and axisymmetric tri3, tri6, quad4 (full, incompatible modes), quad8 (full, reduced); quad4/tri3 MITC shells and Timoshenko beams with profiles, mixed with solids; reference points, kinematic and distributing couplings, moments; centrifugal loads) |
|
||||
| Solve | Own explicit dynamics solver (central differences, one-point hex8 with hourglass control, nodal-pressure tet4, bulk viscosity, energy balance), verified against analytic wave and impact solutions | M10 | yes | started (X1 core and X2: large deformation, objective rates, J2 and Johnson–Cook plasticity, damage, erosion; contact planned) |
|
||||
| Results | Deformed shape, contours, mode shapes, probes, reaction sums | M4 | | started (results in the session, `solve.probe`, reaction sums; display planned) |
|
||||
| Results | XY and path plots, cuts, display groups, free-body forces, animation | M9 | | planned |
|
||||
|
||||
@@ -1003,6 +1003,24 @@ the module docs):
|
||||
Cook et al. 2002, §2.2 and §2.10; HRZ lumping as above. Verified against the method of joints
|
||||
(statically determinate trusses), the three-bar truss, the hanging bar, √(k/m), the two-mass
|
||||
chain and the torsional pendulum √(k_t/J).
|
||||
- Shells: E. N. Dvorkin, K.-J. Bathe, *A continuum mechanics based four-node shell element for
|
||||
general nonlinear analysis*, Engineering Computations 1(1):77–88, 1984 (MITC4 shear tying);
|
||||
K.-J. Bathe, E. N. Dvorkin, IJNME 21(2):367–383, 1985 (the flat-plate form); P.-S. Lee,
|
||||
K.-J. Bathe, *Development of MITC isotropic triangular shell finite elements*, Computers &
|
||||
Structures 82(11–13):945–962, 2004 (MITC3); T. J. R. Hughes, F. Brezzi, *On drilling degrees of
|
||||
freedom*, CMAME 72(1):105–121, 1989 (drilling penalty); facet shells, O. C. Zienkiewicz,
|
||||
R. L. Taylor, D. D. Fox, *The Finite Element Method for Solid and Structural Mechanics*, 7th
|
||||
ed., 2014, ch. 9–10.
|
||||
- Beams: J. S. Przemieniecki, *Theory of Matrix Structural Analysis*, McGraw-Hill 1968, §5.6;
|
||||
Z. Friedman, J. B. Kosmatka, Computers & Structures 47(3):473–481, 1993 (interdependent
|
||||
Timoshenko interpolation); G. R. Cowper, J. Appl. Mech. 33(2):335–340, 1966 (shear
|
||||
coefficients); S. P. Timoshenko, J. N. Goodier, *Theory of Elasticity*, 3rd ed., 1970, §109
|
||||
(torsion of a rectangle); W. D. Pilkey, *Analysis and Design of Elastic Beams*, Wiley 2002
|
||||
(thin-walled shear areas and torsion).
|
||||
- Shell benchmarks (published values, tagged, not the analytic gate): Scordelis–Lo roof 0.3024
|
||||
(MacNeal & Harder 1985); pinched cylinder 1.8248 · 10⁻⁵ (T. Belytschko, H. Stolarski, W. K.
|
||||
Liu, N. Carpenter, J. S.-J. Ong, CMAME 51(1–3):221–258, 1985). Plate: S. Timoshenko,
|
||||
S. Woinowsky-Krieger, *Theory of Plates and Shells*, 2nd ed., 1959, §30 (Navier).
|
||||
- Verification: R. H. MacNeal, R. L. Harder, *A proposed standard set of problems to test finite
|
||||
element accuracy*, Finite Elem. Anal. Des. 1(1):3–20, 1985 (patch tests); Lamé, Kirsch,
|
||||
Timoshenko and Euler–Bernoulli closed forms; Saint-Venant's principle (tension through a
|
||||
|
||||
Reference in new issue
Block a user