A Pynite Crash Course - Analysis of Plate Structures
![[object Object]](/_next/image?url=%2Fimages%2Fauthors%2Fdan_ki.png&w=256&q=75)
In this tutorial, part 2 in Dan Ki exploration of the Pynite FEA library, Dan breaks down how we can tackle the analysis of plate structures. Since there's a lot to cover, I've broken Dan's deep dive into two separate parts. We're focusing on plate structures here, shells will be covered in part 3.
We've already covered some very related material in other EngineeringSkills tutorials that you might find complement this one quite well. For example, we cover the use of the GMSH meshing library here. This is an excellent tool when you want to start meshing more complex geometries. The output can easily be fed into your Pynite or OpenSeesPy analysis. We've also covered some slab analysis using my other favourite library OpenSeesPy here.
And of course, there's the upcoming course on Finite Element Analysis of Plate and Shell Structures in Python that will cover this material in much greater detail.
If you're completely new to Pynite, you can check out part 1 in this series here where Dan introduces Pynite and covers the analysis of truss and frame structures. It's a great entry point into Pynite.
Tutorial breakdown
📍 1.0 Motivation
We start by stating the motivation - why would an engineer even want to explore open-source alternatives to commercial software?
📍 2.0 Plate and Shell Theory Fundamentals
Then, before we start running code, we cover some fundamentals such as the key differences between Kirchhoff and Reissner-Mindlin plate theories and how they are implemented in Pynite. This isn't meant to be a technical tutorial on plate and shell mechanics, so we'll just cover the key ideas at a high level.
📍 3.0 Pynite's Implementation Details
Next, we discuss the details of how Pynite implements plate and shell analysis and, in particular, the DKMQ (Discrete Kirchhoff Mindlin Quadrilateral) element. If you've used OpenSeesPy for plate and shell analysis, you'll be used to the battle-tested MITC4 element. So, it's quite interesting to see the approach taken in Pynite.
📍 4.0 Understanding DKMQ: The Math Behind the Magic
Section 4 digs a little deeper into the implementation of the DKMQ element and some concepts that are core to finite element implementation generally, such as the role of the Jacobian matrix and shape functions. While this is all quite interesting, if you're just here for the code, don't worry too much about this.
📍 5.0 Example 1: Simple Plate Analysis
We start with a simple example. The focus here is on validating our code and getting to know the API. We'll do this by analysing a simply supported plate under a uniform load and comparing the results against a known solution.
📍 6.0 Example 2: Cantilever Slab
In the second example, we'll investigate a cantilever slab and introduce point loads. Again, this gives us a great opportunity to easily compare our code against simple hand calculations.
📍 7.0 Example 3: Transfer Slab Analysis
In our final plate example, we'll tackle something a little more practical, a transfer slab. By the end of this example, you'll be pretty familiar with the Pynite API and the analysis of slabs. You'll also have a good degree of confidence in your results with our early focus on validation.
📍 8.0 Pause here and take a breather!
By the end of this tutorial, you'll be comfortable with slab analysis in Pynite. That just leaves shells. So, in part 3, we'll pick up again and continue with three more interesting example shell structures that rely on both bending and membrane behaviour to transmit loads.
📂 Make sure to download the Jupyter Notebook (linked above) to run locally as you read through the tutorial.

