Finite Element Analysis of 3D Structures using Python

Build your own complete 3D structural analysis software in Python using the Direct Stiffness Method

$79
5.0
5/5
Play Video


What you'll learn

You’ll have developed a complete 3D finite element analysis solver to simulate structures consisting of beam and axially loaded bar elements.
You’ll have the skills to efficiently build detailed structural models in Blender and export these for analysis in your own Python solver.
You’ll understand how to expand the Direct Stiffness Method to full 12 degree of freedom beam elements in 3D space.
You’ll have the tools, knowledge and confidence to expand your code even further beyond what we cover in the course.


Description

In this course we’re going to dive deep into the world of 3D structural analysis by building a 3D structural analysis programme using Python. After completing this course you’ll have built your own 3D finite element solver and have a workflow you can use to model and analyse complex 3D structures that would otherwise require expensive commercial software packages.

Building on a family of Python-based structural analysis courses, this course will take your level of ability and self-reliance in structural analysis to yet another level by expanding to consider full 3-dimensional beam bending. In this 13.5 hour video course, we go beyond axially loaded 3D space frame structures covered previously, to build out a feature rich, general 3D solver that can simulate:

  • Interaction between 6 degree of freedom axially loaded bar elements and 12 degree of freedom beam elements.
  • Localised rotational releases in the form of pins.
  • Structural response to both point and distributed loading.
You DO NOT need to be a Python programming guru to take this course. If you’ve taken any of the prerequisite courses – or even if you’re just familiar with basic programming ideas like functions, loops and variables that will be plenty to get you started. 👍 

The structural analysis tool you build in this course will give you the ability to analyse 3D frame structures, complete with axially loaded bracing elements and even rotational releases in the form of pins. Not only will you have a valuable tool to deploy, but you’ll have the knowledge and understanding that can only come from building it yourself!

When building computational models of real-world structures quite often the best starting point is a simplified 2D model. This greatly simplifies our analysis and if careful judgement is used in building the model, in many cases we lose very little accuracy by compressing from 3 down to 2 dimensions.

However, 2D structural analysis has its limitations. As the geometry of our structures becomes more complex the degree to which they can be accurately represented with planar models diminishes. As a result, the accuracy of our models deteriorates and model output drifts further and further from reality. At this point, it can help to expand into the third dimension.

Tied-arch-bridge-quarter-view | DegreeTutors.com
To put our finished structural analysis solver through its paces, we’ll model and analyse this 3D tied-arch footbridge. Now we certainly could carry out an approximate 2D analysis of this structure. And in fact this wouldn’t be a bad starting point to get a sense of the forces and moments that develop within the structure. But after completing this course, you’ll be able to build a high-fidelity 3D structural model and complete the analysis in minutes. This will allow you to get a much clearer picture of how the structure responds to loading.
Tied-Arch-footbridge-with-deflection | DegreeTutors.com

This course build on the popular series of DegreeTutors stiffness method courses. In particular we will build on what we learned in the study of Beam & Frame Analysis using the Direct Stiffness Method in Python. We’ll expand the code developed in that course to accommodate 3D frame structures.

Unlike the expansion from 2D trusses to 3D space frames, which was relatively simple due to the axially loaded nature of the elements, moving from 2D to 3D frame analysis is a little more involved.

In this course we’ll work through the process step-by-step laying the foundation with theory before implementing what we’ve learned in code. Once complete, you’ll be rewarded with a huge sense of satisfaction (and a pretty nice 3D analysis tool!)

It’s a good idea to cover the prerequisite courses before diving into this one, check out the bundle discount at the bottom of this page. In particular consider working through Beam & Frame Analysis using the Direct Stiffness Method in Python.

Generating 3D model data manually can be a real pain, so we’ll be making use of Blender in this course. Blender is a powerful open-source 3D modelling tool. By getting to grips with only a handful of Blender’s modelling tools, we open the door to analysing the behaviour of any structure. We are limited only by our imagination! With its intuitive 3D modelling workflow and Python API, Blender is an excellent compliment to our structural analysis solver.

If you’ve ever tried to manually generate 3D frame data in some of the big name structural analysis packages, you’ll know it can be grindingly slow – you won’t look back after using our modelling and data export workflow.

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com

After familiarising ourselves with how to generate structural models in Blender, we’ll develop some simple scripts that allow us to easily transfer model data back and forth between Blender and our structural analysis Jupyter notebook.

