Section 9.6 of Chapter 9: 2D Stress Analysis: Finite Element Types, Linear Case

Isoparametric 8-node quadrilateral finite element

01

Element and hypotheses

Small strains
Small displacements
Linear elastic material

The theory is well known, see for instance [1]. This finite element has eight nodes and two degrees of freedom per node, giving 16 element displacement degrees of freedom. The theory is presented briefly, following the same development as for the Q4 element in Section 9.4.

fel=keluel,fel={X1Y1X2Y2X3Y3X8Y8},uel={u1v1u2v2u3v3u8v8}\boldsymbol f_{el}=\boldsymbol k_{el}\boldsymbol u_{el},\qquad\boldsymbol f_{el}=\begin{Bmatrix}X_1\\Y_1\\X_2\\Y_2\\X_3\\Y_3\\\vdots\\X_8\\Y_8\end{Bmatrix},\qquad\boldsymbol u_{el}=\begin{Bmatrix}u_1\\v_1\\u_2\\v_2\\u_3\\v_3\\\vdots\\u_8\\v_8\end{Bmatrix}

Here fel\boldsymbol f_{el} is the nodal-force vector, uel\boldsymbol u_{el} is the nodal-displacement vector, and kel\boldsymbol k_{el} is the element stiffness matrix:

uelR16×1,kelR16×16.\boldsymbol u_{el}\in\mathbb R^{16\times1},\qquad\boldsymbol k_{el}\in\mathbb R^{16\times16}.

02

Natural coordinates and interpolation

Q8 natural and Cartesian coordinates with corner nodes 1 to 4 and midside nodes 5 to 8
The Q8 element in natural coordinates (left) and Cartesian coordinates (right), with the nodal numbering used below.

Interpolation functions:

N1=(1+s)(1+t)412N512N8,N2=(1s)(1+t)412N512N6,N3=(1s)(1t)412N612N7,N4=(1+s)(1t)412N712N8.\begin{aligned}N_1&=\frac{(1+s)(1+t)}4-\frac12N_5-\frac12N_8,\\N_2&=\frac{(1-s)(1+t)}4-\frac12N_5-\frac12N_6,\\N_3&=\frac{(1-s)(1-t)}4-\frac12N_6-\frac12N_7,\\N_4&=\frac{(1+s)(1-t)}4-\frac12N_7-\frac12N_8.\end{aligned}
N5=(1s2)(1+t)2,N6=(1t2)(1s)2,N7=(1s2)(1t)2,N8=(1t2)(1+s)2.\begin{aligned}N_5&=\frac{(1-s^2)(1+t)}2,&N_6&=\frac{(1-t^2)(1-s)}2,\\N_7&=\frac{(1-s^2)(1-t)}2,&N_8&=\frac{(1-t^2)(1+s)}2.\end{aligned}

The same interpolation functions are used for coordinates as for displacements:

{x(s,t)y(s,t)}=i=18Ni(s,t){xiyi},{u(s,t)v(s,t)}=i=18Ni(s,t){uivi}.\begin{Bmatrix}x(s,t)\\y(s,t)\end{Bmatrix}=\sum_{i=1}^8N_i(s,t)\begin{Bmatrix}x_i\\y_i\end{Bmatrix},\qquad\begin{Bmatrix}u(s,t)\\v(s,t)\end{Bmatrix}=\sum_{i=1}^8N_i(s,t)\begin{Bmatrix}u_i\\v_i\end{Bmatrix}.

03

Strains and Jacobian

Strains:

ε={εxεyγxy}={uxvyuy+vx}={ux0uy}+{0vyvx}.\boldsymbol\varepsilon=\begin{Bmatrix}\varepsilon_x\\\varepsilon_y\\\gamma_{xy}\end{Bmatrix}=\begin{Bmatrix}\dfrac{\partial u}{\partial x}\\\dfrac{\partial v}{\partial y}\\\dfrac{\partial u}{\partial y}+\dfrac{\partial v}{\partial x}\end{Bmatrix}=\begin{Bmatrix}\dfrac{\partial u}{\partial x}\\0\\\dfrac{\partial u}{\partial y}\end{Bmatrix}+\begin{Bmatrix}0\\\dfrac{\partial v}{\partial y}\\\dfrac{\partial v}{\partial x}\end{Bmatrix}.
ε=[100001]{uxuy}+[000110]{vxvy}.\boldsymbol\varepsilon=\begin{bmatrix}1&0\\0&0\\0&1\end{bmatrix}\begin{Bmatrix}\dfrac{\partial u}{\partial x}\\\dfrac{\partial u}{\partial y}\end{Bmatrix}+\begin{bmatrix}0&0\\0&1\\1&0\end{bmatrix}\begin{Bmatrix}\dfrac{\partial v}{\partial x}\\\dfrac{\partial v}{\partial y}\end{Bmatrix}.

