{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 2: Non-linear Convection\n", "\n", "I began this trek along the 12 steps of Navier stokes with the extremely simple 1-D linear convection equation shown below:\n", "\n", "$$ \\frac{\\partial u}{\\partial t} + c \\frac{\\partial u}{\\partial x} = 0 $$\n", "\n", "Next, we up the ante and present a new more complex model known as the 1D convection equation (notice the lack of the word linear) :\n", "\n", "$$ \\frac{\\partial u}{\\partial t} + u \\frac{\\partial u}{\\partial x} = 0 $$\n", "\n", "Now, instead of a constant factor `c` multiplying we have the solution `u` doing that instead. Thus this makes our convection equation behave nonlinearly. We shall follow the exact discretization steps outline in **Step 1** with the following result:\n", "\n", "$$\\frac{u_i^{n+1} - u^n_i}{\\Delta t} + u^n_i \\frac{u_{i}^{n} - u^n_{i-1}}{\\Delta t} = 0$$\n", "\n", "Solving for the same unknown value $u_i^{n+1}$:\n", "\n", "$$ u_i^{n+1} = u^n_i - u^n_i \\frac{\\Delta t}{\\Delta x}(u_i^n - u^n_{i-1}) $$\n", "\n", "The following step is a condensed version of what we did to set up initial conditions, variables and libraries and is taken directly from the previous notebook.\n", "\n", "## Libraries & Initial Conditions" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Adding inline command to make plots appear under comments\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import time, sys\n", "%matplotlib inline \n", "\n", "#Same initial conditions as in step 1\n", "grid_length = 10\n", "grid_points = 41\n", "dx = grid_length / (grid_points - 1) \n", "nt = 400\n", "dt = 0.025\n", "\n", "#Initiallizing the shape of the wave to the same one from step 1 and displaying it\n", "u = np.ones(grid_points)\n", "u[int(.5/ dx):int(1 / dx + 1)] = 2\n", "plt.plot(np.linspace(0,grid_length,grid_points), u);\n", "plt.ylim(1,2);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Applying the discretization\n", "\n", "Now we apply the discretization as outlined above and check out the final results." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "un = np.ones(grid_points)\n", "\n", "for n in range(nt): #Runs however many timesteps you set earlier\n", " un = u.copy() #copy the u array to not overwrite values\n", " for i in range(1,grid_points):\n", " u[i] = un[i] - un[i] * dt/dx * (un[i]-un[i-1]) " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(np.linspace(0,grid_length,grid_points), u);\n", "plt.ylim(1,2);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Results\n", "\n", "Looks pretty unchanged, to have a better idea if it behaved the same way we will take a look at the animation.\n", "\n", "## Animating the wave moving" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Imports for animation and display within a jupyter notebook\n", "from matplotlib import animation, rc \n", "from IPython.display import HTML\n", "\n", "#Generating the figure that will contain the animation\n", "fig, ax = plt.subplots()\n", "ax.set_xlim(( 0, grid_length))\n", "ax.set_ylim((1, 2))\n", "line, = ax.plot([], [], lw=2)\n", "\n", "#Resetting the U wave back to initial conditions\n", "u = np.ones(grid_points)\n", "u[int(.5/ dx):int(1 / dx + 1)] = 2" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "#Initialization function for funcanimation\n", "def init():\n", " line.set_data([], [])\n", " return (line,)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "#Main animation function, each frame represents a time step in our calculation\n", "def animate(j):\n", " x = np.linspace(0, grid_length, grid_points)\n", " un = u.copy() #copy the u array to not overwrite values\n", " for i in range(1,grid_points):\n", " u[i] = un[i] - un[i] * dt/dx * (un[i]-un[i-1]) \n", " line.set_data(x, u)\n", " return (line,)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Once \n", " Loop \n", " Reflect \n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "anim = animation.FuncAnimation(fig, animate, init_func=init,\n", " frames=nt, interval=20)\n", "HTML(anim.to_jshtml())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "\n", "Yep, pretty similar behaviour. Only difference would be in the speed in which it changes shape in the beginning steps, but not much else is of notice.\n", "\n", " Next we will take a quick detour to talk about hte CFL condition." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.5" } }, "nbformat": 4, "nbformat_minor": 2 }