We’ll develop our Python code using the versatile Jupyter development environment. When you complete this course you will have a standalone 3D analysis Jupyter Notebook to deploy on your own projects. The code developed within each section of the course is also provided for download as a reference.


Course Breakdown

Section 1: Welcome and Preliminaries

In section one we’ll get our bearings and take a look at what the journey ahead looks like. This will give you a good idea of what to expect and how our solver will take shape. As this course is the fourth in a series, I’ll also say a few words on prerequisites and what you should consider covering before working through the course. Both of the short lectures in this section can be watched below before enrolling – take a look.

Section 2: The 3D Beam Stiffness Matrix

In this section we get right into the thick of it and start to work out how we’re going to model our 3D beam elements. By the end of this section we will have fully derived the 12×12 beam element stiffness matrix. We’ll start by briefly reviewing the 2D beam element before tackling the additional degrees of freedom in our 3D element.

Section 3: Location and Rotation in 3D Space

If there is one thing that has the potential to confuse you when trying to perform 3D frame analysis it’s how to deal with rotations in 3D space. Understanding how to handle element orientation, rotations and transitions between reference frames is critical. We’re going to tackle this head-on in this section. By the end of the section you will understand exactly how we’re capturing the orientation of our beam elements. The output at the end of this section will be our element transformation matrix.

Section 4: Generating frame data in Blender

In this section we take a break from theory and dive into Blender for some light relief. In this section we’ll generate our structural model and use Blender’s subdivide tools to easily ‘mesh’ our structure. By the end of this section we’ll have all of our model data loaded up inside our Jupyter Notebook and be ready to start writing our solver.

Section 5: Building the Transformation Matrix

In this section we’re going to focus on capturing the orientation of each element within our structure. This is one example of something that we didn’t need to spend too much time on for purely axially loaded 3D members. But for 3D beam elements, whether they bend about a major or minor axis has a huge impact on their behaviour. We’ll start by defining a default orientation for all members. Once we have a predictable orientation for each member, we’ll work out a strategy for calculating and storing each member’s transformation matrix.

Section 6: Building and Solving the Stiffness Matrix

At this point in our development, we have a lot of the necessary foundation work done. In this section we can actually solve the structure. If you’ve covered any of the prerequisite courses, you will be on familiar ground in this section. By the end of this section, our structure will be solved and all of our data will be just waiting to be visualised which we’ll take care of in the next section.

Section 7: Visualising Results in 3D

All of the data in the world is of no value to us unless we can visualise it and ultimately interpret it. This section is going to focus on building the standard plots you would expect to see in any structural analysis software. Once this section is complete we will have a fully functioning solver and a complete workflow where we build our models in Blender, import them and analyse them in our Jupyter Notebook solver and optimally review the deflections back in Blender. The next sections in the course are focused on implementing features that enhance the usability of our solver and turn it into a versatile and valuable analysis tool.

Section 8: Implementing Bar Bracing elements:

In this section we’re going to focus on implementing purely axially loaded elements within our code. We’ll refer to these as bar elements, as opposed to beam elements that also resist shear, bending and torsion. We typically encounter these types of elements as bracing members within structures. The portal frame structure we’ve been working on up to now is a classic example of a structure that would use this as a lateral stability system. After this section is complete, our solver will be capable of handling some of the most common forms of framed structure.

Section 9: Implementing Pinned Members:

In this section we’ll implement the ability to model a new type of element – beam elements that have a pin at node i or node j. These pins will act as rotational releases for major and minor axis bending at the respective node. Practically these pins allow our solver to handle simply supported or simply restrained structural members within our models. A practical example of this might be a beam that has a simple fin-plate shear connection on one or both ends. We wouldn’t want to model moment transmission through these connections. After completing this section we will be able to model the required rotational releases.

Section 10: Implementing Distributed Loading:

The ability to handle distributed loading is probably the last big omission in our solver, so we’ll put that right in this section. As usual we’ll start in Blender and identify and export the members within our model that we want to apply uniformly distributed loading to. In contrast to the manual process of determining equivalent nodal actions when we did this for 2D frames, we’ll automate the process here making for a much smoother workflow. Once this section is complete, we’ll have a well rounded solver to put to work.

Section 11: Bridge Model Case Study:

The purpose of this is to take a non-standard structure, unlike what we’ve been modelling up to this point – and see how to approach its modelling and analysis using the tools we’ve developed. One of the benefits of doing this is that we’ll identify good opportunities to further improve our solver – which you should consider doing when you’ve finished this course! I’ll also demonstrate how to make use of some of Blender’s fantastic mesh editing tools that make our lives so much easier!

Who this course is for

  • Students and professional engineers who’ve studied matrix analysis methods but never explored the 3D potential of this analysis technique.
  • Students and professional engineers who’ve taken some or all of our previous direct stiffness method courses (see bundle discount at the bottom of this page) and want to continue learning and expanding their abilities.
  • Anyone who wants to leverage programming as a tool for structural analysis or within their day-to-day study or work.

The codes developed in this course are for educational purposes only and are not tested or certified for use beyond the educational scope of this course. Always employ your own engineering judgement first and foremost, regardless of what the computer says!

Course Completion Certificate

Certificate of Completion 13 | DegreeTutors.com
  • Download your personalised Certificate of Completion once you’ve finished all course lectures.
  • Applying for jobs? Use your Certificate of Completion to show prospective employers what you’ve been doing to improve your capabilities.
  • Independently completing an online course is an achievement. Let people know about it by posting your Certificate of Completion on your Linkedin profile or workplace CPD portfolio.


Course preview

Lecture 1: Introduction and course overview

Lecture 5: 3D Beam Elements

Play Video
Play Video


Course content

Welcome and Preliminaries

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 1
Introduction and course overview (Preview)
(03:41)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 2
What you should cover before this course (Preview)
(03:14)

The 3D Beam Stiffness Matrix

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 3
Section overview (Preview)
(01:13)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 4
Review of the 2D stiffness matrix
(16:20)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 5
 3D beam elements (Preview)
(07:43)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 6
Minor axis bending and transverse shear
(11:20)
Torsion & completing the stiffness matrix
(05:01)

Location and Rotation in 3D Space

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 8
Section overview (Preview)
(01:12)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 9
3D reference frames & rotation matrices
(12:11)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 10
Review of the 3D bar transformation matrix
(06:51)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 11
Building the 3D beam transformation matrix
(16:53)

Generating frame data in Blender

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 12
Section overview (Preview)
(02:43)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 13
Building a 3D frame
(10:53)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 14
Exporting frame data from Blender
(19:39)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 15
Exporting structural supports
(17:19)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 16
 Exporting point load data
(07:31)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 17

Importing our frame data into a Jupyter Notebook

(26:37)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 18
Building the force vector
(08:41)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 19
Visualising our structure with matplotlib
(17:47)

Building the Transformation Matrix

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 20
Section overview (Preview)
(01:14)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 21
Defining a default member orientation
(14:49)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 22
How to define a local member reference frame
(17:03)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 23
Building the local member reference frame
(18:57)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 24
Calculating member reference frames and lengths
(09:56)

Building and Solving the Stiffness Matrix

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 25
Section overview (Preview)
(01:06)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 26
Building the global element stiffness matrix
(13:09)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 27
Building the primary stiffness matrix
(09:05)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 28
Extracting the structure stiffness matrix
(04:20)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 29
Solving for displacements and reactions
(08:24)
Solving for member actions
(17:28)

Visualising Results in 3D

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 31
Section overview (Preview)
(02:34)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 32
Plotting the deflected shape
(12:53)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 33
Plotting the axial force heat map
(25:57)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 34
Build the local bending moment diagram
(13:19)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 35
Plotting the 3D bending moment diagram
(26:34)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 36
Build the local shear force diagram
(04:59)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 37
Plotting the 3D shear force diagram
(14:14)
Generating detailed text output
(20:37)
Exporting deflections to Blender
(15:47)

Implementing Bar Bracing elements

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 40
Section overview (Preview)
(01:55)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 41
Identifying and exporting bar elements from Blender
(13:04)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 42
Identifying rotational releases in our code
(21:01)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 43
Assigning different areas to bar elements
(04:01)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 44
Building the bar element stiffness matrix
(05:59)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 45
Adding bar elements to the primary stiffness matrix
(07:25)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 46
Extracting the structure stiffness matrix
(15:38)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 47
Solving for axial forces in bar elements
(12:40)