With:

{uxuy}=J1{usut},{vxvy}=J1{vsvt}.\begin{Bmatrix}\dfrac{\partial u}{\partial x}\\\dfrac{\partial u}{\partial y}\end{Bmatrix}=\boldsymbol J^{-1}\begin{Bmatrix}\dfrac{\partial u}{\partial s}\\\dfrac{\partial u}{\partial t}\end{Bmatrix},\qquad\begin{Bmatrix}\dfrac{\partial v}{\partial x}\\\dfrac{\partial v}{\partial y}\end{Bmatrix}=\boldsymbol J^{-1}\begin{Bmatrix}\dfrac{\partial v}{\partial s}\\\dfrac{\partial v}{\partial t}\end{Bmatrix}.

J\boldsymbol J is the Jacobian:

J(s,t)=[xsysxtyt].\boldsymbol J(s,t)=\begin{bmatrix}\dfrac{\partial x}{\partial s}&\dfrac{\partial y}{\partial s}\\\dfrac{\partial x}{\partial t}&\dfrac{\partial y}{\partial t}\end{bmatrix}.

Using interpolation functions:

J(s,t)=H(s,t)[x1y1x2y2x8y8],\boldsymbol J(s,t)=\boldsymbol H(s,t)\begin{bmatrix}x_1&y_1\\x_2&y_2\\\vdots&\vdots\\x_8&y_8\end{bmatrix},
H(s,t)=[N1sN2sN8sN1tN2tN8t].\boldsymbol H(s,t)=\begin{bmatrix}\dfrac{\partial N_1}{\partial s}&\dfrac{\partial N_2}{\partial s}&\cdots&\dfrac{\partial N_8}{\partial s}\\\dfrac{\partial N_1}{\partial t}&\dfrac{\partial N_2}{\partial t}&\cdots&\dfrac{\partial N_8}{\partial t}\end{bmatrix}.

Therefore:

ε=[100001]J1{usut}+[000110]J1{vsvt}.\boldsymbol\varepsilon=\begin{bmatrix}1&0\\0&0\\0&1\end{bmatrix}\boldsymbol J^{-1}\begin{Bmatrix}\dfrac{\partial u}{\partial s}\\\dfrac{\partial u}{\partial t}\end{Bmatrix}+\begin{bmatrix}0&0\\0&1\\1&0\end{bmatrix}\boldsymbol J^{-1}\begin{Bmatrix}\dfrac{\partial v}{\partial s}\\\dfrac{\partial v}{\partial t}\end{Bmatrix}.

04

Strain-displacement matrix

Using the interpolation functions again:

{usut}=H(s,t){u1u2u8},{vsvt}=H(s,t){v1v2v8}.\begin{Bmatrix}\dfrac{\partial u}{\partial s}\\\dfrac{\partial u}{\partial t}\end{Bmatrix}=\boldsymbol H(s,t)\begin{Bmatrix}u_1\\u_2\\\vdots\\u_8\end{Bmatrix},\qquad\begin{Bmatrix}\dfrac{\partial v}{\partial s}\\\dfrac{\partial v}{\partial t}\end{Bmatrix}=\boldsymbol H(s,t)\begin{Bmatrix}v_1\\v_2\\\vdots\\v_8\end{Bmatrix}.

Thus:

ε=[100001]b{u1u2u8}+[000110]b{v1v2v8},\boldsymbol\varepsilon=\begin{bmatrix}1&0\\0&0\\0&1\end{bmatrix}\boldsymbol b\begin{Bmatrix}u_1\\u_2\\\vdots\\u_8\end{Bmatrix}+\begin{bmatrix}0&0\\0&1\\1&0\end{bmatrix}\boldsymbol b\begin{Bmatrix}v_1\\v_2\\\vdots\\v_8\end{Bmatrix},

