# stiffness matrix for 3D regular grid in FEM

I have understood the stiffness matrix for 3D truss, and programmed Ku=f from scratch (in Java) to find the displacements.

Then I moved to 3D solid but lost in too many concepts and equations, such as shape function and so on. Books at hand: D. Hutton's Fundamentals of finite element analysis, O.C. Zienkiewicz's The finite element method, and T. Hughes' The finite element method.

Comparing with truss, the solid should include shear forces. As in Chapter 7.3 of Hutton's book, $\gamma_{xy},\gamma_{yz}$ denote shear forces. Then the stiffness matrix should differs from that of truss.

Is there a paper for a specific chapter give a formula Ku=f for 3D regular grid (the simplest mesh)?

• It sounds like you may be confused about some of the fundamentals of FEM for elastic solids. Nevertheless, you can find a quite detailed, step-by-step derivation and implementation of the stiffness matrix for an 8-node hexahedral element here: colorado.edu/engineering/CAS/courses.d/AFEM.d/AFEM.Ch11.d/… Dec 15 '17 at 12:56
• Somehow your whole question is off. Chapter 7.3 of Huttons book is about "One Dimensional Heat-Conduction with Convection". The shear forces you are talking about are shear strains. Bill Greene referred you to the course material of C. Felippa. If you want to understand more about the finite element method ans its implementation you should consider taking a closer look at it. Dec 19 '17 at 10:10
• @ P. G. Hi, we must look at different books. In my case, D. Hutton's chapter 7 is Applications in solid mechanics, and 7.3 is Plane strain: rectangular elements. Dec 21 '17 at 0:38

To understand what you are doing you need to dance along with all those many concepts and equations. There is no shortcut there.

If you are asking about an explicit expression for the local stiffness matrix for a trilinear element for elasticity, I would say that it might be unpractical.

The stiffness matrix is computed by the following integral

$$K = \int\limits_{[-1,1]^3} B^T C B\, |J| \mathrm{d}r\, \mathrm{d}s\, \mathrm{d}t$$

with $$C$$ the stiffness tensor in Voigt notation, and $$B$$ the displacement-to-strain matrix. The 3 columns related to node $$i$$ of $$B$$ is of the form

$$B = \begin{bmatrix} \frac{\mathrm{d} N_i}{\mathrm{d}x} & 0 & 0\\ 0 &\frac{\mathrm{d} N_i}{\mathrm{d}y} & 0\\ 0 & 0 &\frac{\mathrm{d} N_i}{\mathrm{d}z}\\ 0 &\frac{\mathrm{d} N_i}{\mathrm{d}z} & \frac{\mathrm{d} N_i}{\mathrm{d}y}\\ \frac{\mathrm{d} N_i}{\mathrm{d}z} &0 & \frac{\mathrm{d} N_i}{\mathrm{d}x}\\ \frac{\mathrm{d} N_i}{dy} &\frac{\mathrm{d} N_i}{\mathrm{d}x} & 0 \end{bmatrix}$$

the remaining columns are similar, just change the index $$i$$. The indices correspond to the interpolation functions:

$$N = \begin{bmatrix} \frac{1}{8} \left(- r + 1\right) \left(- s + 1\right) \left(t + 1\right)\\ \frac{1}{8} \left(r + 1\right) \left(- s + 1\right) \left(t + 1\right)\\ \frac{1}{8} \left(r + 1\right) \left(s + 1\right) \left(t + 1\right)\\ \frac{1}{8} \left(- r + 1\right) \left(s + 1\right) \left(t + 1\right)\\ \frac{1}{8} \left(- r + 1\right) \left(- s + 1\right) \left(- t + 1\right)\\ \frac{1}{8} \left(r + 1\right) \left(- s + 1\right) \left(- t + 1\right)\\ \frac{1}{8} \left(r + 1\right) \left(s + 1\right) \left(- t + 1\right)\\ \frac{1}{8} \left(- r + 1\right) \left(s + 1\right) \left(- t + 1\right) \end{bmatrix}$$

Notice that the derivatives in $$B$$ are in $$(x, y, z)$$ and the interpolation functions are in $$(r, s, t)$$. And you would need to compute the chain derivates.

If we express the stiffness tensor as

$$C = \lambda C_1 + \mu C_2$$

with

$$C_1 = \begin{bmatrix} 1 & 1 & 1 & 0 & 0 & 0\\ 1 & 1 & 1 & 0 & 0 & 0\\ 1 & 1 & 1 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}$$

