{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, C.D. Cooper, G.F. Forsyth."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Riding the wave"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Numerical schemes for hyperbolic PDEs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Welcome back! This is the second notebook of *Riding the wave: Convection problems*, the third module of  [\"Practical Numerical Methods with Python\"](https://openedx.seas.gwu.edu/courses/course-v1:MAE+MAE6286+2017/about). \n",
    "\n",
    "The first notebook of this module discussed conservation laws and developed the non-linear traffic equation. We learned about the effect of the wave speed on the stability of the numerical method, and on the CFL number. We also realized that the forward-time/backward-space difference scheme really has many limitations: it cannot deal with wave speeds that move in more than one direction. It is also first-order accurate in space and time, which often is just not good enough. This notebook will introduce some new numerical schemes for conservation laws, continuing with the traffic-flow problem as motivation."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Red light!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's explore the behavior of different numerical schemes for a moving shock wave. In the context of the traffic-flow model of the previous notebook, imagine a very busy road and a red light at $x=4$. Cars accumulate quickly in the front, where we have the maximum allowed density of cars between $x=3$ and $x=4$, and there is an incoming traffic of 50% the maximum allowed density $(\\rho = 0.5\\rho_{\\rm max})$. \n",
    "\n",
    "Mathematically, this is:\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\rho(x,0) = \\left\\{\n",
    "\\begin{array}{cc}\n",
    "0.5 \\rho_{\\rm max} & 0 \\leq x < 3  \\\\\n",
    "\\rho_{\\rm max} & 3 \\leq x \\leq 4 \\\\\n",
    "\\end{array}\n",
    "\\right.\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "Let's find out what the initial condition looks like."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "from matplotlib import pyplot\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set the font family and size to use for Matplotlib figures.\n",
    "pyplot.rcParams['font.family'] = 'serif'\n",
    "pyplot.rcParams['font.size'] = 16"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rho_red_light(x, rho_max):\n",
    "    \"\"\"\n",
    "    Computes the \"red light\" initial condition with shock.\n",
    "    \n",
    "    Parameters\n",
    "    ----------\n",
    "    x : numpy.ndaray\n",
    "        Locations on the road as a 1D array of floats.\n",
    "    rho_max : float\n",
    "        The maximum traffic density allowed.\n",
    "    \n",
    "    Returns\n",
    "    -------\n",
    "    rho : numpy.ndarray\n",
    "        The initial car density along the road\n",
    "        as a 1D array of floats.\n",
    "    \"\"\"\n",
    "    rho = rho_max * numpy.ones_like(x)\n",
    "    mask = numpy.where(x < 3.0)\n",
    "    rho[mask] = 0.5 * rho_max\n",
    "    return rho"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set parameters.\n",
    "nx = 81  # number of locations on the road\n",
    "L = 4.0  # length of the road\n",
    "dx = L / (nx - 1)  # distance between two consecutive locations\n",
    "nt = 40  # number of time steps to compute\n",
    "rho_max = 10.0  # maximum taffic density allowed\n",
    "u_max = 1.0  # maximum speed traffic\n",
    "\n",
    "# Get the road locations.\n",
    "x = numpy.linspace(0.0, L, num=nx)\n",
    "\n",
    "# Compute the initial traffic density.\n",
    "rho0 = rho_red_light(x, rho_max)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the initial traffic density.\n",
    "fig = pyplot.figure(figsize=(6.0, 4.0))\n",
    "pyplot.xlabel(r'$x$')\n",
    "pyplot.ylabel(r'$\\rho$')\n",
    "pyplot.grid()\n",
    "line = pyplot.plot(x, rho0,\n",
    "                   color='C0', linestyle='-', linewidth=2)[0]\n",
    "pyplot.xlim(0.0, L)\n",
    "pyplot.ylim(4.0, 11.0)\n",
    "pyplot.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The question we would like to answer is: **How will cars accumulate at the red light?** \n",
    "\n",
    "We will solve this problem using different numerical schemes, to see how they perform. These schemes are:\n",
    "\n",
    "   * Lax-Friedrichs\n",
    "   * Lax-Wendroff\n",
    "   * MacCormack"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Before we do any coding, let's think about the equation a little bit. The wave speed $u_{\\rm wave}$ is $-1$ for $\\rho = \\rho_{\\rm max}$ and $\\rho \\leq \\rho_{\\rm max}/2$, making all velocities negative. We should see a solution moving left, maintaining the shock geometry.\n",
    "\n",
    "![squarewave](./figures/squarewave.png)\n",
    "#### Figure 1. The exact solution is a shock wave moving left.\n",
    "\n",
    "Now to some coding! First, let's define some useful functions and prepare to make some nice animations later."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def flux(rho, u_max, rho_max):\n",
    "    \"\"\"\n",
    "    Computes the traffic flux F = V * rho.\n",
    "    \n",
    "    Parameters\n",
    "    ----------\n",
    "    rho : numpy.ndarray\n",
    "       Traffic density along the road as a 1D array of floats.\n",
    "    u_max : float\n",
    "        Maximum speed allowed on the road.\n",
    "    rho_max : float\n",
    "        Maximum car density allowed on the road.\n",
    "    \n",
    "    Returns\n",
    "    -------\n",
    "    F : numpy.ndarray\n",
    "        The traffic flux along the road as a 1D array of floats.\n",
    "    \"\"\"\n",
    "    F = rho * u_max * (1.0 - rho / rho_max)\n",
    "    return F"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Before we investigate different schemes, let's create the function to update the Matplotlib figure during the animation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib import animation\n",
    "from IPython.display import HTML"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def update_plot(n, rho_hist):\n",
    "    \"\"\"\n",
    "    Update the line y-data of the Matplotlib figure.\n",
    "    \n",
    "    Parameters\n",
    "    ----------\n",
    "    n : integer\n",
    "        The time-step index.\n",
    "    rho_hist : list of numpy.ndarray objects\n",
    "        The history of the numerical solution.\n",
    "    \"\"\"\n",
    "    fig.suptitle('Time step {:0>2}'.format(n))\n",
    "    line.set_ydata(rho_hist[n])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lax-Friedrichs scheme"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Recall the conservation law for vehicle traffic, resulting in the following equation for the traffic density:\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\frac{\\partial \\rho}{\\partial t} + \\frac{\\partial F}{\\partial x} = 0\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "$F$ is the *traffic flux*, which in the linear traffic-speed model is given by: \n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "F = \\rho u_{\\rm max} \\left(1-\\frac{\\rho}{\\rho_{\\rm max}}\\right)\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "In the time variable, the natural choice for discretization is always a forward-difference formula; time invariably moves forward!\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\frac{\\partial \\rho}{\\partial t}\\approx \\frac{1}{\\Delta t}( \\rho_i^{n+1}-\\rho_i^n )\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "As is usual, the discrete locations on the 1D spatial grid are denoted by indices $i$ and the discrete time instants are denoted by indices $n$.\n",
    "\n",
    "In a convection problem, using first-order discretization in space leads to excessive numerical diffusion (as you probably observed in [Lesson 1 of Module 2](https://nbviewer.jupyter.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/02_spacetime/02_01_1DConvection.ipynb)). The simplest approach to get second-order accuracy in space is to use a central difference:\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\frac{\\partial F}{\\partial x} \\approx \\frac{1}{2\\Delta x}( F_{i+1}-F_{i-1})\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "But combining these two choices for time and space discretization in the convection equation has catastrophic results! The \"forward-time, central scheme\" (FTCS) is **unstable**. (Go on: try it; you know you want to!)\n",
    "\n",
    "The Lax-Friedrichs scheme was proposed by Lax (1954) as a clever trick to stabilize the forward-time, central scheme. The idea was to replace the solution value at $\\rho^n_i$ by the average of the values at the neighboring grid points. If we do that replacement, we get the following discretized equation: \n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\frac{\\rho_i^{n+1}-\\frac{1}{2}(\\rho^n_{i+1}+\\rho^n_{i-1})}{\\Delta t} = -\\frac{F^n_{i+1}-F^n_{i-1}}{2 \\Delta x}\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "Take a careful look: the difference formula no longer uses the value at $\\rho^n_i$ to obtain $\\rho^{n+1}_i$. The stencil of the Lax-Friedrichs scheme is slightly different than that for the forward-time, central scheme."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Stencil of the forward-time central scheme](./figures/FD-stencil_FTCS.png)\n",
    "#### Figure 2. Stencil of the forward-time/central scheme.\n",
    "\n",
    "![Stencil of the Lax-Friedrichs scheme](./figures/FD-stencil_LF.png)\n",
    "#### Figure 3. Stencil of the Lax-Friedrichs scheme."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This numerical discretization is **stable**. Unfortunately, substituting  $\\rho^n_i$ by the average of its neighbors introduces a first-order error. _Nice try, Lax!_\n",
    "\n",
    "To implement the scheme in code, we need to isolate the value at the next time step, $\\rho^{n+1}_i$, so we can write a time-stepping loop:\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\rho_i^{n+1} = \\frac{1}{2}(\\rho^n_{i+1}+\\rho^n_{i-1}) - \\frac{\\Delta t}{2 \\Delta x}(F^n_{i+1}-F^n_{i-1})\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "The function below implements Lax-Friedrichs for our traffic model.  All the schemes in this notebook are wrapped in their own functions to help with displaying animations of the results.  This is also good practice for developing modular, reusable code.\n",
    "\n",
    "In order to display animations, we're going to hold the results of each time step in the variable `rho`, a 2D array.  The resulting array `rho_n` has `nt` rows and `nx` columns."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def lax_friedrichs(rho0, nt, dt, dx, bc_values, *args):\n",
    "    \"\"\"\n",
    "    Computes the traffic density on the road \n",
    "    at a certain time given the initial traffic density.\n",
    "    Integration using Lax-Friedrichs scheme.\n",
    "    \n",
    "    Parameters\n",
    "    ----------\n",
    "    rho0 : numpy.ndarray\n",
    "        The initial traffic density along the road\n",
    "        as a 1D array of floats.\n",
    "    nt : integer\n",
    "        The number of time steps to compute.\n",
    "    dt : float\n",
    "        The time-step size to integrate.\n",
    "    dx : float\n",
    "        The distance between two consecutive locations.\n",
    "    bc_values : 2-tuple of floats\n",
    "        The value of the density at the first and last locations.\n",
    "    args : list or tuple\n",
    "        Positional arguments to be passed to the flux function.\n",
    "    \n",
    "    Returns\n",
    "    -------\n",
    "    rho_hist : list of numpy.ndarray objects\n",
    "        The history of the car density along the road.\n",
    "    \"\"\"\n",
    "    rho_hist = [rho0.copy()]\n",
    "    rho = rho0.copy()\n",
    "    for n in range(nt):\n",
    "        # Compute the flux.\n",
    "        F = flux(rho, *args)\n",
    "        # Advance in time using Lax-Friedrichs scheme.\n",
    "        rho[1:-1] = (0.5 * (rho[:-2] + rho[2:]) -\n",
    "                     dt / (2.0 * dx) * (F[2:] - F[:-2]))\n",
    "        # Set the value at the first location.\n",
    "        rho[0] = bc_values[0]\n",
    "        # Set the value at the last location.\n",
    "        rho[-1] = bc_values[1]\n",
    "        # Record the time-step solution.\n",
    "        rho_hist.append(rho.copy())\n",
    "    return rho_hist"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Lax-Friedrichs with $\\frac{\\Delta t}{\\Delta x}=1$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are now all set to run! First, let's try with CFL=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set the time-step size based on CFL limit.\n",
    "sigma = 1.0\n",
    "dt = sigma * dx / u_max  # time-step size\n",
    "\n",
    "# Compute the traffic density at all time steps.\n",
    "rho_hist = lax_friedrichs(rho0, nt, dt, dx, (rho0[0], rho0[-1]),\n",
    "                          u_max, rho_max)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video width=\"432\" height=\"288\" controls autoplay loop>\n",
       "  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAABFlm1kYXQAAAKuBgX//6rcRem9\n",
       "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQ4IHIyNjQzIDVjNjU3MDQgLSBILjI2NC9NUEVHLTQg\n",
       "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE1IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
       "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
       "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
       "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
       "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9OSBsb29r\n",
       "YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
       "ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
       "bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
       "aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49MTAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVz\n",
       "aD0wIHJjX2xvb2thaGVhZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIzLjAgcWNvbXA9MC42MCBx\n",
       "cG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAAA2JZYiE\n",
       "ABH//veIHzLLafk613IR560urR9Q7mffS/DfcIgE1iPo2a/hBQe4UunDkwjd39Qy4TgCKf4HVgFr\n",
       "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\n",
       "\">\n",
       "  Your browser does not support the video tag.\n",
       "</video>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create an animation of the traffic density.\n",
    "anim = animation.FuncAnimation(fig, update_plot,\n",
    "                               frames=nt, fargs=(rho_hist,),\n",
    "                               interval=100)\n",
    "# Display the video.\n",
    "HTML(anim.to_html5_video())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Think"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* What do you see in the animation above? How does the numerical solution compare with the exact solution (a left-traveling shock wave)? \n",
    "* What types of errors do you think we see? \n",
    "* What do you think of the Lax-Friedrichs scheme, so far?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Lax-Friedrichs with $\\frac{\\Delta t}{\\Delta x} = 0.5$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Would the solution improve if we use smaller time steps? Let's check that!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set the time-step size based on CFL limit.\n",
    "sigma = 0.5\n",
    "dt = sigma * dx / u_max  # time-step size\n",
    "\n",
    "# Compute the traffic density at all time steps.\n",
    "rho_hist = lax_friedrichs(rho0, nt, dt, dx, (rho0[0], rho0[-1]),\n",
    "                          u_max, rho_max)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video width=\"432\" height=\"288\" controls autoplay loop>\n",
       "  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAABJa21kYXQAAAKuBgX//6rcRem9\n",
       "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQ4IHIyNjQzIDVjNjU3MDQgLSBILjI2NC9NUEVHLTQg\n",
       "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE1IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
       "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
       "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
       "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
       "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9OSBsb29r\n",
       "YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
       "ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
       "bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
       "aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49MTAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVz\n",
       "aD0wIHJjX2xvb2thaGVhZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIzLjAgcWNvbXA9MC42MCBx\n",
       "cG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAAA2vZYiE\n",
       "ABH//veIHzLLafk613IR560urR9Q7mffS/DfcIgE1iPo2a/hBQe4UunDkwjd39Qy4TgCKf4HVgFr\n",
       "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\n",
       "LjEwMQ==\n",
       "\">\n",
       "  Your browser does not support the video tag.\n",
       "</video>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create an animation of the traffic density.\n",
    "anim = animation.FuncAnimation(fig, update_plot,\n",
    "                               frames=nt, fargs=(rho_hist,),\n",
    "                               interval=100)\n",
    "# Display the video.\n",
    "HTML(anim.to_html5_video())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Dig deeper"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice the strange \"staircase\" behavior on the leading edge of the wave?  You may be interested to learn more about this: a feature typical of what is sometimes called \"odd-even decoupling.\" Last year we published a collection of lessons in Computational Fluid Dynamics, called _CFD Python_, where we discuss [odd-even decoupling](https://nbviewer.jupyter.org/github/barbagroup/CFDPython/blob/14b56718ac1508671de66bab3fe432e93cb59fcb/lessons/19_Odd_Even_Decoupling.ipynb).\n",
    "\n",
    "* How does this solution compare with the previous one, where the Courant number was $\\frac{\\Delta t}{\\Delta x}=1$?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lax-Wendroff scheme"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Lax-Friedrichs method uses a clever trick to stabilize the central difference in space for convection, but loses an order of accuracy in doing so. First-order methods are just not good enough for convection problems, especially when you have sharp gradients (shocks).\n",
    "\n",
    "The Lax-Wendroff (1960) method was the _first_ scheme ever to achieve second-order accuracy in both space and time. It is therefore a landmark in the history of computational fluid dynamics.\n",
    "\n",
    "To develop the Lax-Wendroff scheme, we need to do a bit of work. Sit down, grab a notebook and grit your teeth. We want you to follow this derivation in your own hand. It's good for you! Start with the Taylor series expansion (in the time variable) about $\\rho^{n+1}$:\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\rho^{n+1} = \\rho^n + \\frac{\\partial\\rho^n}{\\partial t} \\Delta t + \\frac{(\\Delta t)^2}{2}\\frac{\\partial^2\\rho^n}{\\partial t^2} + \\ldots\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "For the conservation law with $F=F(\\rho)$, and using our beloved chain rule, we can write:\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\frac{\\partial \\rho}{\\partial t} = -\\frac{\\partial F}{\\partial x} = -\\frac{\\partial F}{\\partial \\rho} \\frac{\\partial \\rho}{\\partial x} = -J \\frac{\\partial \\rho}{\\partial x}\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "where \n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "J = \\frac{\\partial F}{\\partial \\rho} = u _{\\rm max} \\left(1-2\\frac{\\rho}{\\rho_{\\rm max}} \\right)\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "is the _Jacobian_ for the traffic model. Next, we can do a little trickery:\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\frac{\\partial F}{\\partial t} = \\frac{\\partial F}{\\partial \\rho} \\frac{\\partial \\rho}{\\partial t} = J \\frac{\\partial \\rho}{\\partial t} = -J \\frac{\\partial F}{\\partial x}\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "In the last step above, we used the differential equation of the traffic model to replace the time derivative by a spatial derivative. These equivalences imply that\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\frac{\\partial^2\\rho}{\\partial t^2} = \\frac{\\partial}{\\partial x} \\left( J \\frac{\\partial F}{\\partial x} \\right)\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "Let's use all this in the Taylor expansion:\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\rho^{n+1} = \\rho^n - \\frac{\\partial F^n}{\\partial x} \\Delta t + \\frac{(\\Delta t)^2}{2} \\frac{\\partial}{\\partial x} \\left(J\\frac{\\partial F^n}{\\partial x} \\right)+ \\ldots\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "We can now reorganize this and discretize the spatial derivatives with central differences to get the following discrete equation:\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\frac{\\rho_i^{n+1} - \\rho_i^n}{\\Delta t} = -\\frac{F^n_{i+1}-F^n_{i-1}}{2 \\Delta x} + \\frac{\\Delta t}{2} \\left(\\frac{(J \\frac{\\partial F}{\\partial x})^n_{i+\\frac{1}{2}}-(J \\frac{\\partial F}{\\partial x})^n_{i-\\frac{1}{2}}}{\\Delta x}\\right)\n",
    "\\end{equation}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, approximate the rightmost term (inside the parenthesis) in the above equation as follows:\n",
    "\\begin{equation} \\frac{J^n_{i+\\frac{1}{2}}\\left(\\frac{F^n_{i+1}-F^n_{i}}{\\Delta x}\\right)-J^n_{i-\\frac{1}{2}}\\left(\\frac{F^n_i-F^n_{i-1}}{\\Delta x}\\right)}{\\Delta x}\\end{equation}\n",
    "\n",
    "Then evaluate the Jacobian at the midpoints by using averages of the points on either side:\n",
    "\n",
    "\\begin{equation}\\frac{\\frac{1}{2 \\Delta x}(J^n_{i+1}+J^n_i)(F^n_{i+1}-F^n_i)-\\frac{1}{2 \\Delta x}(J^n_i+J^n_{i-1})(F^n_i-F^n_{i-1})}{\\Delta x}.\\end{equation}\n",
    "\n",
    "Our equation now reads:\n",
    "\n",
    "\\begin{align}\n",
    "&\\frac{\\rho_i^{n+1} - \\rho_i^n}{\\Delta t} =  \n",
    "-\\frac{F^n_{i+1}-F^n_{i-1}}{2 \\Delta x} + \\cdots \\\\ \\nonumber \n",
    "&+ \\frac{\\Delta t}{4 \\Delta x^2} \\left( (J^n_{i+1}+J^n_i)(F^n_{i+1}-F^n_i)-(J^n_i+J^n_{i-1})(F^n_i-F^n_{i-1})\\right)\n",
    "\\end{align}\n",
    "\n",
    "Solving for $\\rho_i^{n+1}$:\n",
    "\n",
    "\\begin{align}\n",
    "&\\rho_i^{n+1} = \\rho_i^n - \\frac{\\Delta t}{2 \\Delta x} \\left(F^n_{i+1}-F^n_{i-1}\\right) + \\cdots \\\\ \\nonumber \n",
    "&+ \\frac{(\\Delta t)^2}{4(\\Delta x)^2} \\left[ (J^n_{i+1}+J^n_i)(F^n_{i+1}-F^n_i)-(J^n_i+J^n_{i-1})(F^n_i-F^n_{i-1})\\right]\n",
    "\\end{align}\n",
    "\n",
    "with\n",
    "\n",
    "\\begin{equation}J^n_i = \\frac{\\partial F}{\\partial \\rho} = u_{\\rm max} \\left(1-2\\frac{\\rho^n_i}{\\rho_{\\rm max}} \\right).\\end{equation} \n",
    "\n",
    "Lax-Wendroff is a little bit long.  Remember that you can use \\ slashes to split up a statement across several lines.  This can help make code easier to parse (and also easier to debug!). "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def jacobian(rho, u_max, rho_max):\n",
    "    \"\"\"\n",
    "    Computes the Jacobian for our traffic model.\n",
    "    \n",
    "    Parameters\n",
    "    ----------\n",
    "    rho : numpy.ndarray\n",
    "       Traffic density along the road as a 1D array of floats.\n",
    "    u_max : float\n",
    "        Maximum speed allowed on the road.\n",
    "    rho_max : float\n",
    "        Maximum car density allowed on the road.\n",
    "    \n",
    "    Returns\n",
    "    -------\n",
    "    J : numpy.ndarray\n",
    "        The Jacobian as a 1D array of floats.\n",
    "    \"\"\"\n",
    "    J = u_max * (1.0 - 2.0 * rho / rho_max)\n",
    "    return J"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def lax_wendroff(rho0, nt, dt, dx, bc_values, *args):\n",
    "    \"\"\"\n",
    "    Computes the traffic density on the road \n",
    "    at a certain time given the initial traffic density.\n",
    "    Integration using Lax-Wendroff scheme.\n",
    "    \n",
    "    Parameters\n",
    "    ----------\n",
    "    rho0 : numpy.ndarray\n",
    "        The initial traffic density along the road\n",
    "        as a 1D array of floats.\n",
    "    nt : integer\n",
    "        The number of time steps to compute.\n",
    "    dt : float\n",
    "        The time-step size to integrate.\n",
    "    dx : float\n",
    "        The distance between two consecutive locations.\n",
    "    bc_values : 2-tuple of floats\n",
    "        The value of the density at the first and last locations.\n",
    "    args : list or tuple\n",
    "        Positional arguments to be passed to the\n",
    "        flux and Jacobien functions.\n",
    "    \n",
    "    Returns\n",
    "    -------\n",
    "    rho_hist : list of numpy.ndarray objects\n",
    "        The history of the car density along the road.\n",
    "    \"\"\"\n",
    "    rho_hist = [rho0.copy()]\n",
    "    rho = rho0.copy()\n",
    "    for n in range(nt):\n",
    "        # Compute the flux.\n",
    "        F = flux(rho, *args)\n",
    "        # Compute the Jacobian.\n",
    "        J = jacobian(rho, *args)\n",
    "        # Advance in time using Lax-Wendroff scheme.\n",
    "        rho[1:-1] = (rho[1:-1] -\n",
    "                     dt / (2.0 * dx) * (F[2:] - F[:-2]) +\n",
    "                     dt**2 / (4.0 * dx**2) *\n",
    "                     ((J[1:-1] + J[2:]) * (F[2:] - F[1:-1]) -\n",
    "                      (J[:-2] + J[1:-1]) * (F[1:-1] - F[:-2])))\n",
    "        # Set the value at the first location.\n",
    "        rho[0] = bc_values[0]\n",
    "        # Set the value at the last location.\n",
    "        rho[-1] = bc_values[1]\n",
    "        # Record the time-step solution.\n",
    "        rho_hist.append(rho.copy())\n",
    "    return rho_hist"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that's we've defined a function for the Lax-Wendroff scheme, we can use the same procedure as above to animate and view our results.  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Lax-Wendroff with $\\frac{\\Delta t}{\\Delta x}=1$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set the time-step size based on CFL limit.\n",
    "sigma = 1.0\n",
    "dt = sigma * dx / u_max  # time-step size\n",
    "\n",
    "# Compute the traffic density at all time steps.\n",
    "rho_hist = lax_wendroff(rho0, nt, dt, dx, (rho0[0], rho0[-1]),\n",
    "                        u_max, rho_max)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video width=\"432\" height=\"288\" controls autoplay loop>\n",
       "  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAA+qm1kYXQAAAKuBgX//6rcRem9\n",
       "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQ4IHIyNjQzIDVjNjU3MDQgLSBILjI2NC9NUEVHLTQg\n",
       "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE1IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
       "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
       "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
       "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
       "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9OSBsb29r\n",
       "YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
       "ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
       "bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
       "aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49MTAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVz\n",
       "aD0wIHJjX2xvb2thaGVhZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIzLjAgcWNvbXA9MC42MCBx\n",
       "cG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAAA1zZYiE\n",
       "ABH//veIHzLLafk613IR560urR9Q7mffS/DfcIgE1iPo2a/hBQe4UunDkwjd39Qy4TgCKf4HVgFr\n",
       "JrjuQYnd+975e4/mqqdQuswoOs3i05HKD8t9ParSEsClI8gDHVm88yvdc0vikd8nDO4rXT7KsCgu\n",
       "ssFiy41rwSHOnEh3I8v/K+NYvkmdCqAl3LUxI5804KuQVukuzLRvlliDdwhXxlHnr9wSmO+k+u/v\n",
       "zjorBzdU+602yHuNoUhLR9aFc0QXouzff/J9OxWgLAtmHwNJKV//oeJ7Rw/mBmRP+h6V0Pik2nFs\n",
       "YW5S9SW1sj2N4mNahOlyj9od9zhZifd34nltfJnjA3agmHAntX5x+ZFIvWPTaBpyMxdeIxYpFr2s\n",
       "WOwLoLPeJANnCQL5BT8t9mAfP08WnDl1S6y4Pnu9zKaTwqq+9x9BL4yW0ThApPc2b8736koVbX7W\n",
       "Ql+jFXmZ2eh861Mpx1WTd9ZyPxU6ODJmws7WDoPnMk32DV/A/lhibi0FiP3I6r+ukfispEZaYtIt\n",
       "hWRW6BELuC+8wKz81MkvGmGHyWULCbunGeT4gBgC2idHMrDrFJkMSYTAxzWmhNORiM7or/ZFYFBO\n",
       "/wHPa+kROq9MMa/6HQ7vkves/hJbwNpokfe8jjlgVAYtI3KyTOyuhsRYvV5FaMjFNmD0gcoiqoNk\n",
       "mdwTVT51mWDXjy9/rK8AsSddNzujKzUrsxP6gIqLzFAPpe5sLb2gU4w6OLJC5NUXRNim/3t/lRT+\n",
       "V++hEJ/f3lbtWM4pp9qKlgIkp/+ywmIT37P6FZiLMIS81LPUCM4xl8JCyxAR0Ckp+j9Zpz2GcJzT\n",
       "JFZ41IMfcu8AJjmGCKIW97gBPbYBFlSUrk620ApXfLtw59QmDH+i25PV9aAizKnAaBMjPl7YtoBd\n",
       "GfIUmmmgke7qMh/Ol0cCIqnGCDPJY+XnoHbxZF52eXrZCP+UY/pdDoAU7S8hDrD/Q9kEdfNVo/fD\n",
       "J5yxEhUP2ilvw//AWV4ObPokwVbBdOjURY9725KdH/QqW3QKUKvNJU8s3vecMFtAw8w+wMGgHO/H\n",
       "xHxHcRlVgg3ZUsS4UjNX7C7PbwKoKaCpjq8OWyQO3+0TkYEwuJLogQCmIqXUw3PJlYMnUrhNUQ65\n",
       "O0GbvdQMMdBZZi4wNelgXycmLVlwiQPkdVJc6zjxw5jF28TBb9j/2od9yPkxdtJe4OM8ESibYn5G\n",
       "FZE8qS3VWcDGZ26szx/ANopg8HI1R3H/vXbHSQErzD116rlfMeR0XRhHtYGd5eAQ50LKMe08RNVR\n",
       "AV7VrD5/9hg01WdSGXo7pXoi7cI1Ico7hmfOJjWecKwyuGbEZUmo3JZIyKEX5vqfgYXkPL0oNOgx\n",
       "abQewZBvb/2vmCrbs5BTcJHOwau5QcFQ6n5qzYchpgCSSFqk2N11+wPGZkYfwPpnXOAhLaINbrc0\n",
       "8aK0oGnDSLvPOCgI/Jcb0ckTxDCRYXhpF+6XECouh49mdb7Or7B6RxdumGYKmoOin2ZTO2g0U6lp\n",
       "WqZZg01xLZJdlrN15SlM2AN3IB5vaSLJyHcVqquDUrJjaS9zlf6RXVMoVG5vebNZ//AkDULR91+B\n",
       "qPno9T+FqHJlRFhKqs4iJeqlDXJxoptgHLsJcHYkQ+yKw87zmhX85LcNFidCWU5MFuydVulthLq+\n",
       "ZfBoDwWpaJG80a4RQi77kMjZyO4O+UrXfHMG/j9awAXOi40VLk/s/WlNCXLn65ynltFpgwkZz/dB\n",
       "Xs8gnZy3eAg9nJEB+/q4ydM6RG4akO5RZ8H21Pghj0RtmKsdM5R3VXCNhZkKyBKqIiuPZ9bP0B0p\n",
       "kJ1VjplEK64fp2l8oCngIgSi1hp+M7gn7mJa5gkUYXVqMWIh5gO7sw2ppT5RNXg2Y4B6qtcVh/7H\n",
       "GJ12ikCQaJnTT6FZv72aKmMLjhx9Mfra6fslTO0uw70vLDMHCtGqde1kOyANCONC4nJhwT5rYigw\n",
       "Q1EEj/GPGT3ldP4j28GI19rZO3Sms25rhp7NLZhcZ8IS8q03dR5G1UJVdukfUutrGC94rZCcZBDR\n",
       "RPcqDmlUz4mFQboX3oDaFUU6tdZCysPS3mAMSv6KBQMBwookA0O6VLS1NCSjuO+CdJStc91n0hgk\n",
       "EuJuvgDU9MGGKn7gF2cxW4WOv8Iex4W9j3YcBvG6GfPmHg/X0kbJRu+e1aoPWIvlHDIG6ZAdhoup\n",
       "iihIs1TdyOqAb0tmMUxhK6DPT1qzOBam/7skXok3rXQfHE/GV40+ZkmVaLezdOnHA9JEWEFwZyRM\n",
       "ftwJp9rg6BwCW6btP5t90eaplEqMghNr9L4KdrLZnSpPhfCTnc2ANH8kRGt7f1dplPU+qjqDCH2O\n",
       "wiJHEzMg0hp0C/5tipezojalSqVGbXLB+esKBGMEPH91vMzRkl8aNB0Sn3EfC9kKJ1vs2SkNR0/s\n",
       "KXEfA5mk0mGqtmUSsHlBeC3qU+dFFGZqlDWVNaudgg0IsMnnfT2tZ7SCGxrEkjgQcRcuYvnexYre\n",
       "l0j35qnpdcJhyyHCKh31PQOzm2yniVGaN63+ZKrw/XMN+VsJT2l23fR88Yz7xsOijmuSeKofn9yk\n",
       "MWeR/18hIROsvFl1uhBx7yKzEeBBYBQALeX40RC02XMcypg2pPLmxEYKu/4EZApMDSghxtgL8Qaw\n",
       "0gK/8niZKj+Fi6P1JFP66d3ouS2kFCa/4KZoj4SfeWTzuI+0+F/4fR5eP+FvIaklkHEDircG+4q7\n",
       "4P9e1J5+xg7l8C3x+cNxAGlsyB+or08MLa6HedhPuB3B+PHUQ16aRr6AzSQLMCX1Xp17UrIMVbF8\n",
       "xEjBdL0y56ytqWP+mnWZLIOQoj8dGJIhVEmspSrsT50LfWD6kXPLhRilAd+Jg/R7Tpc2f3OMFi9L\n",
       "zQDB+Da/ozpwUOutymU6qF+AGu+v50CauceuErdM0skoXTSGjIAlJqG/MhSOKmpcCDED0ilQBPOk\n",
       "OXaFHZO2feN5TgNuvsOSynlxLfIDGd11CKSj3II1Lp8kj+ViwZrYbjKKX71PVxDJjcbsn1rbMIuT\n",
       "9XJgBJjQlwWU/8zkt2Wl1yhri9W5aQRKPKGfTHafWvlxWtPElY8wo0/OWUwv42HZTOuXuCP89GNT\n",
       "+jZoaoArOf6AMb16I2wAzRJ5vvrewphSNE2tP4+IoTEm/M2IN2iBGQ9IngqA7eyvQoDh7/tLKPOC\n",
       "rmpYhmdT4SZR+S3Cua3mX4L5jmr46M9Yi25fy+n6PvzkjNaLD/nFx2nWtgrDIOE+Zn2x2BD/Z9BK\n",
       "6p/TJwiqfCL564/CW+Cd6qmQ/uzCKEQNAjccFIRkbsGAeyPpSRJBD6iWTxZSKAbLPxtKoNXtSKGe\n",
       "BFWLf43epOb6EnYGU3bMvhhz+lxyhvdt+ISgmZ7eCyJ83r+sXOH+ekjFOwRjctt/vmXHvOK4QB3p\n",
       "238F94PSzS5FhpmglMQZoqSLSHim1+17hyNdhKdo62ezWJEOIZFoONrSi187P6pXVBd6iaN8zeQ7\n",
       "ghvcxzTXo4qfWPTBssYQisq55vV/WLY00qR1OT+4jTL2i1edTT7jwFSz4AixUXoqerRbTvPJQ6W5\n",
       "HcPEzLtSqq9ObsoVKx/iH9MDvT1pmr4xHtu36C0z5RZWesRdU6uozpifD41FHKkkJf7PXpmDB/b8\n",
       "BeetcafyAYd2jkOGQpyusUyZH5gM1DHkKjMKb7X/Y0ytzO7cS5UfUIowNMNMq0liyrH2lkUe4tlj\n",
       "ITUHWh0FTWHUBgvA8oUm6lGGvH7q11KRREGvcVN78lrCuWsghu2BhctlZFzmTaxPZ6+5udMoMiIX\n",
       "1SfrKgu1fhZ15QIYkE89+Blnv1cX0G0JOM7utZEy5pf9RwiG8PWL2ttdHtbqlxcSI9+iqsrkl/Ap\n",
       "LRdxO8gsBvdvGhba/cJY/AGmrDn5q0Efc7XXHq0YCp2SHq4ekvYukaQMgddb5aRIpAa0C2xIC3YB\n",
       "eI/XPt6nozjQf5gYLivSFQcFJdymTn+acwS6+ubHk3j73iZcSo5+lYecqATcwkARKkwtByL/X4RH\n",
       "07KvPbc6vfwgFW/Eg7zl+Cj8zA7fuWFVVIY+tpVjQKkIWW3Jqn67eubdIogzN05M1m50iJAFEYi2\n",
       "C85eQVWoUh3/1ljqhCLzGoYZb+2tqmY8BELGFNnz9Fatyt0DgLld5oX2S6gnwK19C+wVVdei6+75\n",
       "90MS/p7ZhpfwgVJeDT83vocTAnZC+le9S41Whd9tDYs77D87H9AqIIrFNp+SNrbLBnFQyVkqV53c\n",
       "SUS2mxLpcqShwGj8g22elBO//if1jtEzIi0Sxt5sV9Ad4Q/C2cb1G6Jb9wmfS+mx5JPfCmUc2FyO\n",
       "htqkRG8/lIA99oT7b9XjhrLFmNuXTMG9ATovgq/YnzpaDCZ5rVy7sbPckZSK1kx+E6Czxae7jEQ+\n",
       "qfIsWw6Y1jx9Heo5L9YAA7tR6QP75hUaNnsL7Yjhhsn3wVk7QgEQilts3iRmjWTbQ3j/Ct7kElU0\n",
       "27f+unqR6kys6UHxJysi6RH5J+eYGSgMB+0OLokyRK8G+Qn/DjsVa9LbTUXmfJ4fkRBoHMrb/8cK\n",
       "FwxkT1b54FIIZU4i+CAAAAMAvoEAAALWQZokbEEf/rUrxcrIAHaXn0d9hZXVFiIAKQfzLe68I+BI\n",
       "7jnIXFsN94XnFqRqu7s2olipqifX+pXvE0Qvo04r658uMqFRZBvewAXDbNl83gSIoQkWPztTpfQh\n",
       "F95RTAsGj3FFZzpOFw+35KQEFXaYNzcc0KLZAdPrCxLJx3tQRa1nyj5BeSnDHU4uVv39E8auww8I\n",
       "8ASnWdliVIYodGmJdPkN9Ja9ROQB89bCTfidx7k/MH8dUy4Kxab9XenE+UTVe4ADCkQEquJme4Dp\n",
       "x7oeR/S+REu2+b1xKKb2ypmgn8nyjegrzckmmgEL4Y5YUhuYcdCIYDgvqHithvrDuAC1jI9JFrdT\n",
       "tP8usbmEULlrKEbYHzWXqw8ZqlMPKqv9qNj11j06jAukyFNZNXgLV/FiB9I1xKFUk1C7SQ+Jw1qS\n",
       "mFXZc1YOlbvPvyabA+pyv5ff2Tyi63V+5lVhfQGVUjtfqwL28UEG/5FjvXTBHmXGjIIPIxZ1H5+n\n",
       "bbn10znQ+b1pENVKoLBRoNQiufWYBAYqxGhB3330z9OSCX1PZERR+IesOtn+XGMD4X2pf6LF0iA1\n",
       "Tdq+Sla0qdHNrLpddj93PHDKggZUAhW7DUZoDalkTnoXDYfvno4PL19jLsdHU95Xlu37GdcLhoYR\n",
       "ukzykiVABvmgNnjs9UlHxLXlSsxkE1uyhl/X2wvOmpgCCM49ocu6WxVev2yMPfCxqQow/+0SwcX2\n",
       "q4qgOn/y4u6OS/vtUscs6MF8UFw7L0EUCGVhn506F4svIWPEyNjGJtGZw27aIboqOtvyF4Av4SlT\n",
       "3DoT4WVvcnOxRDIAvvVfuqRHIrfDEsnuz6WGcOaqZjfoxwboojb/m/hPgJkkErAy/HQmd0dsWCPB\n",
       "oxXpWHKaPGiDIxKEyU3XioJpK6QaxZOO/7PK1EvNGt9drYSlZgJ9lZq0H6ZE2tMPnu5g9uAsUaKC\n",
       "q0EVwfk4LQKAAAABFEGeQniHfwWXItAA/pC1Xc5ZB3dYijBs72VldVvidMOjV6qIwksFFOfcuddA\n",
       "SkJNZpm8Vd2n+OfGFqgz4KBaNVXMyQUSlnrTSRqPWH1TI1Ee93XVrDsKHOD0hhHlLdrOjCz751Wp\n",
       "QRldldRbe72gAaLTFVgVzzC4U4+1EJL3BM8zkY2o70EMhu6xXi/E/fDSzdcLyFKcJ2k+Z8oafBlJ\n",
       "HUdhjns7VTKgeRCl2kKhKybn59P/0vcU2m39RoLimBAv+p7H9Lnsj0rKHjmR1tDk/goQKF8tdyPP\n",
       "OvjB23ICuk7M3tP+7ADa3CCVnyxE3ohN13jaGZIASVMNOCipHi55wpJX7/Mbz9V61NJLLa0c1w7P\n",
       "aJCigQAAAUUBnmF0Q38GrOCOOHEAGygswKPDi+837SvMk7ttjI6GCAHKnxb01G6h74sj0cw6wQK0\n",
       "PtM8yAR6yDqdwyrQnxrrPBu33W1njQCBB5w8CjjbjbQ0pwQ5uiSQ20a8gAjN7P/986RbWpPejdT9\n",
       "W1DUBnI983Zze5YdyuRfW8IaT5V+nIJtD10bUgrK2tHEZBmzkO7+G2mGmhOnvJ3X0ucXF+KscXms\n",
       "W/ahOp/JAhAxgJCC3nTglYQNcJPGx1iepCIArNV0tVTdU1gt30PJj0W4dmXBJVJYOF43+ENp3J9p\n",
       "vi3xi4DxSGCVI5g7UXHicywc/hJD0VtwwNrfrErcKGBzGMFX1Uw+e8F6R4DDVddDMWFWkBZyYo86\n",
       "u573GKiYZ0jP2dvpWnNdqjU6uur4YVULoDfOC0+RH6yACGeFdjsxqpXClksLLM54AAABOgGeY2pD\n",
       "fwdHyEAAiDiWVT44/SCINH4lvkh86SJBbirDo9fq4wruTtSyn3bPk2JCCrRP6YoMwQ6VGHSSvHiz\n",
       "JLjGTEb+5gHkYr5KQGcUv8jVesbhpieKU0ePLcX+DN3t28W9KYk6mui/sw+hC/viVuC7w8n8MkLb\n",
       "m3GZE36NibT8ypY8yv6uzOeQ6fUe8JYgo/eGBhUVlnR/PY1Z66VJyxxfEkZlfWPYLu2p+f+jae/u\n",
       "K7PB13QOWGHMi9r2HxCDB0gpGQWF0LMvrCmuREfrEg1RD+6PDe9bKxD7y/iWXa2nO3mICaCuj4eY\n",
       "9ofh1/YxWZ+d7s3bR8/2JImJtD0P2ZE+Z1//sBgO2GKfEqUeJ/OUWVhhCVIC6czukqL4gw3Tb9eF\n",
       "9a9FLJv9Oa9PErTKAivnKRJWgp8t5Ue3AAABoEGaaEmoQWiZTAgj//61K8IQ4AALVH1Zu9dS1LBc\n",
       "rBrvhicxlUPIZfH9lvWIR0zdfSzkOosdTcSXjSSkPFsyyjfCbcyZ7D8D5C9IBsrcx03bek9x5a4v\n",
       "QC/ocbQDGgQdgmKo9ovM7S71Y5SxdQmSZ6RDmZi2UF7CNGwNZ+9amP4CQn3Os/amw7d/dcIojBcp\n",
       "Msf0b+HsV2P+XO+4CdbTdfrklylzZzvY0ifmBW9ps3ErsStBzir68FoYDktwGlRpIWrVgipz8jNj\n",
       "/7LkVLPsRm6d5O8c3sJRBnDAjlSaZELy7NfmI/WivqD5LlOnirLZ+xQnglzb7Ojxo+n71U+fNPlD\n",
       "95z86jsyGbYl82SambMAS9228kfhsz/59bT9ys8Xx1sElgscip79mG9i1P5vbNmPvbf1D7ypsNx6\n",
       "6A4DPlyXiE2arjyYsKmMSRJBXfW8FW0lhOaAu8UmM93orj2d4As3QoOWOTqKIOSZZ3rIYhS+D7+k\n",
       "jr5kRQ3EF9ttCaY1UuFPmLfhzuikQ31ECwMbXOxpCCfoTdxvjQOCiiISnVyRAAAAvUGehkURLDv/\n",
       "BZaHywAhTzxjFVcVuOEUYjAprq4ZX3rQUuZuPGL7gNd782BF+xHkH+5vZRhtjvqXDE4K0uk/Jp3K\n",
       "hR4ez3He3x7ihoUrW1Q3FIuHJdsjFvvPDI3hUZMu4frPnyCl4C897cWbgPWcNGS2RGv+Lg4zia1O\n",
       "2FhetVmylK9Ny++nGt/jbI8kSqL4ls1XR7Ejn/Je83sf5QcaYJ78fpCmo0f/l3IPHUrGkNfcFVxQ\n",
       "I1u5sbVzn+X7wQAAAUIBnqV0Q38HRLdkAG1Vn6rEGcJXSa+tAfBjrLJ60tua/COwdyR5H79aGWpU\n",
       "Yumd5bywBmYKV9FszWR9urnbsd9Lr+ihArwqzrMLeYttT6Z63jbYgQVey7/dO6d0v8UIpFKsQB5H\n",
       "yNl/IzvN+zD6IcJgj8530KHAKmPsYQelaUaYVxysQX2pxmiqx88cVCvnPOGcgSnUPJVMFv0MH1WJ\n",
       "mlXHxfYjni6NocwXoC8sVTTTtPna+CY2lg1HZEInoq++lTRYda5oiB5QN3ZDPK5EVNAzKoi1jOV3\n",
       "9fV7l9Otd/Y+2JOp3iLnlQDeUFd5f2CATWRFIQYD2Ya2XLuKiWslWQL5QRgrav+7qi4KffJv4mrU\n",
       "qDl83aW2G+7M7DYyYiBWyx5qmNwTcJHsaXvi9lyudAydalRoBTnp23PelX/ylw2fS2A5AAABPgGe\n",
       "p2pDfwcaqABaIAQp7zOV8zCreoZBxxdMwVIsHiPdLFpWk6+CDN05AxJLElmDc9i3X/P/nvEqDlao\n",
       "/rZ5rg7ZnsZxYbMQL1XjWv5GQ8FcGuBIcndFNgsqwO5yhnHgtph8Ln0vcy7rP44+RahTJtLC7RMb\n",
       "6O37A1QdSx0q4Ed0XiM1sPrD8RJsWqEdwhb6Jcig2SBZii6bIL/jB1LWSkCUX4FIoVLQH1X+1zQj\n",
       "P20JMeozzacM+dpK0mG5C7IY04n5umgIPo8ODFQBRFntqv6U/lG7wvT4qO4nKLCIwCRu84qJvSAg\n",
       "aRZ6+QtjRdWt462esltw7mFN0xzdsE1q8hShCu0QjXBd2QmAnhWGLao96z2aoKbIwEqyL6Rg1GVO\n",
       "CD+VFg5lyZwGuUdoiqT1debXk6z/eKgr648hDSCn4AAAAWtBmqxJqEFsmUwII//+tSu/e9jGWtb3\n",
       "wl06kcAJ1uCmJDYdqun0KEJdWq40tkbmiH6uuI0R0CM6h7dpJ/6t5yuYkRV0a5c6Sgy0CubY/bUc\n",
       "Y0l9TUlANB8E5o9dMtff8VtTwaTBB5+YccvE3granbkzy7IauB/g2LHFPoBeSnzl//23DP3x6WtU\n",
       "SrGCL+4iSajYTOL9FxUZV1+utEe9BUHaDLgAP91pFc6IQiC5OOElKJKHsOROsCcIDDK4vDFdALqR\n",
       "GR56e53WeHGBRpk2jhYHbUbST9NiteYuoMWgUBA3kLbXoqY1yISz2uUKadzbFV/hH6VAb9eBZHuz\n",
       "fIsihp9MUhOm8GAArXpI3m6O6Qy6v/9jXqFIaeay633Md4wlKf5zTny6HNUdscfgYMw/rZsuwM02\n",
       "gNH1wzyAoqMFaQ/A1fRe+0DRvAauNS29VdVICcDDfTLLHgTFjnOCyNzxFZZvtlkAdYBmD1DnkoAA\n",
       "AADfQZ7KRRUsO/8FGmdOiMzOPAfAA2mCmaDbGbgqtVhqxoaxkMWZgyVmtc24MbibiV8b5Wu0oRRi\n",
       "5iCvHYnB34RtfdenuisKPKkSkbMs2xC5t/b0BDGobUWYesLYJE+93STRnWwq2T/0nPCcte3wCowy\n",
       "Bj/juVMcxAfLDcwrAi+1ahm+BnqTNWGFuMpW7hszbefBeySKt+DOAtN/u5/Ii7cvFcQS/1T3WM7g\n",
       "vxTw77f8jh85p4bBIDWxveT/2XWD63J9brR8KllNAzl4CI9yomPgERUWqgHO690mqeMfkF9ywQAA\n",
       "AS0Bnul0Q38HSmtEAB1xgKXTGie7dxcJf7UlxD94eUs7t/BNDGtd1keXnNLJVbgCAmhWH28DE11a\n",
       "B0Zr+SpX2DtHn49R2OvQx+eA3iBAgAd9Lu7BYuYKOzmcJLbPqhwD0XSxZ4Qe3Xx6vYy5iAAGLKiv\n",
       "d/UfREUxIcGdEBnCdlWPmRHg8LY6fWPpAFW7ac4znUfqat6FKPIdzkK5N/PLnjdnm4XqJpaLBSyI\n",
       "RhEzjYtuxhl7DPXCPWZ7CXHA/f6Nc1Ieq5WD4p6fsdQtq3Y9c4nddFeqj0HyWw2X3SDR7UoC5bVZ\n",
       "hrz67EOZuyoZa4VcY+G551LO31xu59EMM+s/0PkcSEKejhz/nmEabT7FNAyeVN9D78cp//MH5hmz\n",
       "9JKThWJGUo6f7Ibp34RDAuePAAABOAGe62pDfwas4bZrG+hxABrZx9ro+aB+yt9o7kYSa0piAGpZ\n",
       "0Q0r0Enz4KfnFKiyU6685PdwkZ6ZNRy4NJNWAfOOdZZ2Dbgei2o+iJM2Xz4M2VNSwjKtaQbxz6a5\n",
       "YrXFh9EhBgf9CIPrxJ2GxF9Et6hV2j5j6TDKAIshkoMSs+epL5Eca40L3xbs5sByjvHIeQoLZLee\n",
       "yofq/n/gRsgo1zcMcylnexvgTQZUXpeNLqVasyBV7lqSqzlLlEau1XATWpdq1zMo1077JjNnSFx9\n",
       "ygvrhrlGkf3mFFSKmlwXVCgPLI2uG521mDGl8RZ7wZH0oPcZXNz0isQ1H8BNRrmJlh5brLu1/NSE\n",
       "ych7Xv82uGA6Qep4QdsC5dKvomEa3WkWrovE3tDVWK7PPTh2O9PE9rfVd9HIoOQtgAAAAW1BmvBJ\n",
       "qEFsmUwII//+tSvX51jIAHaUi6jNN9KYWxhTdnk4uHHvQ8ZKI1g6yzV7DP0IL9gXph3+e90qV864\n",
       "X9kLRvFEVGdM4jv7nXCfim6E4KYjUI/aRSk0Lbz9FGAN8GD5K00xyad7CoqdvPVlFMZ3r393MSCd\n",
       "lpvNcdq4A2SwN4d8ngNK7iUFq2mgzrmi+9Ura0WdSsFQEL7xbR3aM25zgOoLBCpDWBvfM7xVXboq\n",
       "2voZcT9syT8qa5aELPyC8iqWlbnMn3TYN5lintQ+D2oYwGWQN55F0S/LXajzPEmoQoirmPGLxrmp\n",
       "DkpyPf+q6pdZN1OJXmKryz6dtXjW62qr8v0mbEuUsT5mYGe8WxXkZ/tOPW8CARX/3170VGxglqsa\n",
       "EaSSjUfm//iyTguZoSJJDE3gtIwYDGYW5f0Lp5iWwrCFRxa928Z7+n41cCB9wMdcshx+YHYkekhk\n",
       "yR4t3BtlibnTEA/ZC2KVE+lRIQAAANtBnw5FFSw7/wWFL3e4NABeI5XApzGh7aO2aJdS64c6cJ2y\n",
       "5uM+MR7O/shM8lFToXeHz1XPsIXsYnnQv6XQr3fkXj1cD1+6AtMps6jKAstfZ2/ejA38sFh3NpIa\n",
       "9p2i11YEGTpy3L4eXMRWGOoCxNLwC9T5TOPKzowN4Qb5nQlJP7AFjLN7vUiGr4omOvynT4tvIlNw\n",
       "O7mxufE8HxfYmb5jAShGCmQ869EXdQxkoB+5UlZzBpHLCE5ORperB0W/OGQuoBxXlq31czXGrNg9\n",
       "iDUGkY/q+filNWB8wycAAAEaAZ8tdEN/BqzePfgbIzyWegAQ52Hq4wAbJW1Dep+5r9jG3+3XZruz\n",
       "2P7nXj98spS/PZAadklaWNINLfgyvu/xIUPa1JQ8np0NeH9p3MbXFh9Ec+FE9cVmGbQ7e3E39yB2\n",
       "eMtWUJgFxRyTXhNZNrgc8NFqeGCGjQn6vkO4Qy+mRuAS1hl3dwMmyBHGZ/8oFin9i+H9DPSh/0j8\n",
       "N+nRIUKWPr4mgw8vFnfgDxoN7dOL6/0ithzBYa9q88zCJNWpvo6H7UWA0NH/TtDwl2mgZpJ+aYsC\n",
       "W5ypJHvpfxhVjXQ/Lq/08Gp2rldNoBmXTKjMfKBgp8oNqoV/kz7lK49J4U12i8kvmPcz7OfSYi3g\n",
       "b50GprUytajPT/nGFTpxAAABMgGfL2pDfwbDjP/aIAQp2VX1GVO08ypvNjMijtyI+qoeTITpRIGK\n",
       "40tHCN+GlVWYmhnJ78dfZv/oRiJsmHBCbzx+YtkTGXWW4YiOTApgLISkB/3anH0C0+iaVHQyomgJ\n",
       "/60O5DjmEMTgKrU7wwjsM8GxLyWbG4+P5VuVn5xzIYL2si2XYib6k3Ul7peMD3LjS/Qx26I0w1jP\n",
       "eLdnDhGpnX42paYjcE0B3a9Qp8Ti/603fOirkjf0QrXiL6a55EBWyb6R66tXIcGFuPe/vta8sUUw\n",
       "OrTKuAaYrlLviLxlL434DLlWTzGrO4Qxh/G9IoNofn5gmtTIycTcBxFnb1smXOeHFaRlg9fGGr7i\n",
       "ZA7K4E4J2xCrPHFjG4Ax8P9wOMdj5/zWcbfy1N/vJpHxJm5/tMA8+AAAAXFBmzRJqEFsmUwII//+\n",
       "tSvrv3IWMl4mByADazoxcDOylZgWubHChmcRkZ1jMjpkrGKz7rUDE96KsOywX1FqsIbkIMRDTtaz\n",
       "b1lR8bqWPIQ2b0BfnbzVfywZ/bmEbSvGYbD1RMe5FF1MlNbURB6q/4d2ji6CzLLA+jtPEbhmxnnu\n",
       "0YdKA8/BZVJ3V3d9OdbrieOE5BjQ170WvlnHferMBin+wVhzJG2krmVJczEXPaIKQVBkZli14Lsg\n",
       "cQkHERW//T0Wx0At3s8iXWBlpv7YR4FeXlWOmLpfi9xIhX4eKeXQqVzKNaQylQ/A4O2hjBg6b0bM\n",
       "YJRjVcGFQtXBaDo4/W99UP44wPPDHSiQ2WOmgCLMa5R2aABD5U3QHuG5IVkKoU8MMRUaVjtiH/+p\n",
       "Fxq4XMTpiH/+D/6obeceo8n+Y61C1iloz0QcTWGvT0CD1tPyO3QsNVEH2s77ovhubtONfZZlTsSe\n",
       "ikFeQ9/BRC6l9EPoXJ8AAAC3QZ9SRRUsO/8FGSVcRpI4NAB9wLNSC8fNV6W6985c0WagESQFhLcE\n",
       "S8CoDBSguv2ntICPS8z6uemdWiDL7U+K3Nl9fZyN0tS1o9SHXz4VrV+qd2fRuZIAAsMJdzSnc3Nl\n",
       "QRGHEUg1jt3QOduGwZCbXyVvsavXF1zFtLUHm4p6Fh7q04mV3qyL/8PumlGvsMNHEIc0yIvViMmb\n",
       "knOJoDWlVl+cQmoC/NWJaK4cnPmntyPQtNZaFRZBAAABQAGfcXRDfwas4aaXVCrQACIHg7miSkzR\n",
       "WWKKbDAf4X++5cFbw7ez7197cckdi15c5WnIhZbUCR2VPxeEs8fmMp7HNuOBjGUcwxA0Ql+wVUo0\n",
       "bFqNQ2UQIw3krbogWx75Ytpk7vSh2PTBEy8QTgKrYt6NmhwvdeGGSm8txAcoVUqYll1Yrs0GNAcO\n",
       "OnvTi8BYmy0RSejAMgF36gZjFUssSLV2cMEk76uofmw4UCYOg2WQav8q6Mx1Oh8Jt2Pht2mVNzSH\n",
       "jYGSo8IRaR2NjbVPMP8RlIjWFXbY4EUc316J/hzgGxwlAK29BBXuW+sWp2gfP51BfZHUjdLPW+db\n",
       "3ON4Km7Ln5sD2tXS11V0Jn5Pwj5ZgzWffBVwx4aPXgf76tyJOApSxgH1KuVMdS3sooHi/yI+aXCX\n",
       "7B6VbWBHQG3vs2AYAAABKwGfc2pDfwal3KX0pBKIAEL/GL+qJLOC2iwd/f5f7BsOeMuBXjw3qXqL\n",
       "nSggJlR5I/k7Awyv69TAgAURgVh++c3FdHjvuT/VNpwMEmp9eddXHejtYtBqwZz1oJ3apR2Q6h+5\n",
       "KoQSQ+g1dMTho4COgkJhgHReJPPAa1UYMYrEFBq1xcW3LofmOwXv3QbUBBFnSrpsAnXCLkycI09S\n",
       "+3wURdVBfbex5g0yxU5wtjOfVNavZh6M26GrC4TX3r6nTNwXzGMIZucRBQbY0aiFCyGKZM2fZfSJ\n",
       "dPuwfeXmyurH4qRzaukewaeK5+dHZOTdgx0EmgAJodt31Ws9TlCDLLc3dt9nWZp5cm+sx7o7TEyK\n",
       "Pr4/mw616JF8/QhBVMawJ1W2g2FPosaoIx1AJ30HAAABN0GbeEmoQWyZTAgj//61K8ZlZABO30XZ\n",
       "j8G3WJ1k67DIhOUmjISByPgrMzwHnWFhUrZE9lCmPekb0LlKfcH6qrH8saWJoMdzcCY6cT32tGBL\n",
       "wyDMOv0FqtLHaojgwYJta9NsyAg5LSZz2A1GxtWG5/eXcRY1xU0A6dTF8JUv+07fBGrjpEFHBj3n\n",
       "vE6yR1oRNclrr2TK6y+1Qzj7eVrPNnGBH0L4GzrMmZ0Lmdd/0VE6n2g78VWqCIPGgegL2s0uuGDa\n",
       "XPhTskkIpoxyAKKkpbIbTBLpbrx9mMOflN/p+1WvV+FhfRv6/1fE1Lw+esahFDf+Tgato9rxBIUk\n",
       "AvhN6sxZvFj1XP8sI/2+VYpmE97mXcCEJ9EhMtERJYFt7ePaDi4+MeybSNxxAcZZ8+5RC7h9tHww\n",
       "0XmBAAAA30GflkUVLDv/BZJGWAE1fDSuIhxTx5mOPRnPOlZzBouLc4anS4yXfD3MUkNoLolEvYZK\n",
       "YyTzivUKzBJ0SunWK2ysdy3ewtmCCUjTvKBi6xezKLPe44rH9Xbkrc4yXTOSHHfhZ5bmu3QiS4Ec\n",
       "aDAO6Yasly4gvdzMLoW8BTbTIgu0QrS8hXxMV/qEt4p/vPlEu7EMbs8cf/UUO6m/3/tFE//NpOb9\n",
       "NbFUQz3YJfh6Qvf82B2QyZtE4sAWZAxF9YIuzln9gkFBZILWmW/z8bZyNNJHCO4lwfiHkXx2gMax\n",
       "E8AAAAEkAZ+1dEN/BqzgjjhxABskbYFJoUVO6kUb5HqpJxqWfX4ufW56QaHrUxSpGNntLVPDvUbu\n",
       "BMdWLYKqRx7lQYt2yNqSz9MER1Df85n0129R9aCd2j36hCEAPkfdHldnx5DlxPxmEo0g3RtY+eQR\n",
       "6bLPBVL4zk3SAo3XtgnPB/iyMNEZV6Eqcd2VtKzh41W4Yt1Rcf4CRCKIEPhRh2ITAoUAXd1JSvCw\n",
       "6Bs5Bb4p3drfR0kKqv73swLDhEVOwlO58wgFMFzGTy3WG/FfY/yRKOPU1cWSeVBo904za5tGe8fK\n",
       "/E+NH7yN1x5sKeAYSr3DZn1gQ58BYpDp8H+t/Q9YDkDzYmreMph6Het5os2g8k8ojKzo1dApP5nX\n",
       "vgth1LRfzt3YzflbEQAAAVUBn7dqQ38HR8hAAIghBgzn5t9UqM25BQkOLNnJ9xwtyPhCzJcQR2vw\n",
       "p8tBCaCgBZSyV9LLZxZnWpEt5rVOgH7cW6H5bTQuejDeZ3SiWrAc41tsJ4VkyBcBo64Dow86uDtE\n",
       "GQI4eRJuQbwAIyyB5tJ0ytB1LAUFiN7yT60xc/sb/WyBXQ1viHLwb3i7kyFK2EzjGNYpucd88hGh\n",
       "Hd6sx8FvhCLZAlP7df9bUhF079pSGo3hNVnpFObfzocCZXqa5VhcWjdGpTSZMy1cN94bzSg+T+3B\n",
       "KYxYm/DOf/ZbLkfS75tZJh2QqvMRA6UTO702r0+P/vmFHyFbxRMaUDG8EvhGARY2XgH7iga4PlIt\n",
       "OkSvuUVLT3YN3bl5rgeyRrjdpj3VIdLgxvjHCUs72KgwYQcYI0VITjGbZrPmvM4o5Vqq7YbdckZM\n",
       "IAQ871IcpyRC3P823a7PmQAAARpBm7xJqEFsmUwII//+tSvCEOAADnImZvEZ6tMphUShXyhgbItL\n",
       "Au+6Q8lL+NJsMmUacuovfFMaDYk+TF76mNfASFTobO5VtUXVZj1+8fGBlOFUgzgESbpBpLCiYrT/\n",
       "d3AMkBehpjgoFNmLzoKlgRfEddf2XYLcL9NTHImbYCbd1/YvP3rUx/ASAfVZpwJnJjCZWo2CLXjw\n",
       "mavVQr/XGPZ2ymlGYebXlwzY1FtUcfWLu4T3XBAfJbzAMqgtye6ls3GdaqqhXKxC9lcTA2l0Ide5\n",
       "Mgd3Pxz6RNtsP0iAeJwuovMrrnvx+v1MrMCCGsXu+7/Lyw9hlYV/Rk4xyy5/4WLVQpzbHCKC/I1o\n",
       "HxeeXjQMw7HPiKnAAJksXDAAAACdQZ/aRRUsO/8FlofLACFPQ5WKq2+Bpp47VzDajIQyjyPL/iqb\n",
       "ePkyf4hmrIZkPDJCV4p61UgIILn587Op2l2Oqx6LJPhB1FFJHwL+ViBDLIJ+0djyi7GdGoEmJ6mV\n",
       "Mq/HZ5merhOB8psErqSlaH90cWl/7xssIw9JuEmUkrBHDU2zW97eqDAD5tO2kbxUFDz0f383ZiVL\n",
       "rBBftfWIcQAAAUgBn/l0Q38HRLdkAG1Vn6rQPoBxSBzxZEAHiCIEehkH4rkHiaz7S+eHmi+3A0xx\n",
       "RrVN6qSbd8Rh/xDuH0lGhOzIk06g8/XB9svE8CkUWLMqwL0hEFZASNmXis8NZDgn9au+2B0Mah5u\n",
       "XIPkoDQd79xtYhxSdQEz6r2rCCWt9iZCOwwqP+6Y/uyuYIXf+kBKXtIaagzSEFuRXpLf6AY9Zjtx\n",
       "VZ5ajKnVDYJhwBzxasPqD4k/8U4FwtUI6ftSoXIY+AkjjPGjwNHu0Ynw0rFcdoQ/L6S+gwl1FV19\n",
       "ryVTvpb1Vvct/6KOy2wmHeyy5ytf1DJ08o6sYDUf65p2bQ4IGn6KmDT2He/t6P3wHlD7tttXMxp9\n",
       "TSYseskEYBbg5AYpIGBV6c9Ej/DCvyola3g7SlPYyQsHRvg9mmnPcYil20GNaE+cAbLQdqOKAAAB\n",
       "RQGf+2pDfwc8ZgPACFPeZmwfcKNXzKq0tfkGCL8lszaOgbfRniW2VrIsOOMmoLnsW6/5/3kphzLm\n",
       "jEfH2QgmM4hYLQDsy4XN7O5ZDxMA5tvXUSqcpxkrUHkJVVZHVHqS3Lj1dkxrMPmRlwMLEJzR24HC\n",
       "oeIL+N1zIS+hbc3oiJ9J83eItb51FMT0c8knRd4jr2bKnWuPSyfeVKJviJLf3n3bJtKo0EsJ9evh\n",
       "TeyDUkMGcbhmQbwEV4Vbxx50JETL5yVepHe8uftS2g0DnuxzCEwsZD/g176jzmaYlKTggCuHvKz/\n",
       "1PzEHUZw0cygAVOu5ll7VpqPNYIFVXqA4bUdyY9pcxSHTGn06q7il/0aChRbiWuJ1ZWC1DVwhQZZ\n",
       "/XBUWHE3s25DOKcS8j76KRbE+RrF0xlrNjcKRW8b5ElpepUlA+ZFU4EAAAE7QZvgSahBbJlMCCH/\n",
       "/qpXfKTM0i9vUoAAmdOB02PTh+KMvLR/5Nb1CZXa5kacgcC/sJUMi7QSlRqh//1eA3JZmhrqODup\n",
       "6yDDhAsquoag5Ct7+99KjJzQLzaoTgCP/b15H9FUxdBSraOgDdnYja51q+dbnvOb0WEkWr9gkmoV\n",
       "z8E0gKcICcwkiWYZES4QiKTSgiEUc8ZSFKD/5m8cSRgalr/6343tayaO7DjajmAqBeKypkToM0wd\n",
       "mcH3klio8AUp70/cY+DgbS5rjcuNzDV74x8lh+rtXYVTbdCNY2TwcR+Cdfp1MDSsrfSehts/QdFh\n",
       "Wy+ssvw/8pwBc/59cyzpv1VU5mVL6tJTnwdjHR+AsU8X9ZSN7dCYMlk7hIMXEBqLAiygff/M1fU4\n",
       "waNoKcdn/rrxjCM1gXQW61hVAAAA4UGeHkUVLDv/BRpZfLe2uqgAXsli+X8u/dQmTNXB4+VYcbKg\n",
       "uwkX+FPvtGOS772bzSPRjmlEXT77ELH69qL0ajJnwVUe2SzDZcAgRwVyJA/q9x0ZgJnsFe1dLeGb\n",
       "WANbaiv8i9fV+JLjivvYavjs05N/7BREY2qoZX8Js3OQOMrpvGVlG3Le0/nr4D3kPC0pxKfYZOoh\n",
       "ZG7krZGOt+oUnn/z4RfbhqutnEoo8j6sbjj4PKMrqUrUekrxsPFiPvVjIDHtzKChDNVVWNoLHfeJ\n",
       "00F4cejxOsfJsQ/7KUeP4L4JUgAAARYBnj10Q38HSmtEACHCiyyIDdkMt62S59pKdA+jqErIsly1\n",
       "4qwrvCg7+LS19XImnAqqZug26DwaW3Ui3Apks+ssiI++QZnLspqP7wTu84sTuK4Dd8AMVETBulV/\n",
       "364XTZPQqpT73WN+Ri3cBm07yS0Q4fcfdK2hY+4J06LH2ryJG8HciuIeeK7stFKy7EwvhPFA9fZ9\n",
       "8PcfDpc5e3dI80HqiJHYW5rjkkawZJovHI6mGrKMo5l7DlsNG3rT7do0Zxr712kEtvDc5WnEyhfh\n",
       "qnkH7ZX01MuYtr4SniJZxxQhM1EdZIYfXb3s9JVp3jwXIUjJWrl8GsmeTqU+gOYt83idFIMKD31V\n",
       "/kJkMqoz3oqJ8Ko/G6gOEAAAATwBnj9qQ38HLwJZABtVlfPOkLTK/tWNpeKPoQelvG3EvN6JE9eM\n",
       "Qe/JUuXGlTNBG+6H7XmS14rd0U1Ugzb05dEJKhiEjEYxB4XZ854JLwNe5tTuuMwTgKpSn3nPf6nJ\n",
       "bPTbD5bJeHs2lktJsTggdhU4wk9Q2n8K+jY0oxuuLMgLdTPHwLezzlRhP2U9kDEF9DIbP2Zdm8ey\n",
       "pparun+luVt8b8D02cWb9FAEk+i7Lxa7MhCh9kqWAG0XGT4+4vu5ECcRUfvNaLzWicDLz+En0a25\n",
       "1Cb+pS2aZl+BuKAf6eG21O9FhSVQ/5YDx+NJVVd1WuhwQfy9OtCpCdTsX51fO0ATwNyGlaRrEuxM\n",
       "ky9bRhyLS/BgkAziKXBi59k1Hl2E6Ba6/bthdgDQBo7F7ZTuC59+M9nTlm4dUsTv4vHBAAABDEGa\n",
       "JEmoQWyZTAh///6pnGRDGAD9AnaTo39YAEKuITlgasgYuQ6G6KIWyUpPbzCd9LSB8VtNDgSVfzuc\n",
       "yKS1opf5IpZaTiN42ZzNOu2OKCHK3MUjTct7WEKENY+CM7ueWufXHrwmOZRfJ/H/7s4ptL/nWcnD\n",
       "8F/AOCc1O4QtPra1lx2QCB6jYATfvBN56Sz9u6j4/1FzuqQiI2/+ZA81T3u740v45plRHU8ymQs/\n",
       "uNCV50BndBAAyCmHVgdgpu66Fsk7E1NuuSk+dqL0oPWLgRQI7mZ5UxDEu0EXaXy+FFzpuYe7JkBl\n",
       "xXJdp6t28TEGsJ/F8x/HCrQpbHlDMtzkbw/1JO3MXA9zq49hcfAAAADsQZ5CRRUsO/8Ft3oAF9e/\n",
       "zpw60zPYLRMyR2Fu7psX8RF6RO8j8DDEsrGbDraUkfFfSdlbSi0iYokdJRqYIPQ19d7LEZSkysn6\n",
       "lpJeUX0+Tp0Z8x2UccdzKQFvobgI8BWczwN0FO0NEjVM0SXOLaDgtg0wVlFpw0Qk7lU7uSEvbJHA\n",
       "A6CYt4K/l7ewam60ChVTYKskPTziGMUvxD2DqIAckskBr0EQUWHr8nUjrYjbkJPi0PAI+4DKjeKI\n",
       "GgDBSa7QFeu46UHaCAsp30XesjRquoWhoIg59vIcaGbWTFQRqKUuwagVnz9drimrU+UAAAEOAZ5h\n",
       "dEN/B0o4gAEQegoEtEMbFbYgUyyJ2yCo5rXSjtJy/hrSNT36gIY8vKl/nyXnkehMr6Rna87AaXC8\n",
       "qFwx8zn/61HP60E7tUJZ4jue6CZIq2mi8KSpkcdlADVqUaVntcB1xGo4XYYS84hivtYPe+Pag5h/\n",
       "rTlB7yBg7rp5wsCqbgRLu8AoLHPeES2wO1xmP39hFFRgZN0wKF15AKLReqMCZIkBkQYV967QsSzn\n",
       "nztFceumVhQiu6XA0qZuIqJEDGHAQOkCVLKnYM1NyBn73AlvTtTLw8mUPmSgMsXiDNP3aRk0ztSQ\n",
       "kXNKbTlktrQrrfRlvWScepnsa++980xrxaucDVJQcH5erKURr6GcAAABJwGeY2pDfwas6p9kAG1X\n",
       "FNNZXgNykZQlmYg44/Lu003zds/DELUmRpQGo2UeZMARvqtj5VDgf3KR1dIB6X3jH7b2VSbFAOJ5\n",
       "DTJncLXn/xY80A6E8qKc860E7684UOg40NNVJP/9I1Af30sLyS0p6N2zJciN05Tq/OW776gQnFNs\n",
       "c3Sb1Z9SEIrnTQJ/oFxhHUyHp3HvsB/Pobj10I94u3P8IddzKnvQ7q1uYx4fxXuKgJwRMBCYkGHe\n",
       "DogvbgUR/KM7D6qbQQx9PS0fZi2UYPPBxt3uhOhlAJsSVy1a+flnY8kIN8nqK8DnNwj9H4Z+KBns\n",
       "ieCuMt6Lk+qwaX5DvPc/MNyxMb4cVMqTd/TeXyDzGUhb6UkwjpEhGKRy/41zfZq2J3impIEAAAFk\n",
       "QZpnSahBbJlMCG///qeOS4RACFPQUCa3PjIPWMnEGNqMYQfTvCJqvGYgOrrkCnp7ZPNbGQNIzadn\n",
       "c1lndfoZ374xasDUnvcF3SWa8SKWnRz1gn+wAHMofU65pvCx72Ga+9mgAoJTK0HVOflGoRpAKAHd\n",
       "BaZvwjz/1h8WvBbahcyaUiC2SlZzgFGGOM3HcsBbs82q7NwtraSrNE11u1rErhn33JCmVfZsvEC+\n",
       "9dcC5IWzshoDWlp7UKVAHRPzCLaTwSCsQ2+0gYd9C+rBcwGvm1Jsc0ohj+SDfb4YM06iNbj7c/Mr\n",
       "JaL1E6ob8fzMic8O7g2ehWBPuEjigpiXMJy76QIoX4ONgPBLza3YZQSH5NmhOXxoVbNSajlKpCUy\n",
       "HFsR1qa25y+EfKViiIGMCZA3kKF20mUbWp3YcProPMI6RdZ6K25ViV/iRV4jP2UW1evNem/GDoyR\n",
       "xPSUUM2RCa7qkuwrjbEAAADkQZ6GQhv/B0Oc4gA2UFXIS5XQtjqqAK9mh1WCdjbbFVtMEM/c5WVZ\n",
       "0fwdpm9+mA7obxTOQwe6bxtmEEOTeUvm7rRPJGtm3eJJX/loZLVs3+/FkkKJNKVT39TDACZ5RI1Z\n",
       "i4rkTz1gsCRzVNXUVYxJAyswFdMn81LRUm7Wn2eryGQ3xhNg7+app/zNp4PnvJi0pz9WUCy0Aeh0\n",
       "C+roEDBiSM5XzzlA7QHUqV9qMcBRtljdSgP8inZ2BNKq8X773ZoGKz+KYa6sb7Dyu0U3DjLYOQaX\n",
       "ZnPO4OyTVX9cxVz00ey83UARAAABCwGepWkQ3wc8al2iAEKe8zlWD7GQUq3ixkb8gKOQOXPtJUpI\n",
       "vSE4rWyqahC57Fuv+f/aS+awSqWkhwQ9O4Y9HsUS2aF/TQEtTFhNDeOApp6EXLgIWw8RA1hc4N2e\n",
       "FM/jiQJwFVAccLDnTi+NYq8a3mbSN2Mce1D+8JW/E7WVDe0RmsTqylgdauOs9RmJGUI7lvUpeuII\n",
       "VL8+U8OXkahxYjZSUDoYmoO9N0SsxK2SwNlrWeVT19kncyFmr6HuTQiphRUIaTzvAUwlYtcrtkyV\n",
       "T+Y/vGK3GD/MlucwPfDsu7gj5vjtEqVORC2E6g4EJNFJxUNjwSatiDUAszLDysYzmOkEsYJgqHwX\n",
       "HR0XHwAABQ5tb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAAAPoAABAAABAAAAAAAAAAAAAAAA\n",
       "AQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
       "AAAAAAACAAAEOHRyYWsAAABcdGtoZAAAAAMAAAAAAAAAAAAAAAEAAAAAAAAPoAAAAAAAAAAAAAAA\n",
       "AAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAABsAAAASAAAAAAACRlZHRz\n",
       "AAAAHGVsc3QAAAAAAAAAAQAAD6AAAAgAAAEAAAAAA7BtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAAAA\n",
       "ACgAAACgAFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAA\n",
       "AANbbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVy\n",
       "bCAAAAABAAADG3N0YmwAAACzc3RzZAAAAAAAAAABAAAAo2F2YzEAAAAAAAAAAQAAAAAAAAAAAAAA\n",
       "AAAAAAABsAEgAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY\n",
       "//8AAAAxYXZjQwFkABX/4QAYZ2QAFazZQbCWhAAAAwAEAAADAFA8WLZYAQAGaOvjyyLAAAAAHHV1\n",
       "aWRraEDyXyRPxbo5pRvPAyPzAAAAAAAAABhzdHRzAAAAAAAAAAEAAAAoAAAEAAAAABRzdHNzAAAA\n",
       "AAAAAAEAAAABAAABUGN0dHMAAAAAAAAAKAAAAAEAAAgAAAAAAQAAFAAAAAABAAAIAAAAAAEAAAAA\n",
       "AAAAAQAABAAAAAABAAAUAAAAAAEAAAgAAAAAAQAAAAAAAAABAAAEAAAAAAEAABQAAAAAAQAACAAA\n",
       "AAABAAAAAAAAAAEAAAQAAAAAAQAAFAAAAAABAAAIAAAAAAEAAAAAAAAAAQAABAAAAAABAAAUAAAA\n",
       "AAEAAAgAAAAAAQAAAAAAAAABAAAEAAAAAAEAABQAAAAAAQAACAAAAAABAAAAAAAAAAEAAAQAAAAA\n",
       "AQAAFAAAAAABAAAIAAAAAAEAAAAAAAAAAQAABAAAAAABAAAUAAAAAAEAAAgAAAAAAQAAAAAAAAAB\n",
       "AAAEAAAAAAEAABQAAAAAAQAACAAAAAABAAAAAAAAAAEAAAQAAAAAAQAAEAAAAAABAAAIAAAAAAEA\n",
       "AAAAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAAoAAAAAQAAALRzdHN6AAAAAAAAAAAAAAAoAAAQKQAA\n",
       "AtoAAAEYAAABSQAAAT4AAAGkAAAAwQAAAUYAAAFCAAABbwAAAOMAAAExAAABPAAAAXEAAADfAAAB\n",
       "HgAAATYAAAF1AAAAuwAAAUQAAAEvAAABOwAAAOMAAAEoAAABWQAAAR4AAAChAAABTAAAAUkAAAE/\n",
       "AAAA5QAAARoAAAFAAAABEAAAAPAAAAESAAABKwAAAWgAAADoAAABDwAAABRzdGNvAAAAAAAAAAEA\n",
       "AAAsAAAAYnVkdGEAAABabWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAA\n",
       "AAAtaWxzdAAAACWpdG9vAAAAHWRhdGEAAAABAAAAAExhdmY1Ni40MC4xMDE=\n",
       "\">\n",
       "  Your browser does not support the video tag.\n",
       "</video>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create an animation of the traffic density.\n",
    "anim = animation.FuncAnimation(fig, update_plot,\n",
    "                               frames=nt, fargs=(rho_hist,),\n",
    "                               interval=100)\n",
    "# Display the video.\n",
    "HTML(anim.to_html5_video())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Interesting! The Lax-Wendroff method captures the sharpness of the shock much better than the Lax-Friedrichs scheme, but there is a new problem: a strange wiggle appears right at the tail of the shock. This is typical of many second-order methods: they introduce _numerical oscillations_ where the solution is not smooth. Bummer."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Lax-Wendroff with $\\frac{\\Delta t}{\\Delta x} =0.5$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "How do the oscillations at the shock front vary with changes to the CFL condition? You might think that the solution will improve if you make the time step smaller ... let's see."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set the time-step size based on CFL limit.\n",
    "sigma = 0.5\n",
    "dt = sigma * dx / u_max  # time-step size\n",
    "\n",
    "# Compute the traffic density at all time steps.\n",
    "rho_hist = lax_wendroff(rho0, nt, dt, dx, (rho0[0], rho0[-1]),\n",
    "                        u_max, rho_max)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video width=\"432\" height=\"288\" controls autoplay loop>\n",
       "  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAABGzm1kYXQAAAKuBgX//6rcRem9\n",
       "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQ4IHIyNjQzIDVjNjU3MDQgLSBILjI2NC9NUEVHLTQg\n",
       "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE1IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
       "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
       "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
       "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
       "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9OSBsb29r\n",
       "YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
       "ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
       "bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
       "aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49MTAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVz\n",
       "aD0wIHJjX2xvb2thaGVhZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIzLjAgcWNvbXA9MC42MCBx\n",
       "cG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAAA3QZYiE\n",
       "ABH//veIHzLLafk613IR560urR9Q7mffS/DfcIgE1iPo2a/hBQe4UunDkwjd39Qy4TgCKf4HVgFr\n",
       "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\n",
       "AAEAAAAATGF2ZjU2LjQwLjEwMQ==\n",
       "\">\n",
       "  Your browser does not support the video tag.\n",
       "</video>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create an animation of the traffic density.\n",
    "anim = animation.FuncAnimation(fig, update_plot,\n",
    "                               frames=nt, fargs=(rho_hist,),\n",
    "                               interval=100)\n",
    "# Display the video.\n",
    "HTML(anim.to_html5_video())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Eek! The numerical oscillations got worse. Double bummer!\n",
    "\n",
    "Why do we observe oscillations with second-order methods? This is a question of fundamental importance!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## MacCormack Scheme"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The numerical oscillations that you observed with the Lax-Wendroff method on the traffic model can become severe in some problems. But actually the main drawback of the Lax-Wendroff method is having to calculate the Jacobian in every time step. With more complicated equations (like the Euler equations), calculating the Jacobian is a large computational expense.\n",
    "\n",
    "Robert W. MacCormack introduced the first version of his now-famous method at the 1969 AIAA Hypervelocity Impact Conference, held in Cincinnati, Ohio, but the paper did not at first catch the attention of the aeronautics community. The next year, however, he presented at the 2nd International Conference on Numerical Methods in Fluid Dynamics at Berkeley. His paper there (MacCormack, 1971) was a landslide. MacCormack got a promotion and continued to work on applications of his method to the compressible Navier-Stokes equations. In 1973, NASA gave him the prestigious H. Julian Allen award for his work.\n",
    "\n",
    "The MacCormack scheme is a two-step method, in which the first step is called a _predictor_ and the second step is called a _corrector_. It achieves second-order accuracy in both space and time. One version is as follows:  \n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\rho^*_i = \\rho^n_i - \\frac{\\Delta t}{\\Delta x} (F^n_{i+1}-F^n_{i}) \\ \\ \\ \\ \\ \\ \\text{(predictor)}\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\begin{equation}\n",
    "\\rho^{n+1}_i = \\frac{1}{2} (\\rho^n_i + \\rho^*_i - \\frac{\\Delta t}{\\Delta x} (F^*_i - F^{*}_{i-1})) \\ \\ \\ \\ \\ \\ \\text{(corrector)}\n",
    "\\end{equation}\n",
    "$$\n",
    "\n",
    "If you look closely, it appears like the first step is a forward-time/forward-space scheme, and the second step is like a forward-time/backward-space scheme (these can also be reversed), averaged with the first result. What is so cool about this? You can compute problems with left-running waves and right-running waves, and the MacCormack scheme gives you a stable method (subject to the CFL condition). Nice! Let's try it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def maccormack(rho0, nt, dt, dx, bc_values, *args):\n",
    "    \"\"\"\n",
    "    Computes the traffic density on the road \n",
    "    at a certain time given the initial traffic density.\n",
    "    Integration using MacCormack scheme.\n",
    "    \n",
    "    Parameters\n",
    "    ----------\n",
    "    rho0 : numpy.ndarray\n",
    "        The initial traffic density along the road\n",
    "        as a 1D array of floats.\n",
    "    nt : integer\n",
    "        The number of time steps to compute.\n",
    "    dt : float\n",
    "        The time-step size to integrate.\n",
    "    dx : float\n",
    "        The distance between two consecutive locations.\n",
    "    bc_values : 2-tuple of floats\n",
    "        The value of the density at the first and last locations.\n",
    "    args : list or tuple\n",
    "        Positional arguments to be passed to the flux function.\n",
    "    \n",
    "    Returns\n",
    "    -------\n",
    "    rho_hist : list of numpy.ndarray objects\n",
    "        The history of the car density along the road.\n",
    "    \"\"\"\n",
    "    rho_hist = [rho0.copy()]\n",
    "    rho = rho0.copy()\n",
    "    rho_star = rho.copy()\n",
    "    for n in range(nt):\n",
    "        # Compute the flux.\n",
    "        F = flux(rho, *args)\n",
    "        # Predictor step of the MacCormack scheme.\n",
    "        rho_star[1:-1] = (rho[1:-1] -\n",
    "                          dt / dx * (F[2:] - F[1:-1]))\n",
    "        # Compute the flux.\n",
    "        F = flux(rho_star, *args)\n",
    "        # Corrector step of the MacCormack scheme.\n",
    "        rho[1:-1] = 0.5 * (rho[1:-1] + rho_star[1:-1] -\n",
    "                           dt / dx * (F[1:-1] - F[:-2]))\n",
    "        # Set the value at the first location.\n",
    "        rho[0] = bc_values[0]\n",
    "        # Set the value at the last location.\n",
    "        rho[-1] = bc_values[1]\n",
    "        # Record the time-step solution.\n",
    "        rho_hist.append(rho.copy())\n",
    "    return rho_hist"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### MacCormack with $\\frac{\\Delta t}{\\Delta x} = 1$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set the time-step size based on CFL limit.\n",
    "sigma = 1.0\n",
    "dt = sigma * dx / u_max  # time-step size\n",
    "\n",
    "# Compute the traffic density at all time steps.\n",
    "rho_hist = maccormack(rho0, nt, dt, dx, (rho0[0], rho0[-1]),\n",
    "                      u_max, rho_max)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video width=\"432\" height=\"288\" controls autoplay loop>\n",
       "  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAABCbG1kYXQAAAKuBgX//6rcRem9\n",
       "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQ4IHIyNjQzIDVjNjU3MDQgLSBILjI2NC9NUEVHLTQg\n",
       "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE1IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
       "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
       "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
       "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
       "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9OSBsb29r\n",
       "YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
       "ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
       "bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
       "aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49MTAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVz\n",
       "aD0wIHJjX2xvb2thaGVhZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIzLjAgcWNvbXA9MC42MCBx\n",
       "cG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAAA2EZYiE\n",
       "ABH//veIHzLLafk613IR560urR9Q7mffS/DfcIgE1iPo2a/hBQe4UunDkwjd39Qy4TgCKf4HVgFr\n",
       "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\n",
       "\">\n",
       "  Your browser does not support the video tag.\n",
       "</video>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create an animation of the traffic density.\n",
    "anim = animation.FuncAnimation(fig, update_plot,\n",
    "                               frames=nt, fargs=(rho_hist,),\n",
    "                               interval=100)\n",
    "# Display the video.\n",
    "HTML(anim.to_html5_video())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### MacCormack with $\\frac{\\Delta t}{\\Delta x}= 0.5$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Once again, we ask: how does the CFL number affect the errors? Which one gives better results? You just have to try it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set the time-step size based on CFL limit.\n",
    "sigma = 0.5\n",
    "dt = sigma * dx / u_max  # time-step size\n",
    "\n",
    "# Compute the traffic density at all time steps.\n",
    "rho_hist = maccormack(rho0, nt, dt, dx, (rho0[0], rho0[-1]),\n",
    "                      u_max, rho_max)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video width=\"432\" height=\"288\" controls autoplay loop>\n",
       "  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAABFV21kYXQAAAKuBgX//6rcRem9\n",
       "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQ4IHIyNjQzIDVjNjU3MDQgLSBILjI2NC9NUEVHLTQg\n",
       "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE1IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
       "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
       "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
       "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
       "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9OSBsb29r\n",
       "YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
       "ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
       "bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
       "aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49MTAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVz\n",
       "aD0wIHJjX2xvb2thaGVhZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIzLjAgcWNvbXA9MC42MCBx\n",
       "cG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAAA2dZYiE\n",
       "ABH//veIHzLLafk613IR560urR9Q7mffS/DfcIgE1iPo2a/hBQe4UunDkwjd39Qy4TgCKf4HVgFr\n",
       "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\n",
       "\">\n",
       "  Your browser does not support the video tag.\n",
       "</video>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create an animation of the traffic density.\n",
    "anim = animation.FuncAnimation(fig, update_plot,\n",
    "                               frames=nt, fargs=(rho_hist,),\n",
    "                               interval=100)\n",
    "# Display the video.\n",
    "HTML(anim.to_html5_video())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Dig Deeper"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can also obtain a MacCormack scheme by reversing the predictor and corrector steps. For shocks, the best resolution will occur when the difference in the predictor step is in the direction of propagation. Try it out! Was our choice here the ideal one? In which case is the shock better resolved?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Challenge task"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the *red light* problem, $\\rho \\geq \\rho_{\\rm max}/2$, making the wave speed negative at all points . You might be wondering why we introduced these new methods; couldn't we have just used a forward-time/forward-space scheme? But, what if $\\rho_{\\rm in} < \\rho_{\\rm max}/2$? Now, a whole region has negative wave speeds and forward-time/backward-space is unstable. \n",
    "\n",
    "* How do Lax-Friedrichs, Lax-Wendroff and MacCormack behave in this case? Try it out!\n",
    "\n",
    "* As you decrease $\\rho_{\\rm in}$, what happens to the velocity of the shock? Why do you think that happens?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## References"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Peter D. Lax (1954), \"Weak solutions of nonlinear hyperbolic equations and their numerical computation,\" _Commun. Pure and Appl. Math._, Vol. 7, pp. 159–193.\n",
    "\n",
    "* Peter D. Lax and Burton Wendroff (1960), \"Systems of conservation laws,\"  _Commun. Pure and Appl. Math._, Vol. 13, pp. 217–237.\n",
    "\n",
    "* R. W. MacCormack (1969), \"The effect of viscosity in hypervelocity impact cratering,\" AIAA paper 69-354. Reprinted on _Journal of Spacecraft and Rockets_, Vol. 40, pp. 757–763 (2003). Also on _Frontiers of Computational Fluid Dynamics_, edited by D. A. Caughey, M. M. Hafez (2002), chapter 2: [read on Google Books](http://books.google.com/books?id=QBsnMOz_8qcC&lpg=PA27&ots=uqCeuH1U6S&lr&pg=PA27#v=onepage&q&f=false).\n",
    "\n",
    "* R. W. MacCormack (1971), \"Numerical solution of the interaction of a shock wave with a laminar boundary layer,\" _Proceedings of the 2nd Int. Conf. on Numerical Methods in Fluid Dynamics_, Lecture Notes in Physics, Vol. 8, Springer, Berlin, pp. 151–163. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "###### The cell below loads the style of the notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<link href='http://fonts.googleapis.com/css?family=Alegreya+Sans:100,300,400,500,700,800,900,100italic,300italic,400italic,500italic,700italic,800italic,900italic' rel='stylesheet' type='text/css'>\n",
       "<link href='http://fonts.googleapis.com/css?family=Arvo:400,700,400italic' rel='stylesheet' type='text/css'>\n",
       "<link href='http://fonts.googleapis.com/css?family=PT+Mono' rel='stylesheet' type='text/css'>\n",
       "<link href='http://fonts.googleapis.com/css?family=Shadows+Into+Light' rel='stylesheet' type='text/css'>\n",
       "<link href='http://fonts.googleapis.com/css?family=Nixie+One' rel='stylesheet' type='text/css'>\n",
       "<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro' rel='stylesheet' type='text/css'>\n",
       "<style>\n",
       "\n",
       "@font-face {\n",
       "    font-family: \"Computer Modern\";\n",
       "    src: url('http://mirrors.ctan.org/fonts/cm-unicode/fonts/otf/cmunss.otf');\n",
       "}\n",
       "\n",
       "#notebook_panel { /* main background */\n",
       "    background: rgb(245,245,245);\n",
       "}\n",
       "\n",
       "div.cell { /* set cell width */\n",
       "    width: 750px;\n",
       "}\n",
       "\n",
       "div #notebook { /* centre the content */\n",
       "    background: #fff; /* white background for content */\n",
       "    width: 1000px;\n",
       "    margin: auto;\n",
       "    padding-left: 0em;\n",
       "}\n",
       "\n",
       "#notebook li { /* More space between bullet points */\n",
       "    margin-top:0.8em;\n",
       "}\n",
       "\n",
       "/* draw border around running cells */\n",
       "div.cell.border-box-sizing.code_cell.running { \n",
       "    border: 1px solid #111;\n",
       "}\n",
       "\n",
       "/* Put a solid color box around each cell and its output, visually linking them*/\n",
       "div.cell.code_cell {\n",
       "    background-color: rgb(256,256,256); \n",
       "    border-radius: 0px; \n",
       "    padding: 0.5em;\n",
       "    margin-left:1em;\n",
       "    margin-top: 1em;\n",
       "}\n",
       "\n",
       "div.text_cell_render{\n",
       "    font-family: 'Alegreya Sans' sans-serif;\n",
       "    line-height: 140%;\n",
       "    font-size: 125%;\n",
       "    font-weight: 400;\n",
       "    width:600px;\n",
       "    margin-left:auto;\n",
       "    margin-right:auto;\n",
       "}\n",
       "\n",
       "\n",
       "/* Formatting for header cells */\n",
       ".text_cell_render h1 {\n",
       "    font-family: 'Nixie One', serif;\n",
       "    font-style:regular;\n",
       "    font-weight: 400;    \n",
       "    font-size: 45pt;\n",
       "    line-height: 100%;\n",
       "    color: rgb(0,51,102);\n",
       "    margin-bottom: 0.5em;\n",
       "    margin-top: 0.5em;\n",
       "    display: block;\n",
       "}\n",
       "\n",
       ".text_cell_render h2 {\n",
       "    font-family: 'Nixie One', serif;\n",
       "    font-weight: 400;\n",
       "    font-size: 30pt;\n",
       "    line-height: 100%;\n",
       "    color: rgb(0,51,102);\n",
       "    margin-bottom: 0.1em;\n",
       "    margin-top: 0.3em;\n",
       "    display: block;\n",
       "}\t\n",
       "\n",
       ".text_cell_render h3 {\n",
       "    font-family: 'Nixie One', serif;\n",
       "    margin-top:16px;\n",
       "    font-size: 22pt;\n",
       "    font-weight: 600;\n",
       "    margin-bottom: 3px;\n",
       "    font-style: regular;\n",
       "    color: rgb(102,102,0);\n",
       "}\n",
       "\n",
       ".text_cell_render h4 {    /*Use this for captions*/\n",
       "    font-family: 'Nixie One', serif;\n",
       "    font-size: 14pt;\n",
       "    text-align: center;\n",
       "    margin-top: 0em;\n",
       "    margin-bottom: 2em;\n",
       "    font-style: regular;\n",
       "}\n",
       "\n",
       ".text_cell_render h5 {  /*Use this for small titles*/\n",
       "    font-family: 'Nixie One', sans-serif;\n",
       "    font-weight: 400;\n",
       "    font-size: 16pt;\n",
       "    color: rgb(163,0,0);\n",
       "    font-style: italic;\n",
       "    margin-bottom: .1em;\n",
       "    margin-top: 0.8em;\n",
       "    display: block;\n",
       "}\n",
       "\n",
       ".text_cell_render h6 { /*use this for copyright note*/\n",
       "    font-family: 'PT Mono', sans-serif;\n",
       "    font-weight: 300;\n",
       "    font-size: 9pt;\n",
       "    line-height: 100%;\n",
       "    color: grey;\n",
       "    margin-bottom: 1px;\n",
       "    margin-top: 1px;\n",
       "}\n",
       "\n",
       ".CodeMirror{\n",
       "    font-family: \"Source Code Pro\";\n",
       "    font-size: 90%;\n",
       "}\n",
       "\n",
       ".alert-box {\n",
       "    padding:10px 10px 10px 36px;\n",
       "    margin:5px;\n",
       "}\n",
       "\n",
       ".success {\n",
       "    color:#666600;\n",
       "    background:rgb(240,242,229);\n",
       "}\n",
       "</style>\n",
       "\n",
       "<script>\n",
       "    MathJax.Hub.Config({\n",
       "                        TeX: {\n",
       "                            extensions: [\"AMSmath.js\"],\n",
       "                            equationNumbers: { autoNumber: \"AMS\", useLabelIds: true}\n",
       "                            },\n",
       "                        tex2jax: {\n",
       "                            inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\n",
       "                            displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ]\n",
       "                            },\n",
       "                        displayAlign: 'center', // Change this to 'center' to center equations.\n",
       "                        \"HTML-CSS\": {\n",
       "                            styles: {'.MathJax_Display': {\"margin\": 4}}\n",
       "                            }\n",
       "                        });\n",
       "    MathJax.Hub.Queue(\n",
       "                      [\"resetEquationNumbers\", MathJax.InputJax.TeX],\n",
       "                      [\"PreProcess\", MathJax.Hub],\n",
       "                      [\"Reprocess\", MathJax.Hub]\n",
       "                     );\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.core.display import HTML\n",
    "css_file = '../../styles/numericalmoocstyle.css'\n",
    "HTML(open(css_file, 'r').read())"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (MOOC)",
   "language": "python",
   "name": "py36-mooc"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}