This book addresses an important class of mathematical problems (the Riemann problem) for first-order hyperbolic partial differential equations (PDEs). Such PDEs arise in applications such as fluid dynamics, traffic flow, water waves, and electromagnetic waves. The solution of the Riemann problem captures essential information about such models, and is the key ingredient in modern numerical methods for their solution.
The book covers the fundamental ideas related to classical Riemann solutions, including their special structure and the types of waves that arise, as well as the ideas behind fast approximate solvers for the Riemann problem. The emphasis is on the general ideas, but each chapter delves into a particular application.
It is assumed that the reader has some knowledge of hyperbolic problems in advance. This book is intended to supplement rather than replace standard textbooks on the theory and numerical solution of hyperbolic PDEs. It should also be useful as a tool for students or researchers seeking to better understand the nature of Riemann solutions to a particular hyperbolic system.
The notation generally follows that of (LeVeque 2002), but many other books cover this basic material, including for example (Hesthaven 2018), (LeVeque 1990),(Toro 2013), or (Trangenstein 2009).
This book is available in three formats:
The traditional print medium, in the form of a physical book.
As a collection of Jupyter notebooks with executable code and interactive animations, available from the Github repository https://github.com/clawpack/riemann_book. These are not meant to be read on Github, but copied to a local machine or cloud service and run there; see below.
As a set of webpages that are rendered from the Jupyter notebooks. These webpages contain some animations, but the interactive widgets from the notebooks do not work and it is not possible to modify and re-run cells.
For the full experience, run the notebooks!
Most of the figures in this book are generated by Python programs. Most of the code for those figures is in files in the Github repository linked above, but some of it is included inline in the text at the point where each figure appears. The reader may choose to skip the code sections, especially on a first reading.
In the electronic version of this book, each chapter is a Jupyter notebook. The Jupyter Notebook is a free, open-source web application that allows you to create and share documents that contain live code, equations, visualizations and explanatory text. The notebooks that form this text have some additional benefits not present in the print version:
Although some Python code is included directly in the notebooks, for more clarity much of the code has been "hidden" in Python modules that are imported near the top of each module. We also provide links in each notebook (and each chapter of the printed book) to the online location of these modules in case you wish to dive deeper into the code. Most of this code is in the exact_solvers subdirectory of the Github repository. Other code used primarily for producing plots can be found in the utils subdirectory.
In order to run the code in the Jupyter notebook version of the book, you will need to have certain tools and libraries installed on a computer, either locally or in the cloud. There are multiple convenient ways to do this.
Dockerfile
that is included in the Github repository.This book consists of several parts, each divided into several chapters (as independent Jupyter notebooks). The printed book contains only the first two parts, which cover the fundamentals of exact and approximate solutions of Riemann problems; the remaining parts consist of online notebooks that delve into more advanced topics. In a graduate course on hyperbolic conservation laws, the first two parts could be incorporated into the curriculum, while the later chapters might provide suggestions for student projects.
Part I covers the classical theory of the Riemann problem and its solution, introducing the reader to essential concepts including characteristics; similarity solutions; shock waves and the Rankine-Hugoniot jump conditions; rarefactions and Riemann invariants; genuinely nonlinear and linearly degenerate waves; and entropy conditions. Building up from scalar hyperbolic PDEs and linear systems, it culminates with discussions of the full Riemann solution for the shallow water and Euler systems.
Part II introduces approximate Riemann solvers, which are an essential tool in numerical algorithms for hyperbolic PDEs. This part discusses the most important approaches to such solvers: from simple Lax-Friedrichs and HLL solvers to linearizations, including Roe solvers. Potential issues with these methods (such as the need for entropy fixes and lack of positivity) are addressed. Part II concludes with comparisons of canonical approximate solvers for the shallow water and Euler systems.
The Index notebook contains links to the chapters of Parts I and II.
The remaining parts are still a work in progress at the time of this writing. Some additional notebooks can be found in the Github repository and additional topics may be added at a later date.
Part III examines various complications that may arise when the flux function depends explicitly on the spatial coordinate. In particular, we study Riemann problems in which the flux function is also discontinuous at the same point where the initial data is discontinuous.
Part IV focuses on models with additional (non-hyperbolic) source terms, such as traffic flow with on- and off-ramps, shallow water with variable bathymetry, and fluid dynamics in the presence of gravity or chemical reactions.
Part V focuses on non-classical problems such as non-convex conservation laws and pressureless gas.
Finally, in Part VI we consider some multidimensional applications.