📢 NEW TUTORIAL...Modal Analysis in OpenSeesPy - Download Full Code ⬇️
Updated 23 April 2025
Reading time: 41 mins

Calculating floor slab vibration modes using OpenSeesPy

Part 1: Calculating natural frequencies, mode shapes and modal masses for dynamic analysis of 2D floor plates
[object Object]
by Dr Seán Carroll
Download the complete Jupyter Notebook file for this tutorial.

Download the complete Jupyter Notebook file for this tutorial.

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
Jupyter Notebook or vanilla Python scripts

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.

Tutorial Breakdown

📍 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!

To continue reading, please sign up for our annual or lifetime membership.

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