{ "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": "iVBORw0KGgoAAAANSUhEUgAAAZsAAAELCAYAAAAP/iu7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAEk1JREFUeJzt3XuM5WV9x/H3d3e4uNyFLeCFi2y7agVRqWm46ChKldZYitVqJU1Nu0lrrdJqtWhBqrQgTW20qF3Qtklt8VLtJREvbT2lrqSwKArKVaB0NVQRC7sszOwM3/5xzsxupnuZmT2/eZ7zzPuVTE72N+ck3zzfzfnMc57nPL/ITCRJ6tKK0gVIktpn2EiSOmfYSJI6Z9hIkjpn2EiSOmfYSJI6Z9hIkjpn2EiSOmfYSJI6N1a6gK4deuihuWbNmtJlNOeRRx7hgAMOKF1GcxzXbjiu3bjxxhsfyMzV83lu82Fz5JFHsnHjxtJlNKfX6zE+Pl66jOY4rt1wXLsREf813+f6MZokqXOGjSSpc4aNJKlzho0kqXOGjSSpc4aNJKlzho0kqXOGjSSpc4aNJKlzho0kqXOGjSSpc4aNJKlzho0kqXOGjSSpc4aNJKlzho0kqXOGjSSpc4aNJKlzho0kqXOGjSSpc4aNJKlzRcMmIo6OiM9HRJasQ5LUrWJhExHnANcBJ+zheftExHsi4raIuCUivhoRpy9NlZKkYSg5s3kH8FJgwx6e90HgNcAZmfks4GPAlyLi5I7rkyQNScmwOS0z79zdEyJiLbAOuDQzfwCQmVcBdwOXdF+iJGkYioVNZk7N42nnAAF8ec71fwPOiogDh16YJGnoxkoXsAcnAY8D9825fg/92p8JXL/URUkaDXf/YAtvvvom7n9wK0+4fu7frFpKtYfNEcDWzJyec/3hwePhO3tRRKyj//Ebq1evptfrdVbgcrVlyxbHtQOO63B98d5t3Pzdyf4/Ht1atphlrvaw2ZXY3S8zcz2wHmDt2rU5Pj6+FDUtK71eD8d1+BzX4bq19x247TbGnzLGxa91E+uwHXfZ/J9be9g8AKyKiJVzZjcHDR5/WKAmSSNiYqr/tnHIfsGxhx9QuJrlrfYTBL5Jv8anzrl+PDAF3LrkFUkaGZNTjwMwVvs73TJQews+CyQwPuf6i4AvZubmJa9I0siYGITNPit2+8m7lkDVYZOZt9Nfe/n9iDgCICLeQP/UgXeWrE1S/ZzZ1KPYmk1EXE7/BIFjBv++afCr52fm5A5PfRNwEbAhIrYBm4GzMvMmJGk3ZtZs9llZuBCVC5vMfNs8n7cNeNfgR5LmbdKP0arh5FJSs7av2RQuRIaNpHa5ZlMPWyCpWe5Gq4dhI6lZk36MVg1bIKlZs7vRfKcrzhZIataEazbVsAWSmuXW53oYNpKa5cymHrZAUrNmd6N5gkBxho2kZm3fIODHaKUZNpKa5dbnetgCSU3KTNdsKmILJDVp23QCsM/KYEX4MVppho2kJs2s1+y70re5GtgFSU2aWa/Zz61oVTBsJDVpZr3GmU0d7IKkJm2f2fg2VwO7IKlJzmzqYhckNcmZTV3sgqQmuRutLnZBUpNmZzZj7kargWEjqUmzazYeH1AFuyCpSROzMxvf5mpgFyQ1aXbNxrCpgl2Q1CTXbOpi2Ehq0oRbn6tiFyQ1adIvdVbFLkhqkjObutgFSU2a2SCwnzObKtgFSU3yFgN1MWwkNcmDOOtiFyQ1yYM462IXJDXJgzjrYhckNcmZTV3sgqQmbV+zcYNADQwbSU2a9CDOqtgFSU3yFgN1sQuSmuTMpi52QVKTvMVAXeyCpCZNeIuBqhg2kpo06ZpNVeyCpCZ5W+i62AVJTTJs6mIXJDVpcuYWA67ZVMGwkdQkv2dTF7sgqTmZyeS0YVOT6rsQEadExDURcWtE3BwR10fEL5auS1K9tk0nmTC2Ili5IkqXIyoPm4g4DvhX4AHgxMw8EfgY8MmIeEXB0iRVbGZW4+aAetTeibOBg4E/zcwpgMz8CPAw8LqShUmq18Q2Tw+oTe2dmBo8js1ciIigX7dbTCTtlKcH1Kf2sLkauA14V0QcGBErgAuA/YCPFK1MUrU8PaA+Y3t+SjmZ+XBEnAn8Jf11my3AQ8BLM/Pfd/W6iFgHrANYvXo1vV5vCapdXrZs2eK4dsBxHY5Nm/thMzX5KL1ez3GtQNVhExFr6W8Q+BzwROAx4NXAZyLi9Zl5zc5el5nrgfUAa9euzfHx8aUpeBnp9Xo4rsPnuA7HzZsegg1f4bCDD2J8/AzHtQK1zzHfAxwKvDkzt2bm45l5NXAt8NcRUXVYSipjYvb0gNrf4paP2jtxIrApMx+dc/0OYDVw/NKXJKl2rtnUp/ZOfB84eiczmGOBBH609CVJqp270epTe9h8kP73bP5wsOWZiHgR8AvAJzLzgZLFSaqTJz7Xp+o1j8z8dES8DHgH8O2ImAYeB94JfKBocZKq5S2h61N12ABk5heAL5SuQ9LomPRjtOoY+5Ka4+0F6mMnJDVn0jWb6tgJSc1xg0B95r1mM7iHzCuBA4F7gM9m5rVdFSZJi+XMpj7z6kREXAR8AngF8DTgPKAXEV8bHCkjSdVwN1p95tuJNwKfAg7PzJMy8wjgDPoHY14fEc/oqkBJWih3o9VnvmFzCPDRmRuYAWTmBuCFwNeA93VQmyQtirvR6jPfTmwCnjr3YmYm/W/5jw+xJknaK67Z1Ge+nfgwcFFEPHkXv39sSPVI0l5zzaY+892N9n7gTOCWiPhz+veX2QScALwXuLKb8iRp4SanXbOpzbxiPzOn6e9Eu4z+HTC/AtxL/8ZmBwD3RsRzvL+MpBpMbHPNpjbz7kRmTmXmpcBRwKnA7wAfp78j7UPARmBzRFzfRaGSNF/bZzaGTS0WPBMZbAr4z8EPABGxCngOcArw3KFVJ0mL4MymPkP52CsztwIbBj+SVJS3ha6PnZDUHL9nUx87Iak5niBQH8NGUnM89bk+dkJScwyb+tgJSc2Z9ASB6tgJSc2ZcM2mOoaNpKZk5uyXOp3Z1MNOSGrKtukkE8ZWBCtXROlyNGDYSGqKs5o62Q1JTZnY5ukBNbIbkprizKZOdkNSU2YO4XQnWl0MG0lN8fYCdbIbkpri7QXqZDckNWVy2g0CNbIbkprizKZOdkNSUyam3SBQI8NGUlOc2dTJbkhqirvR6mQ3JDVl5gQBZzZ1sRuSmuLtBepk2EhqyqR36ayS3ZDUFG8JXSe7IakpMzMb12zqYjckNWViyhMEamQ3JDXFmU2d7IakprgbrU6GjaSmOLOpk92Q1BTXbOpkNyQ1xdtC18luSGqKt4Wuk2EjqSnObOo0Et2IiHMj4tqIuDEi7o6IjRFxXum6JNVn+8xmJN7elo3quxER5wPvBF6Xmc8D1gJ3AGcWLUxSlSac2VRprHQBuxMRxwGXAqdn5iaAzNwWEW8FnlSwNEmVmrnFgDObulQdNsB5wP9m5g07XszM7wHfK1OSpJp587Q61R42pwL3RsS5wFuA1cCDwFWZ+bFdvSgi1gHrAFavXk2v11uCUpeXLVu2OK4dcFz33kObtwLw9Y03sGlVP3Ac1/JqD5unAscBbwXOAb4PnAv8XUQcnZmX7OxFmbkeWA+wdu3aHB8fX5Jil5Ner4fjOnyO695bseFf4LEJXnD6qRx58P6A41qD2ueZ+wMHAG/LzPsz8/HM/BTwj8AFEbGqbHmSauOaTZ1q78bmweNNc65/HVgFPHNpy5FUO79nU6fau3Hb4HFundO7uC5pGcvM2VOf913p20NNau/GPw8eT5pz/VnAo8C3lrYcSTXbNp1kwsoVwZhhU5Xau/EJ4AbgvRFxIEBEnAG8CrgkMx8pWZykurjtuV5V70bLzOmIeBlwGfCtiHgMmAB+KzOvLFudpNq4OaBeVYcNQGY+CPx66Tok1c/NAfWyI5Ka4e0F6mXYSGqGM5t62RFJzfD2AvWyI5KaMTnd3yDgzKY+dkRSM5zZ1MuOSGrG9hunuUGgNoaNpGY4s6mXHZHUDHej1cuOSGqGJwjUy45IaoZno9XLjkhqhicI1MuwkdQM12zqZUckNcPdaPWyI5KaMXuCgDdOq44dkdSM2ZnNPr611caOSGrG7JqNM5vq2BFJzdg+s3E3Wm0MG0nNmJhyzaZWdkRSM2a/1OmaTXXGShfQtYcmkiu+fFfpMppz992TfCsd12FzXPfO7fdvBpzZ1Kj5sPnRRHL5F24vXUab7nRcO+G47rVDV+1bugTN0XzYHLJv8JvjJ5Quozn33XcfxxxzTOkymuO47r2jDtmfU449rHQZmqP5sDls/+D3Xvb00mU0p9e7n/Fxx3XYHFe1yg82JUmdM2wkSZ0zbCRJnTNsJEmdM2wkSZ0zbCRJnTNsJEmdM2wkSZ0zbCRJnTNsJEmdM2wkSZ0zbCRJnTNsJEmdM2wkSZ0zbCRJnTNsJEmdM2wkSZ0zbCRJnTNsJEmdM2wkSZ0zbCRJnRu5sImI/4iIjIjjStciSZqfkQqbiDgXOL10HZKkhRmZsImIfYE/Bj5XuhZJ0sKMTNgAbwQ2AjeULkSStDAjETYR8UTgbcAFpWuRJC3cSIQNcCHwN5l5b+lCJEkLN1a6gD2JiDXAq4FnLOA164B1g39ORMQtXdS2zB0BPFC6iAY5rt1wXLuxdr5PrD5sgPcBl2bmQ/N9QWauB9YDRMTGzDylq+KWK8e1G45rNxzXbkTExvk+t+qwiYgzgGcBryldiyRp8aoOG+ClwErghoiYuXbU4PFzETEJXJCZboeWpIpVHTaZeSH9zQGzIuLdwEXA2fPcMLB++JUJx7Urjms3HNduzHtcIzO7LGTodgib492dJkmjYWTCJiLOBv6I/sdoRwK3ApOZeXLRwiRJezQyYSNJGl2j8qVOVSAijo6Iz0eEf6FIWtAp/E2GTUT8WER8PCJuH/x8OiKeUrquURYR5wDXASeUrqUlEXFyRFwZETdGxDci4tsR8YGIWF26tlEWESdExJ8MxvXGiLhj8Mb4s6Vra8VCT+FvLmwGp0N/CdgX+EngmcAjwJcj4sCStY24d9Dfir6hdCGNuRp4IvCCzHw2/TE+C9gQEU8oWtloeznwS8BrMvN5wNPp/7H0TxHxwqKVNWAxp/A3FzbArwAnAW/PzKnMnAbeDjwN+I2ilY220zLzztJFNOrtmfkIQGZ+F7gc+HHg7KJVjbbvAu/OzLsAMvNx+huMVgCvLFlYIxZ8Cn+LYXMucF9m3j1zITPvB749+J0WITOnStfQqJNm3hB38L3B42FLXUwrMvOzmXnVnMsHDx5/sNT1tGSxp/C3GDYnAffs5Po9wIlLXIu0W5k5uZPLPwEkcO0Sl9OsiHgycAXwtcGjFm9Rp/C3GDZHAJt3cv1hYJWfg6tmEbESeAPw0cy8o3Q9o26wUeAuYBP9o69+PjMfLlzWyNrhFP5LFvraFsNmV2LPT5GK+wNgCji/dCEtyMzvZOYa4BDgDuAbETHvHVT6fxZ8Cv+MFsPmAeCgnVw/CNiamY8ucT3SvETEr9L/q/HlmbmldD0tGcxmzgf+B/hQ4XJG0g6n8H94Ma+v+iDORfom/W2Ocx0P3LzEtUjzEhHnAb8LvDgzv1+6nlE3+Lj8sdzhiJTMzIi4GXhVROyXmRPlKhxJe3UKf4szm88Ax+74jdaIOJL+nT7/vlBN0i5FxOvpb89/yWDnJBHxc4M7zmpxrgF+eifXj6O/fruzjRnajcy8MDNPyMyTZ36Ajwx+ffbg2i6/d9Ni2PwV/RnMZRExFhErgEvp70Zb1PRP6kpE/DJwJf3/ty+JiNcPwucVwJNK1taAiyPicIDoexPwU8AHdpzxaGk0eRDnYCbzfuAU+ltIbwHekpn/XbSwERYRl9OfRh9D//sf3xj86vm72L6reYiIB9n192kuzsx3L2E5zYiI04Bfox8uU8D+wA/pr9f8rWGzdxZzCn+TYSNJqkuLH6NJkipj2EiSOmfYSJI6Z9hIkjpn2EiSOmfYSJI6Z9hIkjpn2EiSOmfYSJI6Z9hIkjpn2EiSOmfYSAVFxJqI2BYRF8+5/uGI2BwRp5SqTRomw0YqKDPvAq4Czo+IIwAi4kLgDcA5mbmxZH3SsHjqs1RYRBwFfIf+8fe3AeuB12bmJ4sWJg1Ri7eFlkZKZt4fEX9G/7bQY8BvGzRqjR+jSXW4E9gPuC4zryhdjDRsho1UWES8GPgL4DrgtIh4duGSpKEzbKSCIuK5wD/Q3yQwDtxH/3a7UlMMG6mQiFgDXAN8EXhTZk4CFwNnR8QLihYnDZm70aQCBjvQvkp/JvMzmTkxuL4SuAX4UWaeWrBEaagMG0lS5/wYTZLUOcNGktQ5w0aS1DnDRpLUOcNGktQ5w0aS1DnDRpLUOcNGktQ5w0aS1Ln/A0wDhLjlQd19AAAAAElFTkSuQmCC\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", "\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": [ "\n", "#### Figure 2. Stencil of the forward-time/central scheme.\n", "\n", "\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", "JrjuQYnd+975e4/mqqdQuswoOs3i05HKD8t9ParSEsClI8gDHVm88yvdc0vikd8nDO4rXT7KsCgu\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", "JrjuQYnd+975e4/mqqdQuswoOs3i05HKD8t9ParSEsClI8gDHVm88yvdc0vikd8nDO4rXT7KsCgu\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", "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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": 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", "JrjuQYnd+975e4/mqqdQuswoOs3i05HKD8t9ParSEsClI8gDHVm88yvdc0vikd8nDO4rXT7KsCgu\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", "JrjuQYnd+975e4/mqqdQuswoOs3i05HKD8t9ParSEsClI8gDHVm88yvdc0vikd8nDO4rXT7KsCgu\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", "JrjuQYnd+975e4/mqqdQuswoOs3i05HKD8t9ParSEsClI8gDHVm88yvdc0vikd8nDO4rXT7KsCgu\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 }