Thanks to CuriosityStream for sponsoring this video.
There are a lot of different analytical methods that engineers can use to solve structural
mechanics problems, whether it's to calculate the deflection of a beam or the stresses in
a flat plate.
But we often encounter problems that can't be solved in this way, typically because the
geometry, loads or materials are too complex.
The finite element method is a powerful numerical technique that uses computational
power to calculate approximate solutions to these types of problems.
It's widely used in all major engineering industries.
It could be used to check that satellite components will survive the launch conditions, for example.
Or to optimise the design of automotive components, like the lower control arm of this car's suspension
system.
Finite element analysis software can be used to analyse a wide range of solid mechanics
problems, including static, dynamic, buckling, and modal analyses.
But it can also be used for fluid flow, heat transfer, and electromagnetic problems.
For this introduction to the finite element method, we'll focus on how it applies to static
linear-elastic stress analysis.
Imagine we want to analyse the brackets supporting this air conditioning unit.
The goal of a static stress analysis would typically be to calculate the stresses, strains
and displacements within the bracket.
These unknowns are called "field variables".
Internal stresses develop within a body in such a way as to maintain equilibrium over
any volume of the body, so we can apply the concept of equilibrium to calculate the field
variables.
This is easy to do for a simple beam - we can use equilibrium to calculate the bending
moment and shear force along it, and from there we can calculate the normal and shear
stresses in the beam.
But enforcing equilibrium over a two dimensional shape like this bracket is difficult, and
it becomes even more complicated for a three dimensional body.
The finite element method approaches this problem by splitting the body into a number
of small elements, that are connected together at nodes.
This process is called discretisation, and the collection of nodes and elements is called
the mesh.
Discretisation is useful because the equilibrium requirement now only needs to be satisfied
over a finite number of discrete elements, instead of continuously over the entire body.
Several different element shapes can be used.
We've used triangular surface elements to model this bracket.
Surface elements are two dimensional elements that are typically used to model thin surfaces.
They can be triangular or quadrilateral.
Triangular elements are good for modelling awkward shapes, although quadrilateral elements
tend to perform better.
Solid elements are used for three-dimensional bodies.
And then we have line elements.
Choosing the right element for your model will depend on the specific scenario being
analysed, and requires some expertise.
In the case of our bracket we could have used solid elements, or even line elements, depending
on how much we wanted to simplify the problem.
Even for elements of the same shape, there are hundreds of different types to choose
from that each have different formulations, and introduce different levels of approximation.
A line element can be a bar, for example, that only carries axial loads, or a beam,
that can carry axial, bending, shear and torsional loads.
We can model the bracket using plane stress surface elements, because the bracket is thin
and the loading is all in the same plane.
But that's only one of many surface element types.
These are all first order elements, but we can also use second order elements, which
have additional mid-side nodes and are more accurate.
For stress analysis problems the fundamental variable we want to calculate is the displacement
at each node.
If we know how a body displaces when loads are applied, we'll easily be able to calculate
secondary outputs like stress and strain.
For each element we can define a vector \{u\} that contains all of the possible displacements
for the nodes of the element, including rotations.
If we're analysing a two-dimensional case with beam elements, each node can translate
along the X and Y axes and it can rotate about the Z axis, so the vector \{u\} will look like
this.
Each of these displacements is called a degree of freedom.
For the beam element we have 3 degrees of freedom per node, or 6 in total.
For a 3D case that increases to 6 degrees of freedom per node.
A shell element node also has 3 degrees of freedom in two dimensions, but since the element
has 4 nodes, it has 12 degrees of freedom in total.
The nodes of a solid element only have the 3 translational degrees of freedom.
The nodes aren't allowed to rotate and instead rotation of the element is captured by translation
of the nodes.
So how can we calculate all of the displacements at every node in our mesh?
For a spring, the relationship between force and displacement is defined by Hooke's law.
The spring stiffness k determines how far the spring will displace for a given force.
In the same way, we can think of the elements of our mesh as having a certain amount of
stiffness, that resists deformation.
In this equation \{f\} is a vector of the nodal forces and moments, \{u\} is the vector of the
nodal displacements, and [k] is the stiffness matrix of the element.
A 2D beam element has 6 degrees of freedom, so the displacement vector looks like this.
And the force vector and the stiffness matrix will look like this.
The element stiffness matrix defines how much each node in the element will displace for
a set of forces and moments applied to the nodes, and so is the key to solving the displacements
at every node of our mesh.
It's a square matrix - the number of rows and the number of columns are equal to the
number of degrees of freedom of the element.
We can figure out what the terms of the stiffness matrix are by enforcing equilibrium.
We'll come back to this later on in the video, but for a 2D beam the matrix looks like this.
We can think of this equation as a system of linear equations that we can solve to obtain
the displacements at the nodes of our mesh.
If we apply a lateral displacement to node 2, for example, and all of the other degrees
of freedom are fixed, and so are equal to zero, we can use the stiffness matrix to calculate
the forces and moments at both of the nodes.
To make the next steps easier to visualise, let's represent the stiffness matrix in a
more abstract form.
This is just one element, but our overall mesh will be made up of many more elements.
Let's look at a simple example where we have a mesh made up of three 2D beam elements,
that we're using to model a cantilever beam.
We can assemble the individual stiffness matrices for all of the elements in our mesh into a
huge global stiffness matrix that defines how the entire structure will displace when
loads are applied to it.
Like the element stiffness matrix, the global stiffness matrix is a square matrix and the
number of rows and columns is equal to the total number of degrees of freedom in the
model.
The element stiffness matrices are assembled together to form the global stiffness matrix
based on how the elements are connected together.
Elements 1 and 2 are connected at node 2 for example.
Continuity tells us that since these two elements are connected at the same node, the displacements
for both elements must be the same at the common node.
So when we assemble the global stiffness matrix, the terms in the element stiffness matrices
corresponding to node 2 should be summed for each degree of freedom.
Element 3 is not connected to node 2, so this element's stiffness matrix should have no
effect on the displacements at node 2.
This is what the actual global stiffness matrix looks like for this model.
It has some interesting characteristics.
It is said to be sparse, because it contains a lot of zeros, and banded, because the non-zero
terms are grouped around the diagonal.
For linear-elastic problems the matrix will also be symmetric.
If we modify the mesh so that the three elements are connected differently, the global stiffness
matrix will change.
In this case we have three nodes instead of four, so the matrix will be smaller, and the
fact that elements 1 and 3 are connected is reflected in the matrix.
An important thing to note here is that the elements are no longer aligned to the same
coordinate system, so we have to transform the stiffness matrix for each element so that
it aligns with a global coordinate system.
We can do this by multiplying each element stiffness matrix by a rotation matrix.
Now that we've assembled the global stiffness matrix, we need to solve this equation to
obtain the displacements at each of the nodes.
To do this we need to define the external loads, and the boundary conditions.
The boundary conditions are known displacements at specific nodes, typically because specific
degrees of freedom are fixed.
In this model, vertical and horizontal translations are fixed at node 1, and vertical translations
are fixed at node 2, so the displacement vector looks like this.
And the force vector will look like this.
It includes the applied force and the reaction forces at the supports.
Now we can solve the equation.
We could do this by inverting the global stiffness matrix and solving the displacements from
there.
But in practice inverting the matrix isn't very efficient, particularly because it's
a sparse matrix.
Commercial solvers mostly use methods that involve iteratively approximating the displacement
vector, like the conjugate gradient method.
Once we've solved for the nodal displacements, we can calculate the strains and then stresses
throughout the mesh.
A typical finite element mesh could easily have a hundred thousand degrees of freedom,
which would be impossible to solve by hand, and so applying the finite element method
to anything more complicated than a very basic model requires the use of appropriate software.
Now that we have an overall understanding of the finite element method, let's return
to the element stiffness matrix to see how it's derived.
The matrix shown here is for a 2D beam element, but it will look very different for different
element types.
Several different methods can be used to derive these stiffness matrices, and they are all
fundamentally based on the concept of equilibrium.
The direct method derives the stiffness matrix directly from the equilibrium equations that
govern the behaviour of the element.
The lateral deflection of a beam is governed by this equation, for example, so we can solve
the equation to obtain the stiffness matrix for a beam element.
These governing equations are usually differential equations.
The differential equations and associated boundary conditions are what we call the "strong"
form of the equilibrium problem.
But it's only really possible to solve the strong form for simple elements.
For more general cases we can use "weak" forms that describe the differential equations in
integral form, instead of solving the differential equations directly.
These give approximate solutions to the equilibrium equations, but are easier to solve.
The first of the weak form methods is based on variational principles.
One such principle commonly used for structural mechanics problems is the Principle of Minimum
Potential Energy.
It states that the displacement configuration that satisfies equilibrium conditions is the
one that minimises the total potential energy, where the potential energy is the sum of the
strain energy and the potential energy of the external loads.
By applying a mathematical technique called the calculus of variations to minimise the
total potential energy, we can obtain an approximate solution to the equilibrium equations.
The other weak form method is the Galerkin method of weighted residuals.
In this method the function that satisfies the differential equation is approximated
as the sum of a number of assumed trial functions that each have unknown coefficients.
This approximate solution is substituted into the differential equation, and an equation
for the error, called the residual, is obtained.
If we multiply each trial function by the residual and set the integral of this product
to zero, we can calculate the unknown coefficients that minimise the residual.
This gives us an approximate solution to the differential equation.
This is a more widely applicable approach than the principle of minimum potential energy,
but for stress analysis problems both methods give the same result.
Regardless of which method we use, we end up with the stiffness matrix for our element.
But to apply these methods we need to be able to describe how displacements and other field
variables vary inside the element, instead of just at the nodes of the element.
To overcome this issue, an element needs to have a defined function that calculates values
inside the element by interpolating the values at the nodes.
The shape function is just an assumption.
It's usually chosen to be a polynomial, since they're relatively simple and sufficiently
accurate.
And with that we've covered all of the key aspects of the finite element method.
In summary, the first step in the finite element method is defining the problem, including
the relevant material properties, loads and boundary conditions.
Next the body being analysed is split into a number of small elements connected at nodes,
and the element types are chosen.
Then a stiffness matrix is defined for each element, using one of the three methods we
covered earlier.
The element stiffness matrices are then assembled into a global stiffness matrix based on element
connectivity.
This global stiffness matrix defines how the structure will respond to applied loads, and
we can use it along with boundary conditions to solve for the displacement at each node
in the structure.
Once we have displacements we can calculate stresses, strains and other field variables
of interest.
Then all that's left to do is post-processing to obtain the desired results, and validation
of the model.
A lot of the hard work like calculating the element stiffness matrices, assembling the
global stiffness matrix and solving the model is done by the software being used.
But the engineer is responsible for making sure that the problem has been properly defined,
that the mesh is suitable, and for interpreting and validating the results.
I hope this video has helped you develop a better understanding of the fundamentals of
the finite element method.
If you're interested in learning more, you can check out the extended version of this
video, that's available now over on Nebula, where I spend a few more minutes covering
the problem definition, discretisation, post-processing, and validation steps.
Nebula is a streaming service built by independent educational creators.
It's a place where you can find extended versions of my videos, alongside amazing original content
from other creators, like Mustard and Wendover, without any ads or sponsor messages.
You can get access to Nebula for free when you sign up for CuriosityStream.
CuriosityStream is the perfect streaming service for curious minds.
It has thousands of high quality documentaries to keep you entertained and learning, like
Particle Fever, an incredible film that follows experimental and theoretical physicists during
the first round of experiments at the Large Hadron Collider, the largest science experiment
ever conducted, as they work to prove the existence of the Higgs boson particle.
If you sign up to CuriosityStream using this link, you'll get a 26% discount on their annual
plan, and you'll get access to Nebula for free.
All for less than $15 a year.
So to watch my bonus content on Nebula, and Particle Fever and countless other documentaries
on CuriosityStream, head over to curiositystream.com/efficientengineer, or click the link in the description.
It's an amazing deal, and signing up is a great way to support this channel.
And that's it for this introduction to the finite element method.
Thanks for watching!