Finite Element Analysis of Plate and Shell Structures: Part 1 - Plates

Finite Element Analysis of Plate and Shell Structures: Part 1 - Plates

An analysis pipeline for thick and thin plate structures, a roadmap from theory to toolbox

18 h 2 min | 72 lessons
After completing this course...
You will understand how the Reissner-Mindlin formulation enables us to accurately capture both thin and thick plate behaviour, and the key advantages it offers over Kirchhoff plate theory.
You will understand how to turn your understanding of the fundamental mechanics of plate behaviour into a custom finite element solver written in Python.
You will have developed versatile and powerful meshing workflows that utilise the powerful open-source meshing engine, GMSH, to create meshes to pass into your solver.
In addition to using your own custom finite element code, you will be comfortable validating your results using OpenSeesPy and Pynite, two of the most widely used open-source finite element analysis libraries.
COURSE OVERVIEW

Analytical techniques are great for modelling the simplified behaviour of plate and shell structures, but we quickly run into their limitations when we stray beyond the limiting geometry or assumptions that the models are built upon.

This is where finite element modelling comes into its own. In this course, we’ll cover the finite element modelling of plate structures by building our own solver based on the incredibly versatile Reissner-Mindlin theory. This approach will allow us to model both thick and thin plate elements, resulting in an extremely versatile and accurate analysis pipeline.

Custom mesh generation and finite element analysis of a floor slab using our custom finite element solver. | EngineeringSkills.com

Custom mesh generation and finite element analysis of a floor slab using our custom finite element solver.

Building your own solver will give you a much deeper understanding of the underlying theory. That said, we’ll also cover how to implement the same solutions using OpenSeesPy and Pynite - two free and open-source Python libraries.

To complete our modelling and analysis toolkit, we’ll also cover mesh generation using a procedural workflow that uses GMSH, an incredibly powerful open-source meshing library.

Once you’ve completed this course, you’ll have a complete workflow for the analysis of plate structures, backed by a fundamental understanding of the Reissner-Mindlin theory that powers it all! You'll also be ready to expand your knowledge to shell structures in the next course in this series.

Course Breakdown

Section 1: Welcome and Setting the Scene

In section one, we outline the course’s main objectives and address housekeeping topics such as how to get help and support and what background knowledge would be beneficial. We’ll also cover a high-level introduction to Reissner–Mindlin theory and discuss why it’s at the heart of the course. Section one is recommended for all course participants.

Section 2: The Mechanics of Plate Elements

In section 2, we begin to dig into the core mechanics. We’ll work through Reissner-Mindlin plate theory and build up the core equations required to establish the element stiffness matrix - the fundamental building block of our solver. If you’re not concerned with the underlying mechanics, you can skip this section and move straight into section 3.

Section 3: Virtual Work and Calculating the Element Stiffness Matrix

In section 3, we’ll initially focus on how the principle of virtual work leads us to the equations for the element stiffness matrix and equivalent force vector for the element. From here, we briefly review the Gauss quadrature numerical integration technique used to calculate the stiffness matrix and force vector.

With the theoretical development complete, we’ll turn our attention to Python implementation and focus on how to actually compute the stiffness matrix and equivalent force vector. Lectures 17 to 20 are recommended for anyone who wants to implement the custom FEM solver in the next section.

Section 4: Expanding to a Full Plate Element Solver

In section 4, we take what we implemented on a single element level in the previous section and expand it to build a solver for a rectangular plate consisting of multiple elements. This is our first big coding section where we implement a complete plate solver from scratch.

Section 5: Benchmarking against OpenSeesPy and Pynite

In section 5, we validate the output from our custom analysis against equivalent structural models built with both OpenSeesPy and Pynite. Validating our code against these open-source libraries is critical at this early stage and will allow us to move forward with more confidence in our work. It will also surface a phenomenon known as shear-locking, which we’ll need to tackle to ensure the accuracy of our custom solver.

Comparing the output from our custom solver to OpenSeesPy, Pynite and Navier's solution for thin plates. | EngineeringSkills.com

Comparing the output from our custom solver to OpenSeesPy, Pynite and Navier's solution for thin plates.

