Calculating floor slab vibration modes using OpenSeesPy
![[object Object]](/_next/image?url=%2Fimages%2Fauthors%2Fsean_carroll.png&w=256&q=75)
Welcome to part 1 in this two-part series on modal analysis of floor slabs using OpenSeesPy and GMSH. Our aim in this series is to build an analysis pipeline in Python that allows us to calculate the modal properties of arbitrarily shaped floor slabs.
The two big tools you’ll be getting to grips with in this series are:
- OpenSeesPy to build our finite element model and perform the modal analysis,
- GMSH to generate our finite element mesh for arbitrarily shaped floor plates (yes, that’s spelt correctly…there is no ‘e’!).
The end result will be a Python script that can take in the coordinates of vertices defining the the shape of a slab (or plate in more general terms) and report back:
- modal frequencies
- modal masses
- mode shapes
We’ll build inside a Jupyter Notebook but you can use vanilla Python scripts if you prefer.
📁 Remember, you can download the complete Jupyter Notebook for this tutorial at the top of this page.
No expensive software required!
Determining modal characteristics is typically one of the first tasks when analysing the dynamic performance of a floor plate (or any structure for that matter). You may find yourself turning to expensive commercial software packages to calculate these properties. These software packages have a lot of useful features and functionality.
However, if you just want to determine the dynamic properties of a concrete floor slab for example, with a little Python and the hard work of the people who have developed open-source Python packages, you don’t need to turn to commercial software. You have everything you need already at your fingertips - this tutorial series will show you how to piece it all together.
Part 1 - Validating our modal analysis
This project is divided into two parts. The one you’re reading now will focus on implementing and validating our modal analysis workflow with OpenSeesPy. We’ll do this by comparing the modal properties calculated using OpenSeesPy to known solutions. This way, we can move forward with more complex structures, knowing our fundamental modal analysis code is sound.
Part 2 - Supercharging our pipeline with GMSH
In part 2, we introduce GMSH, an incredibly powerful finite element mesh generator. We’ll use GMSH to generate finite element meshes when our slab is not a simple rectangle that we can mesh procedurally. By combining the modal analysis capabilities of OpenSeesPy with the meshing tools in GMSH, we’ll have a very versatile workflow for determining the modal properties of floor plates.
📍 2.0 Vibration Modes and Modal Analysis - review
In section 2, we’ll spend some time quickly reviewing the fundamentals of modal analysis. We’re not going to cover the topic in depth, instead, this section serves as a level-setter to make sure you have enough context for the analysis that follows.
If you want to explore the fundamentals of modal analysis, from the ground up, we cover this in Multi-Degree of Freedom Dynamics, Modal Analysis and Seismic Response Simulation in Python. Head over to that course if you need a more complete introduction to modal analysis.
Multi-Degree of Freedom Dynamics, Modal Analysis and Seismic Response Simulation in Python
Build the knowledge and tools to decode the dynamic response of real-world structures to real-world loads.
After completing this course...
- You will be able to model the influence of earthquake-induced ground motion.
- You will develop numerical tools to solve the coupled equations of motion for multi-degree of freedom systems.
- You will understand the role of modal decomposition in uncoupling the equations of motion and identifying the underlying dynamic characteristics of MDoF systems.
📍 3.0 Modal Analysis and Floor Vibration
In section 3, we’ll briefly comment on the role of modal analysis in the assessment of floors for occupant-induced vibration. This section serves as a link back to our previous deep-dive tutorial, Calculating response factors for floor vibration and assessing performance. You can actually think of this tutorial series almost as a continuation of our previous tutorials on occupant-induced floor vibration.
📍 4.0 Simply supported rectangular floor plate - analytical solution
In section 4, we’ll introduce our first case-study structure, the simply-supported rectangular plate. The modal properties of this structure can be analytically determined. We’ll use this analytical solution as our first test case.
📍 5.0 Simply supported plate - Numerical solution with OpenSeesPy
Our goal in section 5 is to build a finite element model with OpenSeesPy and use it to numerically recreate the same modal characteristics we saw in section 4. This is the first test of our code - if we can recreate the analytical solution for a simply supported rectangular plate, we can move forward with confidence onto our next test.
📍 6.0 Fixed rectangular plate - approximate analytical solution
At this point, we know our OpenSeesPy model can accurately model a simply supported rectangular plate. Next, we see if we can recreate the modal characteristics of a fully clamped plate! The first step is documenting the analytical solution (approximate analytical solution really - we’ll discuss this below). For our source or reference solution, we turn to…wait for it, NASA of all places!
📍 7.0 Fixed plate - Numerical solution with OpenSeesPy
In section 7, we modify our OpenSeesPy code to confirm that our model can accurately model the fixed support condition. Once we’ve confirmed this, we’re in good shape! We know we have a code that’s working as expected!
📍 8.0 Wrapping up and where to next?
In section 8, we’ll briefly recap what we’ve achieved, but more importantly, we’ll turn our attention to next steps and how we can expand our analysis capabilities beyond just rectangular plates with procedurally generated meshes.
So, that’s the roadmap - let’s dive in!
All Access Annual Membership
Learn, revise or refresh your knowledge and master engineering analysis and design
Access Every Course and Tool
- Over 998 lectures & over 205 hours of HD video content
- Access Member's Only 'deep dive' tutorials
- Access all downloads, pdf guides & Python codes
- Access to the StructureWorks Blender Addon
- Packed development roadmap of courses & tools 🏗️
- Price Guarantee – avoid future price rises as we grow
- Priority Q&A support
- Course completion certificates
- Early access to new courses
All Access Lifetime Membership
Unlimited access to all current and future EngineeringSkills.com courses and content, forever.
Access Every Course and Tool
- Over 998 lectures & over 205 hours of HD video content
- Access Member's Only 'deep dive' tutorials
- Access all downloads, pdf guides & Python codes
- Access to the StructureWorks Blender Addon
- Packed development roadmap of courses & tools 🏗️
- 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.
What is a Truss?
Explore the common forms of truss and some of the key assumptions that underpin the analysis of trusses

Dr Seán Carroll