What difference a difference scheme makes

One of the simplest nonlinear PDE is

${\displaystyle u_t = -uu_x}$

inviscid Burgers equation in one dimension. The function ${u}$ represents the velocity of a compressible fluid. The equation can model a shock wave: for discontinuous initial data such as

${\displaystyle u(x,0) = \begin{cases} 1, \quad x\le 0 \\ 0, \quad x>0 \end{cases}}$

the solution (understood in appropriate weak sense) has the jump from ${1}$ to ${0}$ at all times, but the position of the jump moves to the right. The equation can also demonstrate the creation of shocks from continuous initial data (nonlinear steepening of waves), but I am not going into that here.

Let’s try to solve this PDE numerically. Given the initial ${u(x,0)}$ as a sequence of numbers ${\dots 1 1 1 1 1 0 0 0 0 0 \dots}$ in the top row of a spreadsheet, I use the difference of adjacent entries as approximation to ${u_x}$, multiply it by ${u}$, and use the result to calculate the solution at the next moment of time. The time step is set at ${\Delta t=0.1}$. On the first try, I use the forward difference scheme for ${u_x}$, which in spreadsheet terms amounts to formulas such as

F2 = F1 - 0.1*F1*(G1-F1)

The result of running this scheme is nothing short of disastrous:

Let’s try the backward (upwind) difference (“wind direction” is positive, since we work with positive values of velocity). This means using formulas such as

F2 = F1 - 0.1*F1*(F1-E1)

The numerical solution is less ridiculous, but is still quite wrong: it is constant in time.

Going back to the PDE, rewrite it as

${\displaystyle u_t = -(u^2/2)_x}$

This is the conservation form of the PDE, which is more suitable for interpretation of discontinuous solutions. Indeed, it says exactly that the vector field ${V(x,t) = (u^2/2,u)}$ has zero divergence. The property of having zero divergence can be understood without taking derivatives: it means that the flux integral over every closed curve (e.g., over every rectangle) is zero.

Discretizing the conservation form of the PDE leads to finite differences of squares, such as

F2 = F1 - 0.1*(G1^2-F1^2)/2

(conservative downwind method):

Still not good. But the conservative upwind method, with formulas such as

F2 = F1 - 0.1*(F1^2-E1^2)/2

turns out to work:

Here is the plot of the data:

The shock front looks a bit diffuse, but it sustains itself: note how the value at “4” converges to ${1}$. Recalling that every row corresponds to time interval of ${0.1}$, we can estimate the propagation speed to be about ${0.5}$, which is what the analysis of PDE would predict.