and

$$C_2 = \begin{bmatrix} 2 & 0 & 0 & 0 & 0 & 0\\ 0 & 2 & 0 & 0 & 0 & 0\\ 0 & 0 & 2 & 0 & 0 & 0\\ 0 & 0 & 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 0 & 0 & 1 \end{bmatrix}$$

And you split your stiffness matrix as $$K = K_1 + K_2$$, with

$$\frac{288 K_1}{L}= \begin{bmatrix} 8 & 6 & -6 & -8 & 6 & -6 & -4 & -6 & -3 & 4 & -6 & -3 & 4 & 3 & 6 & -4 & 3 & 6 & -2 & -3 & 3 & 2 & -3 & 3\\ 6 & 8 & -6 & -6 & 4 & -3 & -6 & -4 & -3 & 6 & -8 & -6 & 3 & 4 & 6 & -3 & 2 & 3 & -3 & -2 & 3 & 3 & -4 & 6\\ -6 & -6 & 8 & 6 & -3 & 4 & 3 & 3 & 2 & -3 & 6 & 4 & -6 & -6 & -8 & 6 & -3 & -4 & 3 & 3 & -2 & -3 & 6 & -4\\ -8 & -6 & 6 & 8 & -6 & 6 & 4 & 6 & 3 & -4 & 6 & 3 & -4 & -3 & -6 & 4 & -3 & -6 & 2 & 3 & -3 & -2 & 3 & -3\\ 6 & 4 & -3 & -6 & 8 & -6 & -6 & -8 & -6 & 6 & -4 & -3 & 3 & 2 & 3 & -3 & 4 & 6 & -3 & -4 & 6 & 3 & -2 & 3\\ -6 & -3 & 4 & 6 & -6 & 8 & 3 & 6 & 4 & -3 & 3 & 2 & -6 & -3 & -4 & 6 & -6 & -8 & 3 & 6 & -4 & -3 & 3 & -2\\ -4 & -6 & 3 & 4 & -6 & 3 & 8 & 6 & 6 & -8 & 6 & 6 & -2 & -3 & -3 & 2 & -3 & -3 & 4 & 3 & -6 & -4 & 3 & -6\\ -6 & -4 & 3 & 6 & -8 & 6 & 6 & 8 & 6 & -6 & 4 & 3 & -3 & -2 & -3 & 3 & -4 & -6 & 3 & 4 & -6 & -3 & 2 & -3\\ -3 & -3 & 2 & 3 & -6 & 4 & 6 & 6 & 8 & -6 & 3 & 4 & -3 & -3 & -2 & 3 & -6 & -4 & 6 & 6 & -8 & -6 & 3 & -4\\ 4 & 6 & -3 & -4 & 6 & -3 & -8 & -6 & -6 & 8 & -6 & -6 & 2 & 3 & 3 & -2 & 3 & 3 & -4 & -3 & 6 & 4 & -3 & 6\\ -6 & -8 & 6 & 6 & -4 & 3 & 6 & 4 & 3 & -6 & 8 & 6 & -3 & -4 & -6 & 3 & -2 & -3 & 3 & 2 & -3 & -3 & 4 & -6\\ -3 & -6 & 4 & 3 & -3 & 2 & 6 & 3 & 4 & -6 & 6 & 8 & -3 & -6 & -4 & 3 & -3 & -2 & 6 & 3 & -4 & -6 & 6 & -8\\ 4 & 3 & -6 & -4 & 3 & -6 & -2 & -3 & -3 & 2 & -3 & -3 & 8 & 6 & 6 & -8 & 6 & 6 & -4 & -6 & 3 & 4 & -6 & 3\\ 3 & 4 & -6 & -3 & 2 & -3 & -3 & -2 & -3 & 3 & -4 & -6 & 6 & 8 & 6 & -6 & 4 & 3 & -6 & -4 & 3 & 6 & -8 & 6\\ 6 & 6 & -8 & -6 & 3 & -4 & -3 & -3 & -2 & 3 & -6 & -4 & 6 & 6 & 8 & -6 & 3 & 4 & -3 & -3 & 2 & 3 & -6 & 4\\ -4 & -3 & 6 & 4 & -3 & 6 & 2 & 3 & 3 & -2 & 3 & 3 & -8 & -6 & -6 & 8 & -6 & -6 & 4 & 6 & -3 & -4 & 6 & -3\\ 3 & 2 & -3 & -3 & 4 & -6 & -3 & -4 & -6 & 3 & -2 & -3 & 6 & 4 & 3 & -6 & 8 & 6 & -6 & -8 & 6 & 6 & -4 & 3\\ 6 & 3 & -4 & -6 & 6 & -8 & -3 & -6 & -4 & 3 & -3 & -2 & 6 & 3 & 4 & -6 & 6 & 8 & -3 & -6 & 4 & 3 & -3 & 2\\ -2 & -3 & 3 & 2 & -3 & 3 & 4 & 3 & 6 & -4 & 3 & 6 & -4 & -6 & -3 & 4 & -6 & -3 & 8 & 6 & -6 & -8 & 6 & -6\\ -3 & -2 & 3 & 3 & -4 & 6 & 3 & 4 & 6 & -3 & 2 & 3 & -6 & -4 & -3 & 6 & -8 & -6 & 6 & 8 & -6 & -6 & 4 & -3\\ 3 & 3 & -2 & -3 & 6 & -4 & -6 & -6 & -8 & 6 & -3 & -4 & 3 & 3 & 2 & -3 & 6 & 4 & -6 & -6 & 8 & 6 & -3 & 4\\ 2 & 3 & -3 & -2 & 3 & -3 & -4 & -3 & -6 & 4 & -3 & -6 & 4 & 6 & 3 & -4 & 6 & 3 & -8 & -6 & 6 & 8 & -6 & 6\\ -3 & -4 & 6 & 3 & -2 & 3 & 3 & 2 & 3 & -3 & 4 & 6 & -6 & -8 & -6 & 6 & -4 & -3 & 6 & 4 & -3 & -6 & 8 & -6\\ 3 & 6 & -4 & -3 & 3 & -2 & -6 & -3 & -4 & 6 & -6 & -8 & 3 & 6 & 4 & -3 & 3 & 2 & -6 & -3 & 4 & 6 & -6 & 8 \end{bmatrix}$$

