JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

The Riemann Problem and Viscosity Solutions

Take the simplest possible data — one constant on the left, another on the right — and the conservation law answers with a shock or a rarefaction fan. This single building block, plus the idea of adding a whisper of viscosity and letting it vanish, is what finally pins down the one physical solution.

The simplest data that still tells the whole story

By now you have seen smooth initial data for a scalar conservation law steepen, form a shock in finite time, and then need the Rankine-Hugoniot condition to move and the entropy condition to be picked out of a crowd of weak solutions. The natural next question is brutally simple: what is the whole solution, for all time, of the cleanest possible problem? The Riemann problem asks exactly this. Take u_t + f(u)_x = 0 and start with data that is just two constants — u = u_L for x < 0 and u = u_R for x > 0, with a single jump at the origin.

Why care about such a stripped-down picture? Because this little problem is the atom of the whole hyperbolic theory. Its data has no length scale — there is no width, no smooth ramp, nothing but a step — so the solution can only depend on the combination x/t. That is what self-similarity means here: zoom in or out around the origin and the solution looks identical, each constant state spread along a ray x = (speed) t. Solving the Riemann problem means finding which rays appear and what sits between them.

Two answers: a shock or a fan

For a convex flux f (think of Burgers' equation, f(u) = u^2/2, where the characteristic speed is f'(u) = u), the answer splits cleanly into two cases decided by which side is faster. If the left state moves faster than the right — u_L > u_R for Burgers — characteristics pile into each other and the only consistent picture is a single jump: a shock travelling at the Rankine-Hugoniot speed s = (f(u_L) - f(u_R)) / (u_L - u_R). The two constants stay constant; a sharp cliff slides between them.

If instead the left state is slower — u_L < u_R for Burgers — the characteristics fan apart and leave a wedge with no information in it. Filling that wedge with a shock would be allowed by Rankine-Hugoniot but forbidden by the entropy condition (it would be a forbidden rarefaction shock, with characteristics emerging from the discontinuity instead of crashing into it). The physical fill is a rarefaction wave: a smooth fan in which u slides continuously from u_L to u_R, with the value at each ray x/t given by inverting the characteristic speed, f'(u) = x/t. Outside the fan the two constants persist.

Burgers:  u_t + (u^2/2)_x = 0,  speed f'(u) = u

case u_L > u_R   (compression)      case u_L < u_R   (expansion)
  SHOCK, one ray x = s t              RAREFACTION FAN
  s = (u_L + u_R)/2                    u = x/t  for  u_L < x/t < u_R

   t |   u_L \  u_R                     t |  u_L | / / / | u_R
     |       \                            |      |/ / /|
     |        \                           |      / / /
     +---------\------ x                  +-----/-/-/------ x
  one jump, characteristics IN        smooth fan, characteristics OUT
The two outcomes of a convex-flux Riemann problem: a single entropy shock when states compress, a spreading rarefaction fan when they expand.

Why we still distrust the shock: vanishing viscosity

The entropy condition told us which jumps to keep, but it can feel like a rule handed down from above. There is a more physical way to see where it comes from, and it is the deepest idea in this guide. A real fluid or traffic stream is never perfectly inviscid; there is always a tiny bit of diffusion smearing things out. So instead of u_t + f(u)_x = 0, study the regularized equation u_t + f(u)_x = epsilon u_xx, with a small positive epsilon. That extra u_xx term is exactly the smoothing of the heat equation — it forbids true discontinuities and keeps every solution smooth.

Now take the limit epsilon -> 0. The smooth solutions of the viscous equation converge to a particular weak solution of the inviscid one — and remarkably, this vanishing viscosity limit always lands on the entropy solution, never on the spurious rarefaction shock. The viscosity selects the physical answer for you. A genuine shock survives the limit as a thin smooth transition layer (of width about epsilon) collapsing to a jump; a forbidden rarefaction shock cannot survive, because no small-viscosity profile can hold it together. That is the honest origin of the entropy condition: it is the fingerprint of a vanished diffusion.

Two namesakes, one idea: viscosity solutions

The phrase viscosity solution is used in two related but distinct ways, and it is worth being honest about the overlap. The first is the elementary one above: the weak solution obtained as the epsilon -> 0 limit of the viscous regularization — the vanishing-viscosity solution of a conservation law, which coincides with the entropy solution and is unique. This is the meaning that completes the Riemann story.

The second is a broader modern notion, also called a viscosity solution, for fully nonlinear first-order and second-order equations such as Hamilton-Jacobi equations. There the idea is not to add diffusion and take a limit, but to test the (possibly non-smooth) solution against smooth functions that touch it from above or below, demanding the right inequality at each contact point. It is a brilliant generalization that gives existence and uniqueness for equations where classical derivatives simply do not exist. The name honours the same ancestor — vanishing viscosity — even though the working definition no longer mentions epsilon.

Solving a Riemann problem, step by step

Here is the whole method for a single conservation law with convex flux, the recipe that every cell boundary in a simulation runs. It uses everything from this rung: characteristic speeds, the Rankine-Hugoniot jump condition, the entropy rule, and the self-similar x/t structure.

  1. Read off the two states u_L and u_R and compute their characteristic speeds f'(u_L) and f'(u_R). Everything that follows depends only on comparing these two speeds.
  2. If the left characteristic is faster, f'(u_L) > f'(u_R), the waves compress: use a single shock. Compute its speed from Rankine-Hugoniot, s = (f(u_L) - f(u_R)) / (u_L - u_R), and place the jump on the ray x = s t.
  3. If the left characteristic is slower, f'(u_L) < f'(u_R), the waves expand: use a rarefaction fan. Inside the wedge f'(u_L) < x/t < f'(u_R), set the value by solving f'(u) = x/t for u; outside it, keep u_L on the left and u_R on the right.
  4. Check the entropy condition on any shock you kept: characteristics must run into it (f'(u_L) > s > f'(u_R)). If they would run out, you have written down the forbidden solution — the physical answer there is a rarefaction, not a shock.

Two honest caveats before you trust the recipe everywhere. First, this clean two-case dichotomy relies on a convex (or concave) flux; a flux with an inflection point — like the cubic in some traffic and oil-flow models — can produce composite waves that mix a shock and a fan, and the construction needs more care. Second, for a first-order hyperbolic system of several equations, the single jump becomes a sequence of waves, one per characteristic field, joined by intermediate constant states; the solver finds those states, but only weak entropy solutions of strictly hyperbolic systems are guaranteed unique under the conditions this rung assumed. Global theory for large data in systems remains genuinely hard.