Section 6: Meshing with GMSH and Python

So far, all of our plate analysis has been on rectangular plates that consist of rectangular elements. Practically, we’ll need to be able to analyse plates of all shapes and sizes consisting of non-rectangular or quadrilateral elements.

To do this, we’ll need a more sophisticated method of generating finite element meshes. This can be quite a complex pre-process step, so to help us out here, we’ll introduce GMSH, another open-source library, in section 6. Our aim in this section is to build the pre-processing meshing step that we can build into our analysis pipeline.

Custom finite element mesh generated using GMSH. | EngineeringSkills.com

Custom finite element mesh generated using GMSH.

Section 7: Custom Mesh Finite Element Analysis

In section 7, we'll use our new meshing functionality from the previous section to build a custom finite element mesh that much more closely resembles a real world slab. We will then modify our solver code to directly process this mesh.

We'll analyse the structure using our custom solver and again validate this result against an OpenSeesPy solution. This is going to throw up an interesting side-effect of our earlier attempts to eliminate shear-locking using selective integration!

Section 8: Eliminating Zero-Energy Displacements

In the previous section, we saw that our attempts to eliminate shear-locking by using selective integration revealed another interesting problem, zero-energy displacements or zero-energy mechanisms. So, for our Reissner-Mindlin element to be truly effective we need a strategy to eliminate this behaviour.

In this final section, we'll explore a popular approach to do just that, using assumed transverse shear strain fields. Once implemented, we'll have a robust and versatile Reissner-Mindlin element, validated through comparison with an equivalent OpenSeesPy solution. This leaves you in an excellent position to expand your knowledge and skills in the next course in this series, where we focus on shell structures.

Custom mesh finite element analysis - displacement map free from shear-locking and zero-energy displacements. | EngineeringSkills.com

Custom mesh finite element analysis - displacement map free from shear-locking and zero-energy displacements.

Who is this course for?

  • Engineers and student engineers that want to build a deeper understanding of the mechanics of plate structures.
  • Engineers that want to leverage the power of Python and in particular open-source tools for complex structural analysis.
  • Anyone who has completed Finite Element Analysis of Continuum Structures in Python and wants to expand on what was covered in that course.