and

$$\frac{288 K_2}{L} = \begin{bmatrix} 32 & 6 & -6 & -8 & -6 & 6 & -10 & -6 & 3 & 4 & 6 & -3 & 4 & 3 & -6 & -10 & -3 & 6 & -8 & -3 & 3 & -4 & 3 & -3\\ 6 & 32 & -6 & 6 & 4 & -3 & -6 & -10 & 3 & -6 & -8 & 6 & 3 & 4 & -6 & 3 & -4 & -3 & -3 & -8 & 3 & -3 & -10 & 6\\ -6 & -6 & 32 & -6 & -3 & 4 & -3 & -3 & -4 & -3 & -6 & 4 & 6 & 6 & -8 & 6 & 3 & -10 & 3 & 3 & -8 & 3 & 6 & -10\\ -8 & 6 & -6 & 32 & -6 & 6 & 4 & -6 & 3 & -10 & 6 & -3 & -10 & 3 & -6 & 4 & -3 & 6 & -4 & -3 & 3 & -8 & 3 & -3\\ -6 & 4 & -3 & -6 & 32 & -6 & 6 & -8 & 6 & 6 & -10 & 3 & -3 & -4 & -3 & -3 & 4 & -6 & 3 & -10 & 6 & 3 & -8 & 3\\ 6 & -3 & 4 & 6 & -6 & 32 & 3 & -6 & 4 & 3 & -3 & -4 & -6 & 3 & -10 & -6 & 6 & -8 & -3 & 6 & -10 & -3 & 3 & -8\\ -10 & -6 & -3 & 4 & 6 & 3 & 32 & 6 & 6 & -8 & -6 & -6 & -8 & -3 & -3 & -4 & 3 & 3 & 4 & 3 & 6 & -10 & -3 & -6\\ -6 & -10 & -3 & -6 & -8 & -6 & 6 & 32 & 6 & 6 & 4 & 3 & -3 & -8 & -3 & -3 & -10 & -6 & 3 & 4 & 6 & 3 & -4 & 3\\ 3 & 3 & -4 & 3 & 6 & 4 & 6 & 6 & 32 & 6 & 3 & 4 & -3 & -3 & -8 & -3 & -6 & -10 & -6 & -6 & -8 & -6 & -3 & -10\\ 4 & -6 & -3 & -10 & 6 & 3 & -8 & 6 & 6 & 32 & -6 & -6 & -4 & -3 & -3 & -8 & 3 & 3 & -10 & 3 & 6 & 4 & -3 & -6\\ 6 & -8 & -6 & 6 & -10 & -3 & -6 & 4 & 3 & -6 & 32 & 6 & 3 & -10 & -6 & 3 & -8 & -3 & -3 & -4 & 3 & -3 & 4 & 6\\ -3 & 6 & 4 & -3 & 3 & -4 & -6 & 3 & 4 & -6 & 6 & 32 & 3 & -6 & -10 & 3 & -3 & -8 & 6 & -3 & -10 & 6 & -6 & -8\\ 4 & 3 & 6 & -10 & -3 & -6 & -8 & -3 & -3 & -4 & 3 & 3 & 32 & 6 & 6 & -8 & -6 & -6 & -10 & -6 & -3 & 4 & 6 & 3\\ 3 & 4 & 6 & 3 & -4 & 3 & -3 & -8 & -3 & -3 & -10 & -6 & 6 & 32 & 6 & 6 & 4 & 3 & -6 & -10 & -3 & -6 & -8 & -6\\ -6 & -6 & -8 & -6 & -3 & -10 & -3 & -3 & -8 & -3 & -6 & -10 & 6 & 6 & 32 & 6 & 3 & 4 & 3 & 3 & -4 & 3 & 6 & 4\\ -10 & 3 & 6 & 4 & -3 & -6 & -4 & -3 & -3 & -8 & 3 & 3 & -8 & 6 & 6 & 32 & -6 & -6 & 4 & -6 & -3 & -10 & 6 & 3\\ -3 & -4 & 3 & -3 & 4 & 6 & 3 & -10 & -6 & 3 & -8 & -3 & -6 & 4 & 3 & -6 & 32 & 6 & 6 & -8 & -6 & 6 & -10 & -3\\ 6 & -3 & -10 & 6 & -6 & -8 & 3 & -6 & -10 & 3 & -3 & -8 & -6 & 3 & 4 & -6 & 6 & 32 & -3 & 6 & 4 & -3 & 3 & -4\\ -8 & -3 & 3 & -4 & 3 & -3 & 4 & 3 & -6 & -10 & -3 & 6 & -10 & -6 & 3 & 4 & 6 & -3 & 32 & 6 & -6 & -8 & -6 & 6\\ -3 & -8 & 3 & -3 & -10 & 6 & 3 & 4 & -6 & 3 & -4 & -3 & -6 & -10 & 3 & -6 & -8 & 6 & 6 & 32 & -6 & 6 & 4 & -3\\ 3 & 3 & -8 & 3 & 6 & -10 & 6 & 6 & -8 & 6 & 3 & -10 & -3 & -3 & -4 & -3 & -6 & 4 & -6 & -6 & 32 & -6 & -3 & 4\\ -4 & -3 & 3 & -8 & 3 & -3 & -10 & 3 & -6 & 4 & -3 & 6 & 4 & -6 & 3 & -10 & 6 & -3 & -8 & 6 & -6 & 32 & -6 & 6\\ 3 & -10 & 6 & 3 & -8 & 3 & -3 & -4 & -3 & -3 & 4 & -6 & 6 & -8 & 6 & 6 & -10 & 3 & -6 & 4 & -3 & -6 & 32 & -6\\ -3 & 6 & -10 & -3 & 3 & -8 & -6 & 3 & -10 & -6 & 6 & -8 & 3 & -6 & 4 & 3 & -3 & -4 & 6 & -3 & 4 & 6 & -6 & 32 \end{bmatrix}$$

In both cases, the matrix is lacking the factor to change coordinates $$L/8$$ and are multiplied by 36 to make numbers prettier. Still, after all this cosmetic manipulation of the computation, it is not practical to use these $$24\times 24$$ matrices explicitly.

• When you say explicit use is not practical, you mean you could exploit the symmetry of the matrix?
– mfnx
Mar 31 at 12:56
• @mfnx, no. I mean that hard coding this is not practical. You could automatically generate the code using SymPy, for example, but if you elements are distorted the integrals are not this simple. It is easier to use numerical integration. Mar 31 at 20:02
• Ok, that wasn't clear from your answer. I would encourage though to calculate integrals analytically whenever possible for performance reasons.
– mfnx
Mar 31 at 22:36
• @mfnx, I would not. In this case, maybe. But in general you might end up with expressions that are not stable for evaluation. Once, I ended up with a matrix that took 200 lives if code. Apr 1 at 0:49