Single hex — uniaxial tension (Hooke’s law)#

The most elementary first-principles correctness check for any 3D continuum element: does a single hex under uniaxial tension produce the stress and strain a textbook predicts?

For a unit cube of isotropic linear-elastic material with the x = 0 face axially fixed and a uniform axial traction on the x = L face:

\[\sigma_{xx} = E \varepsilon_{xx}, \qquad \varepsilon_{yy} = \varepsilon_{zz} = -\nu \varepsilon_{xx}, \qquad \varepsilon_{xy} = \varepsilon_{yz} = \varepsilon_{xz} = 0.\]

This problem is exactly what the element kernel and the constitutive law encode — if a single hex fails it, something is wrong at the material-law or strain-recovery layer, not at the numerical-convergence layer.

Problem#

Parameter

Value

Geometry

Unit cube, L × L × L with L = 1 m

Element

Single HEX8 (SOLID185) — one cell

Young’s modulus E

200 GPa

Poisson’s ratio ν

0.30

Axial load

1 MN distributed on four corner nodes of the x = L face (→ uniform nominal stress σxx = 1 MPa)

BCs

UX = 0 on every node of the x = 0 face; single- node UY / UZ anchors on corners to remove rigid-body modes without over-constraining the transverse Poisson contraction

Analytical reference#

Hooke’s law in 3D (Cook et al. §1.3; Hughes §2.7 — public-domain derivations):

\[ \begin{align}\begin{aligned}\varepsilon_{xx} = \frac{\sigma_{xx}}{E} = \frac{1 \text{ MPa}}{200 \text{ GPa}} = 5.0 \times 10^{-6}\\\varepsilon_{yy} = \varepsilon_{zz} = -\nu \varepsilon_{xx} = -1.5 \times 10^{-6}\\\sigma_{xx} = 1.0 \times 10^{6} \text{ Pa}, \qquad \sigma_{yy} = \sigma_{zz} = \tau_{ij} = 0.\end{aligned}\end{align} \]

No approximation; no convergence discussion. The HEX8 shape functions are linear in each Cartesian direction, so a single element can represent the uniform strain state exactly.

femorph-solver result#

Ran by tests/analytical/test_single_hex_uniaxial.py using the Model’s .strain(u) on-the-fly API (Agent 1’s TA-9b contribution). With the strain-recovery path returning per-node Voigt strain in (xx, yy, zz, xy, yz, xz) order:

Component

Analytical

femorph-solver

Relative error

ε_xx

5.000 × 10⁻⁶

5.000 × 10⁻⁶

< 10⁻⁸

ε_yy

-1.500 × 10⁻⁶

-1.500 × 10⁻⁶

< 10⁻⁸

ε_zz

-1.500 × 10⁻⁶

-1.500 × 10⁻⁶

< 10⁻⁸

ε_xy, ε_yz, ε_xz

0

< 10⁻¹⁰

Hooke’s law holds to machine precision. The regression test sets rtol = 1 × 10⁻⁸ for the diagonal components (tight enough to catch a material-law bug but loose enough for single-precision element-return-path rounding) and 1 × 10⁻¹⁰ absolute for the shear components.

Cross-references#

Source

Reported ε_xx

Problem ID / location

Closed form (Hooke’s law)

5.00 × 10⁻⁶

Cook CAFEA §1.3 + Hughes FEM §2.7

NAFEMS Background to Benchmarks

5.00 × 10⁻⁶

BtB-2.1 (uniaxial tension test)

femorph-solver

5.00 × 10⁻⁶

test_single_hex_uniaxial.py

Abaqus Verification Manual

5.00 × 10⁻⁶

AVM 1.3.1 (uniaxial stress, C3D8)

MAPDL Verification Manual

5.00 × 10⁻⁶

VM-1 (statically indeterminate reaction force analysis)

Every source agrees to the precision at which the value is stated. This is the minimum bar an FE implementation has to clear — no solver that ships results differing from Hooke’s law on a single element is worth trusting.

Source#

Backing regression test: tests/analytical/test_single_hex_uniaxial.py — landed with Agent 2’s TA-9b analytical suite (#150).