As the final project of ES 123: Fluid Mechanics, my group partner and I wrote a Python simulation to recreate the ‘Kelvin wake’ – the phenomena whereby objects moving on water surface create a wake with a constant angle regardless of speed.

Our instinctive expectation is that all (same type of) waves travel at the same constant speed in the same medium. This is called a ‘non-dispersive’ medium. Because of gravity, on top of (deep) water, this expectation does not hold. Speed is inversely related to square root of frequency. Due to this frequency dependency, different wave behaviors emerge in this medium.

One such emergent behavior is the Kelvin wake, shown below with ducks.

To re-create Kelvin wakes in a wave simulation, I started with a non-dispersive 1-D medium simulation. After successfully implementing this method with 3-point, 5-point numerical integration and with discrete Fourier Transform (F.T.), I implemented frequency dependency.

Then, I successfully created non-dispersive waves in 2-D medium using F.T applied in x and y directions. However, independently applying the frequency dependency of wave speed in x and y directions leads the simulation to miss the circular nature of wave propagation in 2-D, leading to erroneous dispersion patterns.

Instead, to capture the circularity, the 2-D wave equation can be solved in the cylindrical coordinate system with F.T. The resulting integral is time independent in moving object reference frame, showing the constancy of the Kelvin wake.

An important assumption of this model is that the amplitude of the waves approaches zero relative to the water depth. We demonstrated that when this height condition is not met (in shallow water), a narrower (and non-constant) wake is observed.

The full report can be found below.

kelvin-final.pdf | 6.21 MB |