1.0 Motivation
In my previous tutorial on Pynite, we explored how this open-source Python library could serve as a valuable addition to our structural engineering toolkit for simple beam/frame analyses. Now, let's venture into arguably more complex territory: plates and shells.
As stated before, this isn't about replacing your go-to commercial software for production work. Instead, think of this as expanding your analytical toolkit and gaining deeper insights into the underlying mechanics of plate and shell behaviour. Sometimes, the best way to understand what's happening under the hood of commercial software is to build the analysis from the ground up.
This tutorial represents my own exploration into Pynite's plate and shell capabilities. I wanted to understand: Could Pynite provide meaningful insights for preliminary slab or shear wall analyses? What are its strengths and limitations compared to commercial alternatives? What I discovered was both enlightening and, frankly, a bit humbling about the complexity that commercial software handles behind the scenes.
2.0 Plate and Shell Theory Fundamentals
Before diving into Pynite, let's establish some light theoretical foundation. Understanding some fundamentals will help us better interpret results and recognise the limitations of our analyses, but I will be keeping the theory fairly high-level.
Plates are flat structural elements where one dimension (thickness) is significantly smaller than the other two directions. They primarily resist loads through bending action, similar to beams, but in two planar axes. Think of a typical two-way flat plate slab or a steel column base plate.
Shells are structural elements (curved or flat) that can resist loads through both bending and membrane action. A reinforced concrete shear wall is a good example of a flat shell element that primarily carries in-plane forces (shear and axial) rather than out-of-plane bending. The key distinction is that shells can develop significant in-plane stresses, while plates are primarily designed for out-of-plane loading. While not as common these days in building construction, domes are another example of shell structures that carry primarily in-plane axial loads (imagine an egg shell).
This distinction becomes crucial when selecting element types in finite element analysis and understanding the stress states we're trying to capture. The upcoming EngineeringSkills course on Analytical Modelling of Plate and Shell Structures will cover this in more detail.
Finite Element Analysis of Plate and Shell Structures in Python
An analysis pipeline for thick and thin plate and shell structures, a roadmap from theory to toolbox
2.1 Common Plate Theories
There are two main classical plate theories that are built on several key assumptions that directly impact our finite element implementation:
2.1.1 Kirchhoff Plate Theory (Thin Plates)
-
The plate is thin (thickness span, typically )
-
Materials remain linearly elastic
-
Deflections are small ()
-
Plane sections remain plane
-
Shear deformations are negligible, "i.e. after deformation, normals to the middle plane remain straight & perpendicular to the middle surface" per Analytical Modeling of Plate and Shell Structures: Part 1 - Plates
Key characteristics: Only 2 independent degrees of freedom per node - the deflection function, , and one rotation parameter. The rotations and exist physically, but they are not independent. Rather, they are constrained by:
This constraint is what enforces the "plane sections remain normal" assumption.
2.1.2 Reissner-Mindlin Plate Theory (Thick & Thin Plates)
- Plane sections remain plane, but not necessarily normal to the mid-surface
- Includes transverse shear deformations
- More accurate for thick plates ()
- Reduces to Kirchhoff theory for thin plates
Key Characteristics: 3 independent degrees of freedom per node - are all independent. This independence allows the cross-section to "shear" (deform so that it's no longer perpendicular to the mid-surface), which is physically necessary for thick plates.
2.2 Shell Theory Extensions
Both plate theories extend to shell analysis. When plate theories are extended to shells, the key addition is membrane action - the ability to resist in-plane forces.
Kirchhoff-Love shell theory extends the Kirchhoff assumptions to curved surfaces while adding membrane stiffness, making it suitable for thin shells where transverse shear can still be neglected.
Reissner-Mindlin shell theory similarly adds membrane action to the Reissner-Mindlin plate formulation, but retains the transverse shear deformation capability, making it more accurate for both thin and thick shells.
3.0 Pynite's Implementation Details
All Access Membership
Learn, revise or refresh your knowledge and master engineering analysis and design
Access Every Course and Tool
- Over 1040 lectures & over 212 hours of HD video content
- Access member-only 'deep dive' tutorials
- Access all downloads, pdf guides & Python codes
- Access to the StructureWorks Blender addon + updates
- Packed development roadmap of courses & tutorials
- Price Guarantee – avoid future price rises as we grow
- Priority Q&A support
- Course completion certificates
- Early access to new courses
Featured Tutorials and Guides
If you found this tutorial helpful, you might enjoy some of these other tutorials.
Using VIKTOR to Build a Shareable Truss Calculator App - Project Overview
Build a user-friendly analysis web app powered by OpenSeesPy and VIKTOR

Dr Seán Carroll