In [4]:
from IPython.core.display import HTML
def css_styling():
styles = open("./styles/custom.css", "r").read()
return HTML(styles)
css_styling()
Out[4]:
There are a number of key theory results that we need when solving the Riemann problem, written as $$ \partial_t {\bf q} + \partial_x {\bf f}({\bf q}) = {\bf 0}, \qquad {\bf q}(x, t=0) = \begin{cases} {\bf q}_l & x < 0, \\ {\bf q}_r & x > 0, \end{cases} $$ where the left and right states ${\bf q}_{l, r}$ are constant.
We need to show that the solution is self-similar, which in this case means the solution can be written as a function of one variable, ${\bf q} \equiv {\bf q}(\xi)$ where $\xi = x/t$.
First, it is obvious that the equation defining the conservation law, $$ \partial_t {\bf q} + \partial_x {\bf f}({\bf q}) = {\bf 0}, $$ is scale-free. That is, if we change coordinates by any constant scaling to $t' = a t$ and $x' = a x$ where $a > 0$, the conservation law is unchanged in form, $$ \partial_{t'} {\bf q} + \partial_{x'} {\bf f}({\bf q}) = {\bf 0}. $$
Second, we need the initial data to also be scale free. For the Riemann problem this is clearly true: applying the same scaling to the initial data leaves it unchanged.
Combining these results we see that the solution must be scale free so that if $\xi = x / t$ is constant (so that $x$ and $t$ are scaled in the same way), the solution must be constant. So ${\bf q} \equiv {\bf q}(\xi)$.
We will often think of $\xi$ as a spatial coordinate, by considering the result at a fixed time $t = T$, say.
For sections of the solution that are differentiable, we can take two steps. First we can write the conservation law in the quasilinear form $$ \partial_t {\bf q} + \frac{\partial {\bf f}}{\partial {\bf q}} \partial_x {\bf q} = {\bf 0}. $$ Second we can use the self-similarity to replace the partial derivatives, using $$ \begin{align} \partial_t & = \frac{\partial \xi}{\partial t} \partial_{\xi} & \partial_x & = \frac{\partial \xi}{\partial x} \partial_{\xi} \\ & = -\frac{\xi}{t} \partial_{\xi} & & = \frac{1}{t} \partial_{\xi}, \end{align} $$ to get $$ \frac{1}{t} \left( \frac{\partial {\bf f}}{\partial {\bf q}} - \xi \textrm{Id} \right) \partial_{\xi} {\bf q} = {\bf 0}. $$
For $t > 0$ there are two possible cases:
We note two consequences from this. First, it only makes sense if the eigenvalues of the Jacobian are real. This is one of the requirements of the system being hyperbolic: the eigenvalues must be real and the eigenvectors independent. Second, if we denote the eigenvalue by $\lambda$ and its associated eigenvector by ${\bf r}$, then we have $$ \begin{align} && \lambda({\bf q}) & = \xi \\ \implies && \frac{\partial \lambda}{\partial {\bf q}} \frac{\partial {\bf q}}{\partial \xi} & = 1, \end{align} $$ by differentiating with respect to $\xi$. Then, as $\partial_{\xi} {\bf q}$ is, as noted above, an eigenvector, we write $$ \frac{\partial {\bf q}}{\partial \xi} = \alpha {\bf r}, $$ and combining the two results determines the proportionality constant $\alpha$ as $$ \alpha = \left[ {\bf r} \cdot \frac{\partial \lambda}{\partial {\bf q}} \right]^{-1} $$ Therefore we have the ordinary differential equation for ${\bf q}$ $$ \frac{\partial {\bf q}}{\partial \xi} = \frac{{\bf r}}{{\bf r} \cdot \frac{\partial \lambda}{\partial {\bf q}}}. $$ This gives a continuous solution for ${\bf q}$, provided that ${\bf r} \cdot \frac{\partial \lambda}{\partial {\bf q}} \ne 0$. This is the requirement that the solution across this wave is genuinely nonlinear.
A final consequence of this section is the number of waves. If the system has size $N$ then there are $N$ eigenvalues, and hence $N$ waves. These will separate constant states, so we expect the solution to consist of $N+1$ constant states separated by $N$ waves.
There remains only one possibility: the solution is not a continuous function of the similarity coordinate $\xi$. That such solutions may exist is no surprise, as it is true of the initial data.
When the solution is discontinuous we must use the weak form $$ \frac{\textrm{d}}{\textrm{d}t} \int_{x_l}^{x_r} {\bf q} \, \textrm{d}x = {\bf f}({\bf q}(x_l)) - {\bf f}({\bf q}(x_r)). $$
Let us assume that the solution is discontinuous along the path $X(t)$. Consider the volume close to this discontinuity, so that $x_r$ and $x_l$ remain fixed points, but $x_r - x_l = \epsilon \ll 1$. We then split the integrals at the shock, as the data jumps there. In the weak form this gives $$ \begin{align} && \frac{\textrm{d}}{\textrm{d}t} \int_{x_l}^{X(t)} {\bf q} \, \textrm{d}x + \frac{\textrm{d}}{\textrm{d}t} \int_{X(t)}^{x_r} {\bf q} \, \textrm{d}x & = {\bf f}({\bf q}(x_l)) - {\bf f}({\bf q}(x_r)) \\ \implies && \frac{\textrm{d}X}{\textrm{d}t} \left\{ {\bf q} \left( X(t)_{-}, t \right) - {\bf q} \left( X(t)_{+}, t \right) \right\} + \int_{x_l}^{x_r} \frac{\partial {\bf q}}{\partial t} \, \textrm{d}x & = {\bf f}({\bf q}(x_l)) - {\bf f}({\bf q}(x_r)). \end{align} $$ Taking the limit $\epsilon \to 0$ the integral vanishes (as the width of the integral is $\epsilon$) and we have $x_l \to X(t)_{-}$ and $x_r \to X(t)_{+}$. We are left with the Rankine-Hugoniot conditions $$ \frac{\textrm{d}X}{\textrm{d}t} \left[ {\bf q} \right] = \left[ {\bf f}({\bf q}) \right]. $$ Here the notation $\left[ {\bf u} \right]$ means the jump in the quantity ${\bf u}$ across the discontinuity.
As the solution must be self-similar, the shock speed must be constant, $\textrm{d}X / \textrm{d}t = V_s$, giving the standard form $$ V_s \left[ {\bf q} \right] = \left[ {\bf f}({\bf q}) \right]. $$
This is not the most general solution covering all cases, but is sufficient for most cases of interest.