{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import HTML\n", "css_file = './custom.css'\n", "HTML(open(css_file, \"r\").read())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###### Content provided under a Creative Commons Attribution license, CC-BY 4.0; code under MIT License. (c)2014 [David I. Ketcheson](http://davidketcheson.info)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### version 0.1 - May 2014" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Traffic flow" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this lesson, we'll investigate a conservation law that models the flow of traffic. This model is sometimes referred to as the Lighthill-Whitham-Richards (or LWR) traffic model.\n", "\n", "Recall the continuity equation from [Lesson 1](Lesson_01_Advection.ipynb):\n", "\n", "$$q_t + (uq)_x = 0.$$\n", "\n", "Now we will think of $q$ as the density of cars on a road, traveling with velocity $u$. Note that we're not keeping track of the individual cars, but just of the average number of cars per unit length of road. Thus $q=0$ represents an empty stretch of road, and we can choose the units so that $q=1$ represents bumper-to-bumper traffic.\n", "\n", "We'll also choose units so that the speed limit is $u_\\text{max}=1$, and assume that drivers never go faster than this (yeah, right!) If we assume that drivers always travel at a single uniform velocity, we obtain once again the advection equation. But we all know that's not accurate in practice -- cars go faster in light traffic and slower when there is congestion. The simplest way to incorporate this effect is to make the velocity a linearly decreasing function of the density:\n", "\n", "$$u(q) = 1 - q.$$\n", "\n", "Notice that $u$ goes to zero as $q$ approaches the maximum density of 1, while $u$ goes to the maximum value of 1 as traffic density goes to zero. Obviously, both $q$ and $u$ should always stay in the interval $[0,1]$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](./figures/LWR-Velocity.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Combining the two equations above, our conservation law says\n", "\n", "$$q_t + (q (1-q))_x = 0.$$\n", "\n", "The function $q(1-q)$ is the flux, or the rate of flow of cars. Notice how the flux is zero when there are no cars and also when the road is completely full. The maximum flow of traffic actually occurs when the road is half full:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": [ "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib as mpl\n", "mpl.rcParams['font.size'] = 20\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "q = np.linspace(0,1)\n", "f = q*(1.-q)\n", "plt.plot(q,f,linewidth=2)\n", "plt.xlabel('q'); plt.ylabel('flux'); " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This equation is fundamentally different from the advection equation because the flux is **nonlinear**. This fact will have dramatic consequences for both the behavior of solutions and our numerical methods. But we can superficially make this equation look like the advection equation by using the chain rule to write\n", "\n", "$$f(q)_x = f'(q) q_x = (1-2q)q_x.$$\n", "\n", "Then we have\n", "\n", "$$q_t + (1-2q)q_x = 0.$$\n", "\n", "This is like the advection equation, but with a velocity $1-2q$ that depends on the density of cars. The value $f'(q)=1-2q$ is referred to as the *characteristic speed*. This characteristic speed is not the speed at which cars move (notice that it can even be negative!) Rather, it is the speed at which *information* is transmitted along the road." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Shock waves (traffic jams)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's use the *Lax-Friedrichs method* from [Lesson 1](Lesson_01_Advection.ipynb) to solve the LWR traffic model." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "m = 400 # number of cells\n", "dx = 1./m # Size of 1 grid cell\n", "x = np.arange(-dx/2, 1.+dx/2, dx)\n", "\n", "t = 0. # Initial time\n", "T = 0.5 # Final time\n", "dt = 0.9 * dx # Time step\n", "\n", "Q = 0.9*np.exp(-100*(x-0.5)**2)\n", "Qnew = np.empty(Q.shape)\n", "QQ = [Q]\n", "\n", "while t < T:\n", " \n", " Qnew[1:-1] = 0.5*(Q[:-2]+Q[2:]) - 0.5*dt/dx * (Q[2:]*(1-Q[2:])-Q[:-2]*(1-Q[:-2]))\n", " \n", " Q = Qnew.copy()\n", " Q[0] = Q[-2]\n", " Q[-1] = Q[1]\n", " t = t + dt\n", " QQ.append(Q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To plot the solution, we'll use a function that you can find in the `util` directory of the course." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "\n", " \n", " \n", " Once \n", " Loop \n", " Reflect \n", "
\n", "\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import sys\n", "sys.path.append('./util')\n", "from ianimate import ianimate\n", "\n", "ianimate(x,QQ)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Starting from an initially smooth distribution of cars, we see that the solution evolves into something discontinuous! What's going on?\n", "\n", "Naturally, the cars in the low-density region behind the peak initially drive faster than the cars in the most congested region, ahead of them. This leads to a steepening of the rear part of the traffic flow, and eventually there is a traffic jam: cars coming from the back have an open road, until suddenly they reach a highly congested area and must slam on the brakes. Sound familiar?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Recall our discussion of the CFL condition for advection. To apply the CFL condition to a nonlinear problem, we use the characteristic velocity (in this case $1-2q$) in place of the velocity $a$. For this problem, how large can we take the time step without violating the CFL condition? \n", "\n", "1. In the cell below, set things up to find out what happens when cars reach a red light. Place the red light at $x=1$ and set $q=1$ in the interval $0.8f'(q_r)$. In fact the shock speed must lie between these characteristic speeds:\n", "\n", "$$f'(q_l) > s > f'(q_r).$$\n", "\n", "We say that the characteristics *impinge* on the shock. This is known as the *entropy condition*, because in fluid dynamics such a shock obeys the 2nd law of thermodynamics.\n", "\n", "On the other hand, if $f'(q_l)< f'(q_r)$, then a rarefaction wave results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Riemann problem" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The problems you set up in the red and green light exercises above are examples of what is known as a Riemann problem. A Riemann problem consists of a hyperbolic conservation law, together with piecewise-constant initial data with a single point of discontinuity:\n", "\n", "$$q(x,0) = \\begin{cases} q_l & x < x_0 \\\\ q_r & x > x_0 \\end{cases}$$\n", "\n", "In fact, our entire finite volume method is built on approximately solving Riemann problems. Since the solution is approximated by a constant function in each cell, a Riemann problem arises at each interface between two cells. The upwind method for advection is based on exactly solving the Riemann problem to find the flux (of course, the Riemann problem for advection is extremely simple to solve). The Lax-Friedrichs flux is based on approximating the solution to the Riemann problem.\n", "\n", "For nonlinear systems of hyperbolic PDEs, like the Euler equations that we'll study in [Lesson 4](Lesson_04_Fluid_dynamics.ipynb), the solution of the Riemann problem can be quite complicated. Computational methods for solving such systems are usually based on approximate Riemann solvers. We won't go into the theory of Riemann problems or approximate Riemann solvers in this course." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.9" } }, "nbformat": 4, "nbformat_minor": 0 }