Element pitfalls#

Every element kernel has failure modes that are documented in the FE literature but often forgotten by users picking an element by catalogue number. This page is the diagnostic matrix: rows are elements femorph-solver ships, columns are the failure modes that bite users in practice. Each cell links to the element’s reference page (for the formulation-level fix) and to a verification example (for a runnable demonstration).

The flow is symptom → element class → failure mode → fix. If you already know which element you’re using and what symptom you see, jump straight to the element’s section below.

Quick-look matrix#

The first row of every cell names the failure mode; the second row gives the recommended fix.

Element

shear locking

volumetric locking

hourglass

distortion

aspect-ratio

through-thickness

HEX8 (plain Gauss)

severe on bending; switch to EAS / B-bar

severe as ν→0.5; B-bar / EAS

none (full integration)

moderate; degrades as J → 0

keep < 5:1 in bending

1 element per thickness is too few

HEX8 (EAS)

cured on regular meshes; partial cure on distorted

cured

none

mild; better than plain

tolerates 8-10:1

2 elements / thickness for plates

HEX20

none (cubic in each direction)

mild; B-bar still helpful at ν > 0.49

none

strong against distortion

tolerates 15-20:1

1 element / thickness adequate

TET10

none (quadratic)

mild; rises near ν = 0.5

none

excellent

tolerates 20:1

1 element / thickness fine

WEDGE15

none (degenerate HEX20)

mild

none

good

10-15:1

1 / thickness

PYR13

none (degenerate HEX20)

mild

none

good

10:1

1 / thickness

QUAD4 (plain)

severe on plane-strain bending

severe as ν→0.5

none (full integration)

moderate

keep < 5:1

n/a (2D)

QUAD4 (Wilson-Q6)

cured on regular meshes

cured

none

mild; better than plain

8-10:1

n/a

QUAD4_SHELL (DKT)

cured (Mindlin transverse-shear stabilisation)

n/a (membrane / bending split)

none

moderate

8-10:1

1-2 / thickness for thin shells

BEAM2 (Euler-Bernoulli)

none (Hermite cubics absorb shear analytically)

n/a (1D line)

none

n/a (1D)

L/h > 10 for slender-beam regime

n/a

TRUSS2 / SPRING

n/a (axial only)

n/a

none

n/a

n/a

n/a

Cells marked severe mean the failure produces non-trivial quantitative error on engineering quantities of interest, not just slow convergence — replacing the element with the recommended fix is mandatory, not optional.

Per-element notes#

HEX8#

The 8-node trilinear hex is the workhorse of 3D structural FEA. Plain-Gauss integration is the default but suffers two classical failure modes — both are addressed by the enhanced strain (EAS) variant, which is what femorph-solver uses by default when integration="enhanced_strain" is requested on Model.assign.

  • Shear locking — On bending-dominated meshes plain HEX8 develops \(O(1)\) error that the user reads as “the bracket is way stiffer than the analytical formula predicts”. Demonstrated in Shear-locking demonstration — HEX8 integration variants — a slender-cantilever sweep that walks the error all the way to convergence with EAS but stalls at 30-50 % over-stiffness with plain Gauss.

  • Volumetric locking — As \(\nu \to 0.5\) (rubber, near-incompressible plastic) the dilatational mode loses its representation in the trilinear basis; plain HEX8 stiffens by orders of magnitude. EAS or B-bar cures it; for truly incompressible problems, use HEX20.

  • Distortion — Even EAS struggles when the element Jacobian goes near-zero. Trim aspect-ratio outliers (Section Mesh quality) before suspecting a kernel bug.

Reference: HEX8 — 8-node trilinear hexahedron.

HEX20#

The 20-node serendipity hex is the natural choice when bending matters and you can afford the 2.5× DOF cost. Cubic in each direction so it neither shear-locks nor volumetric-locks significantly under any standard load case. Distortion robustness is excellent; aspect-ratio limit is generous (15-20:1).

