{ "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": [ "## Convection problems" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to *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", "In the [first module](https://github.com/numerical-mooc/numerical-mooc/tree/master/lessons/01_phugoid), we learned about numerical integration methods for the solution of ordinary differential equations (ODEs). The [second module](https://github.com/numerical-mooc/numerical-mooc/tree/master/lessons/02_spacetime) introduced the finite difference method for numerical solution of partial differential equations (PDEs), where we need to discretize both *space* and *time*.\n", "\n", "This module explores the convection equation in more depth, applied to a traffic-flow problem. We already introduced convection in [Lesson 1 of Module 2](https://nbviewer.jupyter.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/02_spacetime/02_01_1DConvection.ipynb). This hyperbolic equation is very interesting because the solution can develop *shocks*, or regions with very high gradient, which are difficult to resolve well with numerical methods. \n", "\n", "We will start by introducing the concept of a conservation law, closely related to the convection equation. Then we'll explore different numerical schemes and how they perform when shocks are present." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conservation laws" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You know from (non relativistic) physics that mass is _conserved_. This is one example of a conserved quantity, but there are others (like momentum and energy) and they all obey a _conservation law_. Let's start with the more intuitive case of conservation of mass." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Conservation of mass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In any closed system, we know that the mass $M$ in the system does not change, which we can write: $\\frac{D\\,M}{Dt} =0$. When we change the point of view from a closed system to what engineers call a _control volume_, mass can move in and out of the volume and conservation of mass is now expressed by:\n", "\n", "\n", "\n", "Let's imagine the control volume as a tiny cylinder of cross-section dA and length dx, like in the sketch below.\n", "\n", "\n", "#### Figure 1. Tiny control volume in the shape of a cylinder.\n", "\n", "If we represent the mass density by $\\rho$, then mass is equal to $\\rho\\times$ volume. For simplicity, let's assume that mass flows in or out of the control volume only in one direction, say, the $x$-direction. Express the 1D velocity component by $u$, and conservation of mass for the control volume is translated to a mathematical expression as follows:\n", "\n", "$$\n", "\\begin{equation}\n", "\\frac{\\partial}{\\partial t}\\int_{\\text{cv}}\\rho \\, dV + \\int_{\\text{cs}}\\rho \\, u\\, dA =0\n", "\\end{equation}\n", "$$\n", "\n", "where \"cv\" stands for control volume and \"cs\" stands for control surface. The first term represents the rate of change of mass in the control volume, and the second term is the rate of flow of mass, with velocity $u$, across the control surface." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since the control volume is very small, we can take, to leading order, $\\rho$ as a uniform quantity inside it, and the first term in equation (1) can be simplified to the time derivative of density multiplied by the volume of the tiny cylinder, $dAdx$:\n", "\n", "$$\n", "\\frac{\\partial}{\\partial t}\\int_{\\text{cv}}\\rho \\, dV \\rightarrow \\frac{\\partial \\rho}{\\partial t} dA dx\n", "$$\n", "\n", "Now, for the second term in equation (1), we have to do a little more work. The quantity inside the integral is now $\\rho u$ and, to leading order, we have to take into consideration that this quantity can change in the distance $dx$. Take $\\rho u$ to be the value in the center of the cylinder. Then the flow of mass on each side is illustrated in the figure below, where we use a Taylor expansion of the quantity $\\rho u$ around the center of the control volume (to first order)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "#### Figure 2. Flux terms on the control surfaces." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Subtracting the negative flux on the left to the positive flux on the right, we arrive at the total flux of mass across the control surfaces, the second term in equation (1):\n", "\n", "$$\n", "\\int_{\\text{cs}}\\rho \\, u\\, dA \\rightarrow \\frac{\\partial}{\\partial x}(\\rho u) dA dx\n", "$$\n", "\n", "We can now put together the equation of conservation of mass for the tiny cylindrical control volume, which after diving by $dA dx$ is:\n", "\n", "$$\n", "\\begin{equation}\n", "\\frac{\\partial \\rho}{\\partial t} + \\frac{\\partial}{\\partial x}(\\rho u)=0\n", "\\end{equation}\n", "$$\n", "\n", "This is the 1D mass conservation equation in differential form. If we take $u$ to be a constant and take it out of the spatial derivative this equation looks the same as the first PDE we studied: the linear convection equation in [Lesson 1 of Module 2](https://nbviewer.jupyter.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/02_spacetime/02_01_1DConvection.ipynb).\n", "But in the form shown above, it is a typical _conservation law_. The term under the spatial derivative is called the _flux_, for reasons that should be clear from our discussion above: it represents amounts of the conserved quantity flowing across the boundary of the control volume." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Dig deeper" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can follow the derivation of the full three-dimensional equation of conservation of mass for a flow on this screencast by Prof. Barba (duration 12:47)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAWgB4AMBIgACEQEDEQH/xAAaAAEAAwEBAQAAAAAAAAAAAAAAAwQFAgEG/8QASRAAAgICAAMEBgcEBwcDBAMAAQIAAwQRBRIhEzFBURQVImFxgTJTkaGiwdEjUpKxQlRicpPh8AYkM0NVc4I1wvFFY4OyJTRk/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/xAAXEQEBAQEAAAAAAAAAAAAAAAAAEQEh/9oADAMBAAIRAxEAPwD7H1Th/VfiMeqcP6r8Rl2IFH1Th/VfiMeqcP6r8Rl6IFH1Th/VfiMeqcP6r8Rl6IFH1Th/VfiMeqcP6r8Rl6IFH1Th/VfeY9U4f1f3mXogUfVOH9V95nvqnD+r+8y7ECl6pw/q/vMeqcP6r7zLuvfECj6pw/qvvMeqcP6r8Rl6IFL1Vhj/AJX4jHqrE+q+8y7ECl6qxPqvvM99V4n1X3mXIgUvVWH9V95nnqnD+q/EZeiBR9U4f1X4jHqnD+q/EZeiBR9U4f1X4jHqnD+q/EZeiBR9U4f1X4jHqnD+q/EZeiBR9U4f1X4jHqnD+q/EZeiBS9U4f1X3meeqcP6r7zL0QKPqnD+q+8x6pw/qvvMvRAo+qcP6r7zPfVOH9V95l2IFL1Th/VfeY9U4f1X3mXYgUvVOH9V95j1Th/VfeZdiBR9U4f1X4jPfVOH9V+Iy7ECl6pw/qvxGeeqsP6r8Rl6IFH1Vh/VfiM99VYn1X4jLsQKPqnD+q/EY9U4f1X4jL0QKXqnE+r/EY9U4f1X4jLsQKXqnD+q/EZ56pw/qvxGXogUvVOH9V+Ix6pw/qvxGXYgUvVOH9V+Ix6pw/qvxGXYgUvVOH9V95j1Th/VfeZdiBS9U4f1X4jPG4Vh8p/ZfiMvTxvomB7ERAREQEREBMoW8UyGtOK+KES1kHaqwPQ68JqTMx7vR+DZOWP8A713X4sYHdQ4wN9r6E390sPykh9Z66LiD/wA2/SZeLxjNbCwltVPSucDJ6dAOYL0952Pvk2Zxu/G4jfj+j1MqBSvNcFY7HgO8wLDLxvfsNgAe/nM85ePfv8P+x5pqSVBI0SJkZnFL6V6viUE2BAHfmOie/wB3TrAnrHGB/wAQ4Tf3Sw/KTG7MQDeIrnzS39RIxxWs8R9DWuzYJUuV0vNrfLv4Rh5OVZm2V3qgHIG5F69md9AT4k98Dr0rL/qDf4onvpOX/UD/AIolyU7uI10Wcj0ZHfra17H3QHpOX/UD/iiPScv+oH/FE74hc1GDbbX9ML7JPgT03IGybOG8Ovuzn7QUk8rAdXHh08/CB02ZlqN+rnPuFiyH1nm/9HyP41/WSpxjFaytH56jbrs+0XXP8Ptk2Vn4+LjrdZZtHPKnIOYsfIagVPWeb/0bI/jX9Y9Z5v8A0fI/jX9ZZr4niWVCztgoOthxog71oj4zPwc/Ju/2gzKewbsVCAlnHsdD119kCf1nm/8AR8j+Nf1nQ4jmH/6TcPjYsqZnEXy0zvQcxRXjIVdez6liDrR989wOJUJw/HxMh351x92uT9EgdQT5wLR4jmD/AOlXf4izuvOyrAebh7VAeNloAEpUcdpqrxlNVppuUdhYWDM48SfLXvknFeJYb4uXj9shNXKLevTRbqv2AwLjNxBhutMbR7t2MfylZvXezqzh4A8+fpLHCQVwVABCczdmG7+TmPL90zs/Fsu/2iCJ2fJZigkWglSVbyB79EQJ0s4y5IXI4Yx8gWMmrXjGv2luGP7qMfzlHIXD4fmYISumtw5e96xoKORgCfLZPSW6uOY7pWbFatnFjcrf0eUnv951AmCcU37V2L8q2/WdFOIFdrkUH41H9ZTrzxi8JrsQ2XvYpZEtYcygDqGPu6/yk3+z7OeEVLavLbWWRx5EEwOtcUHVr8QD+4f1nfJxP67G/wAI/rK3GK67c7h6Xf8AB5nNgJ6EBd9ZFVxS2mrGxkpfIyHp7RVZtMRvps/AHZ/WBoJXnn/iZFIH9mv9TI7E4qG/ZXYpX+1WwP8AOR3cewKK6WttINqghQNkfHy75JxLjGJwsJ6Qx2/UBRvp5wPCnF9dLsPf/bb9ZGV474WcP+YeS53GcLAsau+wiwJz8oG9+74zhOM8PyWantV0RYG2egC9Dv3dYHPLx79/h/2POq140D+0OCw/slh+Ukp4rhWDSXAa6AH+kPMeY98uI62IHRgysNgjuMDPyLeKY+NbcUxG7NC2g7eA35TQqbnqV9a5gDqQcSIHDconuFL/AP6mSY3TGqH9gfygSxEQEREBERAREQEREBERAREGAiIgIPUREBERAREQEREDi5uSl3/dUmZ64lmRwPGxhpeZK+02PDoW/OWeKAnhuSqkBmrYDZ11IkZ4rg0Fa3yE5tDu6wGRw2s87Y6KllttbufPlI/ISJuH3PnX3D0dSxBSxq+dhoAa93jLS8QxGUMMmrR/tToZmMe7Iq/jECYbCgE7PnM7JwceziOMvoVRQc1jv2Q1vWgCfPqfsl30rH+vq/jEelY/19X8YgQtgVektkIWW070d7CnWt689Svh4OXhWKq5C3o7l7ndNMen6/ZL3pWP/WKv4xHpWP8A1ir+MQJYkQyKGOhdWfgwnrZFCnRurB97AQPbqkvpeqwcyOCpHulVuGU241lF7WWrYQW5m69O7X2Sf0rH/rFX8Ynj5mKg22RVr+8IEGXwnEzDX2yEitORNHXKNg9D/wCIlDO4fZXXh4uPlGoHJJqYICahysdDzlp/9oOGI2jefkjH8pFZxzhNz1M1zlq25l/Zt36I8vfA6o/2dwKkUOrWvykMztsuT4n3/wApbp4dVRYGqJC8hRgepbZ3sn7ftkA47gMdCywn/tN+kl9a4v8A97/Bb9IHNPBcChqmrp0au7r3+W/PXhudpwrDRSvYKwNhsPMN9T3zxuK4wGyLgPPsW/SRjjWETrns3/2m/SBPZw7EsZCaEHIjIoA0AG7+nyni8LwVqFfolJGtbZASfifOeJxGiz6CXN/+Jp6vEK2JCVXsR3jsiP5wLFNYppSsEsFGgWOzPDRWchbyv7RVKA+4/wDxK751gHsYOS/yA/ORpxDJP0uGZC/NT+cCzdh496utlKEWa5/Z6tru3OTgYjM7NjVMXIZtqDsiR+nW/wBQyvsX9Z0uaSPbxMhPioP8jA9s4di2WVu1Q3WxZR4bPU7Hj1k9dSVlyg0Xbmb4yE5qd/Y36/7ZnA4njluVVuLeXYt+kDvLwcfMao3pz9kdr16fPzkfEiK61NSqt9hFK2aG1B7+vw2YPE8cNykXBvLsW/Sc5TU5dXZ20ZBAII0hBBgVeG8KxL+F4fbVBiqlgT3tsEbPn0MsJwTBF7XPW1tjLyE2sW6fAydMlK0VEx71VQAAK+4T30zyx8g/+H+cDivheHXUK+xDgb6v7R6jR6n3dJ36uwuXXolAH/bHWeemf/58j+D/ADnNnEaatdqlyb86if5QOU4Vj0VLXi7oAPtMv0iv7u+8CWqKa8ahKal5a0AVR5CV04jTZ1rS5h/2miziKJWXFGQwHfqowHF9+rblHe4Ca89kDX3y2BoaHQTB4jx3h9tVa12uSt1bH9m3cHBPhNyuxba1sQ7VhsdNQO4iICIiAiJ5A9iIgIiICIkGcrvg3pV9M1sF+OoEOPndqoudQtVtgSnzYeZ+M64hxGnAFZtV2LnoEG+nTZ+8SvlEvw7EtwqWuVHR1RSAeUfGVOKUvxFsBrMGznDP+zZtBegHMxHhA2jkUrclLWKLXBKpvqQJxVkCzLvp0AKuXR337E+exeDcQquttd+a5qXpWwtsg7BVvhoARl8EzRlMcfZrC1libCDY+zzH74G1nFqGXNrYlK+lqg9Cm+p+I75dBBAIOwZncNwxwzhL49zBkr5iWPdo9ZY4aHHDcYWb5+yXe+/ugWoiICIiAiIgc21pahSxQynvBEjrtrS/0VF1yoHGh0A3qTblHFdDxHNdmAbmSoAnyG//AHQLnKu98o38JxZVTyMXrQrrZ2omfdxmuviT0jkOPRWXvt39A+AlHiuZnNgW2v8AsUsrIpqrb2n2N7Y+Gh16QNReGcMyUW70Slw4DAlO8Ge+puGjuwaP4JSpHDuGWOqhv92oFrszluUdwHX4GXL+M4dKXE2gtUASviSRsD4wOjwjhx78Kn+ATz1Lwz+o0fwCd8OvutwarcsV12uNlVOwN90tMdKT5CBSHCOGBtDCoB9yz08H4c3fhUn4rMjHpvs5LqctxmXJ29trfQrQ9y6+75EzexLjk4lNxUqbEDEHw2IECcI4dWdphUqfMIJZrx6azuupF+CgSPMbLWsHDrqsffUWMQAJT7Xjn9Vw/wDFP6QNSeO6oNuwUb1szmo2GpTaqrZr2gp2AZk/7VPy8JAAJL3Vrpe/6XhA0MLOqzlsNXN7DaOx39Ng/YZZ1Pn0z/Q+HY9mOFa3Iygjqe9N79n4gACX+J8VHDha1igqtPPX16u29cv3r9sDRiZtN/ZnKyb+ZGqqBtTe16LvY8vEfKMTiyXU4jWoKrMhWbl5vohd9fh3fbA0Z70mPVmXcVes42QcWpq1tU8gZnB6Ede7X5y9ThV47vctlrWMNEu5I+zwgWtSJsilL1oa1Baw2qE9T/rRkfD7/ScCm3tUtLL1dPok9x185l8SspXJzmsZBeqVin94sNsAPHvgbmwASfCU6OKYl9LWi3s0XWzYOXoe49fAyNMj/d8y2ytjarFCqDZ0Po9PgZRu9GTB4ZfeorUtWtgsHcoRtbHxgbqMtiB0YMrDYIPQzrUycTiuBTQrKrY+PZay1sw0rdN8w/syX11jcmTaA5ox05mt10Y+Q8z+sDQJCjZOgPEzwMpdkBBZe8b7pgcezMfN4OxqZ3HahAEbW9a5j08ANy9VxWg+lWmvkFYDB/G1eoBHzBAgaNjpUhexlRB3knQE6GiOkwM7PGfwS/8AZjtVZQtY2RYdggDzB/WbGE6vh0lHDjkHXz6QJLbK6a2stdURRssx0BOlIZQykEEbBHjMzjeTj11U0XuurblBTvLAHfd8pxg8WxG4dWuGWsZSKUrPRt9w35DpvfkIGvGpjDj61bryaGFqWGuwV+0FP9EfE9Jewcq29ra8ikU2oQQoO9qe4/zHygW4iZDcdxXXIXm7LkDBGc65iOh++Bfws2jPo7bHYsnMV6jUnZlRSzEBR1JPhM/gl2JdhIcSxXPInacvgeUD8pxxrItXCvqrx3Ysmg51y9fvgacEhRskAeZmNg56YiGrKt7XItyXCqo6n2tb14AflNPMFrYzLRVVax17Nh0pECZWDb5SDo6Op7PmeEcLa9e2yqQiM7NuvIbp7R8Jp4GVXjYFPbOdWdo4YnY5dk7+wiBpxKd9vpLviY2V2OQqrYWChtAny9+pQ4Rm22caz8e11dVVVR17mZfpdPPqu4G2TobPcJyrK6BlIZSNgjxlPjhZeDZZQEnsj9HvmbmW5fDqRkileSrWlfJPL16fRA98D6CJ8/Vx29MfKN1PNkKOeqsAhWXR6g+IGu+aFXFsdxcWPKKWVCf3mIHQeffr4wLlNFdAcVjQdi5HvPfJJVwc5c0WfsbaWrOmS1dHulqAiIgRX0V5ChbV5lB3rfQyWIgIiICIiAiIgJnUcJqF2XdkhbmyHJ6j6K+AmjECivB+HqUIxU2gKr393595nVfDMSoMErPtJ2e2YtpfIblyIGavBMTX7YNe5+m7nq/lvXfqT0cNxcexHrqG0QoN9ehOz98txApVcJwabEsro01Z2vtMQD8N6lzWxo909iBl18FrTmTt7TQx9qroAw1oAnv0BNMDQAHcJ7EBERATN4jxLh2Nelea+rEIdNoTo+fSaUhycXHylC5FKWgdwYb1Axcnif8As/kNvIZXYj6tt/dPbeKf7P311La/OtJBTaOSpmiODcNU7XBoB8wkep+HA7GFT/DAq+tuE5PaqH5+2XkcchHMOvTr8TKxr4UEC9lbYy9Btxsr3cu992ppng3DT1ODRv8AuTz1Lwzexg0b/uCBBw8hs3tV4dbSHB/aFwVG+/oD46E1p4ihFCqAFHcBPYEIRcXHYUU9BtgidNk9Zmhz6Wco8Eu7dgAXJUnp85sRAynzcopYq8JvBcHrzL16a85njHua7HtPB7RdWVL2NYCGAGta3PpYgfPvjHTK/Cb7V/oKbVIrGwdD5gT2xXsud7OC5Lqx2UNq8u9a3rflN+IGDjj0ewtVwC5CV5T7anp8N+6Wr3ryKjVZwu91IAK8oHQHeu/zmpEDHaxlyBkJwS43BeQNzKND7YxbXputuTg19T29XIZTv75sRA+euW1mHZcEuXd3auS6kt5+M6xwcY0mrgN4akEK3aLvr3+M34gY65eQru44HcGsYMx516kDW+/yE69NyRcbRwa/tCvKW517vLvmtEDM9Z5v/R8j+Nf1lMGyqq9aeA3I1oOyXU9T8TN+IGVg5V9OLXW/C70ZFC+zy9dD4zjJy8rJr7JuE5AXmBPtr10d/lNiIGI1fMliNwZyLX53/ajZO/OW6b8lK1rTh7IqjQ3aJoRAy0vyaazTXwyzlJJ32i6Gzv8AOU7cS+zBxse/BtsFKcjCu0AONaIPun0EQMXEpupPOuBd2pBDWPcNtvXf9gnuLjvgUVivh7O1WyG7UczE95+c2YgY2XmZuRiXUeqMhe0QrsuvTY+MqV15SvWx4dd2+uV8m5g5C+5Qe+fSRA+exezr4hfy05WW7UKtjOmierdOutDXlLeJRw5ciuurFejISsqgZDtV+Pd4y/Xj8mbfkc2+1VF15cu/1k8CrXgpXiPQHfdgPPZv2mJ8d+csgaAHl0nsQEREBERAREQEREBERAStflCmxdFWRSBbo9U33H4Sw45kIBKkjvHhMumujGo4gCCyD2WLdS55evzJMDVle7Mrqy6sdgeazxHcvlv46Mkxwy49av8ASCgH4ynaalfNyL9ctXLrfhyjmH3mBoRMdM3KHDmzLrE3U3tJWu1YbHj85O3ELlotd6OVlI0O/lUjoTCVoxMz1jYbcOmtqrHt9qxh0AUeQk/plj5VuPTTtqtczMdDr3fn9kFXImeOJdwcCs1BmyAevKB06fHvHunOPxBMjHyLLSionQoCeYdO4/5Qq3Xl02JWwbQsYqm/Ej/4k8wuE5yY2MmNZWR2bOHbwQ9Tr7AZOOMWitrXwbBWH5OjDfXWunzhK1okGJeb6iXTkdWKsu96M6yrHqxLrKwC6IWAPiQIV7kWijHstI2EUtqeY72vX+2rFbg6IB2D7xM++/KzOGNZQKQhRg4ck92wdal3Aa9sRHyTWWYAjkBA1qBYkZvqVLH5wVr3z6PdqSTFSi26+x6/aoybiLNdwCkDfz0RCNiqxbaksX6LgMJ1MuvK7DgmM6kKzKqgnuHmfsBg8Qd8BXJFLg6uJGzWOvXXnA1IlHIsBx8W2u0tX2iEnf0wen8yDL0KREit2Lqf2nKCSCv73SBLERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBI3oqdlZkB5TzD4+ckiAlZ8GqzKF7M++m037LEdxI85ZiByaqygQovKCCBroNQK1FhsA05GiZ1ECnTwzGqD8ym5nbnZ7epJloIiuzhQGYAE+eu7+c6iBF6PV2tlhQFrFCv7wIbGoexXapC6DSnXdJYgQeh0ctq9mNWsWYeZPfOqseqmoVqvQHfXqd+fxksQPAqrvlAGzs+8z2IgcitAnZhQE1rlA6anqqFUKo0ANAT2ICc1olSBK1CqO4CdRAjOPSa1rNalFIIXXQanNmHjWljZQjFiC2x3kd0miBG+PS7q71qWT6JI7pJOLLUr12jqvMdDZ753ATxlVipYAlTse4zizIqqsrrdwGs2FB8dDZjGvryaFuqO0bej89QJIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIDwmWubl3tYqejUMlnKRa+zrQPcPjNJ1V1KsNgzJs4TXdi5YWkLZZYeU60ddOm/fo/bCNQWKKO0axSoGy47p1W4trWxDtWGwZlY+BmCmpHdFqNvO9IA6De9bmvA5LorqhZQzdw31M6mMMPIt4n6aa/2lLkLs/SU9ND3AdfiTNmBy1iIwVnUE9wJ751MriyX4r+mYlfa2vpCpXm5feJzaMo41ovteuugMe13oueuvkBqCteQ15Ae69COUUkDZPfsA/nMqvOyr763rS42kAirl1XynxLefj908fBzLbMntiLVNqMa1HILAFHj/AK7oG5G5jXYPEcm1nN7UKwUhFb6BB7vs++X8KhscW1/8sNtNnfTQ39+4VagnXfE8ZQylWGwRoiAVlcbVgw8wdz2VOHY5xqGq7FKlVzyhD0I30MtwERECjldk2cEyCnZdg2wx13kfpJeHOz4VbPs9+i3eV30J+WpXzmVb1svx8fs1ICW2P3Hv8pNc+SiCztqVQkD6BPedDx98IrZ+NZm5n7IhHx0BRmHTmY9fuH3znhl3oeLVidmd1B2cnpyrzNo++alXaBB2pUt5qNCcW41Vt1drrt6wQPn3wIl4hjuyrWWdmOgFHuB/kRLUy8Xh7KlRrIoCWs2gvUjfd9mpqQKFvEmTJtqWkOKyBvtAvhvxlvHt7ehLeXl5hvW9z22iq9QttauB4MNzpVVFCqAFHcBCqeYLL8ivGquenpz2MnfrwH+vKS4Vr2VuthDNW5QsO5ovxBdYXFtlbFeQlDrYktVSU1LXWNKIHcSOrtee3teXl5v2ZH7uh3/PckgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgJS4ullmCVrrNvtDmQDZYbl2IEeNX2OLTV+4gX7BJIMQEREBERAREQERECnmhLMjGrsClAWsbm7ug1/wC6ULksbDd8a9qsZLlZDyc3s9Nke4HZmy9aWa51Da7tie6XWgBryhEOG4NZr9J9IdPpN08fhLE5VFT6KgfATqB5E9nkK8ns8ZlTRZgvh1Op7AREQEREBPAytvlIOjo68J7PnMcXcO/2gyrbrz6Nk6YJrYU9Bs+W4H0cREBESlZxTFrsatjZzKdHVbH8oF2JQGTacgWUiy2lyAUZCpXw2N+EvwE8gEHuIOunSewEREBERAREQEREBERAREQEREBERAREQERECtxKw1YVjrcKWUbDHWt+Uq46VX2Le2TkswQMRzFU/lLmdSb8O2tUV2ZSFDd24yaC+C9FRAJTlHhA6tyK6qRaSWVtcvL1Lb7tSStudA2iu/BhozNxeG3UHFU389VI3yH+idEdD5dfumnCK6ZtNmUcdNswBJOunTv6yxM/D4WMZ67Huax6xyodcul8Rrx85oQpM/FQ22pnNe4FmwtZPslT9Hp5+M0D1GpSownRqe1uFiULpFC66+Z9+oFuwOa2FbBXIPKSN6MylF/Wn0iw1G9q3s2OcHQ7vdvc061sFthdtoSOQeXTrK1WHYMktY6mpbDYgA6lj4n4bMIs0UrRUK1ZmA8WbZPzkkjrV1ewu/MrNtRr6I13SSFJDj5NeSrtXvSOUOxrqO+TSHGrtrFnaurlnLLpdco8B74E0hzMg41PMqdpYx5UTeuY+UmlbOK0p6Tyc71ghQe4b8f84EuPcMihLVBAcb0fCSSlwpXTE/auSzuzAHpoE9OkuwKudt2oxwxXtX9rXfygbP5SxXWtSBEGlHcPKV79esMXf7r6+6WoCV8nNpxWVbebZ6nS7CjzPkJYlDJoSzPrFoJSxdd/QsvUA/In7IFjNya8XFeyxwvsnXmekoLZlDExD2v7J0pTY6ly3RjLGTgHIyS7WDs2AUgrsgeIHx8Z36CRiJQLddm4atuXuAOwPyhEOBi1PUVvBuspsKlrDzdR3EfdNGRYtPo9XJzczEks2vpE95ksKTwsBrmIGzoT2ZeTbm81Iux6gpuABWzr4ny90DUicUtYyk2qFOzoA76TuAlXh45qmyG+leef5eA+ySZrcmFe3lW38p3SnZ01oO5VAgdyLJu7CrmCl3JCqoOtmSyDNpa6j9n/AMRCHT4jw/KB5hZLZNTF6+zdGKsobmG/j857nGxcZrKieav29D+kB3j7J7iGo4yNSgRCN8utakxG+hgUe37Xi1NaN7C0NYdeOyAPzkzZNVnpFNdwFlQ9vXXl6SDh/D3xcrItd+YMFSsa+ig7h95lo41W7WVFV7RpmA6mEVuHJRU9ldFoZSqsV37QPiT8ekuWWJVW1jnSr1JlTEwBijHKvt61Ku37+9dT8xLGVSb6goYKQwYEjY6HcCtw/L9IyMpSGAVlZQ/QgED9JBi5xbP5ms5qcgla1A+iVPT7Rs/KWF4fyq5FxF1isHsC/SJ8de6TNiVtjLQvsqgHKR3rrugTyCzNxqbOztyKkf8AdZgDJ5Qu4RhX2NZbWWZu8ljCrtdtdoJrdX15Hcq5mRki9KcRFZ+jOW7lXf8A8/ZJcTEow6ymPWEUnZ985ysV7mFlF5otA5eYLzAjyIhDHvsN749/L2iKGDL3MD/LqDLJkGNjdiWd7GttYAM7eXl7pPCkREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBKXEq2asOE7StOticxBK+7XjLsq52PfkCvsL+y5W2djfNAylPDrMtDi4r5GlLDRbewR4k++blLtZUrPWa2I6qTvUiOIB6PyOymkcoPmvkfsEndgiM7b0o2dQK+SP8AfMRvHmYfap/SWZTe1L8rEFTBwOazYPhrX5yPmut7bLrZmNZZKqd6U66HfzgaEqrhH0kWvkW2KrFlrbWlP+tyGjKyMmygKa61atbW6b5v3gPLX5zQgIiICIiAnFlSWlCw2a25l+OiPzncQERECvxHrw7I/wC238pYXuEzsrOR6MqhhyXHdaVk9X2OhElfIvGR2OPStgq5e0JbXf5fLrCLkq5OLZdZzJl3UjWuVNairKe3Pto7NQlf9Lm9o/LylqFcU1LTUtab0PMzuIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAnLtyIzaJ5RvQ7zOpXy6HtUNUwW1N8u+4+YPugZbW8SuyKGXINFd5AC9mCF6Ejr4np1mviWm/GrsYaYj2h5HxmN2mTSi05Diims6RhWXcdPAjoJcr4tw+lK6UZ1H0VHZt+kI0olZM1LAezS1teHIR/ORtm5AOl4defeWUfnCrsSh6fkc3L6C3NrfL2q7nQ4gyIz5WLbQijZY6YfdAs10VVEmqpELd/KutzxKK67XtQaZ/paPQ/KV1tzr1FtSUIjdVDsd6+QnVl+VUB/ugtPiUf9YEtOLTRY9ldYVn79SaURnZO+vDbh8GU/nOjm3gdMC/7V/WBciUTnZPhw28/wDkv6zwZ2V48OsA99iwL8TMqzrM8IuOhpJIfb76qCN66TTgIiIFfOzK8KkWWAkE8oC98z8LiWTavb3Iq1llBX90N3Hf2b+MvcRx7cilfR3VLq25kLDY3rXX5GY6YeZj2qjY9t1Q0TqwHZ3v3dCYTX0BrRnV2RSy9zEdRIbcKm63tG5w2gDysRsDznD2Z1lW6aaqn8rW3/Ke1pmcn7e6oHzRP1gc4+DZXldvdkG4gFU9gAgHzPjLsqCi2wBkzX5T1BVV0funjrnoy9lZTYg+kHBBPwIhVuJSxrsjL7RyDjqrcoQqCdjv3PGXios9izEZP7SsDAvRK6NmAe2lJP8AZc/pOubI+rq/jP6QJolW3JsoCmxK/aIUe33n7J2Lcg/8lR8X/wAoE8So5z+9RjKv9pj+k43xQgFDhkHuPM36QL8jqtW3n5T1RirDyMpBeME9XwlHuDGWceh63eyxwz2a5uUaHSBPETiu6u13VGBNZ0wHgYHcREBERAREQEREBERAREQEREBERAREQEREBERAREQEgzrmx8DIuTXNXWzLvzA6SeRZVAycd6S3KG8YGVhZFOJi25zkhH0oB+lYw7yR57/lPMniiW14D2VuC9qv7K8w8QeomhdwzDvt7SyhWO9+7fnrznnq2hQez5kYkEHe+XTc2gPCE654fmWZllzdny0KSqEjRJB0ZNdm00XrS5bmbyG/P9DOlxaUyDeqadu8g989bGqbIW9kBsUaBgUeG2pkZeVZ2L83a6DsmtLyjpL+RemPXzPs7PKFA2SfKK6hW9rD/mNzH3dAPynGVjekchWxq2Q7DL98KoPxEYuTlF9lUrTVQOyGO+n2Dcs38Q7PJRFrDJzhHctrTHuAHjPU4ZjJYrhCSqlep3zb7yfMw3C8RiSUO9DrzHoRrr8eg6wiRs6hctcYse1Y6A17tyPH4jVkZjY6K3RSwY9x0dGdXYlHbduzcljMg5vPXcPnsytZhUVX42PWhWthZzaPU9POBbws2nOV2oLFVbl5iOh+EjzclGx7qhzc781QCjrvlkmLi04ukqYgAcqpzdAPhOvRKfSfSOX9p8enx15wK2DkZV1dX+7LXVyj2i+yfkJfkePSKEZQdqWLAa7t9dfzkkKREQEREDD4hxC7Huya3YrWLa+zb+Esv3/zmnk5VKtZjs+n7IufcvdOGwK8hblykWwWWc4HloAD7hDcOrbLa9mYq2iyHuJHd/8AEIr8Bt//AIzGq7OwEJvZXp3900LMiqp+WxuU8pfZ7tDW+vzntVSUghBoFi3zPUyPKxK8p6Ws/wCU/MPI9O4/68IFDN4m12NlJhIWetSC5YKVOu/XfLGNm/7hj3ZPR7WVCFHcxOv5ztuG4rLo16PNzFgfaPxPjOLOGrZbs2utXN2nZr00/fvcC9I8i+rGqNtzhEBA2Z7VX2aaLM5J2SxnGZjJl0Gp9gHqCPAwqK0q3EsYb3+zcgfwy3KWXw9MlsfY6VnTHeiV1rW/jqWK3qXVKWAlBrl5tmBW4xbVXhctzey7qCviw5hsa8ekrYGX6Fg6vDlO27KlQvtAf0QZezcZb6mYVhrQByk+HXchyOF15Nxeyx+TmD8g6AMPGESNmFqb+VezurGgr+etiWaX7SlH/eUGVsjhuNk2my1WJPkxHXWt/ZLSqEUKo0ANAQIKs1LMy3GIKuncT3N0Hd9sp42dXTZfUabmdLWBK176E7H85dGHSMo5IB7Q+/p5d3yE7SlUussHfZrY94GoCi4X186q6jycaMqY/F8fIyuwTm2V5gxHQ67/ALJflVOH4tZrK1AGvm5T/e74FdeKdtQzVKFdLFDKeulY9D9nX3S2LLGzmrBArSsMenUkk/pIvVuMMYUIrIn9lu/4+c7ox7EyGuttDkoE0F13Enf3wLMREKREQEREBERAREQEREBERAREQEREBERAREQKd/E8fHssS3mBrIB6b6aB38Os89Z0Hs2Uk1MoYuemtnQHxM99XUnKyL3HMbuXYPgBrp906ThuKgA7Pm0djm8PL7IRDZm3LdawFRprYIVJPNs66nyHWaAPSVXwKmNzKzK1w053vp5DfdLFaCqta1JIUaG++FVeKXLTjDnZ1V3C81Z9oHw1JcTKqyaga32QPaB7wffOrsdLzWbNns35wPfOVxakvW1F5CAwIXoDs76/P+cCZmCqWPcBsynhrku6ZNli8ltezXr6PiNfI9ZdI2NHqDK2JRdj/s2tD0qNICvtAe8+MCTKqF+M6eJHsnfcfA/bMevGvRbLrcq2yyqxVOzr2SBzDp7z9wmzRSuPUK0JKjff8ZC2Er5BsZ25Swcp4FgNb/lCFfDsSrIGQlX7UdzFif5mWoiFIiICIiAiIgV8q1wyU0kC2zrs/wBFR3n/AF5yJsxnw63xyrWWN2as/wBHfXqdfAyXJwkyLA7PYp5eUhTrY2Do/ZC4WOqsgrHIxB5PAEeQ8IFZuItTfViOouymUs3ZnSj7ZyOKm/h6ZNCKhazkPanovvOvl9suJiY9bq6VKrDZ6e/v/lPPQcbshWKVCgkgDprffCPbbit1CrorYSCfkT0k8rjDpD1sFIFYARdnlGu7pLEKhzLmx8S21QCyqSNznGqNQLvkvdzddsRofCWD1Gj3SsmBQnMqhgjLyGsMeUD3CBZ2CNg9POZqVVC8UWKrI7m2iwHrveyN/M/KX6q0pqSpBpFHKB5CcV4tFThkqVSO4gd0CVnVF5nYKo8SdCe7BGx1E4uprvqaq5FdG71YdDOlAVQqjQA0BA9iIgIiICIiAiIgIiICIiAiIgIiICIkGbe2LiPcqc5TR5fPrAniQJlpZUjqrEM3KenVT75Fbk3jiK0V1q1YQM/X2upI6fZAuRKleTe+a6CsGhW5ObfUHW9/DrqW4CIkdtorNYI3zty/CBJE9kTXBclKdHmdSwPh01+sCSJy7BEZjvQGzoblM59jANRh3Wof6Wwv84F6I7hsxAREQEREBERAREQEREBERAREQEREBERAbiIgIjwkK5WO9YsW1ChblB34+UCaIiAiJHTdVkJz0uHXZGx5wJIiICIkZuAyFpIPMylgfgR+sCSIiAiVcjiGNjWMlrMCoBOkJ1vu7vhLKsHUMvUEbED2JXvy66bezYPzcvN0XfSSUXJkVC2o7Q9xI1AkiVs662mpDSELM4XbkgDf+eh85LR23J+3FYb+wSR98CSIiAiIgIiICIiAlTiv/p13y/mJbkWS4rodjU1wA+go2T8oFJXL33WYx3W1lY2vcT/SP2aHykqoa+KvZZZvnq6eAAB/znFXEQFAHD8useXYn8p62enNzHCyiQNb7EwinbxBlterGYLzZA57nHsKpG++Sesxa+Tegbkxa20NdHJ7j933yT0urT74dlMH6sDSSDOkz00R6vylBGiOw7xA4XPenhovtsDMhDOCOvIT36HdIr8+1sQM6ft670PIvgDogE+HQ63LC5NC8yrw68BhptY/f8Z02XV7X+45B5xpv2B6/GBXyMm+pnuZuxtQqhTfMhB8fj3/AGSTDvtvuxjkVmu4KyuNaG+h6TtuIqT/AOn5ZP8A2TOfWRd1PqzMJXuJrA1AvXra1RFLqj+BYbEw0wsxcOm2i6/t+0bac2k+k3h5E6mwuRdYu1xnU+TsBIns4j/QxqPnaf0geWU238QNd3XFVQ4AH0j3aPnrW/nKpuz8nNbGVhXjh3RrFXroaPQ+B66+2Ww/EietWMB/eJhjxBf+HXinfU9SIEuBa1uIjOdsCyk+eiRv7pYnNYIQbAB8QvdudQpKmTxCrHt7Nq7nbv8AYrJH2y3ECLHvGQpIrsQD99dSWIgJSzXdcqjVrVoAW3rak7HQ/Lepdg9YGNTm5uXnZC0OiV1qGrR06t578tzluPbw3t5Urt59Ilh1tfE/cRNoKoYsFAY9511MjbGx3GnoqYa1ooD074SKtWdZkOorr7Ou1CarH7ydfu/67pSGZa/Eq677EarGs09qjlHOQdD/AF5ibXZp7PsL7H0end8Jz2NPKyGpOVjthyjRPmYIz/WLXY+VyMisLOypIO9++aNVa01LWm9KNde8zwY1CsGWmsMvcQo2JJCnhMmrPyrMwWNX2eHzchDLo7Pcf5fbNaCARojfxgJBmC04r9iTz68O/Xjr36k85dBZWyN9FgQYGTTxJa8M3Y1VluJX9O2x/a9/TvMnw+KrkNcl1ZosqPVWPU9N/pLVOHTRU1artWOzzddyRqKmbmapCd72VHfCMuziiX8PuBBVnrblKg8vd0G/OUMyynKxeap1XnuQhfFVA5SzDw1+U+k5EChQqhR3ADoJyMegFyKawX+kQo9r4+cCSBOa0WutUXfKo0Nnc6hVNswvxFsOtNhay1lm/oHwEqcLyBVwe3LKjlG25Qf3VA/KXbcGu213LOFs0XUHQYjunlnD6m5lUtXW/R0TorfpCOb+IpVj4+Qf+HaN+/6OwPjI04qmRhZF+Op3UOnN49O/4b39knXh2Oq1KQzLUQa1Zthdd0kXEoRlZK1UqCo10GjAy6uNHkRCDc7KTz1jvO+g15666nO82ziFdoyQKutSM1XeT1PT5TZSmqsAJUi8vUcqganRVW1sA6Oxvwgj0A6GzsxEQrKybL34lU2KVRVbsndhvn8da92vvkz5dw4hVi+xyk7Zx4dCQvxOpOuHQuScgJ+0Pv6fHXnFuFRarKyn2m5yQdHfnuEVuJ3EWoKlBsp1cWJ+iu9fPfUTv1ki3BGUnmt7NdDuHQbPzOpNZhUWtWXUk19B17/j5yrmrV+3qqoYX2lRvl+l1HXfkIHPF8hij41bKrFOYk958gvv3Os3KyUzKcehwrPrYNRI9533d00GqrZ1dq1Lr3MR1EgycGrKtWy1rNqpUcrle/4QLMTmtBVWta70oAGzszqFIiICIiAiIgIiICIiAiIgexPJUyeI4+NatTFnsJA5UG9E92/KEXJ5OKLlvqWxN6PmNEe6dwpE4tsWmprHOlUbPTcgw8i2yyxL1CNoOoHgp8/f0gWp4zBRtiAPMz2U8mtMnProuXmrWtnKnuJ2APzgXO+JxTUtFQrTfKvds7ncBE5tsWmp7HOlRSxPuE4xshMqkW175T00w0QfeIEsSkufvjD4Whpag+/He+v5SBeKX2mrsMQMlpcKzWaBAP5jrA1IkdRtI3aqr7lO51bYKqmsbfKo2dDZgdRKeJxTHzXC0C0j94oQB85cgIiZ7ZV9F722kei9p2YBGivhze/rA0IkORl045UWtonyG9DzPkJNAREgzb2xsZrUr5yCBregPefdAniQ0i8MxusRlP0Qq61GVkDGqFhUsNgHXh7z7oE09kFNzWdDUy7G97BB+Yk0AYmRRjvZmZNduXeHoYNXptDlPUbHj12PlNKnJovYrVdXYwHUKwOoEsREBBIA2ToCJX4h/wD0bvLlO/hA8x8izIIcVctB+ixPVh4HXlLM8GgoA7tT2AiQ5OVViqrWk+0dAKCSfkJ0cikUi42qKz/SJ6QJInFdqWjaHY3retQbaxz7dRyfS693xgdxPFdWTnUgrrex1lN817DX6LXzluYkOCpIGu7fxgXYgd0QETmyxKwpdgvMeUb851AREQEREBERAREQEREBERAREQB7pgV14mNepsY+kpcxYNss466IHjvYm/PCq83NyjfnrrCIMFHFb2OpQ2uX5D/R/wA+n3yxEQrw611185mYYyH4k197sqhCoQgAd/TXn3ffJ+J4gyq1bkrdk66sJ0R490r4b4jZdKY9dQVqTZ06kHY/zhGrKtp5eJY/T6Vbgn+Ey1KuVsZWJy/WHfw5T/lCrUSKvKpstsrVwWrIDe7c5GVU+SaEJZ1+lodF+JgdX9m6mixgDapABPePH+cpYva1cGY1lnu222C7JbZBOvlLuRjU5Sclycyg7HUjXzE7qrSmta61Coo0AIGVhYoq4kL1xXWt07IM30uhJLN8ZJi02h6cc0lFxnLdoe5u/WvtmnEJCcW013cvaLzBTsCdxCuURa1CooVR4AaE6iICZXEAbbb67K7Hbk5KFCEjbDRbf+tfOarAlSAdE+PlM3kYXPU/Eb1ZRze0qgEeY6QIs/FtpLZByWNJRUtrAG+Qd+j/AK75r613T52urHzM0rbnXvkV2FVIHTQ7u4am/UnZ1qhZnIH0m7zCY7lDiTMStRW3sSrFuyXZc+C/fv5S/EKx7jk1Y1OPWzl1q3agGyF+Pn5S3lXD0BWoPsWaUPy75QfHUu6G966xoa1rpCMmntsPEqNdN3Z9rvsgOZgmj0Pl1+zclpyMlMPJ7cBsiok6Xr0PUfz18pdyGsSktSgdx15SdbkWGlha2+5ORrSNJvfKAPH398DPw0Zcxr0rsKPUVNzj6bDrvXl16SLhRtGZ2xpvTtv6K0BEUeHWb3wiCEREKSPJQWY1qMNhlI+6STi+uu6h67RuthpuuukDjEc24dFjd7VqT9kmlPhaCvBQKNVklq1/dUnoPs1LkCnxOmx6FtocrdSedTrfTWj9xM49BryMOivtS1OuZug/ab8fd37lrIrssUdlb2ZHf03sTqmoU011LshFCjfugc4+OmNUK6+blH7xJmDxGrLqPEUx8e17Mllbn1tAgA2Pj39J9HKVmRZ6VapsWuqkAkAbZvHfw8ITWImPmpmm7Dd/RCzmpF3rmKE93lvpNa/0o5eIwKIpUpzEbOyu+75Tv0l8l6q6D2KuH5iR7QKkDQ8PGWceg1Jp7XuO9hn1sQMuv1qeYO7kBnI2mt8p9kfA/lLWHl519w7fE7KokjZPXu2P0+M0IgV8+prsUooJ2y71362NyDDszmy3TIrUVKCQ3i3tHX3CX4hSIiAiIgIiICIiB5PYiAiIgIiICIiAiIgUeI1X2mtUrayrTF1DAcx6aB93fIcfH9WWJyY5YPWEPZD+kD/nNSIHjDmUqe4jXSV6cJarBYbbbHVORS53yiWYgZHYPfhJjBLBdiuHK9y2EHff7++X8Kt0qbtE5Czs3LvetmWIgIiICIiAiIgJ5PYgJlXrlZGagavSpZ7I5Rrl31JPvHhNWIFPkyMfKbsahZVawLe0ByHuP8pciICIiAiIgIiICIiAiIgJX4gdYN/Uj2D1HhLEEBgQQCD4GB4mgihe7Q1PZWqwhSy9nbYK1O+z5un+vdLMBERATMx8XIPE2yLqwCCw7QtvanuUDwHj9s04gUacJ683tNr2Sl2Xz22t/wAvvl6IgIiICIiAiIgIiICIiAiIgIiVMux2uXGqJUspZ3/dX3e+BbiYGPklK3sW8M9LAKFbfaDpsHzPXv8AObObecXEtvC83Zrza84E0Sjwuy61LbbnJDEaHgDrqB7vD5SHifEajw256SzgA6dBsAg+MJWpEjrvrtd0Rtsmtj4jYnVti01Pa50iKWY+4Qri/JqoKq5PMQSAqknQnVNqX0rbUdow2DKFuXSvEMe4FnWypkHIpPeQR/IzTgeRKl/EqMa1q7SQV1vQ30Pj8J0ufQ+M96liity/R6k+6EWYlZs/GU07s6XAlW8PtneNlVZSM1ROgddRqFTEgDZOgPGcpYlgJR1YDptTuVuLELwzILa0EO9ytw8VLxDKehOypZEOtaDHZ9qEakTxWVxtSCPMSOq7tLbqyvKa2A+II3uFSxIr8hMcIbA2nYKNLvRMlgIiICJHY2nrUOFYnej/AEgO+dCxDYawwLqNld9QIHURObGCIxJA6EwOomfwnNGVUE3zmutOZ972xHWX1YMNqQR3dIHsRK+ZmJiVsWBLcu1GuhPgNwLER3Dr0nLutaM7sFVRsk+EDqJQo4kt+E19fKT2jIgb2eYg6A6+MmGbWWrUh1Z1LEEfRHv8oFmJXrzse2hbls9hjyqSNbPulPB4hk3s/NQnYi5k7U2AePTpA1IkJyUW81uyA9NdeuzJVZXG1II7ukD2IiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgJXysXt9MlhrsUEBtb6HvBHiJYiBQo4WiWLZeUtdD7GqwgX5CWcyn0nEtpH9NeWTRAzn4YaqWqwrmoVxyuDs6HmPIzyjhFdCdiLObF3zGorvZ14ny8ZpRCRQxuHPjvzjKcnoD7IG1HcD+su3VrdS9TfRdSp15GdRCqleD2NONXU51S/MSe9tg7/nLcRAq24FV1mS77JvrFZ9w6932yGzhK2WMTfYE5gyovQKdaPxmhEJGW/BlbEahb2H0QpZd8qg7C6l3Hoap7HdwzProBoAASeIVVzsOrJrdnTnfkKqD1Hd5TPzMPLylrRAFWyhO05unVTvR+O5tRCRj18KyAqILuyUKrHk/fUnXy7vjqX8Wu4PZbkcgsfQ0m9ACWYhUdqWM9RSzlVW24I3zDXdJIiAiIgVM2nIeyuzGKB1DIebwB11Hw1IuH8NOC4Pam1ihFjsPaY76fdNCICVuIUi7CuHZh3Fbcg1s71LMQMxeFt2y212mgLUqoqDXK3XZI8Za4fiehY3Yc5fTE8x7zvr1lmICU87FbNYUt0pClifNu4fZ3/ZLkQIFo7UVWZCL2qDwOwDI+I0XZFda0lOj7YP3f6B6/KW4gZR4P+0QC39kjLYF1/TGuvzAP2y1dgrb6T+0ZTkAKSB3AeX3y3EJGf6r/Y0V+kuBTsDQA2p6a+PvkN3CrGvPZWKlKlXrTXQMNAk/Z981ohWUvB3XGuobJZxdathcjTdCCevyl7FxlxVdUPss3MAB3dJPEBERAREQEREBERAREQEREBERAREQETyewEREBERAREQEREBERAREQEREBERAREQERG4CI2JRtsszLWpocpSnSywd5P7o/WB02eGvejHqe6xBs6IA+0z0ZGYQd4LD/wDIv6yarHppINahdLy9PKS7HmIFVMjJJ9vCdR7nU/nPLcnJ5QaMJ3/vOqy1seYjY8xAoek8T1/6cn+OJ1XdxGzo2JXT/aazm18hLxYeYmdkZxdHNNgppT6WQw2P/EeMCZsxcdqqLrBZkOQNIPPx9wluZ1dFdedSqDelaxmJ2xJ6Df2maOx5iAiNjzEbHmICI2PMTzY8xA9iebHmI2PMQPYjY84gIiICIiA8IiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgZ/HMyzCwOero7tyg+X+tT5J8m92LNc5J7/aMRAibIuZuRbrB+8eYzpbbEUKtjgDwDGIge9vb9a/8Rjt7frX/AIjEQHb2/Wv/ABGO3tH/ADX/AIjEQInybXXrZZyt0A5j7U8DuSqu5PL1VN9FiIEnb3dtvtX6rr6R8512931r/wARnsQPO3t+tf8AiMdvb9a/8RiIDt7frX/iMdvb9a/8RiIDt7frX/iMdvb9a/8AEYiB3Xl5FTh0ucMPHmn2PC8pszAruce0eh+IiIFuIiAiIgIiICIiAiIgIiICIiAiIgIiICIiB//Z\n", "text/html": [ "\n", " <iframe\n", " width=\"400\"\n", " height=\"300\"\n", " src=\"https://www.youtube.com/embed/35unQgSaT88\"\n", " frameborder=\"0\"\n", " allowfullscreen\n", " ></iframe>\n", " " ], "text/plain": [ "<IPython.lib.display.YouTubeVideo at 0x7f63d41cb710>" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo('35unQgSaT88')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### General conservation laws" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All conservation laws express the same idea: the variation of a conserved quantity inside a control volume is due to the total flux of that quantity crossing the boundary surface (plus possibly the effect of any sources inside the volume, but let's ignore those for now).\n", "\n", "The _flux_ is a fundamental concept in conservation laws: it represents the amount of the quantity that crosses a surface per unit time. Our discussion above was limited to flow in one dimension, but in general the flux has any direction and is a vector quantity. Think about this: if the direction of flow is parallel to the surface, then no quantity comes in or out. We really only care about the component of flux perpendicular to the surface. Mathematically, for a vector flux $\\vec{F}$, the amount of the conserved quantity crossing a small surface element is:\n", "\n", "$$\n", "\\vec{F}\\cdot d\\vec{A}\n", "$$\n", "\n", "where $d\\vec{A}$ points in the direction of the outward normal to the surface. A general conservation law for a quantity $e$ is thus (still ignoring possible sources):\n", "\n", "$$\n", "\\begin{equation}\n", "\\frac{\\partial}{\\partial t}\\int_{\\text{cv}}e \\, dV + \\oint_{\\text{cs}}\\vec{F}\\cdot d\\vec{A} =0\n", "\\end{equation}\n", "$$\n", "\n", "To obtain a differential form of this conservation equation, we can apply the theorem of Gauss to the second integral, which brings the gradient of $\\vec{F}$ into play. One way to recognize a conservation law in differential form is that the _fluxes appear only under the gradient operator_.\n", "\n", "Recall the non-linear convection equation from [Lesson 1 of Module 2](https://nbviewer.jupyter.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/02_spacetime/02_01_1DConvection.ipynb). It was:\n", "\n", "$$\n", "\\begin{equation}\n", "\\frac{\\partial u}{\\partial t} + u \\frac{\\partial u}{\\partial x} = 0\n", "\\end{equation}\n", "$$\n", "\n", "If we look closely at the spatial derivative, we can rewrite this equation as\n", "\n", "$$\n", "\\begin{equation}\n", "\\frac{\\partial u}{\\partial t} + \\frac{\\partial}{\\partial x} \\left(\\frac{u^2}{2} \\right) = 0\n", "\\end{equation}\n", "$$\n", "\n", "which is the *conservation form* of the non-linear convection equation, with flux $F=\\frac{u^2}{2}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Traffic flow model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We've all experienced it: as rush hour approaches certain roads in or out of city centers start getting full of cars, and the speed of travel can reduce to a crawl. Sometimes, the cars stop altogether. If you're a driver, you know that the more cars on the road, the slower your trip will flow.\n", "\n", "Traffic flow models seek to describe these everyday experiences with mathematics, to help engineers design better road systems.\n", "\n", "Let's review the [Lighthill-Whitham-Richards](http://en.wikipedia.org/wiki/Macroscopic_traffic_flow_model) traffic model that was offered as an exercise at the end of Module 2. This model considers cars with a continuous *traffic density* (average number of cars per unit length of road) rather than keeping track of them individually. If $\\rho(x)=0$, there are no cars at that point $x$ of the road. If $\\rho(x) = \\rho_{\\rm max}$, traffic is literally bumper to bumper.\n", "\n", "If the number of cars on a bounded stretch of road changes, it means that cars are entering or leaving the road somehow. _Traffic density obeys a conservation law_ (!) where the flux is the number of cars leaving the road per unit time. It is given by $F=\\rho u$—as with mass conservation, flux equals density times velocity. But don't forget your experience on the road: the speed of travel depends on the car density. Here, $u$ refers not to the speed of each individual car, but to the _traffic speed_ at a given point of the road. \n", "\n", "You know from experience that with more cars on the road, the speed of travel decreases. It is also true that if you are traveling at fast speed, you are advised to leave a larger gap with cars ahead. These two considerations lead us to propose a monotonically decreasing $u=u(\\rho)$ function. As a first approximation, we may consider the linear function:\n", "\n", "$$\n", "\\begin{equation}\n", "u(\\rho) = u_{\\rm max} \\left(1-\\frac{\\rho}{\\rho_{\\rm max}}\\right)\n", "\\end{equation}\n", "$$\n", "\n", "\n", "#### Figure 3. Traffic speed vs. traffic density.\n", "\n", "The linear model of the behavior of drivers satisfies these experimental observations: \n", "1. All drivers will approach a maximum velocity $u_{max}$ when the road is empty.\n", "2. If the road is completely jampacked ($\\rho \\rightarrow \\rho_{max}$), velocity goes to zero. \n", "\n", "That seems like a reasonable approximation of reality! \n", "\n", "Applying a conservation law to the vehicle traffic, the traffic density will obey the following transport equation:\n", "\n", "$$\n", "\\begin{equation}\n", "\\frac{\\partial \\rho}{\\partial t} + \\frac{\\partial F}{\\partial x} = 0\n", "\\end{equation}\n", "$$\n", "\n", "where $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", "We can now use our numerical kung-fu to solve some interesting traffic situations, and check if our simple model gives realistic results!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Green light!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's say that we are examining a road of length $4$ where the speed limit is $u_{\\rm max}=1$, fitting $10$ cars per unit length $(\\rho_{\\rm max}=10)$. Now, imagine we have an intersection with a red light at $x=2$. At the stoplight, traffic is bumper-to-bumper, and the traffic density decreases linearly to zero as we approach the beginning of our road. Ahead of the stoplight, the road is clear.\n", "\n", "Mathematically, we can represent this situation with the following initial condition:\n", "\n", "$$\n", "\\begin{equation}\n", "\\rho(x,0) = \\left\\{\n", "\\begin{array}{cc}\n", "\\rho_{\\rm max}\\frac{x}{2} & 0 \\leq x < 2 \\\\\n", "0 & 2 \\leq x \\leq 4 \\\\\n", "\\end{array}\n", "\\right.\n", "\\end{equation}\n", "$$\n", "\n", "Let's see what a plot of that looks like." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy\n", "from matplotlib import pyplot\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 3, "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": 4, "metadata": {}, "outputs": [], "source": [ "def rho_green_light(x, rho_light):\n", " \"\"\"\n", " Computes the \"green light\" initial condition.\n", " It consists of a shock with a linear distribution behind it.\n", " \n", " Parameters\n", " ----------\n", " x : numpy.ndaray\n", " Locations on the road as a 1D array of floats.\n", " rho_light : float\n", " Car density at the stoplight.\n", " \n", " Returns\n", " -------\n", " rho : numpy.ndarray\n", " The initial car density along the road as a 1D array of floats.\n", " \"\"\"\n", " rho = numpy.zeros_like(x)\n", " mask = numpy.where(x < 2.0)\n", " rho[mask] = rho_light * x[mask] / 2.0\n", " return rho" ] }, { "cell_type": "code", "execution_count": 5, "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 = 30 # number of time step to compute\n", "u_max = 1.0 # maximum speed allowed on the road\n", "rho_max = 10.0 # maximum car density allowed on the road\n", "rho_light = 10.0 # car density at the stoplight\n", "\n", "# Discretize the road.\n", "x = numpy.linspace(0.0, L, num=nx)\n", "\n", "# Compute the initial traffic density.\n", "rho0 = rho_green_light(x, rho_light)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEYCAYAAAB2qXBEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl4VdW9xvHvLzNhFAgggoIiCMggEGxVbLRqrVWr4lCnMqj0Wqu9tlqtdazaOvV6a1utVCE413m4zrXGuZIAMskgMs+TQBLIcHLW/eOcBESQhHOSvc/K+3mePHncyUneZxvyZq+91trmnENERGRvpQUdQEREUpuKREREEqIiERGRhKhIREQkISoSERFJiIpEREQSoiIREZGEqEhERCQhKhIREUlIRtABGlu7du1cr169go7hhfLyclq2bBl0DG/ofCaXzmfyTJkyZb1zLq++n+99kXTu3JmSkpKgY3ihqKiIgoKCoGN4Q+czuXQ+k8fMljTk8zW0JSIiCVGRiIhIQlQkIiKSEBWJiIgkREUiIiIJUZGIiEhCVCQiIpIQFYmIiCRERSIiIglRkYiISEJUJCIikpBAi8TM9jWzN8zMBZlDRET2XmBFYmanA58AB+3h8zLN7FYzm2tms8zsYzM7qmlSiojIngR5RXItcDzw0R4+7y/AOcAI59yhwATgbTMb3Mj5RESkHoIskiOdc1982yeYWR9gHHCHc24dgHPuIWAhcHvjRxQRkT0JrEicc5F6fNrpgAHv7nT838AJZtYq6cFERKRBwj5rayAQBZbudHwRsYdy9WvyRCIi8jVhf0JiR2Crc65mp+Nb4u877OpFZjaO2JAYeXl5FBUVNVrA5qSsrEznMol0PpNL5zM4YS+S3bFv+6BzbjwwHqBPnz5Oj99MDj3KNLl0PpNL5zM4YR/aWg/kmln6Tsdbx99vaOI8IiKyk7AXyQxiGbvvdLwnEAHmNHkikb3gnNbcir/CXiQvAA4o2On4McBbzrnSJk8k0kDzVpdScE8Rf3prXtBRRBpFqIvEOTeP2L2O35pZRwAzG0tsNfzvgswmUh+rNm9j1ITJLNmwlXfnrQ06jkijCOxmu5ndTWxl+/7x//4s/qHhzrmqHT71cuAm4CMzqwZKgROcc58hEmKbt1UzekIxq7dUABCp0fCW+CmwInHOXV3Pz6sGro+/iaSEykgNP3u0hHlrSmnfMouN5VVU1USDjiXSKEI9tCWSiqJRx9XPzOA/CzeS1zqbv553GADVKhLxVKquIxEJrTvfmMvL01fSMiudwjH5tG+ZBUB1RENb4iddkYgkUeFHi3jw/YVkpBkPXDCU/l3bkpEW+2emKxLxlYpEJEnemLWKW/7vcwDuGDmQo3vnAZCVHvtnpnsk4isViUgSlCzeyC+f+gzn4KoTenPm0G51H8vMiO3oo1lb4isViUiCFqwt4+JHSqiMRDnv8P257JheX/t4ZrqGtsRvKhKRBKwtrWD0xMls2lrNcX078ftT+2P29T1FM9LiVyRRRzSqqxLxj4pEZC+VVUYYM7GY5V9tY1D3dtx37mFkpH/zn5SZ1d0nqY7qqkT8oyIR2QvVNVF+/vhUZq/cwgEdcnl41DBys3Y/mz4j3eKv0xWJ+EdFItJAzjl++/xM3p+/jg4ts5g0ZjgdW2V/62tq75NEdJ9EPKQiEWmge9+ez7NTlpOTmcbDo/Pp0bHlHl+TqSnA4jEViUgDPPHpUu779wLSDP567hAGd29Xr9dlaWhLPKYiEamnd+as4foXZwJw22kDOK5f53q/NjMjfrM9oisS8Y+KRKQepi/bxC+emEbUweXH9uK8w/dv0OtrpwBrLYn4SEUisgeL15cztrCYbdU1jBzSjV8d37vBX2P7okQNbYl/VCQi32JDWSWjJ05mQ3kVIw7uyB0jB3xjwWF9ZGVodbv4S0Uishvbqmq4aFIJizdspX/XNjxwwdC6K4uG0jYp4jMVicguRGqiXP7kVD5bton92rVg4uh8WmXv/eN7MuOztjT9V3ykIhHZiXOOm16ezb/mrKVti0wmjc2nU5uchL6m7pGIz1QkIju5v+hLHv90KVkZaTw8ahi9OrVO+GvWFYmm/4qHVCQiO3h+6nLufnMeZvDncwYzrEf7pHzd2qGtiDZtFA+pSETiPvhiHb95dgYAN57cjx8O2DdpX3v7Fika2hL/qEhEgNkrN3PpY1OJRB3jjj6QMUf2TOrXz9LQlnhMRSLN3vKvtjJmYjFllRFOGdSVa088JOnfQ9N/xWcqEmnWNm+tZvTEYtaWVnJ4z/bcc9ZA0tIavuBwT7Y/j0RFIv4JfZGY2TAze93M5pjZTDObbGZnBZ1LUl9FdQ2XPFLCgrVl9O7civE/HUZ2RnqjfC9N/xWfhbpIzKwH8A6wHhjgnBsATACeNrNTAowmKS4adfz66elMXryRLm1yKBwznLYtMhvt+2mLFPFZqIsEOAloA/yPcy4C4Jz7O7AFOC/IYJLabn9tDq/OXEXr7AwKx+bTtV2LRv1+mRraEo+FvUgi8fd1e1NYbMe8NKBxxiDEew99sJCHP1xEZrrx4IVDOaRLm0b/npr+Kz4Le5E8BcwFrjezVmaWBlwHZAN/DzSZpKRXZ6zitlfnAHDPWYM4olfHJvm+mrUlPtv7XeiagHNui5l9H5hI7D5JGbAZON45997uXmdm44BxAHl5eRQVFTVBWv+VlZWl9Lmct7GGu4srADi7dyZtN31BUdEXTfK9ly6uBmDR4iUUFa0GUv98ho3OZ3BCXSRm1ofYzfbXgPZABXA28LyZXeCce31Xr3POjQfGA/Tp08cVFBQ0TWDPFRUVkarncv6aUq544GMiDkZ99wBuPrX/Xj1XZG8tylwE8z6nS9duFBT0B1L7fIaRzmdwwj60dSvQDvilc26rcy7qnHsKeB+YZGahLkIJhzVbKhg9YTJbKiL8oH9nbjylaUsEdrxHoqEt8U/Yi2QAsNw5t22n4/OBPCC5+1iId0orqhk1YTIrN1cw9IB9+PNPDiO9ERYc7om2SBGfhb1I1gL77uLK4wDAAV81fSRJFVWRKJc+NpW5q0s5sGNLHvrpMHIyg5nsl5mh6b/ir7AXyV+IrSP5fXzaL2Z2DHAG8E/n3Pogw0l4Oee45rkZfLhgPR1bZTNp7HD2aZkVWJ6MNK1sF3+F+h6Dc+5ZMzsRuBb43MxqgCjwO+C+QMNJqN395jxemLaC3Kx0Jo7Op3v73EDzaPqv+CzURQLgnHsTeDPoHJI6Hv3PEu4v+pL0NOP+84cwoFvboCORpaEt8VjYh7ZEGuSt2au56aVZAPzxjAEU9OkUcKIYbdooPlORiDemLPmKy5+cRtTBlcf15uxh3YOOVEfTf8VnKhLxwsJ1ZVw8qZjKSJRzhnXniu/3CjrS12jTRvGZikRS3rrSSkZNnMxXW6s5pk8et59+aJMvONyT2iuSiIa2xEMqEklp5ZURxhYWs2zjNgZ2a8tfzxtCRnr4fqw1a0t8Fr5/cSL1FKmJ8osnpjJzxWb2b5/LhNH5tMwO50RE3SMRn6lIJCU557j+xVm8O28d++RmMmnscDq2yg461m5l6YpEPKYikZR03zsLeKp4GTmZaTw8Op+eHVsGHelbZdTebI/oHon4R0UiKefp4mXc+6/5pBn85dwhDNl/n6Aj7ZHukYjPVCSSUormreW3L8wE4Pc/PpTj+3UOOFH9aGhLfKYikZQxc/lmfv74VGqijp8XHMQF3zkg6Ej1tn33Xw1tiX9UJJISlm3cypjCYrZW1XD6Yftx9Q/6BB2pQTS0JT5TkUjofVVexagJk1lfVslRvTpy58iBoVtwuCcZ8YdpRaKOaFRXJeIXFYmEWkV1DRdNKmbh+nIO6dKaBy4YQlZG6v3Ymtn2bVKiuioRv6Tev0hpNmqijiuenMbUpZvo2jaHwjHDaZ2TGXSsvaZtUsRXKhIJJecct7wym7c+X0ObnAwKxw6nS9ucoGMlRPdJxFcqEgmlB99fyCOfLCErPY3xPx1G786tg46UMG2TIr5SkUjovPTZCu54fS4Afzp7EN85sEPAiZIjK11TgMVPKhIJlY8XrOeqZ6YDcP2P+nLKoK4BJ0qe2l2JqyO6IhG/qEgkNOas2sLPHp1CdY1j7JE9uXjEgUFHSqraWVsRzdoSz6hIJBRWbtrGmInFlFZG+NGAfbn+R32DjpR0dfdItHGjeEZFIoHbvK2a0RMns3pLBcN7tOdPZw8iLS21FhzWR+36F83aEt+oSCRQlZEaxj1Swvw1ZfTq1IrxPx1KTmZ60LEahab/iq9UJBKYaNRx1TMz+HTRRjq1zqZwTD7tcrOCjtVoardJ0fRf8Y2KRAJzxxtzeWX6SlplZzBxTD7d9skNOlKj2j60pXsk4peUKBIzG2lm75vZFDNbaGYlZnZh0Llk7038aBHj319IRprxwAVD6N+1bdCRGt32LVJ0RSJ+CX2RmNmVwO+A85xzQ4E+wHzg+4EGk732+sxV/P7/PgfgrjMHMuLgvIATNY26TRtVJOKZjKADfBsz6wHcARzlnFsO4JyrNrOrAH9WqjUjkxdt5Jf//Azn4Oof9OGMId2CjtRktm+RoqEt8UuoiwS4ENjknCve8aBzbiWwMphIsrcWrC3lkkdKqIpEOf/w/fl5wUFBR2pSWVrZLp4K+9DWEcDi+D2SD8xsrpl9bGZjgw4mDbN2SwWjJhSzeVs1x/XtxC2n9k+5h1MlKkNDW+KpsF+RdAd6AFcBpwNrgZHAk2a2r3Pu9l29yMzGAeMA8vLyKCoqapKwvisrK9urc7kt4vjjpxWsKI1yYNs0zupWxocfvJ/8gCG3bk0lAJ/PnUfR1oV7fT5l13Q+gxP2IskBWgJXO+dWx489Y2Y/Aa4zs3udc1t3fpFzbjwwHqBPnz6uoKCgqfJ6raioiIaey+qaKGMLi1laupUeHXJ55tIj6NAqu3EChlzRltmwbDE9DuxFwVE99+p8yu7pfAYn7ENbpfH3n+10fBqQC/Rr2jjSEM45rn1uJh98sZ4OLbOYNHZ4sy0R0BYp4q+wF8nc+Pudc9bs5riEyL1vz+e5qctpkZnOhNH5HNChZdCRAqXpv+KrsP8ifiX+fuBOxw8FtgGzmzaO1NcTny7lvn8vID3N+Nv5hzGoe7ugIwUuI03Tf8VPYS+SfwLFwG1m1grAzEYAZwK3O+fKgwwnu/bOnDVc/+JMAG477VCOPaRzwInCoXZoSyvbxTehvtnunKsxsxOBO4HZZlYBVAK/cM79I9h0siufLdvEL56YRtTBFd8/mHOH7x90pNDQ0Jb4KtRFAuCc2whcEnQO2bPF68sZW1jMtuoazhrajSuPOzjoSKGyfRt5DW2JX8I+tCUpYkNZJaMmTmZjeRVH987jD2cMaHYLDvdk+xYpuiIRv6hIJGFbqyKMnVTCkg1bOXS/Ntx//pC6X5qynbZIEV/Ve2jLzM4Cfgy0AhYBLzjnmt/yZPmaSE2Uy5+YxvRlm+i2TwsmjM6nVXboR0wDoS1SxFf1+rPRzG4iNoPqFOBAYpspFpnZVDPr04j5JMScc9zw0mzembuWdrmZTBo7nE6tc4KOFVp190iiukcifqnv+MNlwDNAB+fcQOdcR2AEUAZMNrO+jRVQwutv7y7gyclLyc5I4+FRwzgor1XQkUItU0Nb4qn6Fklb4GHnXKT2gHPuI+B7wFTgrkbIJiH23JTl3PPWfMzgzz85jKEHtA86UuhlZWhoS/xU3yJZTmwn3q9xzjngL0BBEjNJyL0/fx3XPDcDgJtP6c+Jh3YJOFFq0PRf8VV9i+QB4CYz2283H69IUh4JuVkrNnPpY1OIRB0/+96BjDqiR9CRUsb2LVJ0RSJ+qW+R3EtsX6tZZnarmX3XzLqbWQFwG6BV5s3A+m1RxhQWU15Vw48Hd+WaHxwSdKSUUju0pS1SxDf1KhLnXA2xGVt3Entg1IfAYuAdYs8LWWxmh5mZ5n16atPWKv5UUsG60kq+e2AH7jpzIGlpWnDYEBraEl/Ve9WYcy7inLsD6ELsEbi/Ah4nNnPrfqAEKDWzyY0RVIJTUV3DJY+UsKrccUiX1jz406FkZ6QHHSvlbC8SXZGIXxp8BRG/wf5p/A0AM8sFDgOGAUOSlk4CF406rvznZxQv/or2OcbEMfm0yckMOlZK0hYp4qukDEXFH3f7UfxNPOGc49ZXP+f1WatpnZPBr4Zmsm/bFkHHSlna/Vd8pQ2RZLce+mAREz9aTFZ6Gg9eOJRurfXjkojaK5KI7pGIZ/SbQXbp5ekruf21OQDcc/YgjjioY8CJUp/ukYivVCTyDZ98uYGrnp4OwHUnHcKpg7oGnMgPtbv/VmmLFPGMikS+Zt7qUsY9WkJVTZTRR/TgkhEHBh3JG5l1W6RoaEv8oiKROqs3VzB64mRKKyKc2L8LN5zcTw+nSiINbYmvVCQCwJaKakZPnMyqzRUMO2Af/vcng0nXgsOkyoifz0jUEZtFL+IHFYlQFYnyX49OYe7qUg7Ka8lDo4aRk6kFh8lmZjtMAVaRiD9UJM1cNOr4zbPT+fjLDeS1zqZwzHDa5WYFHctbGt4SH6lImrm73pzHi5+tpGVWOhNH59O9fW7QkbymIhEfqUiasUc+Wczf3/uSjDTjgQuGcuh+bYOO5D1tkyI+UpE0U2/OXs1NL88G4I9nDODo3nkBJ2oedI9EfJRyRWJmH5iZM7MeQWdJVVOWfMUVT07DOfjV8b05a9g3Hn4pjWT7Nim6IhF/pFSRmNlI4Kigc6SyL9eVcdGkYiojUc4d3p3Lj+0VdKRmRRs3io9SpkjMLAv4I/Ba0FlS1drS2ILDTVurOfaQTtz640O14LCJ1d0jiWhoS/yRMkUCXEbs4VnFQQdJReWVES4qLGHZxm0M6taWv553GBnpqfS/3w9ZGZq1Jf5Jid8kZtYeuBq4Lugsqai6JsplT0xl5orNHNAhl4dH55ObpaciB6F2dbuKRHySEkUC3Ag85pxbHHSQVOOc4/oXZlE0bx3tW2YxacxwOrbKDjpWs6XntouPQv9nqZn1As4G+jbgNeOAcQB5eXkUFRU1TrgU8OKCKl5cUE1WGlw2II3Fs4pZvJdfq6ysrFmfy2Qo27INgCnTptEjp0LnM4n08xmc0BcJcBdwh3Nuc31f4JwbD4wH6NOnjysoKGikaOH2dPEyXlwwgzSD+y8YxnH9Oif09YqKimiu5zJZHllczOwNa+nbfwDpa+bofCaRfj6DE+oiMbMRwKHAOUFnSTXvzl3Lb1+YCcCtpx2acIlIcuw4/VfbYoovQl0kwPFAOlC8wzTVLvH3r5lZFXCdc05TgncwY/kmfv74VGqijsuOOYjzDz8g6EgSt32LFEdOwFlEkiXUReKcu5HYjfY6ZnYzcBNwkm6+f9PSDVsZW1jMtuoazhiyH1ed0CfoSLKDupvtetyueCRVZm1JPWwsr2LUxMmsL6viqF4dueOMgVpwGDK1Q1uRqIpE/JEyRWJmJ5nZZ8B/xQ+9Fv9vAbZV1XDRpGIWrS+n775teOCCIXWL3yQ8dhzaEvFFqIe2dhS/D6J7IbtQE3Vc8dQ0pi3dxH7tWlA4Jp/WOZlBx5Jd0NCW+Eh/sqY45xw3vzybtz9fQ5ucDCaNzadzG93GDSttkSI+UpGkuAfe+5JH/7OErIw0HhqVT69OrYOOJN9CW6SIj1QkKeyFacu56415mMH/njOY4T3bBx1J9kBbpIiPVCQp6qMF6/nNszMAuOFH/ThpwL4BJ5L60NCW+EhFkoI+X7mFnz06heoaxyUjejL2qJ5BR5J60oOtxEcqkhSzYtM2xhROpqwywskD9+W3P6z3XpYSAhraEh+pSFLI5q3VjJ4wmTVbKjm8Z3v+dPYg0tK04DCVbF9HoisS8YeKJEVUVNdwyaMlfLG2jN6dWzH+wmFkZ2jbv1RTt7JdRSIeUZGkgGjU8etnpjN50UY6t8mmcMxw2uZqwWEq0tCW+EhFkgL+8NocXp2xilbZGRSOGU7Xdi2CjiR7SUNb4iMVScg9/OEiHvpwEZnpxoMXDqXvvm2CjiQJ0BYp4iMVSYi9OmMVt736OQB3nTmQI3t1DDiRJCorQ9N/xT8qkpD6dOEGrvznZzgHvzmxD6cf1i3oSJIEGWm6RyL+UZGE0BdrSrnkkRKqaqJc+J0DuPR7BwUdSZJk+812XZGIP1QkIbNmSwWjJxazpSLC8f06c/Op/fVwKo9oaEt8pCIJkdKKakZPLGbFpm0ctn877vvJYaRrwaFXNP1XfKQiCYmqSJRLH5vKnFVb6NmxJQ+PyqdFlhYc+kZDW+IjFUkIOOe49rkZfLhgPR1bZTFpzHDat8wKOpY0gtqV7VpHIj5RkYTAPW/N4/lpK8jNSmfC6Hz275AbdCRpJLVXJBENbYlHVCQBe+w/S/jbu1+Snmb87fwhDOzWLuhI0og0tCU+UpEE6O3P13DjS7MA+MPph3JMn04BJ5LGpiIRH6lIAjJ16Vdc/uRUog5++f2DOSd//6AjSRPIqt1rS1ukiEdUJAFYtL6ciyeVUFEd5exh3fjv4w4OOpI0kcy6dSS6RyL+UJE0sfVllYyaMJmN5VV8r3cet58+QAsOm5HtW6ToikT8kRF0gD0xs8HAZcAQYnkzgX8Btzrn1gWZraG2VkW4qLCYpRu3MmC/ttx//pC6MXNpHuoebBV1OKerEvFDKvwWewpoDxztnBsEHA+cAHxkZinzYI5ITZRfPDGN6cs30719CyaMzqdlduh7XJLMzOrKRKNb4otUKBKAa5xz5QDOuRXA3cDBwEmBpqon5xw3vDSLf89dyz65mUwaM5y81tlBx5KA1K0l0eiWeCIV/iQe6Jyr2unYyvj7fZo6zN74y78X8OTkZWRnpPHQqHwOzGsVdCQJUKxIalQk4o3QX5HsokQAegMOeL+J4zTYMyXL+J+355NmcN+5hzH0gJToPmlEdfdJdI9EPBH6ItmZmaUDY4GHnXPzg87zbd6bv47fPj8TgJtP7c8P+ncJOJGEQe3QliZuiS9SYWhrZzcAEeDK3X2CmY0DxgHk5eVRVFTUNMl2sHhzDXdMriAShZN6ZrJ/5WKKihY3eY5kKisrC+Rc+iZSVQnAlrKtOp9JpJ/P4KRUkZjZGOBsoMA5V7a7z3POjQfGA/Tp08cVFBQ0TcC4ZRu3cvUDH1NRA6cN7sr/nD2YNA+eK1JUVERTn0sftZlSxLpt5WS3yNX5TCL9fAYnZYa2zOxC4NfAsc65tUHn2Z2vyqsYNXEy60orOeKgDtx15iAvSkSSZ/usLd0jET+kRJGY2QXANcBxzrnV8WMnx4ewQqOiuoaLHylh4bpyDunSmr9fOJSsjJQ4xdKEan8mIuoR8UToh7bM7HzgH8TujRy3w3YiI4BVQeXaWU3U8cunpjFlyVfs2zaHwjHDaZOTGXQsCaGM+BWqbraLL0JfJMBfgBxiixB3dksTZ9kl5xy/f2U2b85eQ+ucDCaNHU6XtjlBx5KQ0oJE8U3oi8Q51z7oDHsy/v2FTPpkCVnpaYy/cBi9O7cOOpKEWO3QVo3WkYgnNICfoJc+W8EfX58LwD1nD+K7B3UIOJGEna5IxDcqkgR88uUGrnpmOgC/O6kvpw7qGnAiSQXbdwAOOIhIkqhI9tLc1VsY92gJ1TWO0Uf04OIRPYOOJCkiI12ztsQvKpK9sGrzNkZPKKa0IsIPD+3CDSf308OppN6y6rZIUZOIH1QkDbSloprRE4pZvaWC/B77cO85g0nXgkNpgO2bNgYcRCRJVCQNUBmp4WePTGHemlIOymvJP346jJzM9KBjSYrRpo3iGxVJPUWjjqufmcEnCzeQ1zqbwjHDaZebFXQsSUGatSW+UZHU051vzuXl6StpmZVO4Zh8urfPDTqSpCg9j0R8oyKph0kfL+bB9xaSkWb8/cKh9O/aNuhIksI0tCW+UZHswRuzVnPzK7MBuHPkQEYcnBdwIkl1GtoS36hIvsWUJRv55VPTcA6uOqE3I4d2CzqSeGD7FikBBxFJEhXJbny5royLJpVQGYly3uH7c9kxvYKOJJ7YvrJdTSJ+UJHswtrSCkZNmMymrdUc17cTvz+1vxYcStJoaEt8oyLZSVllhLGFxSz/ahuDurfjvnMPq9vSQiQZan+eNLQlvtBvyB1U10S57PGpzFqxhR4dcpkwahi5WaHfaV9STJY2bRTPqEjinHP87oWZvDd/HR1aZlE4ZjgdWmUHHUs8VDe0pXUk4gkVSdy9//qCp0uWk5OZxsOj8+nRsWXQkcRTWkcivlGRAE9OXsp973xBmsFfzx3C4O7tgo4kHtPNdvFNsy+Sf89dw/UvzgLgttMGcFy/zgEnEt9p91/xTbMukunLNnHZ49OoiTouP7YX5x2+f9CRpBnI1PNIxDPNtkiWbChnbGEx26prGDmkG786vnfQkaSZ0NCW+KZZFsmGskpGTZjMhvIqRhzckTtGDtCCQ2kyWRmxnzWtIxFfNLsi2VZVw0WTSli8YSv9u7bhgQuG1v2FKNIUdEUivmlWv0EjNVEuf3Iany3bxH7tWjBxdD6tsrXgUJpWRlptkeiSRPzQbIrEOcfNr8zmX3PW0LZFJpPG5tOpTU7QsaQZ0tCW+Cb0RWJmnczscTObF3971swavJ/7/UVf8th/lpKVkcbDo4bRq1Prxogrskca2hLfhLpIzCwLeBvIAvoD/YBy4F0za1Xfr/P81OXc/eY8zODP5wxmWI/2jRNYpB4ytWmjeCbURQKMAgYC1zjnIs65GuAa4EDg0vp8gW0R+M2zMwC48eR+/HDAvo2VVaRetl+RqEnED2EvkpHAUufcwtoDzrnVwOfxj+3R2q1RIlHHuKMPZMyRPRsppkj9ZWloSzwT9ilLA4H5uzi+CPh+fb6AA04Z1JVrTzwkmblE9lpGfIuUihq4/MlpAafxx9o1FTy3SuczCGEvko7AlF0c3wLkmlkL59y2nT9oZuOAcQC5nXtwaudNvP/+e42btBkoKyujqKgo6BgpL+ocLTOhvBpemb4y6Dh+Wa3zGYSwF8nufOsydOfceGA8wMG9+7jjjz2mSUL5rqioiIKCgqBjeOGl/mU8+6//0Ldf36DmN30QAAAF7klEQVSjeGPO53N0PpPktDsb9vlhL5L1wK7m6bYGtu7qamRnadr5REKoV6dWfKdrBgWD9ws6ijfabvpC5zMgYb/ZPgPosYvjPYGZTRtFRER2JexF8jxwgJn1qD1gZp2BvsBzAWUSEZEdhL1IColdedxpZhlmlgbcQWzW1gNBBhMRkZhQF4lzrgo4HqghtnZkDtAGONY5VxZkNhERiQn7zXacc2uA84LOISIiuxbqKxIREQk/FYmIiCTEnPN74zgzKwXmBZ3DEx2Jre2R5ND5TC6dz+Tp45yr97M2Qn+PJAnmOeeGBR3CB2ZWonOZPDqfyaXzmTxmVtKQz9fQloiIJERFIiIiCWkORTI+6AAe0blMLp3P5NL5TJ4GnUvvb7aLiEjjag5XJCIi0ohUJLJHZravmb1hZrp8FWkmzOwDM3M7bpq7O14WiZl1MrPHzWxe/O1ZM+sWdK5UZGanA58ABwWdJdWZ2WAz+4eZTTGz6Wb2uZndZ2Z5QWdLRWZ2kJndEz+fU8xsfvyX34+CzpbqzGwkcFR9P9+7IjGzLOBtIAvoD/QDyoF3zaxVkNlS1LXENs78KOggHngKaA8c7ZwbROy8ngB8ZGYtAk2Wmn4I/AQ4xzk3FDiE2B89L5vZ9wJNlsLiv0P/CLxW39d4VyTAKGAgcI1zLuKcqwGuAQ4ELg00WWo60jn3RdAhPHKNc64cwDm3ArgbOBg4KdBUqWkFcLNzbgGAcy4K/IHY77UfBxksxV0GlADF9X2Bj0UyEljqnFtYe8A5t5rYNvQjA0uVopxzkaAzeGRg7S+9HayMv9+nqcOkOufcC865h3Y63Cb+fl1T5/GBmbUHrgaua8jrfCySgcQefLWzRcCAJs4iUif+fJ2d9QYc8H4Tx/GOme0H/A2YGn8vDXcj8JhzbnFDXuRjkXQESndxfAuQq7FoCQszSwfGAg875+YHnSdVxW+6LwCWA+nAac65LQHHSjlm1gs4G7i9oa/1sUh2x4IOILKTG4AIcGXQQVKZc+5L51wvoC0wH5huZvWecSR17gLucM5tbugLfSyS9cCutj9uDWx1zm1r4jwi32BmY4j99fdDPTY6OeJXIVcCa4D7A46TUsxsBHAo8MDevN7HbeRnEJsGuLOewMwmziLyDWZ2IfBr4Fjn3Nqg86Sq+DB1hdthnyfnnDOzmcCZZpbtnKsMLmFKOZ7YsGCxWd3gTZf4+9fMrAq4zjm3yynBPl6RPA8csONqTDPrDPQFngsokwgAZnYBsenox8VnE2JmJ5vZuGCTpaTXge/s4ngPYvdEdzW5QXbBOXejc+4g59zg2jfg7/EPnxQ/ttt1JT4WSSGxK487zSzDzNKAO4jN2tqryzaRZDCz84F/EPsZPc7MLogXyylA1yCzpbBbzKwDgMVcDuQD9+14pSKNy8vdf+NXIPcCw4hNrZwF/LdzblmgwVKQmd1N7LJ3f2JrHabHPzR8N9NZZTfMbCO7Xy9yi3Pu5iaMk/LM7EjgYmLFEQFygA3E7o88oSLZO2Z2ErGFnV2AzsAcoCp+lbLr1+hci4hIInwc2hIRkSakIhERkYSoSEREJCEqEhERSYiKREREEqIiERGRhKhIREQkISoSERFJiIpEREQSoiIREZGEqEhERCQhKhKRJmJmvcys2sxu2en4A2ZWambDgsomkggViUgTcc4tAB4CrjSzjgBmdiOx57af7pwrCTKfyN7S7r8iTcjMugBfEtvqfC4wHjjXOfd0oMFEEuDjo3ZFQss5t9rM/pfYo3YzgCtUIpLqNLQl0vS+ALKBT5xzfws6jEiiVCQiTcjMjgUeBD4BjjSzQQFHEkmYikSkiZjZEOBFYjfcC4ClxB5pKpLSVCQiTcDMegGvA28Bl8efd38LcJKZHR1oOJEEadaWSCOLz9T6mNgVyA+cc5Xx4+nALOAr59wRAUYUSYiKREREEqKhLRERSYiKREREEqIiERGRhKhIREQkISoSERFJiIpEREQSoiIREZGEqEhERCQhKhIREUmIikRERBLy/7mXPz6jAa7sAAAAAElFTkSuQmCC\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the initial car density on the road.\n", "pyplot.figure(figsize=(6.0, 4.0))\n", "pyplot.xlabel(r'$x$')\n", "pyplot.ylabel(r'$\\rho$')\n", "pyplot.grid()\n", "pyplot.plot(x, rho0, color='C0', linestyle='-', linewidth=2)\n", "pyplot.xlim(0.0, L)\n", "pyplot.ylim(-0.5, 11.0);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**How does the traffic behave once the light turns green?** Cars should slowly start moving forward: the density profile should move to the right. Let's see if the numerical solution agrees with that!\n", "\n", "Before we start, let's define a function to calculate the traffic flux. We'll use it in each time step of our numerical solution." ] }, { "cell_type": "code", "execution_count": 7, "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": [ "### Forward-time/backward-space" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Start by using a forward-time, backward-space scheme, like you used in Module 2. The discretized form of our traffic model is:\n", "\n", "$$\n", "\\begin{equation}\n", "\\frac{\\rho^{n+1}_i- \\rho^n_{i}}{\\Delta t}+ \\frac{F^n_{i}-F^n_{i-1}}{\\Delta x}=0\n", "\\end{equation}\n", "$$\n", "\n", "Like before, we'll step in time via a for-loop, and we'll operate on all spatial points simultaneously via array operations. In each time step, we also need to call the function that computes the flux. Here is a function that implements in code the forward-time/backward-space difference scheme:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def ftbs(rho0, nt, dt, dx, bc_value, *args):\n", " \"\"\"\n", " Computes the history of the traffic density on the road \n", " at a certain time given the initial traffic density.\n", " \n", " Parameters\n", " ----------\n", " rho0 : numpy.ndarray\n", " The initial car 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_value : float\n", " The constant density at the first station.\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.\n", " rho[1:] = rho[1:] - dt / dx * (F[1:] - F[:-1])\n", " # Set the left boundary condition.\n", " rho[0] = bc_value\n", " # Record the time-step solution.\n", " rho_hist.append(rho.copy())\n", " return rho_hist" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We're all good to go! \n", "\n", "**Note:** The code above saves the complete traffic density at each time step—we'll use that in a second to create animations with our results. \n", "\n", "Running the numerical solution is easy now: we just need to call the function for evolving the initial condition with the forward-time/backward-space scheme.\n", "\n", "Let's see how that looks." ] }, { "cell_type": "code", "execution_count": 9, "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 = ftbs(rho0, nt, dt, dx, rho0[0], u_max, rho_max)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's now create an animation of the traffic flow density using the `animation` module of Matplotlib." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "from matplotlib import animation\n", "from IPython.display import HTML" ] }, { "cell_type": "code", "execution_count": 11, "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(-0.5, 11.0)\n", "fig.tight_layout()" ] }, { "cell_type": "code", "execution_count": 12, "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": "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,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAABfc21kYXQAAAKuBgX//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", "cG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAABNnZYiE\n", "AD///vdonwKbWkN6gOSVxSXbT4H/rBB7f57jFEA1ZjNHoQ/rFYZo7KjSHtk4thOx/V9USJroc6+w\n", "5gY4atR5Gx6R/KdxYWjvZiC2BuB41OC5kKgoCdtbm8lcKXx0LUEmmLqgjRrvmc+p35q3SrbSkyrr\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": 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": [ "**Yikes! The solution is blowing up.** This didn't happen in your traffic-flow exercise (coding assignment) for Module 2! (Thankfully.) What is going on? Is there a bug in the code?\n", "\n", "No need to panic. Let's take a closer look at the equation we are solving:\n", "\n", "$$\n", "\\begin{equation}\n", "\\frac{\\partial \\rho}{\\partial t} + \\frac{\\partial F}{\\partial x} = 0\n", "\\end{equation}\n", "$$\n", "\n", "Using the chain rule of calculus, rewrite is as follows:\n", "\n", "$$\n", "\\begin{equation}\n", "\\frac{\\partial \\rho}{\\partial t} + \\frac{\\partial F}{\\partial \\rho} \\frac{\\partial \\rho}{\\partial x} = 0\n", "\\end{equation}\n", "$$\n", "\n", "This form of the equation looks like the nonlinear convection equation from [Lesson 1 of Module 2](https://nbviewer.jupyter.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/02_spacetime/02_01_1DConvection.ipynb), right? This is a wave equation where the wave speed is $u_{\\rm wave} = \\frac{\\partial F}{\\partial\\rho}$. That term is:\n", "\n", "$$\n", "\\begin{equation}\n", "u_{\\rm wave} = \\frac{\\partial F}{\\partial \\rho} = u_{\\rm max} \\left( 1-2\\frac{\\rho}{\\rho_{\\rm max}} \\right)\n", "\\end{equation}\n", "$$\n", "\n", "See how the wave speed changes sign at $\\rho = \\rho_{\\rm max}/2$? That means that for the initial conditions given for the green-light problem, the part of the wave under $\\rho = \\rho_{\\rm max}/2$ will want to move right, whereas the part of the wave over this mark, will move left! \n", "\n", "There is no real problem with that in terms of the model, but a scheme that is backward in space is *unstable* for negative values of the wave speed. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Upwind schemes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Maybe you noticed that the backward-space discretization is spatially biased: we include the points $i$ and $i-1$ in the formula. Look again at the stencil and you'll see what we mean." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "#### Figure 4. Stencil of forward-time/backward-space." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In fact, the spatial bias was meant to be in the direction of propagation of the wave—this was true when we solved the convection equation (with positive wave speed $c$), but now we have some problems. Discretization schemes that are biased in the direction that information propagates are called _upwind schemes_.\n", "\n", "Remember when we discussed the characteristic lines for the linear convection equation in [lesson 1 of the previous module](https://nbviewer.jupyter.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/02_spacetime/02_01_1DConvection.ipynb)? Compare the sketch of the characteristic lines with the stencil above. The point is that there is an inherent directionality in the physics, and we want the numerical scheme to have the same directionality. This is one example of _choosing an appropriate scheme_ for the physical problem.\n", "\n", "If we wanted to solve the convection equation with negative wave speed, $c<0$, we would need a spatial bias \"slanting left,\" which we would obtain by using the points $i$ and $i+1$ in the formula.\n", "\n", "But if we have waves traveling in both directions, we are in a bit of a bind. One way to avoid this problem with our traffic flow model is to simply use an initial condition that doesn't produce negative speed. This should work. But later we will learn about other numerical schemes that are able to handle waves in both directions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just for a sanity check, let's try the forward-time/backward-space scheme with the initial conditions\n", "\n", "\\begin{equation}\\rho(x,0) = \\left\\{ \\begin{array}{cc}\n", "2.5 x & 0 \\leq x < 2 \\\\\n", "0 & 2 \\leq x \\leq 4 \\\\ \\end{array} \\right.\\end{equation}\n", "\n", "If all values of $\\rho \\leq \\rho_{\\rm max}/2$, then $\\frac{\\partial F}{\\partial \\rho}$ is positive everywhere. For these conditions, our forward-time/backward-space scheme shouldn't have any trouble, as all wave speeds are positive." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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mxcXF3tFRYWffvrp/vjjj7e9ZzQa9T59+viPfvSjQ+prbm72T3/6056Xl+cLFiw47p/v/f7MgBUe52dxql5nIyISuoqKCvr378/XvvY1br/9dsyM++67j1deeYWXXnqp7aLJiooKysvL2+7nE4lE+P73v09eXh7Nzc1EIhG6dOkCxK6TmTt3Lnv27MHd2bt3L7m5uXTr1o1rr72Wc845h9/85jdMmzatrY4XX3yRd999l4svvviQ+mbOnMkf//hHvvOd71BYWNh2JAaxo7FETqcpbERETsD+/fuprKzkxz/+MevXr+eaa67hwIEDjB8/nqVLl3LqqbFuWps2bSIajXLyyScDsG7dOrp27cqAAbErOlauXMnAgQMpLCzkb3/7G3fffTePPfYYffr04ZlnnmHmzJkUFhaya9cuHnnkEYqKitqe2+rRRx9l7Nix7wmPJ598EoDbb7+d228/tHfxrbfemtBrgRQ2IiIn4JVXXiEajXLWWWfxla98hTvuuOOI+1VUVByyzHj58uWH/P7gxysqKjjjjDPo06cPO3bs4F//9V8566yz2LdvHxdeeCGzZs0iOzubm266iaVLl7a9xmOPPXbIeZ9W69evb6ef9oNT2IiInICKigpyc3Pf94T74WGzYsWKo4bNF77wBS6++GJGjRrFqFGjGDx4MGPGjGHq1Kl8+ctf5vLLL8fdmT17Ng8++CCf/exnAXj77bcD+Anbl8JGROQEVFRUMHLkSHJzc4+53/e///1Dfv/DH/7wkN/fe++9bb8ePHgwr7322nte4/rrr2/7tZmxfPnyEyk5VAobEZET8Nvf/jbsElJKUncQEBGR9KCwERGRwClsREQkcAobEUkYj7MPmoSvvf+sFDYikhDZ2dlEIpGwy5A4NTU1kZV1+H0rT5zCRkQSIj8/P6Et9+WDqa6ubtdbaStsRCQhiouL2bFjB3V1dZpOS1LuTmNjIzt37mTPnj1079693V5b19mISELk5+fTq1cvtm7dSkNDQ0Lfu76+nvz8/IS+Z6rKysqic+fODBw48Kh3/DwRChsRSZiioiKKiooS/r7l5eWMHj064e8r/6BpNBERCZzCRkREAqewERGRwClsREQkcAobEREJnMJGREQCp7AREZHAJX3YmNlYM3vSzFaa2RtmtszMPh12XSIiEr+kDhszGwwsBHYCp7n7acAvgYfN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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Modify some parameters.\n", "nt = 40 # number of time step to compute\n", "rho_light = 5.0 # car density at the stoplight\n", "\n", "# Compute the initial traffic density.\n", "rho0 = rho_green_light(x, rho_light)\n", "\n", "# 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.hlines(rho_max / 2.0, 0.0, L,\n", " label=r'$\\rho_{max} / 2$',\n", " color='black', linestyle='--', linewidth=2)\n", "pyplot.legend()\n", "pyplot.xlim(0.0, L)\n", "pyplot.ylim(-0.5, 11.0)\n", "fig.tight_layout()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# Compute the traffic density at all time steps.\n", "rho_hist = ftbs(rho0, nt, dt, dx, rho0[0], u_max, rho_max)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<video width=\"432\" height=\"288\" controls autoplay loop>\n", " <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAABiuW1kYXQAAAKuBgX//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", "cG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAABspZYiE\n", "ABD//veBvzLLXyK6yXH5530srM885F1+3+e4/zANuY1mmMiBX1pQXKcOCzJW0vIgKroRGtyd1ncS\n", "GmIr9NSDh5Dx/cSncYrarndiD3FoWmLyg/LfSzXc6+dZTWLOx0KH/Iu3XNL4pHfHFzJy10+yrAoL\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": 16, "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 animation.\n", "HTML(anim.to_html5_video())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Phew! It works! Try this out yourself with different initial conditions. \n", "\n", "Also, you can easily create a new function `ftfs` to do a forward-time/forward-space scheme, which is stable for negative wave speeds. Unfortunately, forward in space is unstable for positive wave speeds. If you don't want it blowing up, make sure the wave speed is negative everywhere: $u_{\\rm wave} = \\frac{\\partial F}{\\partial \\rho} < 0 \\ \\forall \\ x$.\n", "\n", "Look at that solution again, and you'll get some nice insights of the real physical problem. See how on the trailing edge, a shock is developing? In the context of the traffic flow problem, a shock is a sign of a traffic jam: a region where traffic is heavy and slow next to a region that is free of cars. In the initial condition, the cars in the rear end of the triangle see a mostly empty road (traffic density is low!). They see an empty road and speed up, accordingly. The cars in the peak of the triangle are moving pretty slowly because traffic density is higher there. Eventually the cars that started in the rear will catch up with the rest and form a traffic jam." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Beware the CFL!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Lesson 2 of Module 2](https://nbviewer.jupyter.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/02_spacetime/02_02_CFLCondition.ipynb) discusses the CFL condition for the linear convection equation. To refresh your memory, for a constant wave speed $u_{\\rm wave} = c$:\n", "\n", "$$\n", "\\begin{equation}\n", "\\sigma = c\\frac{\\Delta t}{\\Delta x} < 1\n", "\\end{equation}\n", "$$\n", "\n", "What happens for non-linear equations? The wave speed is space- and time-dependent, $u_{\\rm wave} = u_{\\rm wave}(x,t)$, and the CFL condition needs to apply for every point in space, at every instant of time. We just need $\\sigma>1$ in one spot, for the whole solution to blow up! \n", "\n", "Let's generalize the CFL condition to\n", "\n", "$$\n", "\\begin{equation}\n", "\\sigma = \\max\\left[ \\left| u_{\\rm wave} \\right| \\frac{\\Delta t}{\\Delta x} \\right] < 1\n", "\\end{equation}\n", "$$\n", "\n", "which in our case is\n", "\n", "$$\n", "\\begin{equation}\n", "\\sigma = \\max\\left[ u_{\\rm max} \\left| 1-\\frac{2 \\rho}{\\rho_{\\rm max}} \\right| \\frac{\\Delta t}{\\Delta x} \\right] < 1\n", "\\end{equation}\n", "$$\n", "\n", "Here, the closer $\\rho$ is to zero, the more likely it is to be unstable." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Green light and CFL" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We know that the green-light problem with density at the stop light $\\rho = \\rho_{\\rm light} = 4$ is stable using a forward-time/backward -space scheme. Earlier, we used $u_{\\rm max} = 1$, and $\\Delta t/\\Delta x=1$, which gives a CFL $= 1$, when $\\rho = 0$. \n", "\n", "What if we change the conditions slightly, say $u_{\\rm max} = 1.1$? " ] }, { "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,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAABuCm1kYXQAAAKuBgX//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", "cG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAABp4ZYiE\n", "AD///vdonwKbWkN6gOSVxSXbT4H/rBB7f57jFEBQqEfPgvWIZ595spw4LMlhy8JlZkbaZFJrOwFl\n", "p1y0zgCh/ArneSjmqqdQuMTgORCC0vfiezWslYtymNxUKUdZZPUL7KGgNziBPM6z6pbBnQ/KOvML\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": [ "# Set parameters.\n", "rho_light = 4.0\n", "u_max = 1.1\n", "\n", "# Compute the initial traffic density.\n", "rho0 = rho_green_light(x, rho_light)\n", "\n", "# Compute the traffic density at all time steps.\n", "rho_hist = ftbs(rho0, nt, dt, dx, rho0[0], u_max, rho_max)\n", "\n", "# 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": [ "That failed miserably! Only by changing $u_{\\rm max}$ to $1.1$, even an algorithm that we know is stable for this problem, fails. Since we kept $\\Delta t/\\Delta x=1$, the CFL number for $\\rho=0$ is $1.1$. See where the instability begins? Beware the CFL!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Neville D. Fowkes and John J. Mahony, *\"An Introduction to Mathematical Modelling,\"* Wiley & Sons, 1994. Chapter 14: Traffic Flow.\n", "\n", "* M. J. Lighthill and G. B. Whitham (1955), On kinematic waves. II. Theory of traffic flow and long crowded roads, _Proc. Roy. Soc. A_, Vol. 229, pp. 317–345. [PDF from amath.colorado.edu](https://amath.colorado.edu/sites/default/files/2013/09/1710796241/PRSA_Lighthill_1955.pdf), checked Oct. 14, 2014. [Original source](http://rspa.royalsocietypublishing.org/content/229/1178/317.short) on the Royal Society site." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "###### The cell below loads the style of the notebook." ] }, { "cell_type": "code", "execution_count": 18, "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": 18, "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 }