{ "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, G.F. Forsyth, C. Cooper. Based on [CFDPython](https://github.com/barbagroup/CFDPython), (c)2013 L.A. Barba, also under CC-BY license." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Space & Time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1-D Diffusion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome back! This is the third Jupyter Notebook of the series *Space and Time — Introduction of Finite-difference solutions of PDEs*, the second module of [\"Practical Numerical Methods with Python\"](https://openedx.seas.gwu.edu/courses/course-v1:MAE+MAE6286+2017/about). \n", "\n", "In the previous Jupyter notebooks of this series, we studied the numerical solution of the linear and non-linear convection equations using the finite-difference method, and learned about the CFL condition. Now, we will look at the one-dimensional diffusion equation:\n", "\n", "$$\n", "\$$\n", "\\frac{\\partial u}{\\partial t}= \\nu \\frac{\\partial^2 u}{\\partial x^2}\n", "\$$\n", "$$\n", "\n", "where $\\nu$ is a constant known as the *diffusion coefficient*.\n", "\n", "The first thing you should notice is that this equation has a second-order derivative. We first need to learn what to do with it!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Discretizing 2nd-order derivatives" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The second-order derivative can be represented geometrically as the line tangent to the curve given by the first derivative. We will discretize the second-order derivative with a Central Difference scheme: a combination of forward difference and backward difference of the first derivative. Consider the Taylor expansion of $u_{i+1}$ and $u_{i-1}$ around $u_i$:\n", "\n", "$$\n", "u_{i+1} = u_i + \\Delta x \\frac{\\partial u}{\\partial x}\\big|_i + \\frac{\\Delta x^2}{2!} \\frac{\\partial ^2 u}{\\partial x^2}\\big|_i + \\frac{\\Delta x^3}{3!} \\frac{\\partial ^3 u}{\\partial x^3}\\big|_i + {\\mathcal O}(\\Delta x^4)\n", "$$\n", "\n", "$$\n", "u_{i-1} = u_i - \\Delta x \\frac{\\partial u}{\\partial x}\\big|_i + \\frac{\\Delta x^2}{2!} \\frac{\\partial ^2 u}{\\partial x^2}\\big|_i - \\frac{\\Delta x^3}{3!} \\frac{\\partial ^3 u}{\\partial x^3}\\big|_i + {\\mathcal O}(\\Delta x^4)\n", "$$\n", "\n", "If we add these two expansions, the odd-numbered derivatives will cancel out. Neglecting any terms of ${\\mathcal O}(\\Delta x^4)$ or higher (and really, those are very small), we can rearrange the sum of these two expansions to solve for the second-derivative. \n", "\n", "$$\n", "u_{i+1} + u_{i-1} = 2u_i+\\Delta x^2 \\frac{\\partial ^2 u}{\\partial x^2}\\big|_i + {\\mathcal O}(\\Delta x^4)\n", "$$\n", "\n", "And finally:\n", "\n", "$$\n", "\$$\n", "\\frac{\\partial ^2 u}{\\partial x^2}=\\frac{u_{i+1}-2u_{i}+u_{i-1}}{\\Delta x^2} + {\\mathcal O}(\\Delta x^2)\n", "\$$\n", "$$\n", "\n", "The central difference approximation of the 2nd-order derivative is 2nd-order accurate." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Back to diffusion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now write the discretized version of the diffusion equation in 1D:\n", "\n", "$$\n", "\$$\n", "\\frac{u_{i}^{n+1}-u_{i}^{n}}{\\Delta t}=\\nu\\frac{u_{i+1}^{n}-2u_{i}^{n}+u_{i-1}^{n}}{\\Delta x^2}\n", "\$$\n", "$$\n", "\n", "As before, we notice that once we have an initial condition, the only unknown is $u_{i}^{n+1}$, so we re-arrange the equation to isolate this term:\n", "\n", "$$\n", "\$$\n", "u_{i}^{n+1}=u_{i}^{n}+\\frac{\\nu\\Delta t}{\\Delta x^2}(u_{i+1}^{n}-2u_{i}^{n}+u_{i-1}^{n})\n", "\$$\n", "$$\n", "\n", "This discrete equation allows us to write a program that advances a solution in time—but we need an initial condition. Let's continue using our favorite: the hat function. So, at $t=0$, $u=2$ in the interval $0.5\\le x\\le 1$ and $u=1$ everywhere else." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Stability of the diffusion equation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The diffusion equation is not free of stability constraints. Just like the linear and non-linear convection equations, there are a set of discretization parameters $\\Delta x$ and $\\Delta t$ that will make the numerical solution blow up. For the diffusion equation and the discretization used here, the stability condition for diffusion is\n", "\n", "$$\n", "\$$\n", "\\nu \\frac{\\Delta t}{\\Delta x^2} \\leq \\frac{1}{2}\n", "\$$\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### And solve!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " We are ready to number-crunch!\n", "\n", "The next two code cells initialize the problem by loading the needed libraries, then defining the solution parameters and initial condition. This time, we don't let the user choose just *any* $\\Delta t$, though; we have decided this is not safe: people just like to blow things up. Instead, the code calculates a value of $\\Delta t$ that will be in the stable range, according to the spatial discretization chosen! You can now experiment with different solution parameters to see how the numerical solution changes, but it won't blow up." ] }, { "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": [ "# Set parameters.\n", "nx = 41 # number spatial grid points\n", "L = 2.0 # length of the domain\n", "dx = L / (nx - 1) # spatial grid size\n", "nu = 0.3 # viscosity\n", "sigma = 0.2 # CFL limit\n", "dt = sigma * dx**2 / nu # time-step size\n", "nt = 20 # number of time steps to compute\n", "\n", "# Get the grid point coordinates.\n", "x = numpy.linspace(0.0, L, num=nx)\n", "\n", "# Set the initial conditions.\n", "u0 = numpy.ones(nx)\n", "mask = numpy.where(numpy.logical_and(x >= 0.5, x <= 1.0))\n", "u0[mask] = 2.0" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Integrate in time.\n", "u = u0.copy()\n", "for n in range(nt):\n", " u[1:-1] = u[1:-1] + nu * dt / dx**2 * (u[2:] - 2 * u[1:-1] + u[:-2])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "