Stokes Flow

P2P1 triangles were used to discretize the Stokes Equations.

Lid Driven Cavity

The velocity magnitude and vectors for the Lid Driven Cavity problem. The top wall has a fixed velocity of 1 and the sides and bottom have no slip boundary conditions.

Flow Over a Cylinder

The velocity magnitude, vectors, and streamlines for Stokes Flow across a cylinder.

The code can be found here. Building the stokes.cpp executable and running:
./stokes.exe cavity
./stokes.exe flow
will generate the data for the plots shown above.

Wave Equation

My arbitrary order FEM code (found here) was used to solve the Wave Equation with dissipation:
$$ \frac{\partial^2 u}{\partial t^2} + a \frac{\partial u}{\partial t} = c \nabla^2 u \,, $$
where \(u\) is the \(z\) displacement of the wave. \( a\) controls the dissipation of the wave over time and \(c\) controls the wave propogation speed. The second derivative in time was handled with a finite difference scheme:
$$ \frac{\partial^2 u}{\partial t^2} \approx \frac{u_{i+1} – 2u_i + u_{i-1}}{\Delta t^2} \,. $$
Standard time integration procedures can now be applied.

In the video below, the second order Crank-Nicholson method and a fourth order FEM discretizations were used for space and time, respectively. The video shows the relaxation of the initial sinusoidal perturbation over time in an L shaped domain.


The Mandelbrot set is the set of complex numbers, \(c\), such that the series
$$ z_{n+1} = z_n^2 + c $$
does not diverge as \(n\rightarrow \infty\). These values of \(c\) can then be plotted in the complex plane to produce some interesting images. As each pixel in the image is an independent calculation this is a good problem for getting familiar with parallel computing. The following images were generated with the code at