The one footnote: for fully incompressible materials (\(\nu = 0.5\)) the constant-pressure mode still has no basis representation, so use the B-bar variant or switch to a mixed u-p formulation (not yet shipped — see Known limitations).

Reference: HEX20 — 20-node serendipity hexahedron.

TET10#

The 10-node quadratic tet is the workhorse of automatic-meshed 3D analysis (CAD-driven, complex geometries) where structured hex meshing isn’t practical. No locking, excellent distortion robustness, and modern mesh generators (Gmsh, Tetgen) produce clean TET10 meshes from STEP files.

Two notes:

  • TET10 needs ~3× the DOFs of HEX8 for similar accuracy on bending-rich problems; HEX-meshing pays off for slender bracket geometries.

  • On problems with sharp re-entrant corners, the TET10 stress recovery near the singularity converges to the “right infinity” (the singular solution) more cleanly than HEX8 — the higher-order basis matters where the field is rough.

Reference: TET10 — 10-node quadratic tetrahedron.

WEDGE15 / PYR13#

Degenerate HEX20 elements at the topology boundary between HEX20 and TET10 — wedges along a hex-tet transition layer, pyramids at the apex of a hex sub-domain meeting a tet sub-domain. Properties inherited from HEX20 with the degeneracy-induced stiffness reduction; mainly used to make hybrid hex-tet meshing tractable.

Reference: WEDGE15 / PYR13 — degenerate-corner serendipity hex.

QUAD4 (plane and shell)#

The 2D / shell counterpart of HEX8. Plain-Gauss QUAD4 has the same failure modes — shear locking on plane-strain bending, volumetric locking near \(\nu = 0.5\). Use the Wilson-Q6 (incompatible-modes) variant for plane elements; DKT (Discrete Kirchhoff Triangle, the non-Mindlin plate that’s used inside QUAD4_SHELL on the bending side) inherently fixes the shell-bending case.

A specific QUAD4_SHELL note: the kernel ships 5 DOFs per node (3 translations + 2 rotations). Coupling a shell to a solid mesh that carries the third rotation (drilling DOF) requires an explicit constraint. See Known limitations.

Reference: QUAD4_PLANE — 4-node bilinear plane quad, QUAD4_SHELL — 4-node Mindlin-Reissner flat shell.

BEAM2#

The 2-node Hermite-cubic beam is the only line element where shear locking is structurally absent — the cubic Hermite shape functions absorb the linear-shear constraint analytically (Cook 2002, Table 16.3-1). Distortion isn’t a concept (1D line elements have no Jacobian to distort).

The slenderness rule of thumb: BEAM2 is a faithful Euler-Bernoulli element for \(L/h > 10\). Below that the shear-deformation correction matters and a Timoshenko upgrade is needed (planned, see roadmap). For very long beams (\(L/h > 1000\)) numerical conditioning of the bending- stiffness term degrades; subdivide into more elements rather than push the slenderness limit.

Reference: BEAM2 — 3D 2-node Euler-Bernoulli beam.

TRUSS2 and SPRING#

Pure-axial elements with no transverse stiffness. The transverse-DOF rows of the element K matrix are identically zero; the assembled global K has zero diagonals on those DOFs unless another element contributes. solve_static detects zero-diagonal rows via the threshold |K_ii| <= 1e-12 * max(|K_ii|) and folds them into the Dirichlet set automatically — see Static analysis. No user action required; this is not a bug to chase.

Reference: TRUSS2 — 2-node 3D axial bar, SPRING — 2-node longitudinal spring.

Symptom-driven cross-reference#

If you opened this page because of a specific symptom, the fastest path to a fix is the troubleshooting flowchart in Troubleshooting flowchart — it asks five questions and lands you on the right element / mesh / BC / solver page. This pitfalls matrix is the companion table the flowchart points back to when “which element variant?” is the answer.

See also#