Plane waves crossing a Poisson disc grid of obstacles with Neumann conditions

In this simulation, a plane wave is generated by oscillating boundary conditions at the left border of the displayed region. There are Neumann boundary conditions on the circular obstacles placed on a Poisson disc arrangement, absorbing conditions on the right boundary, and periodic boundary conditions between the top and bottom. A Poisson disc process is obtained by placing points at random, but the constraint that the distance between points be larger than a minimal value. Many simulations of the wave equation in a domain on this channel used Dirichlet boundary conditions, meaning that the wave height is zero at the boundary of the domain. This is a good model for an elastic membrane, for instance for a drum, or for sound waves. For water waves, however, it would be more realistic to use Neumann boundary conditions, meaning the the wave height has a horizontal tangent at the boundary. Dirichlet boundary conditions are very easy to implement in a finite difference scheme: it suffices to keep the wave height equal to zero outside the domain, and use this zero value when computing the discrete Laplacian. For Neumann boundary conditions, however, one has to implement the condition that the normal derivative of the wave height is zero at the boundary. This is implemented here by adding "ghost" points next to the grid points in the domain, and computing their value in such a way that the normal derivative is approximately zero. These points are then used to compute the discrete Laplacian at points in the domain next to the boundary. The color hue depends on the wave height. The curve on the right shows the wave height along the vertical symmetry axis. Render time: 52 minutes 38 seconds Compression: crf 25 Color scheme: Turbo, by Anton Mikhailov https://gist.github.com/mikhailov-wor... Music: "June" by Bobby Richards‪@felte‬ See also https://images.math.cnrs.fr/des-ondes... for more explanations (in French) on a few previous simulations of wave equations. The simulation solves the wave equation by discretization. The algorithm is adapted from the paper https://hplgit.github.io/fdm-book/doc... C code: https://github.com/nilsberglund-orlea... https://www.idpoisson.fr/berglund/sof... Many thanks to Marco Mancini and Julian Kauth for helping me to accelerate my code! #wave #obstacles #diffraction