Implementing Pinned Members

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 48
Section overview (Preview)
(02:42)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 49
Constructing a fixed-pinned stiffness matrix
(09:32)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 50
Identifying and exporting pinned elements from Blender
(06:36)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 51
Identifying pinned members in our code
(14:32)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 52
Element stiffness matrix with pin at node i
(10:27)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 53
Element stiffness matrix with pin at node j
(05:04)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 54
Adding pinned elements to the primary stiffness matrix
(06:52)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 55
Solving for member actions in pinned elements
(17:08)

Implementing Distributed Loading

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 56
Section overview (Preview)
(02:46)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 57
Identifying distributed loads in Blender
(04:37)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 58
Importing distributed loading information
(03:54)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 59
Calculating equivalent nodal actions – Part 1
(20:25)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 60
Calculating equivalent nodal actions – Part 2
(11:19)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 61
Updating the global force vector
(07:47)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 62
Removing ENA from reactions
(03:12)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 63
Removing ENA from member actions
(15:47)

Bridge Model Case Study

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 64
Section overview (Preview)
(03:43)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 65
Reviewing the bridge structure
(14:01)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 66
Building the structural bridge model
(27:36)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 67
Structural data export/import
(10:20)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 68

Reviewing the results

(07:59)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 69
Course wrap up and debrief
(03:10)

Course Updates

Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 70
Self-weight part 1 – bar elements
(14:27)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 71
Self-weight part 2 – beam elements
(11:19)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 72
Member rotations part 1 – Identifying members to rotate
(08:51)
Finite-Element-Analysis-of-3D-Structures-using-Python | DegreeTutors.com - Lecture 73
Member rotations part 2 – Implementing rotation overrides
(23:14)


Roadmap

Consider this first...

This course considers beam elements in a 2D context. You should definitely be comfortable with the theory and code that we cover in this course before tackling the 3D version in the current course.

...and maybe this first...

This course extends the direct stiffness method for 3D axially loaded structures. It doesn’t include beam elements (bending and shear) but is a good first step into 3D analysis. This is not a strict prerequisite for the current course.

📍 You're here

Try this next...

Once you’re comfortable with 3D beam elements, a good next step would be the finite element analysis of 2D continuum elements. 

...or this next...

Non-linear analysis of cable structures is another good next step. This course will introduce you to geometric non-linearity and implementing the stiffness method in an iterative framework.


Frequently Asked Questions

You’re buying lifetime access. You’ll also get all the course updates and new lessons for FREE forever. Come back to this course for reference any time in the future.

Absolutely. Even if you watched the full course, if you’re not satisfied, contact me in the first 30 days and I will give you a full refund, no questions asked. It would be helpful if you could tell me how I can improve the course for other students.

This is a video course hosted by Podia that requires you to log in and stream the videos. The course may also include downloadable PDFs, and Jupyter Notebooks.
Yes! I’ve partnered with Podia and Stripe to handle billing and provide a secure payment facility. DegreeTutors (me) never directly handle or store your credit card information.


Ready to get started?



Prerequisites Discount - Save 35% Direct Stiffness Method Bundle

The Direct Stiffness Method for Truss Analysis with Python | DegreeTutors.com
Play Video

The Direct Stiffness Method for Truss Analysis with Python

Build your own finite element truss analysis software using Python and tackle large scale structures.

After completing this course…

  • You’ll understand how to use the Direct Stiffness Method to build complete structural models that can be solved using Python.
  • You’ll have your own analysis programme to identify displacements, reactions and internal member forces for any truss.
  • You’ll understand how common models of elastic behaviour such as plane stress and plane strain apply to real-world structures.
Play Video

Beam & Frame Analysis using the Direct Stiffness Method in Python

Build a sophisticated structural analysis software tool that models beams and frames using Python.

After completing this course…

  • You’ll understand how to model beam elements that resist axial force, shear forces and bending moments within the Direct Stiffness Method.
  • You’ll have your own analysis software that can generate shear force diagrams, bending moment diagrams, deflected shapes and more.
  • You’ll understand how to model rotational pins within your structures, inter-nodal distributed loading and realistic flexible supports.
Play Video about 3D-Space-Frame-Analysis-with-Python V2 | DegreeTutors.com

3D Space Frame Analysis using Python and Blender

Develop tools to model and analyse complex 3D space frame structures using Python.

After completing this course…

  • You’ll understand how to apply the Direct Stiffness Method to solve 3D space frame structures.
  • You’ll have your own analysis programme to identify displacements, reactions and internal member forces for any 3D space frame.
  • You’ll be able to use Blender, a powerful open source 3D modelling software to build, visualise and export your structural models.