This is the final version using the Leveque solver.