Section 1
Welcome and Setting the Scene
48 min | 4 lessons
1. Welcome to the course - roadmap overview
06:12 (Preview)
2. Housekeeping - Python, prerequisites and tips for success
06:17 (Preview)
3. Plate theories and why Reissner-Mindlin? 📂
19:21
4. High-level primer - what are we trying to do? 📂
16:11
Section 2
The Mechanics of Plate Elements
1 h 49 min | 8 lessons
5. Section overview - The Mechanics of Plate Elements
01:52 (Preview)
6. The displacement and strain fields 📂
32:43
7. Relating stress and strain - the constitutive matrix D 📂
09:12
8. From stresses to stress resultants 📂
22:15
9. The role of shape functions 📂
10:30
10. The strain-displacement matrix, B 📂
10:07
11. The Jacobian’s role in calculating B 📂
06:39
12. Pause, recap and regroup 📂
16:15
Section 3
Virtual Work and Calculating the Element Stiffness Matrix
2 h 7 min | 8 lessons
13. Section overview - Virtual Work and Calculating the Element Stiffness Matrix
01:32 (Preview)
14. How Virtual Works leads to the element equations 📂
20:47
15. A primer on numerical integration 📂
11:42
16. Numerical integration applied to our element 📂
13:13
17. Setting up our stiffness matrix calculation 📂
18:01
18. Calculating an element stiffness matrix 📂
33:23
19. Calculating the shear and bending stiffness 📂
16:09
20. Calculating the equivalent nodal force vector 📂
12:43
Section 4
Expanding to a full plate element solver
3 h 58 min | 15 lessons
21. Section overview - Expanding to a full plate element solver
01:28 (Preview)
22. Procedurally generating a rectangular mesh 📂
24:30
23. Defining plate constraints 📂
11:08
24. Defining the self-weight force vector 📂
10:35
25. Building the structure stiffness matrix 📂
10:05
26. Solving the system and extracting reaction forces 📂
28:13
27. Plotting the plate displacements 📂
18:10
28. Building an evaluation grid for stress resultants 📂
10:31
29. Calculating the moments and shears 📂
22:00
30. Visualising the plate bending moments 📂
14:13
31. Extracting shear forces 📂
29:04
32. Visualising the plate shear forces 📂
12:21
33. Adding strip and edge masking to the shear plot 📂
26:04
34. Adding magnitude clipping to the shear plot 📂
10:40
35. Building an interpolation utility function 📂
09:53
Section 5
Benchmarking against OpenSeesPy and Pynite
3 h 30 min | 14 lessons
36. Section overview - Benchmarking against OpenSeesPy and Pynite
01:57 (Preview)
37. Building an equivalent OpenSeesPy model 📂
35:40
38. Extracting OpenSeesPy displacements and reactions 📂
14:08
39. Extracting OpenSeesPy moments and shears 📂
11:45
40. Visualising OpenSeesPy moments 📂
10:58
41. Visualising OpenSeesPy shears 📂
12:12
42. Building an equivalent Pynite model 📂
22:15
43. Extracting displacements and reactions from Pynite 📂
12:53
44. Extracting moments and shears from Pynite 📂
16:58
45. Visualising Pynite moments and shears 📂
12:25
46. Qualitative comparison across models
13:03
47. Max-displacement parameter sweep across models 📂
26:38
48. The role of shear-locking 📂
14:48
49. Adapting for shear-locking and comparing again 📂
05:15
Section 6
Meshing with GMSH and Python
1 h 46 min | 7 lessons
50. Section overview - Meshing with GMSH and Python
01:49 (Preview)
51. Generating a QUAD mesh with GMSH 📂
28:13
52. Visualising the custom mesh 📂
12:19
53. Correcting the element node order 📂
14:43
54. Implementing mesh openings 📂
22:36
55. Implementing specific nodal positions 📂
15:20
56. Converting our code to a utility function 📂
11:32
Section 7
Custom mesh finite element analysis
2 h 7 min | 8 lessons
57. Section overview - Custom mesh finite element analysis
01:15 (Preview)
58. OpenSeesPy custom mesh plate analysis 📂
24:04
59. OpenSeesPy custom mesh deflection benchmark 📂
30:09
60. Custom mesh Reissner-Mindlin plate analysis 📂
14:25
61. Custom mesh analysis results - reactions 📂
16:26
62. Custom mesh analysis results - deflected shape 📂
06:14
63. What's going on with our deflection? 📂
10:06
64. A plan for fixing our Reissner-Mindlin element 📂
24:32
Section 8
Eliminating zero-energy displacements
1 h 53 min | 8 lessons
65. Section overview - Eliminating zero-energy displacements
01:11 (Preview)
66. The substitute transverse shear strain matrix - part 1 📂
21:41
67. The substitute transverse shear strain matrix - part 2 📂
21:04
68. The natural shear interpolation matrix 📂
15:56
69. Modifying shear stiffness for the assumed transverse shear strain field 📂
19:57
70. Implementing point loads in our custom FE solver 📂
14:06
71. Implementing patch loading in our custom FE solver 📂
17:45
72. Wrapping up and what next?
02:08
Completion certificate
Completion certificate
  • 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.

Ready to get started?
getting-started
Dr Seán Carroll
BEng (Hons), MSc, PhD, CEng MIEI, FHEA
Hi, I’m Seán, the founder of EngineeringSkills.com. After spending 10 years as a university lecturer in structural engineering, I started EngineeringSkills to help more people understand engineering analysis and design and get as much enjoyment from studying it as I do. Feel free to get in touch, follow me on LinkedIn and subscribe to the EngineeringSkills Youtube channel.

Do you have some knowledge or expertise you'd like to share with the EngineeringSkills community?
Check out our guest writer programme - we pay for every article we publish.
You might also be interested in...
Finite Element Analysis of Continuum Structures in Python
Finite Element Analysis of Continuum Structures in Python
Use the Isoparametric Finite Element Method to build an analysis tool for 2D structures in Python.

Frequently asked questions