Monthly Archives: May 2014

Simulating cymatics

Due to popular demand I put the source for the script I used here up to github:

I was browsing around youtube when I stumbled upon this nice video on Chladni patterns (there are quite a few there). Here's the video, it's apparently part of some demonstration for students:


Sound propagates in solids, similarly as to how it does in air. If we were to slow down the plate in the video above, we would see it vibrating at the frequency of the sound you can hear being played (check another post of mine).

Just as is the case in air, standing waves can form in solids. In solids, the details are quite different, but the basic principle holds. When a standing wave forms, there are locations where the amplitudes of the vibrations have their maximum values, and locations where the amplitudes of the vibrations are very close to zero.

Here's a gif with exaggerated deformations to illustrate how the circular pattern you can see in the beginning of the video forms:

Chladni pattern formation

Chladni pattern formation

Imagine placing a lot of small particles on the surface in the image. The particles would be tossed around, until they finally find a resting place close to the red circle. This is how all of the patterns are formed, but the way the plate vibrates varies with frequency.

Simulating cymatics

The experiment setup is very clearly defined; a rectangular steel plate is clamped in the middle. This makes for a perfect case to test out some finite element analysis of plate structures!

I used steel as the material of choice for the simulation and Reissner-Mindlin bilinear plate elements, with a lumped mass matrix. I programmed the simulation using Python. By tweaking around with the material properties and dimensions, I managed to roughly match the frequencies to the experiment from the first video. I think it's really cool how the simulation matches the patterns you can see in the video (up until a point where it's apparent that there are some asymmetries in the setup).

I made a gif out of the video too, just for the hell of it.

You might have noticed that there are a whole lot of patterns there, which aren't visible in the video. The standing waves which create the patterns form much more strongly when the frequency is closer to the modal frequencies of the plate (when the plate resonates). The following plot roughly shows these resonant frequencies. The y-axis doesn't really mean anything significant here, so just pay attention to the peaks. Also, damping hasn't been taking into account here, making the peaks unrealistically sharp. When the excitation frequency is close to one of those peaks, Chladni patterns should be clearly visible.



The frequencies these patterns form on depends completely on the material properties and dimensions of the plate, if we assume that the basic setup is the same (a rectangular plate is clamped at the middle). There are a lot of structures which can be analysed in a similar way (albeit with a more complex analysis for applicable results): floors, windows, doors, the list goes on and on. In this case, the results were very consistent with the video as the physical problem was very clearly defined.

A tool for solving 2D structural systems

If you're not that into structural mechanics, feel free to just look at the pictures :-). This post is about a tool that will enable you to calculate how structural systems behave in two dimensions. In the (hopefully not that distant) future, I'll enable dynamic calculations.

Deformed pin-jointed truss

Deformed pin-jointed truss

I haven't shared anything in a while, so I thought I write a status update on this cool (at least I think it is cool!) tool I've been working during the last few months, along with other projects. It's based on an old idea, which I thought I'd finally realize properly. The tool is able to do finite element analysis of simple structural systems in 2D. There are quite a few things I'm planning to do differently as compared to the tools out there. For example, the tool will be able to solve symbolic problems (at least simple ones) along with numerical ones.

I was thinking of making a very early beta version of the tool available along with this post, but (as is very often the case) things have taken a bit longer than expected, and other projects have been taking up my time (stay tuned for updates related to at least some of these!). So the very-early-beta release still needs some tweaking. Also, I'm not quite sure about liability issues with releasing a not-so-perfectly working version of a tool such as this. We'll see.


Some theory:

  • I've currently implemented basic functionality for solving structural systems consisting of beams (with axial and/or moment loads according to my previous post)
  • A linear elastic problem (static) is solved

The logic has been implemented in such a way that it should be relatively straightforward to extend the functionality to problems involving small amplitude (linear) vibrations, for examining vibrating systems in 2D. I'm really looking forward to getting to play around with that phase of the project. But, first things first, I've got to get static problems working properly and without any glitches.


Here are some examples of simple linear static beam structures the tool is currently able to give the correct symbolic answer to. Some background:

  • The cases have been done using a nifty GUI, which I'm quite happy with
  • L is half of the width of the figures (often the length of the beam)
  • The magnitude of the force is F
  • All cross sectional properties are given by E, I and A
    • Except for the blue bars, which have a cross sectional area of 2\sqrt{2}A
    • The connections are assumed to align with the neutral axis
  • A hollow node represents a hinged connection
  • A filled node represents a stiff connection
  • The positive x-axis points towards the right
  • The positive y-axis points downwards

The nodes are numbered from the left to the right, so just count them from the left if you want to validate the results. There are quite a few analytical formulas available for these situations if you try searching online.

Case 1

Case 1, \left[\begin{smallmatrix}{}x_2\\y_2\\\theta_2\end{smallmatrix}\right]=\left[\begin{smallmatrix}{}0\\\frac{F L^{3}}{192 E I}\\0\end{smallmatrix}\right]

Case 2

Case 2, \left[\begin{smallmatrix}{}\theta_1\\a_3\\\theta_3\\x_2\\y_2\\\theta_2\end{smallmatrix}\right]=\left[\begin{smallmatrix}{}\frac{F L^{2}}{16 E I}\\0\\- \frac{F L^{2}}{16 E I}\\0\\\frac{F L^{3}}{48 E I}\\0\end{smallmatrix}\right]

Case 3

Case 3, \left[\begin{smallmatrix}{}x_2\\y_2\\\theta_2\end{smallmatrix}\right]=\left[\begin{smallmatrix}{}0\\\frac{F L^{3}}{3 E I}\\\frac{F L^{2}}{2 E I}\end{smallmatrix}\right]

Case 4

Case 4, \left[\begin{smallmatrix}{x_3}\\{y_3}\end{smallmatrix}\right]=\left[\begin{smallmatrix}{}- \frac{F L}{3 A E}\\- \frac{2 F L}{3 A E}\end{smallmatrix}\right]

Case 5

Case 5, a_3=\frac{\sqrt{2} F L}{A E} (positive to the left)

The future

The results coincide with solutions such as these, which means that everything is working properly (woohoo)!

So far, the GUI has been the most demanding part of the project. There's still a lot to be done. Static calculations might be something the average structural engineer finds even more useful than dynamic calculations, so those are currently my top priority. Still, the really cool stuff (in my opinion) will be possible once you'll be able to investigate dynamic systems, which is helpful for both acoustical/vibration consultants and structural engineers alike!

Deformed beams

Deformed beams