where:

b=J1H=[b11b12b18b21b22b28].\boldsymbol b=\boldsymbol J^{-1}\boldsymbol H=\begin{bmatrix}b_{11}&b_{12}&\cdots&b_{18}\\b_{21}&b_{22}&\cdots&b_{28}\end{bmatrix}.

Collecting the nodal displacement components gives:

ε={εxεyγxy}=Buel.\boldsymbol\varepsilon=\begin{Bmatrix}\varepsilon_x\\\varepsilon_y\\\gamma_{xy}\end{Bmatrix}=\boldsymbol B\boldsymbol u_{el}.
B(s,t)=[b110b120b130b140b150b160b170b1800b210b220b230b240b250b260b270b28b21b11b22b12b23b13b24b14b25b15b26b16b27b17b28b18].\boldsymbol B(s,t)=\begin{bmatrix}b_{11}&0&b_{12}&0&b_{13}&0&b_{14}&0&b_{15}&0&b_{16}&0&b_{17}&0&b_{18}&0\\0&b_{21}&0&b_{22}&0&b_{23}&0&b_{24}&0&b_{25}&0&b_{26}&0&b_{27}&0&b_{28}\\b_{21}&b_{11}&b_{22}&b_{12}&b_{23}&b_{13}&b_{24}&b_{14}&b_{25}&b_{15}&b_{26}&b_{16}&b_{27}&b_{17}&b_{28}&b_{18}\end{bmatrix}.
BR3×16.\boldsymbol B\in\mathbb R^{3\times16}.

05

Constitutive law and stiffness matrix

The stiffness matrix for the finite element is:

kel=hABTDBdA\boxed{\boldsymbol k_{el}=h\int_A\boldsymbol B^T\boldsymbol D\boldsymbol B\,dA}

EE is Young’s modulus, ν\nu is Poisson’s ratio, and hh is the thickness of the finite element. For the plane stress state:

D=E1ν2[1ν0ν10001ν2].\boldsymbol D=\frac{E}{1-\nu^2}\begin{bmatrix}1&\nu&0\\\nu&1&0\\0&0&\dfrac{1-\nu}{2}\end{bmatrix}.

Since B\boldsymbol B is a function of ss and tt, it is more convenient to work in natural coordinates. Consequently, for a positively oriented mapping:

kel=h1111B(s,t)TDB(s,t)detJ(s,t)dsdt\boxed{\boldsymbol k_{el}=h\int_{-1}^{1}\int_{-1}^{1}\boldsymbol B(s,t)^T\boldsymbol D\boldsymbol B(s,t)\det\boldsymbol J(s,t)\,ds\,dt}

detJ(s,t)\det\boldsymbol J(s,t) is the determinant of the Jacobian.

06

Gauss quadrature

The third-order one-dimensional Gauss rule used in the program is:

iiGauss coordinateWeight
10.6-\sqrt{0.6}5/95/9
2008/98/9
3+0.6+\sqrt{0.6}5/95/9

The two-dimensional rule is the tensor product of this one-dimensional rule. Each coordinate is paired with all three coordinates in the other direction, giving 3×3=93\times3=9 Gauss points per element. The weight of a pair is wiwjw_iw_j:

kelhj=13i=13wiwjB(si,tj)TDB(si,tj)detJ(si,tj).\boldsymbol k_{el}\approx h\sum_{j=1}^3\sum_{i=1}^3 w_iw_j\boldsymbol B(s_i,t_j)^T\boldsymbol D\boldsymbol B(s_i,t_j)\left|\det\boldsymbol J(s_i,t_j)\right|.

07

MATLAB example

A simple MATLAB program can be downloaded below. Run main.m; it calls the following subprograms:

  • gen generates the mesh for a cantilever clamped at x=0x=0 (u=0,v=0u=0, v=0) and loaded with a force uniformly distributed on the other end (x=Lx=L). See the program for all input data and further explanations.
  • plane2d8 generates the stiffness matrices of all finite elements, performs the assembling process, imposes boundary conditions, and solves the linear system for nodal displacements.
  • plot_disp plots the displacement colour map.
  • plot_stress plots the stress colour map.
