Recent Posts
Ear Canal - Part 1
It has been quite some time since I contributed a new tutorial to this website. In addition to the general lack of time, the main reason is that I was busy studying FEniCSx. My intention was to create a piece of software to solve the Helmholtz equation in heterogeneous media, with support for adiabatic absorbers boundary conditions. Whilst I was able to draft something up (see the acoupy_helmholtz fenicsx branch) I did not make it very far into workable code yet. This also because most of my time has been spent dealing with the Helmholtz equation itself, and the modifications required to support such simulations. Eventually all of this work will find its way into various articles in this website. But for the time being I decided to stop for a second. There are many more Elmer solvers that I have not explored yet. I decided that, while I carry on this “research” work, I can explore these solvers and write a few new episodes while doing so. This article is about a first model of the ear canal. The model is not particularly sophisticated, as it uses Elmer’s HelmholtzSolve solver that we have learned and love. However, it deals with a realistic geometry. This allows me to show how to manipulate complicated geometries, produce initial simple results, assess whether the results are reasonable, and lay a foundation for more complicated simulations. So, let’s dive in!
Elmer vs FEniCS - Part 3
In the Elmer vs FEniCS - Part 2 episode we studied the effect of mesh size on accuracy. We largely found the same results observed in the Mesh Order and Accuracy episode. We also confirmed that the agreement between FEniCS and Elmer is very good. However, we noticed that FEniCS was significantly slower than Elmer. This because we used a MUMPS direct method on FEniCS and a BiCGStabl iterative method on Elmer. In this episode we will explore the iterative solver options for FEniCS and attempt to optimize execution time for our simulation.
Elmer vs FEniCS - Part 2
In the Elmer vs FEniCS - Part 1 episode we solved the Pulsating Sphere problem over a fairly coarse mesh. We solved the problem both with Elmer and acoupy_helmholtz, our FEniCS based Helmholtz solver. We found that Elmer and FEniCS produce the same solution. This solution compares well to the exact solution, but has some appreciable magnitude error. In this episode we will study how this error changes with mesh size, and whether Elmer and FEniCS keep on providing the same solution.
Elmer vs FEniCS - Part 1
In the Writing Your Packages - Part 1 and Writing Your Packages - Part 2 episodes we introduced the most important concepts in writing your own simulation packages. We chosen Python as a language and implemented two simple packages, acoupy_meshutil and acoupy_helmholtz. In this episode we will use the Pulsating Sphere benchmark problem to compare acoupy_helmholtz to our old trustworthy Elmer. Since our software is little more than syntactic sugar around FEniCS this will allow us to compare with FEniCS directly.
Writing Your Packages - Part 2
In the last episode we explained why we might want to make our own packages. We selected Python as a language for this series as we will be writing software to facilitated FEniCS simulations. In this episode we will take a look at the outline of the acoupy_meshutil and acoupy_helmholtz packages. We will not go into the details of creating Python packages. For more information about that you can see Hosting Python Packages on Git Repositories. Instead, we will explain the basic outline of the packages.
Writing Your Packages - Part 1
In the last three episodes about FEniCS we introduced the software and installed it. We also derived the weak form for the Helmholtz equation and developed some code to solve it. This is all nice and good, but writing scripts from scratch every time can be tedious and error prone. We can help ourselves by writing reusable code packages to serve as tools. For example, we could write a software package to solve the Helmholtz equation with FEniCS. Or any other package we might find useful. The idea is that we can create an entire toolbox to deal with common tasks when creating simulations. We started the development of some tools under the acoupy project. This series of articles will serve as a sort of “development” diary, illustrating how the packages are being developed and why. This will allow us to illustrate how to develop scientific software.
Intro to FEniCS - Part 3
In the Intro to FEniCS - Part 2 episode we completed the first step in developing a FEniCS model. We characterised the domain. Then, we selected a governing PDE. We then provided suitable boundary conditions. Finally, we expressed the PDE in weak form. We chosen a generalised Helmholtz equation as our PDE. In this episode we will start using the resulting weak form to develop a model.
Intro to FEniCS - Part 2
In the Intro to FEniCS - Part 1 episode we introduced FEniCS. We compared it to Elmer and covered how to install it on an Ubuntu workstation. This episode will cover the process of deriving the weak form for the Helmholtz equation. We will focus on the mathematics, which are advanced. Still, we will attempt to present the formalism in an approachable manner.
Intro to FEniCS - Part 1
In the previous episodes we used Elmer to develop a few different acoustics models. We were able to verify the accuracy of Elmer with few benchmark problems. Additionally, we studied the effect of mesh order and size on the accuracy. Finally, we started probing vibro-acoustic problems. We only scratched the surface of Elmer capabilities in this field. Still, it is worth to take a step back and reconsider these problems under a different light. The FEniCS project is perfect for this. We will be introducing FEniCS in this episode.
Animations With Paraview
In many of the previous episodes we produced animations of steady state Elmer FEM solutions. For simplicity we did not discuss the details of how to prepare them. The process is actually very simple, but there are few tips and tricks to keep in mind. This episode aims to provide a concise introduction to animations with ParaView.
Tuning Fork - Part 4
In the Tuning Fork - Part 3 episode we seen how to setup a weak vibroacoustic coupling problem. We applied an harmonic body force to our tuning fork, and used its displacement field to wake the acoustic field within a coupled volume of air. In this episode we will review the results.
Tuning Fork - Part 3
In the Tuning Fork - Part 1 and Tuning Fork - Part 2 we set up and solved an Elmer study for the modes of vibration of a tuning fork. We learned that the principal mode of the fork, the one related to the nominal frequency of the fork, is very marginally affected by boundary conditions affecting the handle of the fork. In this episode we will attempt studying the acoustic field emitted by the fork in the surrounding air. In other words, we will start exploring the coupling of vibration and acoustics.
Tuning Fork - Part 2
In the Tuning Fork - Part 1 episode we setup a new study for the determination of the elastic modes of vibration of a tuning fork. Our study made use a few meshing and solver setting ideas we learned along the way, including the use of $p$-elements. In this episode we will examine the results from the Elmer simulation.