Description
Today's project from Kenneth Haugland is unusual one and not something I would use often (or probably ever), but is still has an appealing, interesting and fun to play with, project.
Transmission Line Matrix for acoustic simulations
Simulations of acoustic waves are a topic of intense interest in many circumstances, but they are difficult to achieve with minimal use of computer power. There are several candidates, but they all have pros and cons, as we shall see. One of the most precise simulation techniques is the Transmission Line Matrix, TLM for short, as it is capable of simulating any situation given the right preconditions. Some of the best known available techniques in acoustics are:
 Ray tracing algorithms
 FDTD  Finite Difference TimeDomain
 TLM  Transmission Line Matrix
 FEM  Finite Element Method
 BEM  Boundary Element Method
Ray tracing is normally much used in concert hall acoustics, as the dominant domain (the frequencies it is valid for) often falls within the range where one can apply ray tracing to. In general this is valid for the higher frequency domain, were a sufficiently large portion can be
The so called Finite Difference Time Domain technique (FDTD for short) is actually the exact same for acoustics, as the FDTD method solves the wave equation while the TLM provides a physical model of propagation, this means that the limitations and advantages are exactly the same for the two. It should be mentioned that the TLM and FDTD can be used both in acoustics and in electrodynamics, as they are both waves that can be modelled by voltage and currents in electromechanic waves, and pressure and particle velocity in acoustics.
The FEM method is quite popular algorithm used in many commercial products, and is especially useful for simulating wave equation at the lower frequency domain, as the method must have points in accordance to the frequency that its simulates. The FEM technique solves the Helmholtz wave equation, were one needs to insert the frequency one wish to solve for first.
The BEM method is quite popular to generate exact solutions for more limited problems, for instance like the propagation of sound waves through slits and other openings. It very quickly gets complicated if the geometry gets more varied, used in simple cases and is an analytical technique at hart.
The goal of this article is to show just how simple a wave simulation could be done by, and how intuitive the process of designing it actually is.
...
Make sure you click though and read the full article. He provides some great information, details and the math behind this.
The source is also available (in VB.Net and C#), which ran the first time for me. The project structure is simple, allowing you to focus on the true complexity...
One Note: If you grab this, you click on the 2D side. The 3D is display only (can you tell I spent a bit of time clicking away on the 3D tab? :/ )
Also while you can click on the live/running simulation, it's actually more fun to set up before, adding sources, walls, etc and then start it.
So while it might not be something most of you need, the code and the execution is still cool and I'll bet there's a good deal we can learn from this...
More episodes in this series
PhysicsJS (Yes, a JavaScript Physics engine)
Related episodes
Learn Roslyn Now  E01  Introduction to Roslyn Tooling
Rowan Miller  Entity Framework
Rowan Miller  Entity Framework Core 1.1
ASP.NET Monsters #60: Projections with Entity Framework Core
ASP.NET Monsters #71: Unit Testing with xUnit
What is .NET Core
ASP.NET Monsters #13: Basics of .NET Core
The Discussion

Hi
This is quite cool, and Im really glad you found it worth your time, even though the 3D is only a viewer
I have updated the source code somewhat since you took the screen short, and It can now generate rain drops as well. This brings me to another thing you could do with this code, generate a Boat Wake by following the logic behind this answer on an unrelated question.
All you need to do is to replace the commented out code with the snipplet below:
Dim rand As New Random
Dim BoatX As Integer = 0
Dim BoatY As Integer = 50
Private Function GenerateRandomDropPoint() As Point
'Generate Rain drop
'Dim x, y As Integer
'x = rand.Next(0, TLM.Dimensions  1)
'y = rand.Next(0, TLM.Dimensions  1)
'Return New Point(x, y)
'Generate Boat wake
If BoatX < TLM.Dimensions Then
BoatX += 2
Else
BoatX = 0
End If
Return New Point(BoatX, BoatY)
End FunctionCheck the box Create Gaussian Raindrops, and play around with the Time step (I set it to 0) and increase adjust the Source Frequency (between 8 and 15 seem to generate a realistic 2D image of a boat wake). Its not quite right as the Gaussian Pulse isnt properly designed as of now, but I would fix that on a later occasion.
Kenneth Haugland
Comments closed
Comments have been closed since this content was published more than 30 days ago, but if you'd like to continue the conversation, please create a new thread in our Forums, or Contact Us and let us know.