L=200 mm,H=50 mm,h=5 mm,L=200\ \mathrm{mm},\quad H=50\ \mathrm{mm},\quad h=5\ \mathrm{mm},
E=2.1×105 MPa,ν=0.3,F=1000 N,nL=16,nH=6.E=2.1\times10^5\ \mathrm{MPa},\quad\nu=0.3,\quad F=1000\ \mathrm N,\quad n_L=16,\quad n_H=6.

The results are calculated for a mesh of 16 Q8 elements along the beam and 6 elements through its height: 96 finite elements, 333 nodes, and 666 equations. The total applied vertical force is 1000 N-1000\ \mathrm N.

Q8 mesh, constraints and distributed load
Figure 1. Q8 cantilever mesh, boundary conditions, and distributed free-end load, generated by gen.m.

08

Displacement results

The following maps are generated by the Q8 program. Displacements are in millimetres; the displacement plotting scale is 1.

Figure 2. Horizontal displacement uu. umin=0.04595 mm,umax=0.04595 mmu_{\min}=-0.04595\ \mathrm{mm},\quad u_{\max}=0.04595\ \mathrm{mm}.
Figure 3. Vertical displacement vv. vmin=0.2545 mm,vmax=0v_{\min}=-0.2545\ \mathrm{mm},\quad v_{\max}=0.

For comparison, the magnitude of the free-end displacement predicted by the Timoshenko beam model is:

vmax=FL33EI+1.2FLGA=0.2557 mm,I=hH312,A=hH,G=E2(1+ν).|v|_{\max}=\frac{FL^3}{3EI}+1.2\frac{FL}{GA}=0.2557\ \mathrm{mm},\qquad I=\frac{hH^3}{12},\quad A=hH,\quad G=\frac{E}{2(1+\nu)}.

The Q8 result is very close to the beam solution: the difference in the maximum displacement magnitude is about 0.46%. The finite element displacement is negative because the applied force acts in the negative vertical direction.

09

Stress results

For plotting, stresses are evaluated at the eight element nodes and averaged at nodes shared by adjacent elements. The stress maps use the default displacement scale 0 and are therefore shown on the undeformed configuration. Stresses are in MPa.

Figure 4. Normal stress σx\sigma_x. σx,min=113.409 MPa,σx,max=113.409 MPa\sigma_{x,\min}=-113.409\ \mathrm{MPa},\quad\sigma_{x,\max}=113.409\ \mathrm{MPa}.

Von Mises stress: σVM,min=2.295 MPa,σVM,max=106.477 MPa\sigma_{\mathrm{VM},\min}=2.295\ \mathrm{MPa},\quad\sigma_{\mathrm{VM},\max}=106.477\ \mathrm{MPa}.

10

Comparison with Q4

The same cantilever geometry, material, thickness, and resultant loading are used in Section 9.4. Both programs were run in MATLAB R2026a Update 4. The comparison uses the actual results of the Q4 mesh with 40 elements along the length and 16 through the height:

QuantityQ4 — Section 9.4Q8 — Section 9.6
Elements64096
Nodes697333
Equations1394666
umin (mm)u_{\min}\ (\mathrm{mm})-0.04574-0.04595
umax (mm)u_{\max}\ (\mathrm{mm})0.045740.04595
vmin (mm)v_{\min}\ (\mathrm{mm})-0.2535-0.2545
σx,min (MPa)\sigma_{x,\min}\ (\mathrm{MPa})-115.217-113.409
σx,max (MPa)\sigma_{x,\max}\ (\mathrm{MPa})115.217113.409
σVM,min (MPa)\sigma_{\mathrm{VM},\min}\ (\mathrm{MPa})4.4422.295
σVM,max (MPa)\sigma_{\mathrm{VM},\max}\ (\mathrm{MPa})109.174106.477

Q8 obtains essentially the same displacement solution and comparable stress levels with a substantially smaller discretization than Q4, because its higher-order interpolation represents bending more efficiently.

Q8 has midside nodes and quadratic interpolation along its edges. It can represent curved displacement fields and stress gradients more accurately than a bilinear Q4 element, which is particularly useful in bending-dominated problems. Curved boundaries can also be represented more accurately. The cost per element is higher, but fewer elements are often required for a comparable solution.

11

Programs and download

main.m
clear
gen
plane2d8
plot_disp
plot_stress

12

Reference

  1. [1] Carlos A. Felippa, Introduction to Finite Element Methods, University of Colorado, Boulder, Colorado.