Irons patch test — constant-strain completeness#
The Irons patch test is the ur-completeness check for any finite-element formulation: a patch of elements under a displacement field consistent with a uniform strain tensor must produce that exact strain, to machine precision, on every element.
If a formulation fails the patch test it can’t converge — not “converges slowly”, not “inaccurate on coarse meshes” but cannot reach the correct answer at any refinement. The patch test is the shibboleth separating elements that work from elements that don’t.
Problem#
Take a unit cube subdivided into a 2 × 2 × 2 patch of HEX8 elements. Apply a uniform affine displacement field on every boundary node:
where \(\mathbf{F}\) is a constant deformation gradient. Per the kinematic relation \(\varepsilon = \tfrac{1}{2}(\mathbf{F} + \mathbf{F}^T) - \mathbf{I}\), the interior strain field must be that constant tensor on every cell.
Any node-to-node variation in the recovered strain — even at the 10⁻⁸ level — indicates the element formulation is not constant-strain-complete.
Analytical reference#
This is not a convergence test; it is an identity test. The expected outcome is exact:
on every cell, in every component.
femorph-solver result#
Ran by tests/analytical/test_patch_test.py on a 2 × 2 × 2
HEX8 patch with a non-trivial constant strain tensor applied
through the affine boundary condition. Per-cell strain matches
the imposed \(\mathbf{F}\)-derived tensor to machine
precision — the regression test asserts ≤ 10⁻¹⁰ absolute error
on every strain component of every cell.
This confirms the SOLID185 kernel’s B̄ formulation (Hughes §4.4) satisfies the Irons completeness criterion.
Cross-references#
Source |
Expected |
Problem ID / location |
|---|---|---|
Irons–Razzaque 1972 (original) |
Identity (exact) |
The Mathematical Foundations of the FEM, pp. 557–587 |
Taylor–Beresford–Wilson 1976 |
Identity (exact) |
IJNME 10 (1976), pp. 1211–1219 |
Hughes The Finite Element Method |
Identity (exact) |
Dover (2000), §4.4.3 |
NAFEMS Background to Benchmarks |
Identity (exact) |
BtB-4.2 (patch-test completeness) |
femorph-solver |
≤ 10⁻¹⁰ abs |
|
Abaqus Verification Manual |
Identity (exact) |
AVM 1.4.4 (C3D8 patch test) |
MAPDL Verification Manual |
Identity (exact) |
VM-82 (patch test) |
All public sources agree this is an identity test — there is no tolerance band to argue about. A formulation that doesn’t pass at machine precision is broken.
femorph-solver’s HEX8 kernel clears the patch test; the ≤ 10⁻¹⁰ residual is pure floating-point arithmetic noise on the Gauss-integration path.
Source#
Backing regression test:
tests/analytical/test_patch_test.py
— landed with Agent 2’s TA-9b analytical suite (#150).