Burgers’ Riemann Problem

Burgers’ Riemann Problem#

As discussed with advection, the physics of the equation comes into play when we determine what the correct state is on the interface given a left and right state. This is the Riemann problem. For Burgers’ equation, this Riemann problem is more complex.

Shock speed#

If the characteristics intersect in the x-t plane, then it is not possible to trace backwards in time to see where the information came from—this is the condition of a shock. The shock speed is computed through the Rankine-Hugoniot jump conditions.

Consider the following space-time diagram:

../_images/rh.png

Fig. 4 A rightward moving shock in the x-t plane separating two state#

This shows a left and right state, ul and ur, separated by a rightward moving shock in the x-t plane (the dark line). Notice that:

  • At time tn, the state in our integral x[xl,xr] is entirely ur.

  • As time evolves (think about moving upward in this figure), the state becomes a mix of states ul and ur.

  • Finally at time tn+1 the state is entirely ul in x[xl,xr].

  • The shock speed is clearly S=Δx/Δt in this figure.

To determine the speed, we start with Burgers’ equation in conservative form:

ut=[f(u)]x

and integrate our conservation law over space and time (and normalize by Δx):

1Δxxlxrdxtntn+1dtut=1Δxxlxrdxtntn+1dt[f(u)]x

Recognizing that at t=tn, u=ur and at t=tn+1, u=ul, the left side becomes:

1Δxxlxr{u(tn+1)u(tn)}dx=ulur

Now for the right side. We see that all along x=xl, the flux is f=f(ul) for t[tn,tn+1]. Likewise, all along x=xr, the flux is f=f(ur) in the same time interval. Therefore, our expression becomes:

(ulur)=ΔtΔx[f(ur)f(ul)]

Using S=Δx/Δt, we see:

S=f(ur)f(ul)urul

and taking f(u)=u2/2, we get:

S=12(ul+ur)

Sampling the solution#

Now that we understand the shock speed, we need to determine what the state is on the interface.

For an interface in our domain, ui+1/2, we need to solve the Riemann problem ui+1/2=R(ui+1/2,L,ui+1/2,R). We do this first by looking at whether the flow is converging or diverging. For converging flow, ui+1/2,L>ui+1/2,R, we need to consider a shock; otherwise we consider a rarefaction. We write this as:

ui+1/2=R(ui+1/2,L,ui+1/2,R)={ushockif ui+1/2,L>ui+1/2,Rurareotherwise

where us is the shock case and ur is the rarefaction case.

For the shock, we look at the direction the shock is moving and choose the appropriate state:

ushock={ui+1/2,Lif S>0ui+1/2,Rif S<0

For the rarefaction, we do:

urare={ui+1/2,Lif ui+1/2,L>0ui+1/2,Rif ui+1/2,R<00otherwise