In Lesson 0 we wrote down the balance law form $$ \partial_t {\bf q} + \partial_x {\bf f}({\bf q}) = {\bf s}({\bf q}). $$
For the purposes of solving the Riemann problem we shall restrict to conservation laws $$ \partial_t {\bf q} + \partial_x {\bf f}({\bf q}) = {\bf 0} $$ which retain all of the key features of balance laws over small regions of space and time.
In Lesson 0 we stated (without showing!) that, for a generic conservation law, we can find discontinuous solutions. An example of this occuring can be seen in Ketcheson's lesson on the traffic flow equation. When this occurs the conservation law makes no sense. Instead we should consider the weak form.
Consider single scalar quantity $q$ on a one-dimensional region of space $[x_l, x_r]$. The total amount of "stuff" inside this region is $$ \textrm{Total stuff} = \int_{x_l}^{x_r} q \, \textrm{d}x. $$ The flux of "stuff" through the left boundary of the region is $f(q(x_l))$. The flux of stuff through the right boundary of the region is $-f(q(x_r))$ (the choice of sign is conventional, but must be consistent with flow in through the left boundary). Therefore the total rate of change of stuff is $$ \frac{\textrm{d}}{\textrm{d}t} \int_{x_l}^{x_r} q \, \textrm{d}x = f(q(x_l)) - f(q(x_r)). $$
This form is perfectly valid if the solution is discontinuous, as no spatial derivatives appear. However, we need to show that it is equivalent to the standard conservation law form.
We know that the standard form only holds when the derivative makes sense. So we will assume that the solution (and hence the flux) is differentiable. We then note that the right hand side of the form above can be written as $$ f(q(x_l)) - f(q(x_r)) = - \int_{x_l}^{x_r} \frac{\textrm{d}}{\textrm{d}x} f(q) \, \textrm{d}x. $$ This means we can write the integral form above as $$ \int_{x_l}^{x_r} \left( \partial_t q + \partial_x f(q) \right) \, \textrm{d}x = 0. $$ This only holds if the integrand vanishes, which is the standard conservation law form.
At first glance this is very simple. It appears that when we write down a conservation law $$ \partial_t {\bf q} + \partial_x {\bf f}({\bf q}) = {\bf 0} $$ we really mean that we're solving 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)). $$ With a similar appeal to Gauss' theorem we can extend this to multiple dimensions by considering an arbitrary volume $V$ with boundary $\partial V$. The weak form $$ \frac{\textrm{d}}{\textrm{d}t} \int_{V} {\bf q} \, \textrm{d}{\bf x} = \oint_{\partial V} {\bf f}({\bf q}) \cdot \textrm{d}{\bf S} $$ is then equivalent to the strong conservation law form $$ \partial_t {\bf q} + \nabla \cdot {\bf f}({\bf q}) = {\bf 0}. $$
However, this equivalence is one way only. That is, any weak form is associated with a unique strong form. However, any strong form can be associated with infinitely many weak forms.
To see an example of this, consider Burger's equation $$ \partial_t q + \partial_x \left( \tfrac{1}{2} q^2 \right) = 0. $$ If the solution is differentiable then Burger's equation is equivalent to the non-conservation law equation $$ \partial_t q + q \partial_x q = 0, $$ which is similar to the advection equation.
Now consider the equation $$ \partial_t \left( \tfrac{1}{n} q^n \right) + \partial_x \left( \tfrac{1}{n+1} q^{n+1} \right) = 0. $$ It is clear that, for differentiable solutions, and for any $n$ that is not equation to $0, -1$ this equation is equivalent to the non-conservation form of Burger's equation $$ \partial_t q + q \partial_x q = 0. $$ However, each equation has a different weak form. More importantly, we will show later that each equation has different behaviour for discontinuous solutions.
Therefore we will always assume that the weak solution is the fundamental form. When deriving the system of equations to solve we should always do it using the integral form, from which we can get an associated strong form. When writing the equations we typically use the strong form for convenience, but the primacy of the weak form should remain in the back of your mind.
In [1]:
from IPython.core.display import HTML
def css_styling():
styles = open("./styles/custom.css", "r").read()
return HTML(styles)
css_styling()
Out[1]: