diff --git a/fdm-devito-notebooks/01_vib/vib_app.ipynb b/fdm-devito-notebooks/01_vib/vib_app.ipynb index 4c2878f0..485e0ea0 100644 --- a/fdm-devito-notebooks/01_vib/vib_app.ipynb +++ b/fdm-devito-notebooks/01_vib/vib_app.ipynb @@ -2,29 +2,19 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Notebook initialized with ipy backend.\n" + "ename": "ModuleNotFoundError", + "evalue": "No module named 'mayavi'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[1], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mmayavi\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m mlab\n\u001b[1;32m 2\u001b[0m mlab\u001b[38;5;241m.\u001b[39minit_notebook()\n\u001b[1;32m 3\u001b[0m mlab\u001b[38;5;241m.\u001b[39mtest_plot3d()\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'mayavi'" ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "de8153dff7fe4161829af04aaeff07bf", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01\\x90\\x00\\x00\\x01^\\x08\\x02\\x00\\x00\\x00$?\\xde_\\x00\\…" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -55,7 +45,7 @@ "\n", "The following text derives some of the most well-known physical\n", "problems that lead to second-order ODE models of the type addressed in\n", - "this ${DOCUMENT}. We consider a simple spring-mass system; thereafter\n", + "this book. We consider a simple spring-mass system; thereafter\n", "extended with nonlinear spring, damping, and external excitation; a\n", "spring-mass system with sliding friction; a simple and a physical\n", "(classical) pendulum; and an elastic pendulum.\n", @@ -75,22 +65,22 @@ "\n", "The most fundamental mechanical vibration system is depicted in [Figure](#vib:app:mass_spring:fig). A body with mass $m$ is attached to a\n", "spring and can move horizontally without friction (in the wheels). The\n", - "position of the body is given by the vector $\\rpos(t) = u(t)\\ii$, where\n", - "$\\ii$ is a unit vector in $x$ direction.\n", + "position of the body is given by the vector $\\textbf{r}(t) = u(t)\\textbf{i}$, where\n", + "$\\textbf{i}$ is a unit vector in $x$ direction.\n", "There is\n", - "only one force acting on the body: a spring force $\\F_s =-ku\\ii$, where\n", + "only one force acting on the body: a spring force $\\textbf{F}_s =-ku\\textbf{i}$, where\n", "$k$ is a constant. The point $x=0$, where $u=0$, must therefore\n", "correspond to the body's position\n", "where the spring is neither extended nor compressed, so the force\n", "vanishes.\n", "\n", "The basic physical principle that governs the motion of the body is\n", - "Newton's second law of motion: $\\F=m\\acc$, where\n", - "$\\F$ is the sum of forces on the body, $m$ is its mass, and $\\acc=\\ddot\\rpos$\n", + "Newton's second law of motion: $\\textbf{F}=m\\textbf{a}$, where\n", + "$\\textbf{F}$ is the sum of forces on the body, $m$ is its mass, and $\\textbf{a}=\\ddot{r}$\n", "is the acceleration. We use the dot for differentiation with respect\n", "to time, which is\n", "usual in mechanics. Newton's second law simplifies here\n", - "to $-\\F_s=m\\ddot u\\ii$, which translates to" + "to $-\\textbf{F}_s=m\\ddot u\\textbf{i}$, which translates to" ] }, { @@ -129,7 +119,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "mathcal{I}_t is\n", + "It is\n", "not uncommon to divide by $m$\n", "and introduce the frequency $\\omega = \\sqrt{k/m}$:" ] @@ -156,7 +146,7 @@ "This is the model problem in the first part of this chapter, with the\n", "small difference that we write the time derivative of $u$ with a dot\n", "above, while we used $u^{\\prime}$ and $u^{\\prime\\prime}$ in previous\n", - "parts of the ${DOCUMENT}.\n", + "parts of the book.\n", "\n", "\n", "Since only one scalar mathematical quantity, $u(t)$, describes the\n", @@ -239,18 +229,18 @@ "The mechanical system in [Figure](#vib:app:mass_spring:fig) can easily be\n", "extended to the more general system in [Figure](#vib:app:mass_gen:fig),\n", "where the body is attached to a spring and a dashpot, and also subject\n", - "to an environmental force $F(t)\\ii$. The system has still only one\n", + "to an environmental force $F(t)\\textbf{i}$. The system has still only one\n", "degree of freedom since the body can only move back and forth parallel to\n", - "the $x$ axis. The spring force was linear, $\\F_s=-ku\\ii$,\n", + "the $x$ axis. The spring force was linear, $\\textbf{F}_s=-ku\\textbf{i}$,\n", "in the section [Oscillating mass attached to a spring](#vib:app:mass_spring), but in more general cases it can\n", - "depend nonlinearly on the position. We therefore set $\\F_s=s(u)\\ii$.\n", + "depend nonlinearly on the position. We therefore set $\\textbf{F}_s=s(u)\\textbf{i}$.\n", "The dashpot, which acts\n", - "as a damper, results in a force $\\F_d$ that depends on the body's\n", - "velocity $\\dot u$ and that always acts against the motion.\n", - "The mathematical model of the force is written $\\F_d =f(\\dot u)\\ii$.\n", - "A positive $\\dot u$ must result in a force acting in the positive $x$\n", + "as a damper, results in a force $\\textbf{F}_d$ that depends on the body's\n", + "velocity $\\dot{u}$ and that always acts against the motion.\n", + "The mathematical model of the force is written $\\textbf{F}_d =f(\\dot u)\\textbf{i}$.\n", + "A positive $\\dot{u}$ must result in a force acting in the positive $x$\n", "direction.\n", - "Finally, we have the external environmental force $\\F_e = F(t)\\ii$.\n", + "Finally, we have the external environmental force $\\textbf{F}_e = F(t)\\textbf{i}$.\n", "\n", "Newton's second law of motion now involves three forces:" ] @@ -260,7 +250,7 @@ "metadata": {}, "source": [ "$$\n", - "F(t)\\ii - f(\\dot u)\\ii - s(u)\\ii = m\\ddot u \\ii\\thinspace .\n", + "F(t)\\textbf{i} - f(\\dot u)\\textbf{i} - s(u)\\textbf{i} = m\\ddot{u} \\textbf{i} \\thinspace .\n", "$$" ] }, @@ -786,7 +776,6 @@ "motion of the pendulum *and* the size of the forces during the motion.\n", "The present section exemplifies how to make such a dynamic body\n", "diagram.\n", - "% if FORMAT == 'pdflatex':\n", "Two typical snapshots of free body diagrams are displayed below\n", "(the drag force is magnified 5 times to become more visual!).\n", "\n", @@ -798,17 +787,44 @@ "\n", "\n", "\n", - "\n", - "% else:\n", "\n", "" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + "\n", + "
\n", + "

The drag force is magnified 5 times!

\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "from IPython.display import HTML\n", "_s = \"\"\"\n", @@ -819,7 +835,7 @@ " \n", "\n", "\n", - "

The drag force is magnified 5 times! % endif

\n", + "

The drag force is magnified 5 times!

\n", "\n", "\n", "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import HTML\n", + "_s = \"\"\"\n", + "
\n", + "\n", + "
\n", + "

The drag force is magnified 5 times!

\n", + "\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + "HTML(_s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "Dynamic physical sketches, coupled to the numerical solution of\n", + "differential equations, requires a program to produce a sketch for\n", + "the situation at each time level.\n", + "[Pysketcher](https://github.com/hplgit/pysketcher) is such a tool.\n", + "In fact (and not surprising!) Figures [vib:app:pendulum:fig_problem](#vib:app:pendulum:fig_problem) and\n", + "[vib:app:pendulum:fig_forces](#vib:app:pendulum:fig_forces) were drawn using Pysketcher.\n", + "The details of the drawings are explained in the\n", + "[Pysketcher tutorial](http://hplgit.github.io/pysketcher/doc/web/index.html).\n", + "Here, we outline how this type of sketch can be used to create an animated\n", + "free body diagram during the motion of a pendulum.\n", + "\n", + "Pysketcher is actually a layer of useful abstractions on top of\n", + "standard plotting packages. This means that we in fact apply Matplotlib\n", + "to make the animated free body diagram, but instead of dealing with a wealth\n", + "of detailed Matplotlib commands, we can express the drawing in terms of\n", + "more high-level objects, e.g., objects for the wire, angle $\\theta$,\n", + "body with mass $m$, arrows for forces, etc. When the position of these\n", + "objects are given through variables, we can just couple those variables\n", + "to the dynamic solution of our ODE and thereby make a unique drawing\n", + "for each $\\theta$ value in a simulation.\n", + "\n", + "### Writing the solver\n", + "\n", + "Let us start with the most familiar part of the current problem:\n", + "writing the solver function. We use Odespy for this purpose.\n", + "We also work with dimensionless equations. Since $\\theta$ can be\n", + "viewed as dimensionless, we only need to introduce a dimensionless time,\n", + "here taken as $\\bar t = t/\\sqrt{L/g}$.\n", + "The resulting dimensionless mathematical model for $\\theta$,\n", + "the dimensionless angular velocity $\\omega$, the\n", + "dimensionless wire force $\\bar S$, and the dimensionless\n", + "drag force $\\bar D$ is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d\\omega}{d\\bar t} = - \\alpha|\\omega|\\omega - \\sin\\theta,\n", + "\\label{vib:app:pendulum_bodydia:eqth} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\frac{d\\theta}{d\\bar t} = \\omega,\n", + "\\label{vib:app:pendulum_bodydia:eqomega} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\bar S = \\omega^2 + \\cos\\theta,\n", + "\\label{vib:app:pendulum_bodydia:eqS} \\tag{12}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\bar D = -\\alpha |\\omega|\\omega,\n", + "\\label{vib:app:pendulum_bodydia:eqD} \\tag{13}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\alpha = \\frac{C_D\\varrho\\pi R^2L}{2m}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "as a dimensionless parameter expressing the ratio of the drag force and\n", + "the gravity force. The dimensionless $\\omega$ is made non-dimensional\n", + "by the time, so $\\omega\\sqrt{L/g}$ is the corresponding angular\n", + "frequency with dimensions.\n", + "\n", + "\n", + "\n", + "A suitable function for computing\n", + "([10](#vib:app:pendulum_bodydia:eqth))-([13](#vib:app:pendulum_bodydia:eqD))\n", + "is listed below." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "! Should I convert this to Devito?\n", + "\n", + "def simulate(alpha, Theta, dt, T):\n", + " import odespy\n", + "\n", + " def f(u, t, alpha):\n", + " omega, theta = u\n", + " return [-alpha*omega*abs(omega) - sin(theta),\n", + " omega]\n", + "\n", + " import numpy as np\n", + " Nt = int(round(T/float(dt)))\n", + " t = np.linspace(0, Nt*dt, Nt+1)\n", + " solver = odespy.RK4(f, f_args=[alpha])\n", + " solver.set_initial_condition([0, Theta])\n", + " u, t = solver.solve(\n", + " t, terminate=lambda u, t, n: abs(u[n,1]) < 1E-3)\n", + " omega = u[:,0]\n", + " theta = u[:,1]\n", + " S = omega**2 + np.cos(theta)\n", + " drag = -alpha*np.abs(omega)*omega\n", + " return t, theta, omega, S, drag" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Drawing the free body diagram\n", + "\n", + "The `sketch` function below applies Pysketcher objects to build\n", + "a diagram like that in [Figure](#vib:app:pendulum:fig_forces),\n", + "except that we have removed the rotation point $(x_0,y_0)$ and\n", + "the unit vectors in polar coordinates as these objects are not\n", + "important for an animated free body diagram." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "try:\n", + " from pysketcher import *\n", + "except ImportError:\n", + " print 'Pysketcher must be installed from'\n", + " print 'https://github.com/hplgit/pysketcher'\n", + " sys.exit(1)\n", + "\n", + "# Overall dimensions of sketch\n", + "H = 15.\n", + "W = 17.\n", + "\n", + "drawing_tool.set_coordinate_system(\n", + " xmin=0, xmax=W, ymin=0, ymax=H,\n", + " axis=False)\n", + "\n", + "def sketch(theta, S, mg, drag, t, time_level):\n", + " \"\"\"\n", + " Draw pendulum sketch with body forces at a time level\n", + " corresponding to time t. The drag force is in\n", + " drag[time_level], the force in the wire is S[time_level],\n", + " the angle is theta[time_level].\n", + " \"\"\"\n", + " import math\n", + " a = math.degrees(theta[time_level]) # angle in degrees\n", + " L = 0.4*H # Length of pendulum\n", + " P = (W/2, 0.8*H) # Fixed rotation point\n", + "\n", + " mass_pt = path.geometric_features()['end']\n", + " rod = Line(P, mass_pt)\n", + "\n", + " mass = Circle(center=mass_pt, radius=L/20.)\n", + " mass.set_filled_curves(color='blue')\n", + " rod_vec = rod.geometric_features()['end'] - \\\n", + " rod.geometric_features()['start']\n", + " unit_rod_vec = unit_vec(rod_vec)\n", + " mass_symbol = Text('$m$', mass_pt + L/10*unit_rod_vec)\n", + "\n", + " rod_start = rod.geometric_features()['start'] # Point P\n", + " vertical = Line(rod_start, rod_start + point(0,-L/3))\n", + "\n", + " def set_dashed_thin_blackline(*objects):\n", + " \"\"\"Set linestyle of objects to dashed, black, width=1.\"\"\"\n", + " for obj in objects:\n", + " obj.set_linestyle('dashed')\n", + " obj.set_linecolor('black')\n", + " obj.set_linewidth(1)\n", + "\n", + " set_dashed_thin_blackline(vertical)\n", + " set_dashed_thin_blackline(rod)\n", + " angle = Arc_wText(r'$\\theta$', rod_start, L/6, -90, a,\n", + " text_spacing=1/30.)\n", + "\n", + " magnitude = 1.2*L/2 # length of a unit force in figure\n", + " force = mg[time_level] # constant (scaled eq: about 1)\n", + " force *= magnitude\n", + " mg_force = Force(mass_pt, mass_pt + force*point(0,-1),\n", + " '', text_pos='end')\n", + " force = S[time_level]\n", + " force *= magnitude\n", + " rod_force = Force(mass_pt, mass_pt - force*unit_vec(rod_vec),\n", + " '', text_pos='end',\n", + " text_spacing=(0.03, 0.01))\n", + " force = drag[time_level]\n", + " force *= magnitude\n", + " air_force = Force(mass_pt, mass_pt -\n", + " force*unit_vec((rod_vec[1], -rod_vec[0])),\n", + " '', text_pos='end',\n", + " text_spacing=(0.04,0.005))\n", + "\n", + " body_diagram = Composition(\n", + " {'mg': mg_force, 'S': rod_force, 'air': air_force,\n", + " 'rod': rod, 'body': mass\n", + " 'vertical': vertical, 'theta': angle,})\n", + "\n", + " body_diagram.draw(verbose=0)\n", + " drawing_tool.savefig('tmp_%04d.png' % time_level, crop=False)\n", + " # (No cropping: otherwise movies will be very strange!)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Making the animated free body diagram\n", + "\n", + "mathcal{I}_t now remains to couple the `simulate` and `sketch` functions.\n", + "We first run `simulate`:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from math import pi, radians, degrees\n", + "import numpy as np\n", + "alpha = 0.4\n", + "period = 2*pi # Use small theta approximation\n", + "T = 12*period # Simulate for 12 periods\n", + "dt = period/40 # 40 time steps per period\n", + "a = 70 # Initial amplitude in degrees\n", + "Theta = radians(a)\n", + "\n", + "t, theta, omega, S, drag = simulate(alpha, Theta, dt, T)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step is to run through the time levels in the simulation and\n", + "make a sketch at each level:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "for time_level, t_ in enumerate(t):\n", + " sketch(theta, S, mg, drag, t_, time_level)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The individual sketches are (by the `sketch` function) saved in files\n", + "with names `tmp_%04d.png`. These can be combined to videos using\n", + "(e.g.) `ffmpeg`. A complete function `animate` for running the\n", + "simulation and creating video files is\n", + "listed below." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def animate():\n", + " # Clean up old plot files\n", + " import os, glob\n", + " for filename in glob.glob('tmp_*.png') + glob.glob('movie.*'):\n", + " os.remove(filename)\n", + " # Solve problem\n", + " from math import pi, radians, degrees\n", + " import numpy as np\n", + " alpha = 0.4\n", + " period = 2*pi # Use small theta approximation\n", + " T = 12*period # Simulate for 12 periods\n", + " dt = period/40 # 40 time steps per period\n", + " a = 70 # Initial amplitude in degrees\n", + " Theta = radians(a)\n", + "\n", + " t, theta, omega, S, drag = simulate(alpha, Theta, dt, T)\n", + "\n", + " # Visualize drag force 5 times as large\n", + " drag *= 5\n", + " mg = np.ones(S.size) # Gravity force (needed in sketch)\n", + "\n", + " # Draw animation\n", + " import time\n", + " for time_level, t_ in enumerate(t):\n", + " sketch(theta, S, mg, drag, t_, time_level)\n", + " time.sleep(0.2) # Pause between each frame on the screen\n", + "\n", + " # Make videos\n", + " prog = 'ffmpeg'\n", + " filename = 'tmp_%04d.png'\n", + " fps = 6\n", + " codecs = {'flv': 'flv', 'mp4': 'libx264',\n", + " 'webm': 'libvpx', 'ogg': 'libtheora'}\n", + " for ext in codecs:\n", + " lib = codecs[ext]\n", + " cmd = '%(prog)s -i %(filename)s -r %(fps)s ' % vars()\n", + " cmd += '-vcodec %(lib)s movie.%(ext)s' % vars()\n", + " print(cmd)\n", + " os.system(cmd)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Motion of an elastic pendulum\n", + "
\n", + "\n", + "\n", + "Consider a pendulum as in [Figure](#vib:app:pendulum:fig_problem), but\n", + "this time the wire is elastic. The length of the wire when it is not\n", + "stretched is $L_0$, while $L(t)$ is the stretched\n", + "length at time $t$ during the motion.\n", + "\n", + "Stretching the elastic wire a distance $\\Delta L$ gives rise to a\n", + "spring force $k\\Delta L$ in the opposite direction of the\n", + "stretching. Let $\\boldsymbol{n}$ be a unit normal vector along the wire\n", + "from the point $\\rpos_0=(x_0,y_0)$ and in the direction of $\\ith$, see\n", + "[Figure](#vib:app:pendulum:fig_forces) for definition of $(x_0,y_0)$\n", + "and $\\ith$. Obviously, we have $\\boldsymbol{n}=\\ith$, but in this modeling\n", + "of an elastic pendulum we do not need polar coordinates. Instead, it\n", + "is more straightforward to develop the equation in Cartesian\n", + "coordinates.\n", + "\n", + "A mathematical expression for $\\boldsymbol{n}$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{n} = \\frac{\\rpos-\\rpos_0}{L(t)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $L(t)=||\\rpos-\\rpos_0||$ is the current length of the elastic wire.\n", + "The position vector $\\rpos$ in Cartesian coordinates reads\n", + "$\\rpos(t) = x(t)\\ii + y(t)\\jj$, where $\\ii$ and $\\jj$ are unit vectors\n", + "in the $x$ and $y$ directions, respectively.\n", + "It is convenient to introduce the Cartesian components $n_x$ and $n_y$\n", + "of the normal vector:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{n} = \\frac{\\rpos-\\rpos_0}{L(t)} = \\frac{x(t)-x_0}{L(t)}\\ii + \\frac{y(t)-y_0}{L(t)}\\jj = n_x\\ii + n_y\\jj\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The stretch $\\Delta L$ in the wire is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\Delta t = L(t) - L_0\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The force in the wire is then $-S\\boldsymbol{n}=-k\\Delta L\\boldsymbol{n}$.\n", + "\n", + "The other forces are the gravity and the air resistance, just as in\n", + "[Figure](#vib:app:pendulum:fig_forces). For motion in air we can\n", + "neglect the added mass and buoyancy effects. The main difference is\n", + "that we have a *model* for $S$ in terms of the motion (as soon as we\n", + "have expressed $\\Delta L$ by $\\rpos$). For simplicity, we drop the air\n", + "resistance term (but [Exercise 6: Simulate an elastic pendulum with air resistance](#vib:exer:pendulum_elastic_drag) asks\n", + "you to include it).\n", + "\n", + "Newton's second law of motion applied to the body now results in" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "m\\ddot\\rpos = -k(L-L_0)\\boldsymbol{n} - mg\\jj\n", + "\\label{vib:app:pendulum_elastic:eq1} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The two components of\n", + "([14](#vib:app:pendulum_elastic:eq1)) are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\ddot x = -\\frac{k}{m}(L-L_0)n_x,\n", + "\\label{_auto1} \\tag{15}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\label{vib:app:pendulum_elastic:eq2a} \\tag{16} \n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\ddot y = - \\frac{k}{m}(L-L_0)n_y - g\n", + "\\label{vib:app:pendulum_elastic:eq2b} \\tag{17}\\thinspace .\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Remarks about an elastic vs a non-elastic pendulum\n", + "\n", + "Note that the derivation of the ODEs for an elastic pendulum is more\n", + "straightforward than for a classical, non-elastic pendulum,\n", + "since we avoid the details\n", + "with polar coordinates, but instead work with Newton's second law\n", + "directly in Cartesian coordinates. The reason why we can do this is that\n", + "the elastic pendulum undergoes a general two-dimensional motion where\n", + "all the forces are known or expressed as functions of $x(t)$ and $y(t)$,\n", + "such that we get two ordinary differential equations.\n", + "The motion of the non-elastic pendulum, on the other hand, is constrained:\n", + "the body has to move along a circular path, and the force $S$ in the\n", + "wire is unknown.\n", + "\n", + "The non-elastic pendulum therefore leads to\n", + "a *differential-algebraic* equation, i.e., ODEs for $x(t)$ and $y(t)$\n", + "combined with an extra constraint $(x-x_0)^2 + (y-y_0)^2 = L^2$\n", + "ensuring that the motion takes place along a circular path.\n", + "The extra constraint (equation) is compensated by an extra unknown force\n", + "$-S\\boldsymbol{n}$. Differential-algebraic equations are normally hard\n", + "to solve, especially with pen and paper.\n", + "Fortunately, for the non-elastic pendulum we can do a\n", + "trick: in polar coordinates the unknown force $S$ appears only in the\n", + "radial component of Newton's second law, while the unknown\n", + "degree of freedom for describing the motion, the angle $\\theta(t)$,\n", + "is completely governed by the asimuthal component. This allows us to\n", + "decouple the unknowns $S$ and $\\theta$. But this is a kind of trick and\n", + "not a widely applicable method. With an elastic pendulum we use straightforward\n", + "reasoning with Newton's 2nd law and arrive at a standard ODE problem that\n", + "(after scaling) is easy to solve on a computer.\n", + "\n", + "### Initial conditions\n", + "\n", + "What is the initial position of the body? We imagine that first the\n", + "pendulum hangs in equilibrium in its vertical position, and then it is\n", + "displaced an angle $\\Theta$. The equilibrium position is governed\n", + "by the ODEs with the accelerations set to zero.\n", + "The $x$ component leads to $x(t)=x_0$, while the $y$ component gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "0 = - \\frac{k}{m}(L-L_0)n_y - g = \\frac{k}{m}(L(0)-L_0) - g\\quad\\Rightarrow\\quad\n", + "L(0) = L_0 + mg/k,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "since $n_y=-11$ in this position. The corresponding $y$ value is then\n", + "from $n_y=-1$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t) = y_0 - L(0) = y_0 - (L_0 + mg/k)\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us now choose $(x_0,y_0)$ such that the body is at the origin\n", + "in the equilibrium position:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x_0 =0,\\quad y_0 = L_0 + mg/k\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Displacing the body an angle $\\Theta$ to the right leads to the\n", + "initial position" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x(0)=(L_0+mg/k)\\sin\\Theta,\\quad y(0)=(L_0+mg/k)(1-\\cos\\Theta)\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The initial velocities can be set to zero: $x'(0)=y'(0)=0$.\n", + "\n", + "### The complete ODE problem\n", + "\n", + "We can summarize all the equations as follows:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\ddot x &= -\\frac{k}{m}(L-L_0)n_x,\n", + "\\\\ \n", + "\\ddot y &= -\\frac{k}{m}(L-L_0)n_y - g,\n", + "\\\\ \n", + "L &= \\sqrt{(x-x_0)^2 + (y-y_0)^2},\n", + "\\\\ \n", + "n_x &= \\frac{x-x_0}{L},\n", + "\\\\ \n", + "n_y &= \\frac{y-y_0}{L},\n", + "\\\\ \n", + "x(0) &= (L_0+mg/k)\\sin\\Theta,\n", + "\\\\ \n", + "x'(0) &= 0,\n", + "\\\\ \n", + "y(0) & =(L_0+mg/k)(1-\\cos\\Theta),\n", + "\\\\ \n", + "y'(0) &= 0\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We insert $n_x$ and $n_y$ in the ODEs:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\ddot x = -\\frac{k}{m}\\left(1 -\\frac{L_0}{L}\\right)(x-x_0),\n", + "\\label{vib:app:pendulum_elastic:x} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\ddot y = -\\frac{k}{m}\\left(1 -\\frac{L_0}{L}\\right)(y-y_0) - g,\n", + "\\label{vib:app:pendulum_elastic:y} \\tag{19}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "L = \\sqrt{(x-x_0)^2 + (y-y_0)^2},\n", + "\\label{vib:app:pendulum_elastic:L} \\tag{20}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "x(0) = (L_0+mg/k)\\sin\\Theta,\n", + "\\label{vib:app:pendulum_elastic:x0} \\tag{21}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "x'(0) = 0,\n", + "\\label{vib:app:pendulum_elastic:vx0} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "y(0) =(L_0+mg/k)(1-\\cos\\Theta),\n", + "\\label{vib:app:pendulum_elastic:y0} \\tag{23}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "y'(0) = 0\\thinspace .\n", + "\\label{vib:app:pendulum_elastic:vy0} \\tag{24}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scaling\n", + "\n", + "The elastic pendulum model can be used to study both an elastic pendulum\n", + "and a classic, non-elastic pendulum. The latter problem is obtained\n", + "by letting $k\\rightarrow\\infty$. Unfortunately,\n", + "a serious problem with the ODEs\n", + "([18](#vib:app:pendulum_elastic:x))-([19](#vib:app:pendulum_elastic:y)) is that for large $k$, we have a very large factor $k/m$ multiplied by a\n", + "very small number $1-L_0/L$, since for large $k$, $L\\approx L_0$ (very\n", + "small deformations of the wire). The product is subject to\n", + "significant round-off errors for many relevant physical values of\n", + "the parameters. To circumvent the problem, we introduce a scaling. This\n", + "will also remove physical parameters from the problem such that we end\n", + "up with only one dimensionless parameter,\n", + "closely related to the elasticity of the wire. Simulations can then be\n", + "done by setting just this dimensionless parameter.\n", + "\n", + "The characteristic length can be taken such that in equilibrium, the\n", + "scaled length is unity, i.e., the characteristic length is $L_0+mg/k$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\bar x = \\frac{x}{L_0+mg/k},\\quad \\bar y = \\frac{y}{L_0+mg/k}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We must then also work with the scaled length $\\bar L = L/(L_0+mg/k)$.\n", + "\n", + "Introducing $\\bar t=t/t_c$, where $t_c$ is a characteristic time we\n", + "have to decide upon later, one gets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\frac{d^2\\bar x}{d\\bar t^2} &=\n", + "-t_c^2\\frac{k}{m}\\left(1 -\\frac{L_0}{L_0+mg/k}\\frac{1}{\\bar L}\\right)\\bar x,\\\\ \n", + "\\frac{d^2\\bar y}{d\\bar t^2} &=\n", + "-t_c^2\\frac{k}{m}\\left(1 -\\frac{L_0}{L_0+mg/k}\\frac{1}{\\bar L}\\right)(\\bar y-1)\n", + "-t_c^2\\frac{g}{L_0 + mg/k},\\\\ \n", + "\\bar L &= \\sqrt{\\bar x^2 + (\\bar y-1)^2},\\\\ \n", + "\\bar x(0) &= \\sin\\Theta,\\\\ \n", + "\\bar x'(0) &= 0,\\\\ \n", + "\\bar y(0) & = 1 - \\cos\\Theta,\\\\ \n", + "\\bar y'(0) &= 0\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a non-elastic pendulum with small angles, we know that the\n", + "frequency of the oscillations are $\\omega = \\sqrt{L/g}$. mathcal{I}_t is therefore\n", + "natural to choose a similar expression here, either the length in\n", + "the equilibrium position," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "t_c^2 = \\frac{L_0+mg/k}{g}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or simply the unstretched length," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "t_c^2 = \\frac{L_0}{g}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These quantities are not very different (since the elastic model\n", + "is valid only for quite small elongations), so we take the latter as it is\n", + "the simplest one.\n", + "\n", + "The ODEs become" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\frac{d^2\\bar x}{d\\bar t^2} &=\n", + "-\\frac{L_0k}{mg}\\left(1 -\\frac{L_0}{L_0+mg/k}\\frac{1}{\\bar L}\\right)\\bar x,\\\\ \n", + "\\frac{d^2\\bar y}{d\\bar t^2} &=\n", + "-\\frac{L_0k}{mg}\\left(1 -\\frac{L_0}{L_0+mg/k}\\frac{1}{\\bar L}\\right)(\\bar y-1)\n", + "-\\frac{L_0}{L_0 + mg/k},\\\\ \n", + "\\bar L &= \\sqrt{\\bar x^2 + (\\bar y-1)^2}\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now identify a dimensionless number" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\beta = \\frac{L_0}{L_0 + mg/k} = \\frac{1}{1+\\frac{mg}{L_0k}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is the ratio of the unstretched length and the\n", + "stretched length in equilibrium. The non-elastic pendulum will have\n", + "$\\beta =1$ ($k\\rightarrow\\infty$).\n", + "With $\\beta$ the ODEs read" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d^2\\bar x}{d\\bar t^2} =\n", + "-\\frac{\\beta}{1-\\beta}\\left(1- \\frac{\\beta}{\\bar L}\\right)\\bar x,\n", + "\\label{vib:app:pendulum_elastic:x:s} \\tag{25}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\frac{d^2\\bar y}{d\\bar t^2} =\n", + "-\\frac{\\beta}{1-\\beta}\\left(1- \\frac{\\beta}{\\bar L}\\right)(\\bar y-1)\n", + "-\\beta,\n", + "\\label{vib:app:pendulum_elastic:y:s} \\tag{26}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\bar L = \\sqrt{\\bar x^2 + (\\bar y-1)^2},\n", + "\\label{vib:app:pendulum_elastic:L:s} \\tag{27}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\bar x(0) = (1+\\epsilon)\\sin\\Theta,\n", + "\\label{vib:app:pendulum_elastic:x0:s} \\tag{28}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\frac{d\\bar x}{d\\bar t}(0) = 0,\n", + "\\label{vib:app:pendulum_elastic:vx0:s} \\tag{29}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\bar y(0) = 1 - (1+\\epsilon)\\cos\\Theta,\n", + "\\label{vib:app:pendulum_elastic:y0:s} \\tag{30}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\frac{d\\bar y}{d\\bar t}(0) = 0,\n", + "\\label{vib:app:pendulum_elastic:vy0:s} \\tag{31}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have here added a parameter $\\epsilon$, which is an additional\n", + "downward stretch of the wire at $t=0$. This parameter makes it possible\n", + "to do a desired test: vertical oscillations of the pendulum. Without\n", + "$\\epsilon$, starting the motion from $(0,0)$ with zero velocity will\n", + "result in $x=y=0$ for all times (also a good test!), but with\n", + "an initial stretch so the body's position is $(0,\\epsilon)$, we\n", + "will have oscillatory vertical motion with amplitude $\\epsilon$ (see\n", + "[Exercise 5: Simulate an elastic pendulum](#vib:exer:pendulum_elastic)).\n", + "\n", + "### Remark on the non-elastic limit\n", + "\n", + "We immediately see that as $k\\rightarrow\\infty$ (i.e., we obtain a non-elastic\n", + "pendulum), $\\beta\\rightarrow 1$, $\\bar L\\rightarrow 1$, and we have\n", + "very small values $1-\\beta\\bar L^{-1}$ divided by very small values\n", + "$1-\\beta$ in the ODEs. However, it turns out that we can set $\\beta$\n", + "very close to one and obtain a path of the body that within the visual\n", + "accuracy of a plot does not show any elastic oscillations.\n", + "(Should the division of very small values become a problem, one can\n", + "study the limit by L'Hospital's rule:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\lim_{\\beta\\rightarrow 1}\\frac{1 - \\beta \\bar L^{-1}}{1-\\beta}\n", + "= \\frac{1}{\\bar L},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and use the limit $\\bar L^{-1}$ in the ODEs for $\\beta$ values very\n", + "close to 1.)\n", + "\n", + "## Vehicle on a bumpy road\n", + "
\n", + "\n", + "\n", + "\n", + "
\n", + "\n", + "

Sketch of one-wheel vehicle on a bumpy road.

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "We consider a very simplistic vehicle, on one wheel, rolling along a\n", + "bumpy road. The oscillatory nature of the road will induce an external\n", + "forcing on the spring system in the vehicle and cause vibrations.\n", + "[Figure](#vib:app:bumpy:fig:sketch) outlines the situation.\n", + "\n", + "To derive the equation that governs the motion, we must first establish\n", + "the position vector of the black mass at the top of the spring.\n", + "Suppose the spring has length $L$ without any elongation or compression,\n", + "suppose the radius of the wheel is $R$, and suppose the height of the\n", + "black mass at the top is $H$. With the aid of the $\\rpos_0$ vector\n", + "in [Figure](#vib:app:bumpy:fig:sketch), the position $\\rpos$ of\n", + "the center point of the mass is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\rpos = \\rpos_0 + 2R\\jj + L\\jj + u\\jj + \\frac{1}{2} H\\jj,\\ \n", + "\\label{_auto2} \\tag{32}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $u$ is the elongation or compression in the spring according to\n", + "the (unknown and to be computed) vertical displacement $u$ relative to the\n", + "road. If the vehicle travels\n", + "with constant horizontal velocity $v$ and $h(x)$ is the shape of the\n", + "road, then the vector $\\rpos_0$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\rpos_0 = vt\\ii + h(vt)\\jj,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "if the motion starts from $x=0$ at time $t=0$.\n", + "\n", + "The forces on the mass is the gravity, the spring force, and an optional\n", + "damping force that is proportional to the vertical velocity $\\dot u$. Newton's\n", + "second law of motion then tells that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot\\rpos = -mg\\jj - s(u) - b\\dot u\\jj\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This leads to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot u = - s(u) - b\\dot u - mg -mh''(vt)v^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To simplify a little bit, we omit the gravity force $mg$ in comparison with\n", + "the other terms. Introducing $u'$ for $\\dot u$ then gives a standard\n", + "damped, vibration equation with external forcing:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "mu'' + bu' + s(u) = -mh''(vt)v^2\\thinspace .\n", + "\\label{_auto3} \\tag{33}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since the road is normally known just as a set of array values, $h''$ must\n", + "be computed by finite differences. Let $\\Delta x$ be the spacing between\n", + "measured values $h_i= h(i\\Delta x)$ on the road. The discrete second-order\n", + "derivative $h''$ reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "q_i = \\frac{h_{i-1} - 2h_i + h_{i+1}}{\\Delta x^2}, \\quad i=1,\\ldots,N_x-1\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We may for maximum simplicity set\n", + "the end points as $q_0=q_1$ and $q_{N_x}=q_{N_x-1}$.\n", + "The term $-mh''(vt)v^2$ corresponds to a force with discrete time values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F^n = -mq_n v^2,\\quad \\Delta t = v^{-1}\\Delta x\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This force can be directly used in a numerical model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "[mD_tD_t u + bD_{2t} u + s(u) = F]^n\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Software for computing $u$ and also making an animated sketch of\n", + "the motion like we did in the section [Dynamic free body diagram during pendulum motion](#vib:app:pendulum_bodydia)\n", + "is found in a separate project on the web:\n", + ". You may start looking at the\n", + "\"tutorial\":\n", + "\"http://hplgit.github.io/bumpy/doc/pub/bumpy.pdf\".\n", + "\n", + "## Bouncing ball\n", + "
\n", + "\n", + "A bouncing ball is a ball in free vertically fall until it impacts the\n", + "ground, but during the impact, some kinetic energy is lost, and a new\n", + "motion upwards with reduced velocity starts. After the motion is retarded,\n", + "a new free fall starts, and the process is repeated. At some point the\n", + "velocity close to the ground is so small that the ball is considered\n", + "to be finally at rest.\n", + "\n", + "The motion of the ball falling in air is governed by Newton's second\n", + "law $F=ma$, where $a$ is the acceleration of the body, $m$ is the mass,\n", + "and $F$ is the sum of all forces. Here, we neglect the air resistance\n", + "so that gravity $-mg$ is the only force. The height of the ball is\n", + "denoted by $h$ and $v$ is the velocity. The relations between $h$, $v$, and\n", + "$a$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "h'(t)= v(t),\\quad v'(t) = a(t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "combined with Newton's second law gives the ODE model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "h^{\\prime\\prime}(t) = -g,\n", + "\\label{vib:app:bouncing:ball:h2eq} \\tag{34}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or expressed alternatively as a system of first-order equations:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v'(t) = -g,\n", + "\\label{vib:app:bouncing:ball:veq} \\tag{35} \n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "h'(t) = v(t)\\thinspace .\n", + "\\label{vib:app:bouncing:ball:heq} \\tag{36}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These equations govern the motion as long as the ball is away from\n", + "the ground by a small distance $\\epsilon_h > 0$. When $h<\\epsilon_h$,\n", + "we have two cases.\n", + "\n", + "1. The ball impacts the ground, recognized by a sufficiently large negative\n", + " velocity ($v<-\\epsilon_v$). The velocity then changes sign and is\n", + " reduced by a factor $C_R$, known as the [coefficient of restitution](http://en.wikipedia.org/wiki/Coefficient_of_restitution).\n", + " For plotting purposes, one may set $h=0$.\n", + "\n", + "2. The motion stops, recognized by a sufficiently small velocity\n", + " ($|v|<\\epsilon_v$) close to the ground.\n", + "\n", + "## Two-body gravitational problem\n", + "
\n", + "\n", + "Consider two astronomical objects $A$ and $B$ that attract each other\n", + "by gravitational forces. $A$ and $B$ could be two stars in a binary\n", + "system, a planet orbiting a star, or a moon orbiting a planet.\n", + "Each object is acted upon by the\n", + "gravitational force due to the other object. Consider motion in a plane\n", + "(for simplicity) and let $(x_A,y_A)$ and $(x_B,y_B)$ be the\n", + "positions of object $A$ and $B$, respectively.\n", + "\n", + "### The governing equations\n", + "\n", + "Newton's second law of motion applied to each object is all we need\n", + "to set up a mathematical model for this physical problem:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "m_A\\ddot\\x_A = \\F,\n", + "\\label{_auto4} \\tag{37}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "m_B\\ddot\\x_B = -\\F,\n", + "\\label{_auto5} \\tag{38}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $F$ is the gravitational force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\F = \\frac{Gm_Am_B}{||\\rpos||^3}\\rpos,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\rpos(t) = \\x_B(t) - \\x_A(t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and $G$ is the gravitational constant:\n", + "$G=6.674\\cdot 10^{-11}\\hbox{ Nm}^2/\\hbox{kg}^2$.\n", + "\n", + "### Scaling\n", + "\n", + "A problem with these equations is that the parameters are very large\n", + "($m_A$, $m_B$, $||\\rpos||$) or very small ($G$). The rotation time\n", + "for binary stars can be very small and large as well. mathcal{I}_t is therefore\n", + "advantageous to scale the equations.\n", + "A natural length scale could be the initial distance between the objects:\n", + "$L=\\rpos(0)$. We write the dimensionless quantities as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\bar\\x_A = \\frac{\\x_A}{L},\\quad\\bar\\x_B = \\frac{\\x_B}{L},\\quad\n", + "\\bar t = \\frac{t}{t_c}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The gravity force is transformed to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\F = \\frac{Gm_Am_B}{L^2||\\bar\\rpos||^3}\\bar\\rpos,\\quad \\bar\\rpos = \\bar\\x_B - \\bar\\x_A,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "so the first ODE for $\\x_A$ becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2 \\bar\\x_A}{d\\bar t^2} =\n", + "\\frac{Gm_Bt_c^2}{L^3}\\frac{\\bar\\rpos}{||\\bar\\rpos||^3}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Assuming that quantities with a bar and their derivatives are around unity\n", + "in size, it is natural to choose $t_c$ such that the fraction $Gm_Bt_c/L^2=1$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "t_c = \\sqrt{\\frac{L^3}{Gm_B}}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the other equation for $\\x_B$ we get another candidate for $t_c$ with\n", + "$m_A$ instead of $m_B$. Which mass we choose play a role if $m_A\\ll m_B$ or\n", + "$m_B\\ll m_A$. One solution is to use the sum of the masses:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "t_c = \\sqrt{\\frac{L^3}{G(m_A+m_B)}}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Taking a look at [Kepler's laws](https://en.wikipedia.org/wiki/Kepler%27s_laws_of_planetary_motion) of planetary motion, the orbital period for a planet around the star is given by the $t_c$ above, except for a missing factor of $2\\pi$,\n", + "but that means that $t_c^{-1}$ is just the angular frequency of the motion.\n", + "Our characteristic time $t_c$ is therefore highly relevant.\n", + "Introducing the dimensionless number" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\alpha = \\frac{m_A}{m_B},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we can write the dimensionless ODE as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d^2 \\bar\\x_A}{d\\bar t^2} =\n", + "\\frac{1}{1+\\alpha}\\frac{\\bar\\rpos}{||\\bar\\rpos||^3},\n", + "\\label{_auto6} \\tag{39}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\frac{d^2 \\bar\\x_B}{d\\bar t^2} =\n", + "\\frac{1}{1+\\alpha^{-1}}\\frac{\\bar\\rpos}{||\\bar\\rpos||^3}\\thinspace .\n", + "\\label{_auto7} \\tag{40}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the limit $m_A\\ll m_B$, i.e., $\\alpha\\ll 1$,\n", + "object B stands still, say $\\bar\\x_B=0$, and object\n", + "A orbits according to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2 \\bar\\x_A}{d\\bar t^2} = -\\frac{\\bar\\x_A}{||\\bar \\x_A||^3}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Solution in a special case: planet orbiting a star\n", + "\n", + "To better see the motion, and that our scaling is reasonable,\n", + "we introduce polar coordinates $r$ and $\\theta$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\bar\\x_A = r\\cos\\theta\\ii + r\\sin\\theta\\jj,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which means $\\bar\\x_A$ can be written as $\\bar\\x_A =r\\ir$. Since" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d}{dt}\\ir = \\dot\\theta\\ith,\\quad \\frac{d}{dt}\\ith = -\\dot\\theta\\ir,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2 \\bar\\x_A}{d\\bar t^2} =\n", + "(\\ddot r - r\\dot\\theta^2)\\ir + (r\\ddot\\theta + 2\\dot r\\dot\\theta)\\ith\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The equation of motion for mass A is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\ddot r - r\\dot\\theta^2 &= -\\frac{1}{r^2},\\\\ \n", + "r\\ddot\\theta + 2\\dot r\\dot\\theta &= 0\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The special case of circular motion, $r=1$, fulfills the equations, since\n", + "the latter equation then gives $\\dot\\theta =\\hbox{const}$ and\n", + "the former then gives $\\dot\\theta = 1$, i.e., the motion is\n", + "$r(t)=1$, $\\theta(t)=t$, with unit angular frequency as expected and\n", + "period $2\\pi$ as expected.\n", + "\n", + "\n", + "## Electric circuits\n", + "\n", + "Although the term \"mechanical vibrations\" is used in the present\n", + "book, we must mention that the same type of equations arise\n", + "when modeling electric circuits.\n", + "The current $I(t)$ in a\n", + "circuit with an inductor with inductance $L$, a capacitor with\n", + "capacitance $C$, and overall resistance $R$, is governed by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\ddot I + \\frac{R}{L}\\dot I + \\frac{1}{LC}I = \\dot V(t),\n", + "\\label{_auto8} \\tag{41}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $V(t)$ is the voltage source powering the circuit.\n", + "This equation has the same form as the general model considered in\n", + "the section [vib:model2](#vib:model2) if we set $u=I$, $f(u^{\\prime})=bu^{\\prime}$\n", + "and define $b=R/L$, $s(u) = L^{-1}C^{-1}u$, and $F(t)=\\dot V(t)$.\n", + "\n", + "\n", + "# Exercises\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 1: Simulate resonance\n", + "
\n", + "\n", + "\n", + "We consider the scaled ODE model\n", + "([4](#vib:app:mass_gen:scaled)) from the section [General mechanical vibrating system](#vib:app:mass_gen).\n", + "After scaling, the amplitude of $u$ will have a size about unity\n", + "as time grows and the effect of the initial conditions die out due\n", + "to damping. However, as $\\gamma\\rightarrow 1$, the amplitude of $u$\n", + "increases, especially if $\\beta$ is small. This effect is called\n", + "*resonance*. The purpose of this exercise is to explore resonance.\n", + "\n", + "\n", + "**a)**\n", + "Figure out how the `solver` function in `vib.py` can be called\n", + "for the scaled ODE ([4](#vib:app:mass_gen:scaled)).\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "Comparing the scaled ODE ([4](#vib:app:mass_gen:scaled))\n", + "with the ODE ([3](#vib:app:mass_gen:equ)) with dimensions, we\n", + "realize that the parameters in the latter must be set as\n", + "\n", + " * $m=1$\n", + "\n", + " * $f(\\dot u) = 2\\beta |\\dot u|\\dot u$\n", + "\n", + " * $s(u)=ku$\n", + "\n", + " * $F(t)=\\sin(\\gamma t)$\n", + "\n", + " * $I=Ik/A$\n", + "\n", + " * $V=\\sqrt{mk}V/A$\n", + "\n", + "The expected period is $2\\pi$, so simulating for $N$ periods means\n", + "$T=2\\pi N$. Having $m$ time steps per period means $\\Delta t = 2\\pi/m$.\n", + "\n", + "Suppose we just choose $I=1$ and $V=0$. Simulating for 20 periods with\n", + "60 time steps per period, implies the following\n", + "`solver` call to run the scaled model:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "u, t = solver(I=1, V=0, m=1, b=2*beta, s=lambda u: u,\n", + " F=lambda t: sin(gamma*t), dt=2*pi/60,\n", + " T=2*pi*20, damping='quadratic')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "**b)**\n", + "Run $\\gamma =5, 1.5, 1.1, 1$ for $\\beta=0.005, 0.05, 0.2$.\n", + "For each $\\beta$ value, present an image with plots of $u(t)$ for\n", + "the four $\\gamma$ values.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "An appropriate program is" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from vib import solver, visualize, plt\n", + "from math import pi, sin\n", + "import numpy as np\n", + "\n", + "beta_values = [0.005, 0.05, 0.2]\n", + "beta_values = [0.00005]\n", + "gamma_values = [5, 1.5, 1.1, 1]\n", + "for i, beta in enumerate(beta_values):\n", + " for gamma in gamma_values:\n", + " u, t = solver(I=1, V=0, m=1, b=2*beta, s=lambda u: u,\n", + " F=lambda t: sin(gamma*t), dt=2*pi/60,\n", + " T=2*pi*20, damping='quadratic')\n", + " visualize(u, t, title='gamma=%g' %\n", + " gamma, filename='tmp_%s' % gamma)\n", + " print gamma, 'max u amplitude:', np.abs(u).max()\n", + " for ext in 'png', 'pdf':\n", + " cmd = 'doconce combine_images '\n", + " cmd += ' '.join(['tmp_%s.' % gamma + ext\n", + " for gamma in gamma_values])\n", + " cmd += ' resonance%d.' % (i+1) + ext\n", + " os.system(cmd)\n", + "raw_input()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For $\\beta = 0.2$ we see that the amplitude is not far from unity:\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "For $\\beta =0.05$ we see that as $\\gamma\\rightarrow 1$, the amplitude grows:\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Finally, a small damping ($\\beta = 0.005$) amplifies the amplitude significantly (by a factor of 10) for $\\gamma=1$:\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "For a very small $\\beta=0.00005$, the amplitude grows linearly up to\n", + "about 60 for $\\bar t\\in [0,120]$.\n", + "\n", + "\n", + "\n", + "Filename: `resonance`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 2: Simulate oscillations of a sliding box\n", + "
\n", + "\n", + "Consider a sliding box on a flat surface as modeled in the section [A sliding mass attached to a spring](#vib:app:mass_sliding). As spring force we choose the nonlinear\n", + "formula" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "s(u) = \\frac{k}{\\alpha}\\tanh(\\alpha u) = ku + \\frac{1}{3}\\alpha^2 ku^3 + \\frac{2}{15}\\alpha^4 k u^5 + \\mathcal{O}({u^6})\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**a)**\n", + "Plot $g(u)=\\alpha^{-1}\\tanh(\\alpha u)$ for various values of $\\alpha$.\n", + "Assume $u\\in [-1,1]$.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "Here is a function that does the plotting:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "import scitools.std as plt\n", + "import numpy as np\n", + "\n", + "def plot_spring():\n", + " alpha_values = [1, 2, 3, 10]\n", + " s = lambda u: 1.0/alpha*np.tanh(alpha*u)\n", + " u = np.linspace(-1, 1, 1001)\n", + " for alpha in alpha_values:\n", + " print alpha, s(u)\n", + " plt.plot(u, s(u))\n", + " plt.hold('on')\n", + " plt.legend([r'$\\alpha=%g$' % alpha for alpha in alpha_values])\n", + " plt.xlabel('u'); plt.ylabel('Spring response $s(u)$')\n", + " plt.savefig('tmp_s.png'); plt.savefig('tmp_s.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "**b)**\n", + "Scale the equations using $I$ as scale for $u$ and $\\sqrt{m/k}$ as\n", + "time scale.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "Inserting the dimensionless dependent and independent variables," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\bar u = \\frac{u}{I},\\quad \\bar t = \\frac{t}{\\sqrt{m/k}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in the problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot u + \\mu mg\\hbox{sign}(\\dot u) + s(u) = 0,\\quad u(0)=I,\\ \\dot u(0)=V,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2\\bar u}{d\\bar t^2} + \\frac{\\mu mg}{kI}\\hbox{sign}\\left(\n", + "\\frac{d\\bar u}{d\\bar t}\\right) + \\frac{1}{\\alpha I}\\tanh(\\alpha I\\bar u)\n", + "= 0,\\quad \\bar u(0)=1,\\ \\frac{d\\bar u}{d\\bar t}(0)=\\frac{V\\sqrt{mk}}{kI}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now identify three dimensionless parameters," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\beta = \\frac{\\mu mg}{kI},\\quad\n", + "\\gamma = \\alpha I,\\quad \\delta = \\frac{V\\sqrt{mk}}{kI}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The scaled problem can then be written" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2\\bar u}{d\\bar t^2} + \\beta\\hbox{sign}\\left(\n", + "\\frac{d\\bar u}{d\\bar t}\\right) + \\gamma^{-1}\\tanh(\\gamma \\bar u)\n", + "= 0,\\quad \\bar u(0)=1,\\ \\frac{d\\bar u}{d\\bar t}(0)=\\delta\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The initial set of 7 parameters $(\\mu, m, g, k, \\alpha, I, V)$ are\n", + "reduced to 3 dimensionless combinations.\n", + "\n", + "\n", + "\n", + "**c)**\n", + "Implement the scaled model in b). Run it for some values of\n", + "the dimensionless parameters.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "We use Odespy to solve the ODE, which requires rewriting the ODE as a\n", + "system of two first-order ODEs:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "v' &= - \\beta\\hbox{sign}(v) - \\gamma^{-1}\\tanh(\\gamma \\bar u),\\\\ \n", + "u' &= v,\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with initial conditions $v(0)=\\delta$ and $u(0)=1$. Here, $u(t)$ corresponds\n", + "to the previous $\\bar u(\\bar t)$, while $v(t)$ corresponds to\n", + "$d\\bar u/d\\bar t (\\bar t)$. The code can be like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "! Should I change this to Devito?\n", + "\n", + "def simulate(beta, gamma, delta=0,\n", + " num_periods=8, time_steps_per_period=60):\n", + " # Use oscillations without friction to set dt and T\n", + " P = 2*np.pi\n", + " dt = P/time_steps_per_period\n", + " T = num_periods*P\n", + " t = np.linspace(0, T, time_steps_per_period*num_periods+1)\n", + " import odespy\n", + " def f(u, t, beta, gamma):\n", + " # Note the sequence of unknowns: v, u (v=du/dt)\n", + " v, u = u\n", + " return [-beta*np.sign(v) - 1.0/gamma*np.tanh(gamma*u), v]\n", + " #return [-beta*np.sign(v) - u, v]\n", + "\n", + " solver = odespy.RK4(f, f_args=(beta, gamma))\n", + " solver.set_initial_condition([delta, 1]) # sequence must match f\n", + " uv, t = solver.solve(t)\n", + " u = uv[:,1] # recall sequence in f: v, u\n", + " v = uv[:,0]\n", + " return u, t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We simulate for an almost linear spring in the regime of $\\bar u$ (recall\n", + "that $\\bar u\\in [0,1]$ since $u$ is scaled with $I$), which corresponds\n", + "to $\\alpha = 1$ in a) and therefore $\\gamma =1$. Then we can try a\n", + "spring whose force quickly flattens out like $\\alpha=5$ in a), which\n", + "corresponds to $\\gamma = 5$ in the scaled model. A third option is\n", + "to have a truly linear spring, e.g., $\\gamma =0.1$. After some\n", + "experimentation we realize that $\\beta=0,0.05, 0.1$ are relevant values.\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Filename: `sliding_box`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 3: Simulate a bouncing ball\n", + "
\n", + "\n", + "The section [Bouncing ball](#vib:app:bouncing_ball) presents a model for a bouncing\n", + "ball.\n", + "Choose one of the two ODE formulation, ([34](#vib:app:bouncing:ball:h2eq)) or\n", + "([35](#vib:app:bouncing:ball:veq))-([36](#vib:app:bouncing:ball:heq)),\n", + "and simulate the motion of a bouncing ball. Plot $h(t)$. Think about how to\n", + "plot $v(t)$.\n", + "\n", + "\n", + "\n", + "**Hint.**\n", + "A naive implementation may get stuck in repeated impacts for large time\n", + "step sizes. To avoid this situation, one can introduce a state\n", + "variable that holds the mode of the motion: free fall, impact, or rest.\n", + "Two consecutive impacts imply that the motion has stopped.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "A tailored `solver` function and some plotting statements go like" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "Missing parentheses in call to 'print'. Did you mean print(...)? (4188502967.py, line 42)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m Cell \u001b[0;32mIn[6], line 42\u001b[0;36m\u001b[0m\n\u001b[0;31m print '%4d v=%8.5f h=%8.5f %s' % (n, v[n+1], h[n+1], mode)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m Missing parentheses in call to 'print'. Did you mean print(...)?\n" + ] + } + ], + "source": [ + "! Devito-ize this\n", + "\n", + "import numpy as np\n", + "\n", + "def solver(H, C_R, dt, T, eps_v=0.01, eps_h=0.01):\n", + " \"\"\"\n", + " Simulate bouncing ball until it comes to rest. Time step dt.\n", + " h(0)=H (initial height). T: maximum simulation time.\n", + " Method: Euler-Cromer.\n", + " \"\"\"\n", + " dt = float(dt)\n", + " Nt = int(round(T/dt))\n", + " h = np.zeros(Nt+1)\n", + " v = np.zeros(Nt+1)\n", + " t = np.linspace(0, Nt*dt, Nt+1)\n", + " g = 0.81\n", + "\n", + " v[0] = 0\n", + " h[0] = H\n", + " mode = 'free fall'\n", + " for n in range(Nt):\n", + " v[n+1] = v[n] - dt*g\n", + " h[n+1] = h[n] + dt*v[n+1]\n", + "\n", + " if h[n+1] < eps_h:\n", + " #if abs(v[n+1]) > eps_v: # handles large dt, but is wrong\n", + " if v[n+1] < -eps_v:\n", + " # Impact\n", + " v[n+1] = -C_R*v[n+1]\n", + " h[n+1] = 0\n", + " if mode == 'impact':\n", + " # impact twice\n", + " return h[:n+2], v[:n+2], t[:n+2]\n", + " mode = 'impact'\n", + " elif abs(v[n+1]) < eps_v:\n", + " mode = 'rest'\n", + " v[n+1] = 0\n", + " h[n+1] = 0\n", + " return h[:n+2], v[:n+2], t[:n+2]\n", + " else:\n", + " mode = 'free fall'\n", + " else:\n", + " mode = 'free fall'\n", + " print '%4d v=%8.5f h=%8.5f %s' % (n, v[n+1], h[n+1], mode)\n", + " raise ValueError('T=%g is too short simulation time' % T)\n", + "\n", + "import matplotlib.pyplot as plt\n", + "h, v, t = solver(\n", + " H=1, C_R=0.8, T=100, dt=0.0001, eps_v=0.01, eps_h=0.01)\n", + "plt.plot(t, h)\n", + "plt.legend('h')\n", + "plt.savefig('tmp_h.png'); plt.savefig('tmp_h.pdf')\n", + "plt.figure()\n", + "plt.plot(t, v)\n", + "plt.legend('v')\n", + "plt.savefig('tmp_v.png'); plt.savefig('tmp_v.pdf')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Filename: `bouncing_ball`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 4: Simulate a simple pendulum\n", + "
\n", + "\n", + "Simulation of simple pendulum can be carried out by using\n", + "the mathematical model derived in the section [Motion of a pendulum](#vib:app:pendulum)\n", + "and calling up functionality in the [`vib.py`](${src_vib}/vib.py)\n", + "file (i.e., solve the second-order ODE by centered finite differences).\n", + "\n", + "\n", + "**a)**\n", + "Scale the model. Set up the dimensionless governing equation for $\\theta$\n", + "and expressions for dimensionless drag and wire forces.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "The angle is measured in radians so we may think of this quantity as\n", + "dimensionless, or we may scale it by the initial condition to obtain\n", + "a primary unknown that lies in $[-1,1]$. We go for the former strategy here.\n", + "\n", + "Dimensionless time $\\bar t$ is introduced as $t/t_c$ for some suitable\n", + "time scale $t_c$.\n", + "\n", + "Inserted in the two governing equations\n", + "([8](#vib:app:pendulum:thetaeq)) and ([6](#vib:app:pendulum:ir)),\n", + "for the\n", + "two unknowns $\\theta$ and $S$, respectively, we achieve" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "-S + mg\\cos\\theta &= -\\frac{1}{t_c}L\\frac{d\\theta}{d\\bar t},\\\\ \n", + "\\frac{1}{t_c^2}m\\frac{d^2\\theta}{d\\bar t^2} +\n", + "\\frac{1}{2}C_D\\varrho AL \\frac{1}{t_c^2}\\left\\vert\n", + "\\frac{d\\theta}{d\\bar t}\\right\\vert\n", + "\\frac{d\\theta}{d\\bar t}\n", + "+ \\frac{mg}{L}\\sin\\theta &= 0\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We multiply the latter equation by $t_c^2/m$ to make each term\n", + "dimensionless:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2\\theta}{d\\bar t^2} +\n", + "\\frac{1}{2m}C_D\\varrho AL \\left\\vert\n", + "\\frac{d\\theta}{d\\bar t}\\right\\vert\n", + "\\frac{d\\theta}{d\\bar t}\n", + "+ \\frac{t_c^2g}{L}\\sin\\theta = 0\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Assuming that the acceleration term and the\n", + "gravity term to be the dominating terms, these should balance, so\n", + "$t_c^2g/L=1$, giving $t_c = \\sqrt{g/L}$. With $A=\\pi R^2$ we get the\n", + "dimensionless ODEs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d^2\\theta}{d\\bar t^2} +\n", + "\\alpha\\left\\vert\\frac{d\\theta}{d\\bar t}\\right\\vert\\frac{d\\theta}{d\\bar t} +\n", + "\\sin\\theta = 0,\n", + "\\label{vib:exer:pendulum_simple:eq:ith:s} \\tag{42}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\frac{S}{mg} = \\left(\\frac{d\\theta}{d\\bar t}\\right)^2 + \\cos\\theta,\n", + "\\label{vib:exer:pendulum_simple:eq:ir:s} \\tag{43}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\alpha$ is a dimensionless drag coefficient" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\alpha = \\frac{C_D\\varrho\\pi R^2L}{2m}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that in ([43](#vib:exer:pendulum_simple:eq:ir:s)) we have divided by\n", + "$mg$, which is in fact a force scale, making the gravity force unity\n", + "and also $S/mg=1$ in the equilibrium position $\\theta=0$. We may\n", + "introduce" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\bar S = S/mg\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "as a dimensionless drag force.\n", + "\n", + "The parameter $\\alpha$ is about\n", + "the ratio of the drag force and the gravity force:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{|\\frac{1}{2} C_D\\varrho \\pi R^2 |v|v|}{|mg|}\\sim\n", + "\\frac{C_D\\varrho \\pi R^2 L^2 t_c^{-2}}{mg}\n", + "\\left|\\frac{d\\bar\\theta}{d\\bar t}\\right|\\frac{d\\bar\\theta}{d\\bar t}\n", + "\\sim \\frac{C_D\\varrho \\pi R^2 L}{2m}\\Theta^2 = \\alpha \\Theta^2\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(We have that $\\theta(t)/d\\Theta$ is in $[-1,1]$, so we expect\n", + "since $\\Theta^{-1}d\\bar\\theta/d\\bar t$ to be around unity. Here,\n", + "$\\Theta=\\theta(0)$.)\n", + "\n", + "Let us introduce $\\omega$ for the dimensionless angular velocity," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\omega = \\frac{d\\theta}{d\\bar t}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When $\\theta$ is computed, the dimensionless wire and drag forces\n", + "are computed by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\bar S &= \\omega^2 + \\cos\\theta,\\\\ \n", + "\\bar D &= -\\alpha |\\omega|\\omega\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "**b)**\n", + "Write a function for computing\n", + "$\\theta$ and the dimensionless drag force and the force in the wire,\n", + "using the `solver` function in\n", + "the `vib.py` file. Plot these three quantities\n", + "below each other (in subplots) so the graphs can be compared.\n", + "Run two cases, first one in the limit of $\\Theta$ small and\n", + "no drag, and then a second one with $\\Theta=40$ degrees and $\\alpha=0.8$.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "The first step is to realize how to utilize the `solver` function for\n", + "our dimensionless model. Introducing `Theta` for $\\Theta$, the\n", + "arguments to `solver` must be set as" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "I = Theta\n", + "V = 0\n", + "m = 1\n", + "b = alpha\n", + "s = lambda u: sin(u)\n", + "F = lambda t: 0\n", + "damping = 'quadratic'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After computing $\\theta$, we need to find $\\omega$ by finite differences:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\omega^n = \\frac{\\theta^{n+1}-\\theta^{n-1}}{2\\Delta t},\n", + "\\ n=1,\\ldots,N_t-1,\\quad \\omega^0=\\frac{\\theta^1-\\theta^0}{\\Delta t},\n", + "\\ \\omega^{N_t}=\\frac{\\theta^{N_t}-\\theta^{N_t-1}}{\\Delta t}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The duration of the simulation and the time step can be computed on\n", + "basis of the analytical insight we have for small $\\theta$\n", + "($\\theta\\approx \\Theta\\cos(t)$). A complete function then reads" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def simulate(Theta, alpha, num_periods=10):\n", + " # Dimensionless model requires the following parameters:\n", + " from math import sin, pi\n", + "\n", + " I = Theta\n", + " V = 0\n", + " m = 1\n", + " b = alpha\n", + " s = lambda u: sin(u)\n", + " F = lambda t: 0\n", + " damping = 'quadratic'\n", + "\n", + " # Estimate T and dt from the small angle solution\n", + " P = 2*pi # One period (theta small, no drag)\n", + " dt = P/40 # 40 intervals per period\n", + " T = num_periods*P\n", + "\n", + " theta, t = solver(I, V, m, b, s, F, dt, T, damping)\n", + " omega = np.zeros(theta.size)\n", + " omega[1:-1] = (theta[2:] - theta[:-2])/(2*dt)\n", + " omega[0] = (theta[1] - theta[0])/dt\n", + " omega[-1] = (theta[-1] - theta[-2])/dt\n", + "\n", + " S = omega**2 + np.cos(theta)\n", + " D = alpha*np.abs(omega)*omega\n", + " return t, theta, S, D" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Assuming imports like" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the following function visualizes $\\theta$, $\\bar S$, and $\\bar D$\n", + "with three subplots:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "def visualize(t, theta, S, D, filename='tmp'):\n", + " f, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, sharey=False)\n", + " ax1.plot(t, theta)\n", + " ax1.set_title(r'$\\theta(t)$')\n", + " ax2.plot(t, S)\n", + " ax2.set_title(r'Dimensonless force in the wire')\n", + " ax3.plot(t, D)\n", + " ax3.set_title(r'Dimensionless drag force')\n", + " plt.savefig('%s.png' % filename)\n", + " plt.savefig('%s.pdf' % filename)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A suitable main program is" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "# Rough verification that small theta and no drag gives cos(t)\n", + "Theta = 1.0\n", + "alpha = 0\n", + "t, theta, S, D = simulate(Theta, alpha, num_periods=4)\n", + "# Scale theta by Theta (easier to compare with cos(t))\n", + "theta /= Theta\n", + "visualize(t, theta, S, D, filename='pendulum_verify')\n", + "\n", + "Theta = math.radians(40)\n", + "alpha = 0.8\n", + "t, theta, S, D = simulate(Theta, alpha)\n", + "visualize(t, theta, S, D, filename='pendulum_alpha0.8_Theta40')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The \"verification\" case looks good (at least when the `solver` function\n", + "has been thoroughly verified in other circumstances):\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The \"real case\" shows how quickly the drag force is reduced, even when\n", + "we set $\\alpha$ to a significant value (0.8):\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Filename: `simple_pendulum`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 5: Simulate an elastic pendulum\n", + "
\n", + "\n", + "The section [Motion of an elastic pendulum](#vib:app:pendulum_elastic) describes a model for an elastic\n", + "pendulum, resulting in a system of two ODEs. The purpose of this\n", + "exercise is to implement the scaled model, test the software, and\n", + "generalize the model.\n", + "\n", + "\n", + "**a)**\n", + "Write a function `simulate`\n", + "that can simulate an elastic pendulum using the scaled model.\n", + "The function should have the following arguments:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def simulate(\n", + " beta=0.9, # dimensionless parameter\n", + " Theta=30, # initial angle in degrees\n", + " epsilon=0, # initial stretch of wire\n", + " num_periods=6, # simulate for num_periods\n", + " time_steps_per_period=60, # time step resolution\n", + " plot=True, # make plots or not\n", + " ):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To set the total simulation time and the time step, we\n", + "use our knowledge of the scaled, classical, non-elastic pendulum:\n", + "$u^{\\prime\\prime} + u = 0$, with solution\n", + "$u = \\Theta\\cos \\bar t$.\n", + "The period of these oscillations is $P=2\\pi$\n", + "and the frequency is unity. The time\n", + "for simulation is taken as `num_periods` times $P$. The time step\n", + "is set as $P$ divided by `time_steps_per_period`.\n", + "\n", + "The `simulate` function should return the arrays of\n", + "$x$, $y$, $\\theta$, and $t$, where $\\theta = \\tan^{-1}(x/(1-y))$ is\n", + "the angular displacement of the elastic pendulum corresponding to the\n", + "position $(x,y)$.\n", + "\n", + "If `plot` is `True`, make a plot of $\\bar y(\\bar t)$\n", + "versus $\\bar x(\\bar t)$, i.e., the physical motion\n", + "of the mass at $(\\bar x,\\bar y)$. Use the equal aspect ratio on the axis\n", + "such that we get a physically correct picture of the motion. Also\n", + "make a plot of $\\theta(\\bar t)$, where $\\theta$ is measured in degrees.\n", + "If $\\Theta < 10$ degrees, add a plot that compares the solutions of\n", + "the scaled, classical, non-elastic pendulum and the elastic pendulum\n", + "($\\theta(t)$).\n", + "\n", + "Although the mathematics here employs a bar over scaled quantities, the\n", + "code should feature plain names `x` for $\\bar x$, `y` for $\\bar y$, and\n", + "`t` for $\\bar t$ (rather than `x_bar`, etc.). These variable names make\n", + "the code easier to read and compare with the mathematics.\n", + "\n", + "\n", + "\n", + "**Hint 1.**\n", + "Equal aspect ratio is set by `plt.gca().set_aspect('equal')` in\n", + "Matplotlib (`import matplotlib.pyplot as plt`)\n", + "and in SciTools by the command\n", + "`plt.plot(..., daspect=[1,1,1], daspectmode='equal')`\n", + "(provided you have done `import scitools.std as plt`).\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "**Hint 2.**\n", + "If you want to use Odespy to solve the equations, order the ODEs\n", + "like $\\dot \\bar x, \\bar x, \\dot\\bar y,\\bar y$ such that\n", + "`odespy.EulerCromer` can be applied.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "Here is a suggested `simulate` function:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "! Devito-ize the odespy part?\n", + "\n", + "import odespy\n", + "import numpy as np\n", + "import scitools.std as plt\n", + "\n", + "def simulate(\n", + " beta=0.9, # dimensionless parameter\n", + " Theta=30, # initial angle in degrees\n", + " epsilon=0, # initial stretch of wire\n", + " num_periods=6, # simulate for num_periods\n", + " time_steps_per_period=60, # time step resolution\n", + " plot=True, # make plots or not\n", + " ):\n", + " from math import sin, cos, pi\n", + " Theta = Theta*np.pi/180 # convert to radians\n", + " # Initial position and velocity\n", + " # (we order the equations such that Euler-Cromer in odespy\n", + " # can be used, i.e., vx, x, vy, y)\n", + " ic = [0, # x'=vx\n", + " (1 + epsilon)*sin(Theta), # x\n", + " 0, # y'=vy\n", + " 1 - (1 + epsilon)*cos(Theta), # y\n", + " ]\n", + "\n", + " def f(u, t, beta):\n", + " vx, x, vy, y = u\n", + " L = np.sqrt(x**2 + (y-1)**2)\n", + " h = beta/(1-beta)*(1 - beta/L) # help factor\n", + " return [-h*x, vx, -h*(y-1) - beta, vy]\n", + "\n", + " # Non-elastic pendulum (scaled similarly in the limit beta=1)\n", + " # solution Theta*cos(t)\n", + " P = 2*pi\n", + " dt = P/time_steps_per_period\n", + " T = num_periods*P\n", + " omega = 2*pi/P\n", + "\n", + " time_points = np.linspace(\n", + " 0, T, num_periods*time_steps_per_period+1)\n", + "\n", + " solver = odespy.EulerCromer(f, f_args=(beta,))\n", + " solver.set_initial_condition(ic)\n", + " u, t = solver.solve(time_points)\n", + " x = u[:,1]\n", + " y = u[:,3]\n", + " theta = np.arctan(x/(1-y))\n", + "\n", + " if plot:\n", + " plt.figure()\n", + " plt.plot(x, y, 'b-', title='Pendulum motion',\n", + " daspect=[1,1,1], daspectmode='equal',\n", + " axis=[x.min(), x.max(), 1.3*y.min(), 1])\n", + " plt.savefig('tmp_xy.png')\n", + " plt.savefig('tmp_xy.pdf')\n", + " # Plot theta in degrees\n", + " plt.figure()\n", + " plt.plot(t, theta*180/np.pi, 'b-',\n", + " title='Angular displacement in degrees')\n", + " plt.savefig('tmp_theta.png')\n", + " plt.savefig('tmp_theta.pdf')\n", + " if abs(Theta) < 10*pi/180:\n", + " # Compare theta and theta_e for small angles (<10 degrees)\n", + " theta_e = Theta*np.cos(omega*t) # non-elastic scaled sol.\n", + " plt.figure()\n", + " plt.plot(t, theta, t, theta_e,\n", + " legend=['theta elastic', 'theta non-elastic'],\n", + " title='Elastic vs non-elastic pendulum, '\\\n", + " 'beta=%g' % beta)\n", + " plt.savefig('tmp_compare.png')\n", + " plt.savefig('tmp_compare.pdf')\n", + " # Plot y vs x (the real physical motion)\n", + " return x, y, theta, t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "**b)**\n", + "Write a test function for testing that $\\Theta=0$ and $\\epsilon=0$\n", + "gives $x=y=0$ for all times.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "Here is the code:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "def test_equilibrium():\n", + " \"\"\"Test that starting from rest makes x=y=theta=0.\"\"\"\n", + " x, y, theta, t = simulate(\n", + " beta=0.9, Theta=0, epsilon=0,\n", + " num_periods=6, time_steps_per_period=10, plot=False)\n", + " tol = 1E-14\n", + " assert np.abs(x.max()) < tol\n", + " assert np.abs(y.max()) < tol\n", + " assert np.abs(theta.max()) < tol" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "**c)**\n", + "Write another test function for checking that the pure vertical\n", + "motion of the elastic pendulum is correct.\n", + "Start with simplifying the ODEs for pure vertical motion and show that\n", + "$\\bar y(\\bar t)$ fulfills a vibration equation with\n", + "frequency $\\sqrt{\\beta/(1-\\beta)}$. Set up the exact solution.\n", + "\n", + "Write a test function that\n", + "uses this special case to verify the `simulate` function. There will\n", + "be numerical approximation errors present in the results from\n", + "`simulate` so you have to believe in correct results and set a\n", + "(low) tolerance that corresponds to the computed maximum error.\n", + "Use a small $\\Delta t$ to obtain a small numerical approximation error.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "For purely vertical motion, the ODEs reduce to $\\ddot x = 0$ and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2\\bar y}{d\\bar t^2} = -\\frac{\\beta}{1-\\beta}(1-\\beta\\frac{1}{\\sqrt{(\\bar y - 1)^2}})(\\bar y-1) - \\beta = -\\frac{\\beta}{1-\\beta}(\\bar y-1 + \\beta) - \\beta\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have here used that $(\\bar y -1)/\\sqrt{(\\bar y -1)^2}=-1$ since\n", + "$\\bar y$ cannot exceed 1 (the pendulum's wire is fixed at the scaled\n", + "point $(0,1)$). In fact, $\\bar y$ will be around zero.\n", + "(As a consistency check, we realize that in equilibrium, $\\ddot\\bar y =0$,\n", + "and multiplying by $(1-\\beta)/\\beta$ leads to the expected $\\bar y=0$.)\n", + "Further calculations easily lead to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2\\bar y}{d\\bar t^2} = -\\frac{\\beta}{1-\\beta}\\bar y = -\\omega^2\\bar y,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where we have introduced the frequency\n", + "$\\omega = \\sqrt{\\beta/(1-\\beta)}$.\n", + "Solving this standard ODE, with an initial stretching $\\bar y(0)=\\epsilon$\n", + "and no velocity, results in" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\bar y(\\bar t) = \\epsilon\\cos(\\omega\\bar t)\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the oscillations we describe here are very different from\n", + "the oscillations used to set the period and time step in function\n", + "`simulate`. The latter type of oscillations are due to gravity when\n", + "a classical, non-elastic pendulum oscillates back and forth, while\n", + "$\\bar y(\\bar t)$ above refers to vertical *elastic* oscillations in the wire\n", + "around the equilibrium point in the gravity field. The angular frequency\n", + "of the vertical oscillations are given by $\\omega$ and the corresponding\n", + "period is $\\hat P = 2\\pi/\\omega$. Suppose we want to simulate for\n", + "$T=N\\hat P = N2\\pi/\\omega$ and use $n$ time steps per period,\n", + "$\\Delta\\bar t = \\hat P/n$. The `simulate` function operates with\n", + "a simulation time of `num_periods` times $2\\pi$. This means that we must set\n", + "`num_periods=N/omega` if we want to simulate to time $T=N\\hat P$.\n", + "The parameter `time_steps_per_period` must be set to $\\omega n$\n", + "since `simulate` has $\\Delta t$ as $2\\pi$ divided by `time_steps_per_period`\n", + "and we want $\\Delta t = 2\\pi\\omega^{-1}n^{-1}$.\n", + "\n", + "The corresponding test function can be written as follows." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "def test_vertical_motion():\n", + " beta = 0.9\n", + " omega = np.sqrt(beta/(1-beta))\n", + " # Find num_periods. Recall that P=2*pi for scaled pendulum\n", + " # oscillations, while here we don't have gravity driven\n", + " # oscillations, but elastic oscillations with frequency omega.\n", + " period = 2*np.pi/omega\n", + " # We want T = N*period\n", + " N = 5\n", + " # simulate function has T = 2*pi*num_periods\n", + " num_periods = 5/omega\n", + " n = 600\n", + " time_steps_per_period = omega*n\n", + "\n", + " y_exact = lambda t: -0.1*np.cos(omega*t)\n", + " x, y, theta, t = simulate(\n", + " beta=beta, Theta=0, epsilon=0.1,\n", + " num_periods=num_periods,\n", + " time_steps_per_period=time_steps_per_period,\n", + " plot=False)\n", + "\n", + " tol = 0.00055 # ok tolerance for the above resolution\n", + " # No motion in x direction is epxected\n", + " assert np.abs(x.max()) < tol\n", + " # Check motion in y direction\n", + " y_e = y_exact(t)\n", + " diff = np.abs(y_e - y).max()\n", + " if diff > tol: # plot\n", + " plt.plot(t, y, t, y_e, legend=['y', 'exact'])\n", + " raw_input('Error in test_vertical_motion; type CR:')\n", + " assert diff < tol, 'diff=%g' % diff" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "**d)**\n", + "Make a function `demo(beta, Theta)` for simulating an elastic pendulum with a\n", + "given $\\beta$ parameter and initial angle $\\Theta$. Use 600 time steps\n", + "per period to get every accurate results, and simulate for 3 periods.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "The `demo` function is just" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "def demo(beta=0.999, Theta=40, num_periods=3):\n", + " x, y, theta, t = simulate(\n", + " beta=beta, Theta=Theta, epsilon=0,\n", + " num_periods=num_periods, time_steps_per_period=600,\n", + " plot=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below are plots corresponding to $\\beta = 0.999$ (3 periods) and\n", + "$\\beta = 0.93$ (one period):\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Filename: `elastic_pendulum`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 6: Simulate an elastic pendulum with air resistance\n", + "
\n", + "\n", + "This is a continuation [Exercise 5: Simulate an elastic pendulum](#vib:exer:pendulum_elastic).\n", + "Air resistance on the body with mass $m$ can be modeled by the\n", + "force $-\\frac{1}{2}\\varrho C_D A|\\v|\\v$,\n", + "where $C_D$ is a drag coefficient (0.2 for a sphere), $\\varrho$\n", + "is the density of air (1.2 $\\hbox{kg }\\,{\\hbox{m}}^{-3}$), $A$ is the\n", + "cross section area ($A=\\pi R^2$ for a sphere, where $R$ is the radius),\n", + "and $\\v$ is the velocity of the body.\n", + "Include air resistance in the original model, scale the model,\n", + "write a function `simulate_drag` that is a copy of the `simulate`\n", + "function from [Exercise 5: Simulate an elastic pendulum](#vib:exer:pendulum_elastic), but with the\n", + "new ODEs included, and show plots of how air resistance\n", + "influences the motion.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "We start with the model\n", + "([18](#vib:app:pendulum_elastic:x))-([24](#vib:app:pendulum_elastic:vy0)).\n", + "Since $\\v = \\dot x\\ii + \\dot y\\jj$, the air resistance term\n", + "can be written" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "-q(\\dot x\\ii + \\dot y\\jj),\\quad q=\\frac{1}{2}\\varrho C_D A\\sqrt{\\dot x^2 + \\dot y^2}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that for positive velocities, the pendulum is moving to the right\n", + "and the air resistance works against the motion, i.e., in direction of\n", + "$-\\v = -\\dot x\\ii - \\dot y\\jj$.\n", + "\n", + "We can easily include the terms in the ODEs:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\ddot x = -\\frac{q}{m}\\dot x -\\frac{k}{m}\\left(1 -\\frac{L_0}{L}\\right)(x-x_0),\n", + "\\label{vib:app:pendulum_elastic_drag:x} \\tag{44}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\ddot y = -\\frac{q}{m}\\dot y -\\frac{k}{m}\\left(1 -\\frac{L_0}{L}\\right)(y-y_0) - g,\n", + "\\label{vib:app:pendulum_elastic_drag:y} \\tag{45}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "L = \\sqrt{(x-x_0)^2 + (y-y_0)^2},\n", + "\\label{vib:app:pendulum_elastic_drag:L} \\tag{46}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\label{_auto9} \\tag{47}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The initial conditions are not affected.\n", + "\n", + "The next step is to scale the model. We use the same scales as in\n", + "[Exercise 5: Simulate an elastic pendulum](#vib:exer:pendulum_elastic), introduce $\\beta$, and $A=\\pi R^2$\n", + "to simplify the $-q\\dot x/m$ term to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{L_0}{2m}\\varrho C_D R^2\\beta^{-1}\n", + "\\sqrt{\\left(\\frac{d\\bar x}{d\\bar t}\\right)^2 +\n", + "\\left(\\frac{d\\bar y}{d\\bar t}\\right)^2}\n", + "= \\gamma \\beta^{-1}\n", + "\\sqrt{\\left(\\frac{d\\bar x}{d\\bar t}\\right)^2 +\n", + "\\left(\\frac{d\\bar y}{d\\bar t}\\right)^2},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\gamma$ is a second dimensionless parameter:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\gamma = \\frac{L_0}{2m}\\varrho C_D R^2\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final set of scaled equations is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d^2\\bar x}{d\\bar t^2} = -\\gamma\\beta^{-1}\n", + "\\sqrt{\\left(\\frac{d\\bar x}{d\\bar t}\\right)^2 +\n", + "\\left(\\frac{d\\bar y}{d\\bar t}\\right)^2}\\frac{d\\bar x}{d\\bar t}\n", + "-\\frac{\\beta}{1-\\beta}\\left(1- \\frac{\\beta}{\\bar L}\\right)\\bar x,\n", + "\\label{vib:app:pendulum_elastic_drag:x:s} \\tag{48}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\frac{d^2\\bar y}{d\\bar t^2} =\n", + "-\\gamma\\beta^{-1}\n", + "\\sqrt{\\left(\\frac{d\\bar x}{d\\bar t}\\right)^2 +\n", + "\\left(\\frac{d\\bar y}{d\\bar t}\\right)^2}\\frac{d\\bar y}{d\\bar t}\n", + "-\\frac{\\beta}{1-\\beta}\\left(1- \\frac{\\beta}{\\bar L}\\right)(\\bar y-1)\n", + "-\\beta,\n", + "\\label{vib:app:pendulum_elastic_drag:y:s} \\tag{49}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\bar L = \\sqrt{\\bar x^2 + (\\bar y-1)^2},\n", + "\\label{vib:app:pendulum_elastic_drag:L:s} \\tag{50}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\bar x(0) = (1+\\epsilon)\\sin\\Theta,\n", + "\\label{vib:app:pendulum_elastic_drag:x0:s} \\tag{51}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\frac{d\\bar x}{d\\bar t}(0) = 0,\n", + "\\label{vib:app:pendulum_elastic_drag:vx0:s} \\tag{52}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\bar y(0) = 1 - (1+\\epsilon)\\cos\\Theta,\n", + "\\label{vib:app:pendulum_elastic_drag:y0:s} \\tag{53}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\frac{d\\bar y}{d\\bar t}(0) = 0,\n", + "\\label{vib:app:pendulum_elastic_drag:vy0:s} \\tag{54}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The new `simulate_drag` function is implemented below." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "! Devito-ize odespy\n", + "\n", + "def simulate_drag(\n", + " beta=0.9, # dimensionless elasticity parameter\n", + " gamma=0, # dimensionless drag parameter\n", + " Theta=30, # initial angle in degrees\n", + " epsilon=0, # initial stretch of wire\n", + " num_periods=6, # simulate for num_periods\n", + " time_steps_per_period=60, # time step resolution\n", + " plot=True, # make plots or not\n", + " ):\n", + " from math import sin, cos, pi\n", + " Theta = Theta*np.pi/180 # convert to radians\n", + " # Initial position and velocity\n", + " # (we order the equations such that Euler-Cromer in odespy\n", + " # can be used, i.e., vx, x, vy, y)\n", + " ic = [0, # x'=vx\n", + " (1 + epsilon)*sin(Theta), # x\n", + " 0, # y'=vy\n", + " 1 - (1 + epsilon)*cos(Theta), # y\n", + " ]\n", + "\n", + " def f(u, t, beta, gamma):\n", + " vx, x, vy, y = u\n", + " L = np.sqrt(x**2 + (y-1)**2)\n", + " v = np.sqrt(vx**2 + vy**2)\n", + " h1 = beta/(1-beta)*(1 - beta/L) # help factor\n", + " h2 = gamma/beta*v\n", + " return [-h2*vx - h1*x, vx, -h2*vy - h1*(y-1) - beta, vy]\n", + "\n", + " # Non-elastic pendulum (scaled similarly in the limit beta=1)\n", + " # solution Theta*cos(t)\n", + " P = 2*pi\n", + " dt = P/time_steps_per_period\n", + " T = num_periods*P\n", + " omega = 2*pi/P\n", + "\n", + " time_points = np.linspace(\n", + " 0, T, num_periods*time_steps_per_period+1)\n", + "\n", + " solver = odespy.EulerCromer(f, f_args=(beta, gamma))\n", + " solver.set_initial_condition(ic)\n", + " u, t = solver.solve(time_points)\n", + " x = u[:,1]\n", + " y = u[:,3]\n", + " theta = np.arctan(x/(1-y))\n", + "\n", + " if plot:\n", + " plt.figure()\n", + " plt.plot(x, y, 'b-', title='Pendulum motion',\n", + " daspect=[1,1,1], daspectmode='equal',\n", + " axis=[x.min(), x.max(), 1.3*y.min(), 1])\n", + " plt.savefig('tmp_xy.png')\n", + " plt.savefig('tmp_xy.pdf')\n", + " # Plot theta in degrees\n", + " plt.figure()\n", + " plt.plot(t, theta*180/np.pi, 'b-',\n", + " title='Angular displacement in degrees')\n", + " plt.savefig('tmp_theta.png')\n", + " plt.savefig('tmp_theta.pdf')\n", + " if abs(Theta) < 10*pi/180:\n", + " # Compare theta and theta_e for small angles (<10 degrees)\n", + " theta_e = Theta*np.cos(omega*t) # non-elastic scaled sol.\n", + " plt.figure()\n", + " plt.plot(t, theta, t, theta_e,\n", + " legend=['theta elastic', 'theta non-elastic'],\n", + " title='Elastic vs non-elastic pendulum, '\\\n", + " 'beta=%g' % beta)\n", + " plt.savefig('tmp_compare.png')\n", + " plt.savefig('tmp_compare.pdf')\n", + " # Plot y vs x (the real physical motion)\n", + " return x, y, theta, t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The plot of $\\theta$ shows the damping ($\\beta = 0.999$):\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Test functions for equilibrium and vertical motion are also included. These\n", + "are as in [Exercise 6: Simulate an elastic pendulum with air resistance](#vib:exer:pendulum_elastic_drag), except that\n", + "they call `simulate_drag` instead of `simulate`.\n", + "\n", + "\n", + "Filename: `elastic_pendulum_drag`.\n", + "\n", + "\n", + "\n", + "### Remarks\n", + "\n", + "Test functions are challenging to construct for the problem with\n", + "air resistance. You can reuse the tests from\n", + "[Exercise 6: Simulate an elastic pendulum with air resistance](#vib:exer:pendulum_elastic_drag) for `simulate_drag`,\n", + "but these tests does not verify the new terms arising from air\n", + "resistance.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 7: Implement the PEFRL algorithm\n", + "
\n", + "\n", + "We consider the motion of a planet around a star (the section [Two-body gravitational problem](#vib:app:gravitation)).\n", + "The simplified case where one\n", + "mass is very much bigger than the other and one object is at rest,\n", + "results in the scaled ODE model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\ddot x + (x^2 + y^2)^{-3/2}x & = 0,\\\\ \n", + "\\ddot y + (x^2 + y^2)^{-3/2}y & = 0\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**a)**\n", + "It is easy to show that $x(t)$ and $y(t)$ go like sine and cosine\n", + "functions. Use this idea to derive the exact solution.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "We may assume $x=C_x\\cos(\\omega t)$ and $y=C_y\\sin(\\omega t)$ for\n", + "constants $C_x,$, $C_y$, and $\\omega$. Inserted in the equations, we\n", + "see that $\\omega =1$. The initial conditions determine the other\n", + "constants, which we may choose as $C_x=C_y=1$ (the object starts\n", + "at $(1,0)$ with a velocity $(0,1)$). The motion is a perfect circle,\n", + "which should last forever.\n", + "\n", + "\n", + "\n", + "**b)**\n", + "One believes that a planet may orbit a star for billions of years.\n", + "We are now interested\n", + "in how accurate methods we actually need for such calculations.\n", + "A first task is to determine what the time interval of interest is in\n", + "scaled units. Take the earth and sun as typical objects and find\n", + "the characteristic time used in the scaling of the equations\n", + "($t_c = \\sqrt{L^3/(mG)}$), where $m$ is the mass of the sun, $L$ is the\n", + "distance between the sun and the earth, and $G$ is the gravitational\n", + "constant. Find the scaled time interval corresponding to one billion years.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "According to [Wikipedia](https://en.wikipedia.org/wiki/Solar_mass),\n", + "the mass of the sun is approximately $2\\cdot 10^{30}$ kg. This\n", + "is 332946 times the mass of the earth, implying that the\n", + "dimensionless constant $\\alpha \\approx 3\\cdot 10^{-6}$. With\n", + "$G=6.674\\cdot 10^{-11}\\hbox{ Nm}^2/\\hbox{kg}^2$, and the\n", + "[sun-earth distance](https://en.wikipedia.org/wiki/Astronomical_unit)\n", + "as (approximately) 150 million km, we have $t_c \\approx 5 028 388$ s.\n", + "This is about 58 days, which is the characteristic time, chosen as the\n", + "angular frequency of the oscillations. To get the period of one orbit we therefore must multiply by $2\\pi$. This gives about 1 year (and demonstrates the\n", + "fact mentioned about the scaling: the natural time scale is consistent with\n", + "Kepler's law about the period).\n", + "\n", + "Thus, one billion years correspond to 62,715,924,070 time units (dividing\n", + "one billion years by $t_c$), which corresponds to about 2000\n", + "\"time unit years\".\n", + "\n", + "\n", + "\n", + "**c)**\n", + "Solve the equations using 4th-order Runge-Kutta and the Euler-Cromer\n", + "methods. You may benefit from applying Odespy for this purpose. With\n", + "each solver, simulate 10000 orbits and print the maximum position\n", + "error and CPU time as a function of time step. Note that the maximum\n", + "position error does not necessarily occur at the end of the\n", + "simulation. The position error achieved with each solver will depend\n", + "heavily on the size of the time step. Let the time step correspond to\n", + "200, 400, 800 and 1600 steps per orbit, respectively. Are the results\n", + "as expected? Explain briefly. When you develop your program, have in\n", + "mind that it will be extended with an implementation of the other\n", + "algorithms (as requested in d) and e) later) and experiments with this\n", + "algorithm as well.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "The first task is to implement the right-hand side function for the\n", + "system of ODEs such that we can call up Odespy solvers (or make use of\n", + "other types of ODE software, e.g., from SciPy). The $2\\times 2$ system of\n", + "second-order ODEs must be expressed as a $4\\times 4$ system of first-order\n", + "ODEs. We have three different cases of right-hand sides:\n", + "\n", + "1. Common numbering of unknowns: $x$, $v_x$, $y$, $y_x$\n", + "\n", + "2. Numbering required by Euler-Cromer: $v_x$, $x$, $v_y$, $y$\n", + "\n", + "3. Numbering required by the PEFRL method: same as Euler-Cromer\n", + "\n", + "Most Odespy solvers can handle any convention for numbering of the unknowns.\n", + "The important point is that initial conditions and new values at the end of\n", + "the time step are filled in the right positions of a one-dimensional array\n", + "containing the unknowns.\n", + "Using Odespy to solve the system by the Euler-Cromer method, however, requires\n", + "the unknowns to appear as velocity 1st degree-of-freedom, displacement\n", + "1st degree-of-freedom, velocity 2nd degree-of-freedom, displacement\n", + "2nd degree-of-freedom, and so forth. Two alternative right-hand side\n", + "functions `f(u, t)` for Odespy solvers is then" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "def f_EC(u, t):\n", + " '''\n", + " Return derivatives for the 1st order system as\n", + " required by Euler-Cromer.\n", + " '''\n", + " vx, x, vy, y = u # u: array holding vx, x, vy, y\n", + " d = -(x**2 + y**2)**(-3.0/2)\n", + " return [d*x, vx, d*y, vy ]\n", + "\n", + "def f_RK4(u, t):\n", + " '''\n", + " Return derivatives for the 1st order system as\n", + " required by ordinary solvers in Odespy.\n", + " '''\n", + " x, vx, y, vy = u # u: array holding x, vx, y, vy\n", + " d = -(x**2 + y**2)**(-3.0/2)\n", + " return [vx, d*x, vy, d*y ]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In addition, we shall later in d) implement the PEFRL method and just\n", + "give the $g$ function as input to a system of the form $dv_x = g_x$,\n", + "$dv_y = g_y$, and $g$ becomes the vector $(g_x,g_y)$:\n", + "\n", + "Some prefer to number the unknowns differently, and with the RK4 method we\n", + "are free to use any numbering, including this one:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "def g(u, v):\n", + " return np.array([-u])\n", + "def u_exact(t):\n", + " return np.array([3*np.cos(t)]).transpose()\n", + "I = u_exact(0)\n", + "V = np.array([0])\n", + "print 'V:', V, 'I:', I\n", + "\n", + "# Numerical parameters\n", + "w = 1\n", + "P = 2*np.pi/w\n", + "dt_values = [P/20, P/40, P/80, P/160, P/320]\n", + "T = 8*P\n", + "error_vs_dt = []\n", + "for n, dt in enumerate(dt_values):\n", + " u, v, t = solver_PEFRL(I, V, g, dt, T)\n", + " error = np.abs(u - u_exact(t)).max()\n", + " print 'error:', error\n", + " if n > 0:\n", + " error_vs_dt.append(error/dt**4)\n", + "for i in range(1, len(error_vs_dt)):\n", + " #print abs(error_vs_dt[i]- error_vs_dt[0])\n", + " assert abs(error_vs_dt[i]-\n", + " error_vs_dt[0]) < 0.1\n", + "\n", + "\n", + "s PEFRL(odespy.Solver):\n", + "\"\"\"Class wrapper for Odespy.\"\"\" # Not used!\n", + "quick_desctiption = \"Explicit 4th-order method for v'=-f, u=v.\"\"\"\n", + "\n", + "def advance(self):\n", + " u, f, n, t = self.u, self.f, self.n, self.t\n", + " dt = t[n+1] - t[n]\n", + " I = np.array([u[1], u[3]])\n", + " V = np.array([u[0], u[2]])\n", + " u, v, t = solver_PFFRL(I, V, f, dt, t+dt)\n", + " return np.array([v[-1], u[-1]])\n", + "\n", + "compute_orbit_and_error(\n", + "f,\n", + "solver_ID,\n", + "timesteps_per_period=20,\n", + "N_orbit_groups=1000,\n", + "orbit_group_size=10):\n", + "'''\n", + "For one particular solver:\n", + "Calculte the orbits for a multiple of grouped orbits, i.e.\n", + "number of orbits = orbit_group_size*N_orbit_groups.\n", + "Returns: time step dt, and, for each N_orbit_groups cycle,\n", + "the 2D position error and cpu time (as lists).\n", + "'''\n", + "def u_exact(t):\n", + " return np.array([np.cos(t), np.sin(t)])\n", + "\n", + "w = 1\n", + "P = 2*np.pi/w # scaled period (1 year becomes 2*pi)\n", + "dt = P/timesteps_per_period\n", + "Nt = orbit_group_size*N_orbit_groups*timesteps_per_period\n", + "T = Nt*dt\n", + "t_mesh = np.linspace(0, T, Nt+1)\n", + "E_orbit = []\n", + "\n", + "#print ' dt:', dt\n", + "T_interval = P*orbit_group_size\n", + "N = int(round(T_interval/dt))\n", + "\n", + "# set initial conditions\n", + "if solver_ID == 'EC':\n", + " A = [0,1,1,0]\n", + "elif solver_ID == 'PEFRL':\n", + " I = np.array([1, 0])\n", + " V = np.array([0, 1])\n", + "else:\n", + " A = [1,0,0,1]\n", + "\n", + "t1 = time.clock()\n", + "for i in range(N_orbit_groups):\n", + " time_points = np.linspace(i*T_interval, (i+1)*T_interval,N+1)\n", + " u_e = u_exact(time_points).transpose()\n", + " if solver_ID == 'EC':\n", + " solver = odespy.EulerCromer(f)\n", + " solver.set_initial_condition(A)\n", + " ui, ti = solver.solve(time_points)\n", + " # Find error (correct final pos: x=1, y=0)\n", + " orbit_error = np.sqrt(\n", + " (ui[:,1]-u_e[:,0])**2 + (ui[:,3]-u_e[:,1])**2).max()\n", + " elif solver_ID == 'PEFRL':\n", + " # Note: every T_inverval is here counted from time 0\n", + " ui, vi, ti = solver_PEFRL(I, V, f, dt, T_interval)\n", + " # Find error (correct final pos: x=1, y=0)\n", + " orbit_error = np.sqrt(\n", + " (ui[:,0]-u_e[:,0])**2 + (ui[:,1]-u_e[:,1])**2).max()\n", + " else:\n", + " solver = eval('odespy.' + solver_ID(f)\n", + " solver.set_initial_condition(A)\n", + " ui, ti = solver.solve(time_points)\n", + " # Find error (correct final pos: x=1, y=0)\n", + " orbit_error = np.sqrt(\n", + " (ui[:,0]-u_e[:,0])**2 + (ui[:,2]-u_e[:,1])**2).max()\n", + "\n", + " print ' Orbit no. %d, max error (per cent): %g' % \\\n", + " ((i+1)*orbit_group_size, orbit_error)\n", + "\n", + " E_orbit.append(orbit_error)\n", + "\n", + " # set init. cond. for next time interval\n", + " if solver_ID == 'EC':\n", + " A = [ui[-1,0], ui[-1,1], ui[-1,2], ui[-1,3]]\n", + " elif solver_ID == 'PEFRL':\n", + " I = [ui[-1,0], ui[-1,1]]\n", + " V = [vi[-1,0], vi[-1,1]]\n", + " else: # RK4, adaptive rules, etc.\n", + " A = [ui[-1,0], ui[-1,1], ui[-1,2], ui[-1,3]]\n", + "\n", + "t2 = time.clock()\n", + "CPU_time = (t2 - t1)/(60.0*60.0) # in hours\n", + "return dt, E_orbit, CPU_time\n", + "\n", + "orbit_error_vs_dt(\n", + "f_EC, f_RK4, g, solvers,\n", + "N_orbit_groups=1000,\n", + "orbit_group_size=10):\n", + "'''\n", + "With each solver in list \"solvers\": Simulate\n", + "orbit_group_size*N_orbit_groups orbits with different dt values.\n", + "Collect final 2D position error for each dt and plot all errors.\n", + "'''\n", + "\n", + "for solver_ID in solvers:\n", + " print 'Computing orbit with solver:', solver_ID\n", + " E_values = []\n", + " dt_values = []\n", + " cpu_values = []\n", + " for timesteps_per_period in 200, 400, 800, 1600:\n", + " print '.......time steps per period: ', \\\n", + " timesteps_per_period\n", + " if solver_ID == 'EC':\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " f_EC,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + " elif solver_ID == 'PEFRL':\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " g,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + " else:\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " f_RK4,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + "\n", + " dt_values.append(dt)\n", + " E_values.append(np.array(E).max())\n", + " cpu_values.append(cpu_time)\n", + " print 'dt_values:', dt_values\n", + " print 'E max with dt...:', E_values\n", + " print 'cpu_values with dt...:', cpu_values\n", + "\n", + "\n", + "orbit_error_vs_years(\n", + "f_EC, f_RK4, g, solvers,\n", + "N_orbit_groups=1000,\n", + "orbit_group_size=100,\n", + "N_time_steps = 1000):\n", + "'''\n", + "For each solver in the list solvers:\n", + "simulate orbit_group_size*N_orbit_groups orbits with a fixed\n", + "dt corresponding to N_time_steps steps per year.\n", + "Collect max 2D position errors for each N_time_steps'th run,\n", + "plot these errors and CPU. Finally, make an empirical\n", + "formula for error and CPU as functions of a number\n", + "of cycles.\n", + "'''\n", + "timesteps_per_period = N_time_steps # fixed for all runs\n", + "\n", + "for solver_ID in solvers:\n", + " print 'Computing orbit with solver:', solver_ID\n", + " if solver_ID == 'EC':\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " f_EC,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + " elif solver_ID == 'PEFRL':\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " g,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + " else:\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " f_RK4,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + "\n", + " # E and cpu_time are for every N_orbit_groups cycle\n", + " print 'E_values (fixed dt, changing no of years):', E\n", + " print 'CPU (hours):', cpu_time\n", + " years = np.arange(\n", + " 0,\n", + " N_orbit_groups*orbit_group_size,\n", + " orbit_group_size)\n", + "\n", + " # Now make empirical formula\n", + "\n", + " def E_of_years(x, *coeff):\n", + " return sum(coeff[i]*x**float((len(coeff)-1)-i) \\\n", + " for i in range(len(coeff)))\n", + " E = np.array(E)\n", + " degree = 4\n", + " # note index: polyfit finds p[0]*x**4 + p[1]*x**3 ...etc.\n", + " p = np.polyfit(years, E, degree)\n", + " p_str = map(str, p)\n", + " formula = ' + '.join([p_str[i] + '*x**' + \\\n", + " str(degree-i) for i in range(degree+1)])\n", + "\n", + " print 'Empirical formula (error with years): ', formula\n", + " plt.figure()\n", + " plt.plot(years,\n", + " E, 'b-',\n", + " years,\n", + " E_of_years(years, *p), 'r--')\n", + " plt.xlabel('Number of years')\n", + " plt.ylabel('Orbit error')\n", + " plt.title(solver_ID)\n", + " filename = solver_ID + 'tmp_E_with_years'\n", + " plt.savefig(filename + '.png')\n", + " plt.savefig(filename + '.pdf')\n", + " plt.show()\n", + "\n", + " print 'Predicted CPU time in hours (1 billion years):', \\\n", + " cpu_time*10000\n", + " print 'Predicted max error (1 billion years):', \\\n", + " E_of_years(1E9, *p)\n", + "\n", + "compute_orbit_error_and_CPU():\n", + "'''\n", + "Orbit error and associated CPU times are computed with\n", + "solvers: RK4, Euler-Cromer, PEFRL.'''\n", + "\n", + "def f_EC(u, t):\n", + " '''\n", + " Return derivatives for the 1st order system as\n", + " required by Euler-Cromer.\n", + " '''\n", + " vx, x, vy, y = u # u: array holding vx, x, vy, y\n", + " d = -(x**2 + y**2)**(-3.0/2)\n", + " return [d*x, vx, d*y, vy ]\n", + "\n", + "def f_RK4(u, t):\n", + " '''\n", + " Return derivatives for the 1st order system as\n", + " required by ordinary solvers in Odespy.\n", + " '''\n", + " x, vx, y, vy = u # u: array holding x, vx, y, vy\n", + " d = -(x**2 + y**2)**(-3.0/2)\n", + " return [vx, d*x, vy, d*y ]\n", + "\n", + "def g(u, v):\n", + " '''\n", + " Return derivatives for the 1st order system as\n", + " required by PEFRL.\n", + " '''\n", + " d = -(u[0]**2 + u[1]**2)**(-3.0/2)\n", + " return np.array([d*u[0], d*u[1]])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The standard way of solving the ODE by Odespy is then" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "def u_exact(t):\n", + " \"\"\"Return exact solution at time t.\"\"\"\n", + " return np.array([np.cos(t), np.sin(t)])\n", + "\n", + "u_e = u_exact(time_points).transpose()\n", + "\n", + "solver = odespy.RK4(f_RK4)\n", + "solver.set_initial_condition(A)\n", + "ui, ti = solver.solve(time_points)\n", + "\n", + "# Find error (correct final pos: x=1, y=0)\n", + "orbit_error = np.sqrt(\n", + " (ui[:,0]-u_e[:,0])**2 + (ui[:,2]-u_e[:,1])**2).max()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We develop functions for computing errors and plotting results where we\n", + "can compare different methods. These functions are shown in the solution to\n", + "item d).\n", + "\n", + "Running the code, the time step sizes become" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " dt_values: [0.031415926535897934, 0.015707963267948967,\n", + " 0.007853981633974483, 0.003926990816987242]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Corresponding maximum errors (per cent) and CPU values (hours) are for the 4th-order Runge-Kutta given in the table below.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Quantity $\\Delta t_1$ $\\Delta t_2$ $\\Delta t_3$ $\\Delta t_4$
$\\Delta t$ 0.03 0.02 0.008 0.004
Error 1.9039 0.0787 0.0025 7.7e-05
CPU (h) 0.03 0.06 0.12 0.23
\n", + "For Euler-Cromer we these results:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Quantity $\\Delta t_1$ $\\Delta t_2$ $\\Delta t_3$ $\\Delta t_4$
$\\Delta t$ 0.03 0.02 0.008 0.004
Error 2.0162 2.0078 1.9634 0.6730
CPU (h) 0.01 0.02 0.05 0.09
\n", + "\n", + "These results are as expected. The Runge-Kutta implementation is much more accurate than Euler-Cromer, but since it requires more computations, more CPU time is needed. For both methods, accuracy and CPU time both increase as\n", + "the step size is reduced, but the increase is much more pronounced for\n", + "the Euler-Cromer method.\n", + "\n", + "\n", + "\n", + "**d)**\n", + "Implement a solver based on the PEFRL method from\n", + "the section [vib:ode2:PEFRL](#vib:ode2:PEFRL). Verify its 4th-order convergence\n", + "using an equation $u'' + u = 0$.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "Here is a solver function:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import time\n", + "\n", + "def solver_PEFRL(I, V, g, dt, T):\n", + " \"\"\"\n", + " Solve v' = - g(u,v), u'=v for t in (0,T], u(0)=I and v(0)=V,\n", + " by the PEFRL method.\n", + " \"\"\"\n", + " dt = float(dt)\n", + " Nt = int(round(T/dt))\n", + " u = np.zeros((Nt+1, len(I)))\n", + " v = np.zeros((Nt+1, len(I)))\n", + " t = np.linspace(0, Nt*dt, Nt+1)\n", + "\n", + " # these values are from eq (20), ref to paper below\n", + " xi = 0.1786178958448091\n", + " lambda_ = -0.2123418310626054\n", + " chi = -0.06626458266981849\n", + "\n", + " v[0] = V\n", + " u[0] = I\n", + " # Compare with eq 22 in http://arxiv.org/pdf/cond-mat/0110585.pdf\n", + " for n in range(0, Nt):\n", + " u_ = u[n] + xi*dt*v[n]\n", + " v_ = v[n] + 0.5*(1-2*lambda_)*dt*g(u_, v[n])\n", + " u_ = u_ + chi*dt*v_\n", + " v_ = v_ + lambda_*dt*g(u_, v_)\n", + " u_ = u_ + (1-2*(chi+xi))*dt*v_\n", + " v_ = v_ + lambda_*dt*g(u_, v_)\n", + " u_ = u_ + chi*dt*v_\n", + " v[n+1] = v_ + 0.5*(1-2*lambda_)*dt*g(u_, v_)\n", + " u[n+1] = u_ + xi*dt*v[n+1]\n", + " #print 'v[%d]=%g, u[%d]=%g' % (n+1,v[n+1],n+1,u[n+1])\n", + " return u, v, t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A proper test function for verification reads" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "def test_solver_PEFRL():\n", + " \"\"\"Check 4th order convergence rate, using u'' + u = 0,\n", + " I = 3.0, V = 0, which has the exact solution u_e = 3*cos(t)\"\"\"\n", + " def g(u, v):\n", + " return np.array([-u])\n", + " def u_exact(t):\n", + " return np.array([3*np.cos(t)]).transpose()\n", + " I = u_exact(0)\n", + " V = np.array([0])\n", + " print 'V:', V, 'I:', I\n", + "\n", + " # Numerical parameters\n", + " w = 1\n", + " P = 2*np.pi/w\n", + " dt_values = [P/20, P/40, P/80, P/160, P/320]\n", + " T = 8*P\n", + " error_vs_dt = []\n", + " for n, dt in enumerate(dt_values):\n", + " u, v, t = solver_PEFRL(I, V, g, dt, T)\n", + " error = np.abs(u - u_exact(t)).max()\n", + " print 'error:', error\n", + " if n > 0:\n", + " error_vs_dt.append(error/dt**4)\n", + " for i in range(1, len(error_vs_dt)):\n", + " #print abs(error_vs_dt[i]- error_vs_dt[0])\n", + " assert abs(error_vs_dt[i]-\n", + " error_vs_dt[0]) < 0.1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "**e)**\n", + "The simulations done previously with the 4th-order Runge-Kutta and\n", + "Euler-Cromer are now to be repeated with the PEFRL solver, so the\n", + "code must be extended accordingly. Then run the simulations and comment\n", + "on the performance of PEFRL compared to the other two.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "With the PEFRL algorithm, we get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " E max with dt...: [0.0010452575786173163, 6.5310955829464402e-05,\n", + " 4.0475768394248492e-06, 2.9391302503251016e-07]\n", + " cpu_values with dt...: [0.01873611111111106, 0.037422222222222294,\n", + " 0.07511666666666655, 0.14985]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Qantity $\\Delta t_1$ $\\Delta t_2$ $\\Delta t_3$ $\\Delta t_4$
$\\Delta t$ 0.03 0.02 0.008 0.004
Error 1.04E-3 6.53E-05 4.05E-6 2.94E-7
CPU (h) 0.02 0.04 0.08 0.15
\n", + "\n", + "The accuracy is now dramatically improved compared to 4th-order Runge-Kutta (and Euler-Cromer).\n", + "With 1600 steps per orbit, the PEFRL maximum error is just below $3.0e-07$ per cent, while\n", + "the corresponding error with Runge-Kutta was about $7.7e-05$ per cent! This is striking,\n", + "considering the fact that the 4th-order Runge-Kutta and the PEFRL schemes are both 4th-order accurate.\n", + "\n", + "\n", + "\n", + "**f)**\n", + "Use the PEFRL solver to simulate 100000 orbits with a fixed time step\n", + "corresponding to 1600 steps per period. Record the maximum error\n", + "within each subsequent group of 1000 orbits. Plot these errors and fit\n", + "(least squares) a mathematical function to the data. Print also the\n", + "total CPU time spent for all 100000 orbits.\n", + "\n", + "Now, predict the error and required CPU time for a simulation of 1\n", + "billion years (orbits). Is it feasible on today's computers to\n", + "simulate the planetary motion for one billion years?\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "The complete code (which also produces the printouts given previously) reads:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "import scitools.std as plt\n", + "import sys\n", + "import odespy\n", + "import numpy as np\n", + "import time\n", + "\n", + "def solver_PEFRL(I, V, g, dt, T):\n", + " \"\"\"\n", + " Solve v' = - g(u,v), u'=v for t in (0,T], u(0)=I and v(0)=V,\n", + " by the PEFRL method.\n", + " \"\"\"\n", + " dt = float(dt)\n", + " Nt = int(round(T/dt))\n", + " u = np.zeros((Nt+1, len(I)))\n", + " v = np.zeros((Nt+1, len(I)))\n", + " t = np.linspace(0, Nt*dt, Nt+1)\n", + "\n", + " # these values are from eq (20), ref to paper below\n", + " xi = 0.1786178958448091\n", + " lambda_ = -0.2123418310626054\n", + " chi = -0.06626458266981849\n", + "\n", + " v[0] = V\n", + " u[0] = I\n", + " # Compare with eq 22 in http://arxiv.org/pdf/cond-mat/0110585.pdf\n", + " for n in range(0, Nt):\n", + " u_ = u[n] + xi*dt*v[n]\n", + " v_ = v[n] + 0.5*(1-2*lambda_)*dt*g(u_, v[n])\n", + " u_ = u_ + chi*dt*v_\n", + " v_ = v_ + lambda_*dt*g(u_, v_)\n", + " u_ = u_ + (1-2*(chi+xi))*dt*v_\n", + " v_ = v_ + lambda_*dt*g(u_, v_)\n", + " u_ = u_ + chi*dt*v_\n", + " v[n+1] = v_ + 0.5*(1-2*lambda_)*dt*g(u_, v_)\n", + " u[n+1] = u_ + xi*dt*v[n+1]\n", + " #print 'v[%d]=%g, u[%d]=%g' % (n+1,v[n+1],n+1,u[n+1])\n", + " return u, v, t\n", + "\n", + "def test_solver_PEFRL():\n", + " \"\"\"Check 4th order convergence rate, using u'' + u = 0,\n", + " I = 3.0, V = 0, which has the exact solution u_e = 3*cos(t)\"\"\"\n", + " def g(u, v):\n", + " return np.array([-u])\n", + " def u_exact(t):\n", + " return np.array([3*np.cos(t)]).transpose()\n", + " I = u_exact(0)\n", + " V = np.array([0])\n", + " print 'V:', V, 'I:', I\n", + "\n", + " # Numerical parameters\n", + " w = 1\n", + " P = 2*np.pi/w\n", + " dt_values = [P/20, P/40, P/80, P/160, P/320]\n", + " T = 8*P\n", + " error_vs_dt = []\n", + " for n, dt in enumerate(dt_values):\n", + " u, v, t = solver_PEFRL(I, V, g, dt, T)\n", + " error = np.abs(u - u_exact(t)).max()\n", + " print 'error:', error\n", + " if n > 0:\n", + " error_vs_dt.append(error/dt**4)\n", + " for i in range(1, len(error_vs_dt)):\n", + " #print abs(error_vs_dt[i]- error_vs_dt[0])\n", + " assert abs(error_vs_dt[i]-\n", + " error_vs_dt[0]) < 0.1\n", + "\n", + "\n", + "class PEFRL(odespy.Solver):\n", + " \"\"\"Class wrapper for Odespy.\"\"\" # Not used!\n", + " quick_desctiption = \"Explicit 4th-order method for v'=-f, u=v.\"\"\"\n", + "\n", + " def advance(self):\n", + " u, f, n, t = self.u, self.f, self.n, self.t\n", + " dt = t[n+1] - t[n]\n", + " I = np.array([u[1], u[3]])\n", + " V = np.array([u[0], u[2]])\n", + " u, v, t = solver_PFFRL(I, V, f, dt, t+dt)\n", + " return np.array([v[-1], u[-1]])\n", + "\n", + "def compute_orbit_and_error(\n", + " f,\n", + " solver_ID,\n", + " timesteps_per_period=20,\n", + " N_orbit_groups=1000,\n", + " orbit_group_size=10):\n", + " '''\n", + " For one particular solver:\n", + " Calculte the orbits for a multiple of grouped orbits, i.e.\n", + " number of orbits = orbit_group_size*N_orbit_groups.\n", + " Returns: time step dt, and, for each N_orbit_groups cycle,\n", + " the 2D position error and cpu time (as lists).\n", + " '''\n", + " def u_exact(t):\n", + " return np.array([np.cos(t), np.sin(t)])\n", + "\n", + " w = 1\n", + " P = 2*np.pi/w # scaled period (1 year becomes 2*pi)\n", + " dt = P/timesteps_per_period\n", + " Nt = orbit_group_size*N_orbit_groups*timesteps_per_period\n", + " T = Nt*dt\n", + " t_mesh = np.linspace(0, T, Nt+1)\n", + " E_orbit = []\n", + "\n", + " #print ' dt:', dt\n", + " T_interval = P*orbit_group_size\n", + " N = int(round(T_interval/dt))\n", + "\n", + " # set initial conditions\n", + " if solver_ID == 'EC':\n", + " A = [0,1,1,0]\n", + " elif solver_ID == 'PEFRL':\n", + " I = np.array([1, 0])\n", + " V = np.array([0, 1])\n", + " else:\n", + " A = [1,0,0,1]\n", + "\n", + " t1 = time.clock()\n", + " for i in range(N_orbit_groups):\n", + " time_points = np.linspace(i*T_interval, (i+1)*T_interval,N+1)\n", + " u_e = u_exact(time_points).transpose()\n", + " if solver_ID == 'EC':\n", + " solver = odespy.EulerCromer(f)\n", + " solver.set_initial_condition(A)\n", + " ui, ti = solver.solve(time_points)\n", + " # Find error (correct final pos: x=1, y=0)\n", + " orbit_error = np.sqrt(\n", + " (ui[:,1]-u_e[:,0])**2 + (ui[:,3]-u_e[:,1])**2).max()\n", + " elif solver_ID == 'PEFRL':\n", + " # Note: every T_inverval is here counted from time 0\n", + " ui, vi, ti = solver_PEFRL(I, V, f, dt, T_interval)\n", + " # Find error (correct final pos: x=1, y=0)\n", + " orbit_error = np.sqrt(\n", + " (ui[:,0]-u_e[:,0])**2 + (ui[:,1]-u_e[:,1])**2).max()\n", + " else:\n", + " solver = eval('odespy.' + solver_ID(f)\n", + " solver.set_initial_condition(A)\n", + " ui, ti = solver.solve(time_points)\n", + " # Find error (correct final pos: x=1, y=0)\n", + " orbit_error = np.sqrt(\n", + " (ui[:,0]-u_e[:,0])**2 + (ui[:,2]-u_e[:,1])**2).max()\n", + "\n", + " print ' Orbit no. %d, max error (per cent): %g' % \\\n", + " ((i+1)*orbit_group_size, orbit_error)\n", + "\n", + " E_orbit.append(orbit_error)\n", + "\n", + " # set init. cond. for next time interval\n", + " if solver_ID == 'EC':\n", + " A = [ui[-1,0], ui[-1,1], ui[-1,2], ui[-1,3]]\n", + " elif solver_ID == 'PEFRL':\n", + " I = [ui[-1,0], ui[-1,1]]\n", + " V = [vi[-1,0], vi[-1,1]]\n", + " else: # RK4, adaptive rules, etc.\n", + " A = [ui[-1,0], ui[-1,1], ui[-1,2], ui[-1,3]]\n", + "\n", + " t2 = time.clock()\n", + " CPU_time = (t2 - t1)/(60.0*60.0) # in hours\n", + " return dt, E_orbit, CPU_time\n", + "\n", + "def orbit_error_vs_dt(\n", + " f_EC, f_RK4, g, solvers,\n", + " N_orbit_groups=1000,\n", + " orbit_group_size=10):\n", + " '''\n", + " With each solver in list \"solvers\": Simulate\n", + " orbit_group_size*N_orbit_groups orbits with different dt values.\n", + " Collect final 2D position error for each dt and plot all errors.\n", + " '''\n", + "\n", + " for solver_ID in solvers:\n", + " print 'Computing orbit with solver:', solver_ID\n", + " E_values = []\n", + " dt_values = []\n", + " cpu_values = []\n", + " for timesteps_per_period in 200, 400, 800, 1600:\n", + " print '.......time steps per period: ', \\\n", + " timesteps_per_period\n", + " if solver_ID == 'EC':\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " f_EC,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + " elif solver_ID == 'PEFRL':\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " g,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + " else:\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " f_RK4,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + "\n", + " dt_values.append(dt)\n", + " E_values.append(np.array(E).max())\n", + " cpu_values.append(cpu_time)\n", + " print 'dt_values:', dt_values\n", + " print 'E max with dt...:', E_values\n", + " print 'cpu_values with dt...:', cpu_values\n", + "\n", + "\n", + "def orbit_error_vs_years(\n", + " f_EC, f_RK4, g, solvers,\n", + " N_orbit_groups=1000,\n", + " orbit_group_size=100,\n", + " N_time_steps = 1000):\n", + " '''\n", + " For each solver in the list solvers:\n", + " simulate orbit_group_size*N_orbit_groups orbits with a fixed\n", + " dt corresponding to N_time_steps steps per year.\n", + " Collect max 2D position errors for each N_time_steps'th run,\n", + " plot these errors and CPU. Finally, make an empirical\n", + " formula for error and CPU as functions of a number\n", + " of cycles.\n", + " '''\n", + " timesteps_per_period = N_time_steps # fixed for all runs\n", + "\n", + " for solver_ID in solvers:\n", + " print 'Computing orbit with solver:', solver_ID\n", + " if solver_ID == 'EC':\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " f_EC,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + " elif solver_ID == 'PEFRL':\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " g,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + " else:\n", + " dt, E, cpu_time = compute_orbit_and_error(\n", + " f_RK4,\n", + " solver_ID,\n", + " timesteps_per_period,\n", + " N_orbit_groups,\n", + " orbit_group_size)\n", + "\n", + " # E and cpu_time are for every N_orbit_groups cycle\n", + " print 'E_values (fixed dt, changing no of years):', E\n", + " print 'CPU (hours):', cpu_time\n", + " years = np.arange(\n", + " 0,\n", + " N_orbit_groups*orbit_group_size,\n", + " orbit_group_size)\n", + "\n", + " # Now make empirical formula\n", + "\n", + " def E_of_years(x, *coeff):\n", + " return sum(coeff[i]*x**float((len(coeff)-1)-i) \\\n", + " for i in range(len(coeff)))\n", + " E = np.array(E)\n", + " degree = 4\n", + " # note index: polyfit finds p[0]*x**4 + p[1]*x**3 ...etc.\n", + " p = np.polyfit(years, E, degree)\n", + " p_str = map(str, p)\n", + " formula = ' + '.join([p_str[i] + '*x**' + \\\n", + " str(degree-i) for i in range(degree+1)])\n", + "\n", + " print 'Empirical formula (error with years): ', formula\n", + " plt.figure()\n", + " plt.plot(years,\n", + " E, 'b-',\n", + " years,\n", + " E_of_years(years, *p), 'r--')\n", + " plt.xlabel('Number of years')\n", + " plt.ylabel('Orbit error')\n", + " plt.title(solver_ID)\n", + " filename = solver_ID + 'tmp_E_with_years'\n", + " plt.savefig(filename + '.png')\n", + " plt.savefig(filename + '.pdf')\n", + " plt.show()\n", + "\n", + " print 'Predicted CPU time in hours (1 billion years):', \\\n", + " cpu_time*10000\n", + " print 'Predicted max error (1 billion years):', \\\n", + " E_of_years(1E9, *p)\n", + "\n", + "def compute_orbit_error_and_CPU():\n", + " '''\n", + " Orbit error and associated CPU times are computed with\n", + " solvers: RK4, Euler-Cromer, PEFRL.'''\n", + "\n", + " def f_EC(u, t):\n", + " '''\n", + " Return derivatives for the 1st order system as\n", + " required by Euler-Cromer.\n", + " '''\n", + " vx, x, vy, y = u # u: array holding vx, x, vy, y\n", + " d = -(x**2 + y**2)**(-3.0/2)\n", + " return [d*x, vx, d*y, vy ]\n", + "\n", + " def f_RK4(u, t):\n", + " '''\n", + " Return derivatives for the 1st order system as\n", + " required by ordinary solvers in Odespy.\n", + " '''\n", + " x, vx, y, vy = u # u: array holding x, vx, y, vy\n", + " d = -(x**2 + y**2)**(-3.0/2)\n", + " return [vx, d*x, vy, d*y ]\n", + "\n", + " def g(u, v):\n", + " '''\n", + " Return derivatives for the 1st order system as\n", + " required by PEFRL.\n", + " '''\n", + " d = -(u[0]**2 + u[1]**2)**(-3.0/2)\n", + " return np.array([d*u[0], d*u[1]])\n", + "\n", + " print 'Find orbit error as fu. of dt...(10000 orbits)'\n", + " solvers = ['RK4', 'EC', 'PEFRL']\n", + " N_orbit_groups=1\n", + " orbit_group_size=10000\n", + " orbit_error_vs_dt(\n", + " f_EC, f_RK4, g, solvers,\n", + " N_orbit_groups=N_orbit_groups,\n", + " orbit_group_size=orbit_group_size)\n", + "\n", + " print 'Compute orbit error as fu. of no of years (fixed dt)...'\n", + " solvers = ['PEFRL']\n", + " N_orbit_groups=100\n", + " orbit_group_size=1000\n", + " N_time_steps = 1600 # no of steps per orbit cycle\n", + " orbit_error_vs_years(\n", + " f_EC, f_RK4, g, solvers,\n", + " N_orbit_groups=N_orbit_groups,\n", + " orbit_group_size=orbit_group_size,\n", + " N_time_steps = N_time_steps)\n", + "\n", + "if __name__ == '__main__':\n", + " test_solver_PEFRL()\n", + " compute_orbit_error_and_CPU()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The maximum error develops with number of orbits as seen in the following plot,\n", + "where the red dashed curve is from the mathematical model:\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "We note that the maximum error achieved during the first 100000 orbits is only\n", + "about $1.2e-06$ per cent. Not bad!\n", + "\n", + "For the printed CPU and empirical formula, we get:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " CPU (hours): 1.51591388889\n", + " Empirical formula (E with years):\n", + " 3.15992325978e-26*x**4 + -6.1772567063e-21*x**3 +\n", + " 1.87983349496e-16*x**2 + 2.32924158693e-11*x**1 +\n", + " 5.46989368301e-08*x**0\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since the CPU develops linearly, the CPU time for 100000 orbits can just be multiplied by 10000 to get the\n", + "estimated CPU time required for 1 billion years. This gives 15159 CPU hours (631 days), which is also printed.\n", + "\n", + "With the derived empirical formula, the estimated orbit error after 1 billion years becomes 31593055529 per cent.\n", + "\n", + "[sl 2: Can we really use the plot and the function to predict max E during 1 billion years? Seems hard.]\n", + "\n", + "\n", + "\n", + "Filename: `vib_PEFRL`.\n", + "\n", + "\n", + "\n", + "### Remarks\n", + "\n", + "This exercise investigates whether it is feasible to predict\n", + "planetary motion for the life time of a solar system.\n", + "[hpl 3: Is it???]\n", + "\n", + "\n", + "" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/fdm-jupyter-book/notebooks/01_vib/vib_gen.ipynb b/fdm-jupyter-book/notebooks/01_vib/vib_gen.ipynb new file mode 100644 index 00000000..539cefb9 --- /dev/null +++ b/fdm-jupyter-book/notebooks/01_vib/vib_gen.ipynb @@ -0,0 +1,2250 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We shall now generalize the simple model problem from Section 1.1 to include a possibly nonlinear damping term $f(u')$, a possibly nonlinear spring (or restoring) force $s(u)$, and some external excitation $F(t)$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "mu^{\\prime\\prime} + f(u^{\\prime}) + s(u) = F(t),\\quad u(0)=I,\\ u^{\\prime}(0)=V,\\ t\\in (0,T]\n", + "\\thinspace .\n", + "\\label{vib:ode2} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have also included a possibly nonzero initial value for $u^{\\prime}(0)$.\n", + "The parameters $m$, $f(u^{\\prime})$, $s(u)$, $F(t)$, $I$, $V$, and $T$ are\n", + "input data.\n", + "\n", + "There are two main types of damping (friction) forces: linear $f(u^{\\prime})=bu$, or\n", + "quadratic $f(u^{\\prime})=bu^{\\prime}|u^{\\prime}|$. Spring systems often feature linear\n", + "damping, while air resistance usually gives rise to quadratic damping.\n", + "Spring forces are often linear: $s(u)=cu$, but nonlinear versions\n", + "are also common, the most famous is the gravity force on a pendulum\n", + "that acts as a spring with $s(u)\\sim \\sin(u)$.\n", + "\n", + "\n", + "## A centered scheme for linear damping\n", + "
\n", + "\n", + "Sampling ([1](#vib:ode2)) at a mesh point $t_n$, replacing\n", + "$u^{\\prime\\prime}(t_n)$ by $[D_tD_tu]^n$, and $u^{\\prime}(t_n)$ by $[D_{2t}u]^n$ results\n", + "in the discretization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[mD_tD_t u + f(D_{2t}u) + s(u) = F]^n,\n", + "\\label{_auto1} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which written out means" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "m\\frac{u^{n+1}-2u^n + u^{n-1}}{\\Delta t^2}\n", + "+ f(\\frac{u^{n+1}-u^{n-1}}{2\\Delta t}) + s(u^n) = F^n,\n", + "\\label{vib:ode2:step3b} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $F^n$ as usual means $F(t)$ evaluated at $t=t_n$.\n", + "Solving ([3](#vib:ode2:step3b)) with respect to the unknown\n", + "$u^{n+1}$ gives a problem: the $u^{n+1}$ inside the $f$ function\n", + "makes the equation *nonlinear* unless $f(u^{\\prime})$ is a linear function,\n", + "$f(u^{\\prime})=bu^{\\prime}$. For now we shall assume that $f$ is linear in $u^{\\prime}$.\n", + "Then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "m\\frac{u^{n+1}-2u^n + u^{n-1}}{\\Delta t^2}\n", + "+ b\\frac{u^{n+1}-u^{n-1}}{2\\Delta t} + s(u^n) = F^n,\n", + "\\label{vib:ode2:step3b2} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives an explicit formula for $u$ at each\n", + "new time level:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^{n+1} = (2mu^n + (\\frac{b}{2}\\Delta t - m)u^{n-1} +\n", + "\\Delta t^2(F^n - s(u^n)))(m + \\frac{b}{2}\\Delta t)^{-1}\n", + "\\label{vib:ode2:step4} \\tag{5}\n", + "\\thinspace .\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the first time step we need to discretize $u^{\\prime}(0)=V$\n", + "as $[D_{2t}u = V]^0$ and combine\n", + "with ([5](#vib:ode2:step4)) for $n=0$. The discretized initial condition\n", + "leads to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^{-1} = u^{1} - 2\\Delta t V,\n", + "\\label{vib:ode2:ic:du} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which inserted in ([5](#vib:ode2:step4)) for $n=0$ gives an equation\n", + "that can be solved for\n", + "$u^1$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^1 = u^0 + \\Delta t\\, V\n", + "+ \\frac{\\Delta t^2}{2m}(-bV - s(u^0) + F^0)\n", + "\\thinspace .\n", + "\\label{vib:ode2:step4b} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A centered scheme for quadratic damping\n", + "
\n", + "\n", + "When $f(u^{\\prime})=bu^{\\prime}|u^{\\prime}|$, we get a quadratic equation for $u^{n+1}$\n", + "in ([3](#vib:ode2:step3b)). This equation can be straightforwardly\n", + "solved by the well-known formula for the roots of a quadratic equation.\n", + "However, we can also avoid the nonlinearity by introducing\n", + "an approximation with an error of order no higher than what we\n", + "already have from replacing derivatives with finite differences.\n", + "\n", + "\n", + "We start with ([1](#vib:ode2)) and only replace\n", + "$u^{\\prime\\prime}$ by $D_tD_tu$, resulting in" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[mD_tD_t u + bu^{\\prime}|u^{\\prime}| + s(u) = F]^n\\thinspace .\n", + "\\label{vib:ode2:quad:idea1} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, $u^{\\prime}|u^{\\prime}|$ is to be computed at time $t_n$. The idea\n", + "is now to introduce\n", + "a *geometric mean*, defined by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "(w^2)^n \\approx w^{n-\\frac{1}{2}}w^{n+\\frac{1}{2}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for some quantity $w$ depending on time. The error in the geometric mean\n", + "approximation is $\\mathcal{O}({\\Delta t^2})$, the same as in the\n", + "approximation $u^{\\prime\\prime}\\approx D_tD_tu$. With $w=u^{\\prime}$ it follows\n", + "that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "[u^{\\prime}|u^{\\prime}|]^n \\approx u^{\\prime}(t_{n+\\frac{1}{2}})|u^{\\prime}(t_{n-\\frac{1}{2}})|\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step is to approximate\n", + "$u^{\\prime}$ at $t_{n\\pm 1/2}$, and fortunately a centered difference\n", + "fits perfectly into the formulas since it involves $u$ values at\n", + "the mesh points only. With the approximations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^{\\prime}(t_{n+1/2})\\approx [D_t u]^{n+\\frac{1}{2}},\\quad u^{\\prime}(t_{n-1/2})\\approx [D_t u]^{n-\\frac{1}{2}},\n", + "\\label{vib:ode2:quad:idea2} \\tag{9}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[u^{\\prime}|u^{\\prime}|]^n\n", + "\\approx [D_tu]^{n+\\frac{1}{2}}|[D_tu]^{n-\\frac{1}{2}}| = \\frac{u^{n+1}-u^n}{\\Delta t}\n", + "\\frac{|u^n-u^{n-1}|}{\\Delta t}\n", + "\\thinspace .\n", + "\\label{_auto2} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The counterpart to ([3](#vib:ode2:step3b)) is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "m\\frac{u^{n+1}-2u^n + u^{n-1}}{\\Delta t^2}\n", + "+ b\\frac{u^{n+1}-u^n}{\\Delta t}\\frac{|u^n-u^{n-1}|}{\\Delta t}\n", + "+ s(u^n) = F^n,\n", + "\\label{vib:ode2:step3b:quad} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is linear in the unknown $u^{n+1}$. Therefore, we can easily solve\n", + "([11](#vib:ode2:step3b:quad))\n", + "with respect to $u^{n+1}$ and achieve the explicit updating formula" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^{n+1} = \\left( m + b|u^n-u^{n-1}|\\right)^{-1}\\times \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + " \\qquad \\left(2m u^n - mu^{n-1} + bu^n|u^n-u^{n-1}| + \\Delta t^2 (F^n - s(u^n))\n", + "\\right)\n", + "\\thinspace .\n", + "\\label{vib:ode2:step4:quad} \\tag{12}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "In the derivation of a special equation for the first\n", + "time step we run into some trouble: inserting ([6](#vib:ode2:ic:du))\n", + "in ([12](#vib:ode2:step4:quad)) for $n=0$ results in a complicated nonlinear\n", + "equation for $u^1$. By thinking differently about the problem we can\n", + "easily get away with the nonlinearity again. We have for $n=0$ that\n", + "$b[u^{\\prime}|u^{\\prime}|]^0 = bV|V|$. Using this value in ([8](#vib:ode2:quad:idea1))\n", + "gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[mD_tD_t u + bV|V| + s(u) = F]^0\n", + "\\thinspace .\n", + "\\label{_auto3} \\tag{13}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Writing this equation out and using ([6](#vib:ode2:ic:du)) results in the\n", + "special equation for the first time step:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^1 = u^0 + \\Delta t V + \\frac{\\Delta t^2}{2m}\\left(-bV|V| - s(u^0) + F^0\\right)\n", + "\\thinspace .\n", + "\\label{vib:ode2:step4b:quad} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A forward-backward discretization of the quadratic damping term\n", + "\n", + "The previous section first proposed to discretize the quadratic\n", + "damping term $|u^{\\prime}|u^{\\prime}$ using centered differences:\n", + "$[|D_{2t}|D_{2t}u]^n$. As this gives rise to a nonlinearity in\n", + "$u^{n+1}$, it was instead proposed to use a geometric mean combined\n", + "with centered differences. But there are other alternatives. To get\n", + "rid of the nonlinearity in $[|D_{2t}|D_{2t}u]^n$, one can think\n", + "differently: apply a backward difference to $|u^{\\prime}|$, such that\n", + "the term involves known values, and apply a forward difference to\n", + "$u^{\\prime}$ to make the term linear in the unknown $u^{n+1}$. With\n", + "mathematics," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[\\beta |u^{\\prime}|u^{\\prime}]^n \\approx \\beta |[D_t^-u]^n|[D_t^+ u]^n =\n", + "\\beta\\left\\vert\\frac{u^n-u^{n-1}}{\\Delta t}\\right\\vert\n", + "\\frac{u^{n+1}-u^n}{\\Delta t}\\thinspace .\n", + "\\label{vib:ode2:nonlin:fbdiff} \\tag{15}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The forward and backward differences both have an error proportional\n", + "to $\\Delta t$ so one may think the discretization above leads to\n", + "a first-order scheme.\n", + "However, by looking at the formulas, we realize that the forward-backward\n", + "differences in ([15](#vib:ode2:nonlin:fbdiff))\n", + "result in exactly the same scheme as in\n", + "([11](#vib:ode2:step3b:quad)) where we\n", + "used a geometric mean and centered differences and committed errors\n", + "of size $\\mathcal{O}({\\Delta t^2})$. Therefore, the forward-backward\n", + "differences in ([15](#vib:ode2:nonlin:fbdiff))\n", + "act in a symmetric way and actually produce a second-order\n", + "accurate discretization of the quadratic damping term.\n", + "\n", + "\n", + "## Implementation\n", + "
\n", + "\n", + "\n", + "The algorithm arising from the methods in the sections [A centered scheme for linear damping](#vib:ode2:fdm:flin)\n", + "and [A centered scheme for quadratic damping](#vib:ode2:fdm:fquad) is very similar to the undamped case in\n", + "the section [vib:ode1:fdm](#vib:ode1:fdm). The difference is\n", + "basically a question of different formulas for $u^1$ and\n", + "$u^{n+1}$. This is actually quite remarkable. The equation\n", + "([1](#vib:ode2)) is normally impossible to solve by pen and paper, but\n", + "possible for some special choices of $F$, $s$, and $f$. On the\n", + "contrary, the complexity of the\n", + "nonlinear generalized model ([1](#vib:ode2)) versus the\n", + "simple undamped model is not a big deal when we solve the\n", + "problem numerically!\n", + "\n", + "The computational algorithm takes the form\n", + "\n", + "1. $u^0=I$\n", + "\n", + "2. compute $u^1$ from ([7](#vib:ode2:step4b)) if linear\n", + " damping or ([14](#vib:ode2:step4b:quad)) if quadratic damping\n", + "\n", + "3. for $n=1,2,\\ldots,N_t-1$:\n", + "\n", + "a. compute $u^{n+1}$ from ([5](#vib:ode2:step4)) if linear\n", + " damping or ([12](#vib:ode2:step4:quad)) if quadratic damping\n", + "\n", + "Instead of coding the explicit formulas of $u^1$ and $u^{n+1}$ by hand, the code below demonstrates how we can implement this in Devito\n", + "\n", + "Modifying the `solver` function for the undamped case is fairly\n", + "easy, the big difference being many more terms and if tests on\n", + "the type of damping:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from devito import *" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# NOTE:\n", + "# - testConstant gives same errors\n", + "# - testQuadratic and testSinusoidal error increase from 1E-15 to 1E-7\n", + "\n", + "def solver(I, V, m, b, s, F, dt, T, damping='linear'):\n", + " \"\"\"\n", + " Solve m*u'' + f(u') + s(u) = F(t) for t in (0,T],\n", + " u(0)=I and u'(0)=V,\n", + " by a central finite difference method with time step dt.\n", + " If damping is 'linear', f(u')=b*u, while if damping is\n", + " 'quadratic', f(u')=b*u'*abs(u').\n", + " F(t) and s(u) are Python functions.\n", + " \"\"\"\n", + " dt = float(dt); b = float(b); m = float(m) # avoid integer div.\n", + " Nt = int(round(T/dt))\n", + " t = Dimension('t', spacing=Constant('h_t'))\n", + " \n", + " u = TimeFunction(name='u', dimensions=(t,), shape=(Nt+1,), space_order=2, dtype=np.float64)\n", + " u.data[0] = I\n", + " \n", + " # Initialize external function F\n", + " f = TimeFunction(name='f', dimensions=(t,), shape=(Nt+1,), dtype=np.float64)\n", + " for time in range(0, Nt+1):\n", + " f.data[time] = F(time*dt)\n", + " \n", + " # Initial Condition\n", + " if damping == 'linear':\n", + " u.data[1] = u.data[0] + dt*V + dt**2/(2*m)*(-b*V - s(u.data[0]) + f.data[0])\n", + " elif damping == 'quadratic':\n", + " u.data[1] = u.data[0] + dt*V + dt**2/(2*m)*(-b*V*abs(V) - s(u.data[0]) + f.data[0])\n", + " \n", + " # Define equation\n", + " if damping == 'linear':\n", + " eq_u = Eq(m*u.dt2 + b*(u.forward - u.backward)/(2 * t.spacing) + s(u), f)\n", + " elif damping == 'quadratic':\n", + " eq_u = Eq(m*u.dt2 + b*(u.forward - u)*abs(u - u.backward)/t.spacing**2 + s(u), f)\n", + " \n", + " # Solving the equation\n", + " stencil_u = solve(eq_u.evaluate, u.forward)\n", + " update_u = Eq(u.forward, stencil_u)\n", + " \n", + " op = Operator([update_u])\n", + " op.apply(h_t=dt, t_M=Nt-1)\n", + " return u.data, np.linspace(0, Nt*dt, Nt+1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The complete code (`solver` and relevant tests) resides in the file [`vib.py`](${src_vib}/vib.py).\n", + "\n", + "## Verification\n", + "
\n", + "\n", + "### Constant solution\n", + "\n", + "For debugging and initial verification, a constant solution is often\n", + "very useful. We choose $u_e(t)=I$, which implies $V=0$.\n", + "Inserted in the ODE, we get\n", + "$F(t)=s(I)$ for any choice of $f$. Since the discrete derivative\n", + "of a constant vanishes (in particular, $[D_{2t}I]^n=0$,\n", + "$[D_tI]^n=0$, and $[D_tD_t I]^n=0$), the constant solution also fulfills\n", + "the discrete equations. The constant should therefore be reproduced\n", + "to machine precision. The function `test_constant` in `vib.py`\n", + "implements this test.\n", + "\n", + "### Linear solution\n", + "\n", + "Now we choose a linear solution: $u_e(t) = ct + d$. The initial condition\n", + "$u(0)=I$ implies $d=I$, and $u^{\\prime}(0)=V$ forces $c$ to be $V$.\n", + "Inserting $u_e(t)=Vt+I$ in the ODE with linear damping results in" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "0 + bV + s(Vt+I) = F(t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "while quadratic damping requires the source term" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "0 + b|V|V + s(Vt+I) = F(t)\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since the finite difference approximations used to compute $u^{\\prime}$ all\n", + "are exact for a linear function, it turns out that the linear $u_e$\n", + "is also a solution of the discrete equations.\n", + "[vib:exer:verify:gen:linear](#vib:exer:verify:gen:linear) asks you to carry out\n", + "all the details.\n", + "\n", + "### Quadratic solution\n", + "\n", + "Choosing $u_e = bt^2 + Vt + I$, with $b$ arbitrary,\n", + "fulfills the initial conditions and\n", + "fits the ODE if $F$ is adjusted properly. The solution also solves\n", + "the discrete equations with linear damping. However, this quadratic\n", + "polynomial in $t$ does not fulfill the discrete equations in case\n", + "of quadratic damping, because the geometric mean used in the approximation\n", + "of this term introduces an error.\n", + "Doing [vib:exer:verify:gen:linear](#vib:exer:verify:gen:linear) will reveal\n", + "the details. One can fit $F^n$ in the discrete equations such that\n", + "the quadratic polynomial is reproduced by the numerical method (to\n", + "machine precision).\n", + "\n", + "# DO WE DELETE VISUALIZATION & USER INTERFACE SECTIONS?\n", + "\n", + "## Visualization\n", + "
\n", + "\n", + "The functions for visualizations differ significantly from\n", + "those in the undamped case in the `vib_undamped.py` program because,\n", + "in the present general case, we do not have an exact solution to\n", + "include in the plots. Moreover, we have no good estimate of\n", + "the periods of the oscillations as there will be one period\n", + "determined by the system parameters, essentially the\n", + "approximate frequency $\\sqrt{s'(0)/m}$ for linear $s$ and small damping,\n", + "and one period dictated by $F(t)$ in case the excitation is periodic.\n", + "This is, however,\n", + "nothing that the program can depend on or make use of.\n", + "Therefore, the user has to specify $T$ and the window width\n", + "to get a plot that moves with the graph and shows\n", + "the most recent parts of it in long time simulations.\n", + "\n", + "The `vib.py` code\n", + "contains several functions for analyzing the time series signal\n", + "and for visualizing the solutions.\n", + "\n", + "## User interface\n", + "
\n", + "\n", + "\n", + "The `main` function is changed substantially from\n", + "the `vib_undamped.py` code, since we need to\n", + "specify the new data $c$, $s(u)$, and $F(t)$. In addition, we must\n", + "set $T$ and the plot window width (instead of the number of periods we\n", + "want to simulate as in `vib_undamped.py`). To figure out whether we\n", + "can use one plot for the whole time series or if we should follow the\n", + "most recent part of $u$, we can use the `plot_empricial_freq_and_amplitude`\n", + "function's estimate of the number of local maxima. This number is now\n", + "returned from the function and used in `main` to decide on the\n", + "visualization technique." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "def main():\n", + " import argparse\n", + " parser = argparse.ArgumentParser()\n", + " parser.add_argument('--I', type=float, default=1.0)\n", + " parser.add_argument('--V', type=float, default=0.0)\n", + " parser.add_argument('--m', type=float, default=1.0)\n", + " parser.add_argument('--c', type=float, default=0.0)\n", + " parser.add_argument('--s', type=str, default='u')\n", + " parser.add_argument('--F', type=str, default='0')\n", + " parser.add_argument('--dt', type=float, default=0.05)\n", + " parser.add_argument('--T', type=float, default=140)\n", + " parser.add_argument('--damping', type=str, default='linear')\n", + " parser.add_argument('--window_width', type=float, default=30)\n", + " parser.add_argument('--savefig', action='store_true')\n", + " a = parser.parse_args()\n", + " from scitools.std import StringFunction\n", + " s = StringFunction(a.s, independent_variable='u')\n", + " F = StringFunction(a.F, independent_variable='t')\n", + " I, V, m, c, dt, T, window_width, savefig, damping = \\\n", + " a.I, a.V, a.m, a.c, a.dt, a.T, a.window_width, a.savefig, \\\n", + " a.damping\n", + "\n", + " u, t = solver(I, V, m, c, s, F, dt, T)\n", + " num_periods = empirical_freq_and_amplitude(u, t)\n", + " if num_periods <= 15:\n", + " figure()\n", + " visualize(u, t)\n", + " else:\n", + " visualize_front(u, t, window_width, savefig)\n", + " show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The program `vib.py` contains\n", + "the above code snippets and can solve the model problem\n", + "([1](#vib:ode2)). As a demo of `vib.py`, we consider the case\n", + "$I=1$, $V=0$, $m=1$, $c=0.03$, $s(u)=\\sin(u)$, $F(t)=3\\cos(4t)$,\n", + "$\\Delta t = 0.05$, and $T=140$. The relevant command to run is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> python vib.py --s 'sin(u)' --F '3*cos(4*t)' --c 0.03\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This results in a [moving window following the function](${doc_notes}/vib/html//mov-vib/vib_generalized_dt0.05/index.html) on the screen.\n", + "[Figure](#vib:ode2:fig:demo) shows a part of the time series.\n", + "\n", + "\n", + "\n", + "
\n", + "\n", + "

Damped oscillator excited by a sinusoidal function.

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## The Euler-Cromer scheme for the generalized model\n", + "
\n", + "\n", + "The ideas of the Euler-Cromer method from the section [vib:model2x2:EulerCromer](#vib:model2x2:EulerCromer)\n", + "carry over to the generalized model. We write ([1](#vib:ode2))\n", + "as two equations for $u$ and $v=u^{\\prime}$. The first equation is taken as the\n", + "one with $v^{\\prime}$ on the left-hand side:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v^{\\prime} = \\frac{1}{m}(F(t)-s(u)-f(v)),\n", + "\\label{vib:ode2:EulerCromer:veq} \\tag{16}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u^{\\prime} = v\\thinspace .\n", + "\\label{vib:ode2:EulerCromer:ueq} \\tag{17}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, the idea is to step ([16](#vib:ode2:EulerCromer:veq)) forward using\n", + "a standard Forward Euler method, while we update $u$ from\n", + "([17](#vib:ode2:EulerCromer:ueq)) with a Backward Euler method,\n", + "utilizing the recent, computed $v^{n+1}$ value. In detail," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{v^{n+1}-v^n}{\\Delta t} = \\frac{1}{m}(F(t_n)-s(u^n)-f(v^n)),\n", + "\\label{vib:ode2:EulerCromer:dveq0a} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\frac{u^{n+1}-u^n}{\\Delta t} = v^{n+1},\n", + "\\label{vib:ode2:EulerCromer:dueq0a} \\tag{19}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "resulting in the explicit scheme" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v^{n+1} = v^n + \\Delta t\\frac{1}{m}(F(t_n)-s(u^n)-f(v^n)),\n", + "\\label{vib:ode2:EulerCromer:dveq} \\tag{20}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u^{n+1} = u^n + \\Delta t\\,v^{n+1}\\thinspace .\n", + "\\label{vib:ode2:EulerCromer:dueq0} \\tag{21}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We immediately note one very favorable feature of this scheme: all the\n", + "nonlinearities in $s(u)$ and $f(v)$ are evaluated at a previous time\n", + "level. This makes the Euler-Cromer method easier to apply and\n", + "hence much more convenient than the centered scheme for the second-order\n", + "ODE ([1](#vib:ode2)).\n", + "\n", + "The initial conditions are trivially set as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v^0 = V,\n", + "\\label{_auto4} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u^0 = I\\thinspace .\n", + "\\label{_auto5} \\tag{23}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[hpl 1: odespy for the generalized problem]\n", + "\n", + "\n", + "\n", + "\n", + "## The Stoermer-Verlet algorithm for the generalized model\n", + "
\n", + "\n", + "We can easily apply the ideas from the section [vib:model2x2:StormerVerlet](#vib:model2x2:StormerVerlet) to\n", + "extend that method to the generalized model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "v^{\\prime} &= \\frac{1}{m}(F(t)-s(u)-f(v)),\\\\ \n", + "u^{\\prime} &= v\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, since the scheme is essentially centered differences for\n", + "the ODE system on a staggered mesh, we do not go into detail here,\n", + "but refer to the section [A staggered Euler-Cromer scheme for a generalized model](#vib:ode2:staggered).\n", + "\n", + "## A staggered Euler-Cromer scheme for a generalized model\n", + "
\n", + "\n", + "The more general model for vibration problems," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "mu'' + f(u') + s(u) = F(t),\\quad u(0)=I,\\ u'(0)=V,\\ t\\in (0,T],\n", + "\\label{_auto6} \\tag{24}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "can be rewritten as a first-order ODE system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v' = m^{-1}\\left(F(t) - f(v) - s(u)\\right),\n", + "\\label{vib:ode2:staggered:veq} \\tag{25}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u' = v\\thinspace .\n", + "\\label{vib:ode2:staggered:ueq} \\tag{26}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is natural to introduce a staggered mesh (see the section [vib:model2x2:staggered](#vib:model2x2:staggered)) and seek $u$ at mesh points $t_n$ (the numerical value is\n", + "denoted by $u^n$) and $v$ between mesh points at $t_{n+1/2}$ (the numerical\n", + "value is denoted by $v^{n+\\frac{1}{2}}$).\n", + "A centered difference approximation to ([26](#vib:ode2:staggered:ueq))-([25](#vib:ode2:staggered:veq)) can then be written in operator notation as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\lbrack D_tv = m^{-1}\\left(F(t) - f(v) - s(u)\\right)\\rbrack^n,\n", + "\\label{vib:ode2:staggered:dveq} \\tag{27}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\lbrack D_t u = v\\rbrack^{n+\\frac{1}{2}}\\thinspace .\n", + "\\label{vib:ode2:staggered:dueq} \\tag{28}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Written out," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{v^{n+\\frac{1}{2}} - v^{n-\\frac{1}{2}}}{\\Delta t}\n", + "= m^{-1}\\left(F^n - f(v^n) - s(u^n)\\right),\n", + "\\label{vib:ode2:staggered:dveq2} \\tag{29}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\frac{u^n - u^{n-1}}{\\Delta t} = v^{n+\\frac{1}{2}}\\thinspace .\n", + "\\label{vib:ode2:staggered:dueq2} \\tag{30}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With linear damping, $f(v)=bv$, we can use an arithmetic mean\n", + "for $f(v^n)$: $f(v^n)\\approx = \\frac{1}{2}(f(v^{n-\\frac{1}{2}}) +\n", + "f(v^{n+\\frac{1}{2}}))$. The system\n", + "([29](#vib:ode2:staggered:dveq2))-([30](#vib:ode2:staggered:dueq2))\n", + "can then be solved with respect to the unknowns $u^n$ and $v^{n+\\frac{1}{2}}$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v^{n+\\frac{1}{2}} = \\left(1 + \\frac{b}{2m}\\Delta t\\right)^{-1}\\left(\n", + "v^{n-\\frac{1}{2}} + {\\Delta t}\n", + "m^{-1}\\left(F^n - {\\frac{1}{2}}f(v^{n-\\frac{1}{2}}) - s(u^n)\\right)\\right),\n", + "\\label{vib:ode2:staggered:v:scheme:lin} \\tag{31}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u^n = u^{n-1} + {\\Delta t}v^{n-\\frac{1}{2}}\\thinspace .\n", + "\\label{vib:ode2:staggered:u:scheme:lin} \\tag{32}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In case of quadratic damping, $f(v)=b|v|v$, we can use a geometric mean:\n", + "$f(v^n)\\approx b|v^{n-\\frac{1}{2}}|v^{n+\\frac{1}{2}}$. Inserting this approximation\n", + "in ([29](#vib:ode2:staggered:dveq2))-([30](#vib:ode2:staggered:dueq2)) and\n", + "solving for the unknowns $u^n$ and $v^{n+\\frac{1}{2}}$ results in" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v^{n+\\frac{1}{2}} = (1 + \\frac{b}{m}|v^{n-\\frac{1}{2}}|\\Delta t)^{-1}\\left(\n", + "v^{n-\\frac{1}{2}} + {\\Delta t}\n", + "m^{-1}\\left(F^n - s(u^n)\\right)\\right),\n", + "\\label{vib:ode2:staggered:v:scheme:quad} \\tag{33}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u^n = u^{n-1} + {\\Delta t}v^{n-\\frac{1}{2}}\\thinspace .\n", + "\\label{vib:ode2:staggered:u:scheme:quad} \\tag{34}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The initial conditions are derived at the end of\n", + "the section [vib:model2x2:staggered](#vib:model2x2:staggered):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^0 = I,\n", + "\\label{vib:ode2:staggered:u02} \\tag{35}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v^\\frac{1}{2} = V - \\frac{1}{2}\\Delta t\\omega^2I\n", + "\\label{vib:ode2:staggered:v02} \\tag{36}\\thinspace .\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The PEFRL 4th-order accurate algorithm\n", + "
\n", + "\n", + "A variant of the Euler-Cromer type of algorithm, which provides an\n", + "error $\\mathcal{O}({\\Delta t^4})$ if $f(v)=0$, is called PEFRL\n", + "[[PEFRL_2002]](#PEFRL_2002). This algorithm is very well suited for integrating\n", + "dynamic systems (especially those without damping) over very long time\n", + "periods. Define" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g(u,v) = \\frac{1}{m}(F(t)-s(u)-f(v))\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The algorithm is explicit and features these steps:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^{n+1,1} = u^n + \\xi\\Delta t v^n,\n", + "\\label{_auto7} \\tag{37}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v^{n+1,1} = v^n + \\frac{1}{2}(1-2\\lambda)\\Delta t g(u^{n+1,1},v^n),\n", + "\\label{_auto8} \\tag{38}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u^{n+1,2} = u^{n+1,1} + \\chi\\Delta t v^{n+1,1},\n", + "\\label{_auto9} \\tag{39}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v^{n+1,2} = v^{n+1,1} + \\lambda\\Delta t g(u^{n+1,2}, v^{n+1,1}),\n", + "\\label{_auto10} \\tag{40}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u^{n+1,3} = u^{n+1,2} + (1-2(\\chi + \\xi))\\Delta t v^{n+1,2},\n", + "\\label{_auto11} \\tag{41}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v^{n+1,3} = v^{n+1,2} + \\lambda\\Delta t g(u^{n+1,3}, v^{n+1,2}),\n", + "\\label{_auto12} \\tag{42}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u^{n+1,4} = u^{n+1,3} + \\chi\\Delta t v^{n+1,3},\n", + "\\label{_auto13} \\tag{43}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v^{n+1} = v^{n+1,3} + \\frac{1}{2}(1-2\\lambda)\\Delta t g(u^{n+1,4},v^{n+1,3}),\n", + "\\label{_auto14} \\tag{44}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u^{n+1} = u^{n+1,4} + \\xi\\Delta t v^{n+1}\n", + "\\label{_auto15} \\tag{45}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "The parameters $\\xi$, $\\lambda$, and $\\xi$ have the values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\xi = 0.1786178958448091,\n", + "\\label{_auto16} \\tag{46}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\lambda = -0.2123418310626054,\n", + "\\label{_auto17} \\tag{47}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\chi = -0.06626458266981849\n", + "\\label{_auto18} \\tag{48}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exercises and Problems\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 1: Implement the solver via classes (DELETE)?\n", + "
\n", + "\n", + "Reimplement the `vib.py` program using a class `Problem` to hold all\n", + "the physical parameters of the problem, a class `Solver` to hold the\n", + "numerical parameters and compute the solution, and a class\n", + "`Visualizer` to display the solution.\n", + "\n", + "\n", + "\n", + "**Hint.**\n", + "Use the ideas and examples from Sections 5.5.1 and 5.5.2 \n", + "in [[Langtangen_decay]](#Langtangen_decay). More specifically, make a superclass\n", + "`Problem` for holding the scalar physical parameters of a problem and\n", + "let subclasses implement the $s(u)$ and $F(t)$ functions as methods.\n", + "Try to call up as much existing functionality in `vib.py` as possible.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "The complete code looks like this." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Reimplementation of vib.py using classes\n", + "\n", + "import numpy as np\n", + "import scitools.std as plt\n", + "import sympy as sym\n", + "from vib import solver as vib_solver\n", + "from vib import visualize as vib_visualize\n", + "from vib import visualize_front as vib_visualize_front\n", + "from vib import visualize_front_ascii as vib_visualize_front_ascii\n", + "from vib import plot_empirical_freq_and_amplitude as \\\n", + " vib_plot_empirical_freq_and_amplitude\n", + "\n", + "class Vibration:\n", + " '''\n", + " Problem: m*u'' + f(u') + s(u) = F(t) for t in (0,T],\n", + " u(0)=I and u'(0)=V. The problem is solved\n", + " by a central finite difference method with time step dt.\n", + " If damping is 'linear', f(u')=b*u, while if damping is\n", + " 'quadratic', f(u')=b*u'*abs(u'). Zero damping is achieved\n", + " with b=0. F(t) and s(u) are Python functions.\n", + " '''\n", + " def __init__(self, I=1, V=0, m=1, b=0, damping='linear'):\n", + " self.I = I; self.V = V; self.m = m; self.b=b;\n", + " self.damping = damping\n", + " def s(self, u):\n", + " return u\n", + " def F(self, t):\n", + " '''Driving force. Zero implies free oscillations'''\n", + " return 0\n", + "\n", + "class Free_vibrations(Vibration):\n", + " '''F(t) = 0'''\n", + " def __init__(self, s=None, I=1, V=0, m=1, b=0, damping='linear'):\n", + " Vibration.__init__(self, I=I, V=V, m=m, b=b, damping=damping)\n", + " if s != None:\n", + " self.s = s\n", + "\n", + "class Forced_vibrations(Vibration):\n", + " '''F(t)! = 0'''\n", + " def __init__(self, F, s=None, I=1, V=0, m=1, b=0,\n", + " damping='linear'):\n", + " Vibration.__init__(self, I=I, V=V, m=m, b=b,\n", + " damping=damping)\n", + " if s != None:\n", + " self.s = s\n", + " self.F = F\n", + "\n", + "class Solver:\n", + " def __init__(self, dt=0.05, T=20):\n", + " self.dt = dt; self.T = T\n", + "\n", + " def solve(self, problem):\n", + " self.u, self.t = vib_solver(\n", + " problem.I, problem.V,\n", + " problem.m, problem.b,\n", + " problem.s, problem.F,\n", + " self.dt, self.T, problem.damping)\n", + "\n", + "class Visualizer:\n", + " def __init__(self, problem, solver, window_width, savefig):\n", + " self.problem = problem; self.solver = solver\n", + " self.window_width = window_width; self.savefig = savefig\n", + " def visualize(self):\n", + " u = self.solver.u; t = self.solver.t # short forms\n", + " num_periods = vib_plot_empirical_freq_and_amplitude(u, t)\n", + " if num_periods <= 40:\n", + " plt.figure()\n", + " vib_visualize(u, t)\n", + " else:\n", + " vib_visualize_front(u, t, self.window_width, self.savefig)\n", + " vib_visualize_front_ascii(u, t)\n", + " plt.show()\n", + "\n", + "def main():\n", + " # Note: the reading of parameter values would better be done\n", + " # from each relevant class, i.e. class Problem should read I, V,\n", + " # etc., while class Solver should read dt and T, and so on.\n", + " # Consult, e.g., Langtangen: \"A Primer on Scientific Programming\",\n", + " # App E.\n", + " import argparse\n", + " parser = argparse.ArgumentParser()\n", + " parser.add_argument('--I', type=float, default=1.0)\n", + " parser.add_argument('--V', type=float, default=0.0)\n", + " parser.add_argument('--m', type=float, default=1.0)\n", + " parser.add_argument('--b', type=float, default=0.0)\n", + " parser.add_argument('--s', type=str, default=None)\n", + " parser.add_argument('--F', type=str, default='0')\n", + " parser.add_argument('--dt', type=float, default=0.05)\n", + " parser.add_argument('--T', type=float, default=20)\n", + " parser.add_argument('--window_width', type=float, default=30.,\n", + " help='Number of periods in a window')\n", + " parser.add_argument('--damping', type=str, default='linear')\n", + " parser.add_argument('--savefig', action='store_true')\n", + " # Hack to allow --SCITOOLS options\n", + " # (scitools.std reads this argument at import)\n", + " parser.add_argument('--SCITOOLS_easyviz_backend',\n", + " default='matplotlib')\n", + " a = parser.parse_args()\n", + "\n", + " from scitools.std import StringFunction\n", + " if a.s != None:\n", + " s = StringFunction(a.s, independent_variable='u')\n", + " else:\n", + " s = None\n", + " F = StringFunction(a.F, independent_variable='t')\n", + "\n", + " if a.F == '0': # free vibrations\n", + " problem = Free_vibrations(s=s, I=a.I, V=a.V, m=a.m, b=a.b,\n", + " damping=a.damping)\n", + " else: # forced vibrations\n", + " problem = Forced_vibrations(lambda t: np.sin(t),\n", + " s=s, I=a.I, V=a.V,\n", + " m=a.m, b=a.b, damping=a.damping)\n", + "\n", + " solver = Solver(dt=a.dt, T=a.T)\n", + " solver.solve(problem)\n", + "\n", + " visualizer = Visualizer(problem, solver,\n", + " a.window_width, a.savefig)\n", + " visualizer.visualize()\n", + "\n", + "if __name__ == '__main__':\n", + " main()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Filename: `vib_class`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Problem 2: Use a backward difference for the damping term\n", + "
\n", + "\n", + "As an alternative to discretizing the damping terms $\\beta u^{\\prime}$ and\n", + "$\\beta |u^{\\prime}|u^{\\prime}$ by centered differences, we may apply\n", + "backward differences:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "[u^{\\prime}]^n &\\approx [D_t^-u]^n,\\\\ \n", + "[|u^{\\prime}|u^{\\prime}]^n &\\approx [|D_t^-u|D_t^-u]^n\\\\ \n", + "&= |[D_t^-u]^n|[D_t^-u]^n\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The advantage of the backward difference is that the damping term is\n", + "evaluated using known values $u^n$ and $u^{n-1}$ only.\n", + "Extend the [`vib.py`](${src_vib}/vib.py) code with a scheme based\n", + "on using backward differences in the damping terms. Add statements\n", + "to compare the original approach with centered difference and the\n", + "new idea launched in this exercise. Perform numerical experiments\n", + "to investigate how much accuracy that is lost by using the backward\n", + "differences.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "The new discretization approach of the linear and quadratic damping\n", + "terms calls for new derivations of the updating formulas (for $u$) in\n", + "the solver. Since backward difference approximations will be used for\n", + "the damping term, we may also use this approximation for the initial\n", + "condition on $u^{\\prime}(0)$ without deteriorating the convergence\n", + "rate any further. Note that introducing backward difference\n", + "approximations for the damping term make our computational schemes\n", + "first order, as opposed to the original second order schemes which\n", + "used central difference approximations also for the damping terms. The\n", + "motivation for also using a backward difference approximation for the\n", + "initial condition on $u^{\\prime}(0)$, is simply that the computational\n", + "schemes get much simpler.\n", + "\n", + "With linear damping, the new discretized form of the equation reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\frac{u^{n+1}-2u^n+u^{n-1}}{\\Delta t^2} + b\\frac{u^n - u^{n-1}}{\\Delta t} + s(u^n) = F^n,\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives us" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^{n+1} = \\left(2-\\frac{\\Delta t b}{m}\\right)u^n + \\frac{\\Delta t^2}{m}\\left(F^n - s(u^n)\\right) + \\left(\\frac{\\Delta t b}{m} - 1\\right)u^{n-1}.\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With $n=0$, the updating formula becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^1 = \\left(2-\\frac{\\Delta t b}{m}\\right)u^0 + \\frac{\\Delta t^2}{m}\\left(F^0 - s(u^0)\\right) + \\left(\\frac{\\Delta t b}{m} - 1\\right)u^{-1},\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which requires some further elaboration because of the unknown $u^{-1}$. We handle this by discretizing the initial condition $u^{\\prime}(0) = V$ by a backward difference approximation as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{u^0 - u^{-1}}{\\Delta t} = V,\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which implies that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^{-1} = u^0 - \\Delta t V.\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inserting this expression for $u^{-1}$ in the updating formula for $u^{n+1}$, and simplifying,\n", + "gives us the following special formula for the first time step:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^1 = u^0 + \\Delta t V + \\frac{\\Delta t^2}{m}\\left(-bV - s(u^0) + F^0\\right).\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Switching to quadratic damping, the new discretized form of the equations becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\frac{u^{n+1}-2u^n+u^{n-1}}{\\Delta t^2} + b|\\frac{u^n - u^{n-1}}{\\Delta t}|\\frac{u^n - u^{n-1}}{\\Delta t} + s(u^n) = F^n,\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which leads to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^{n+1} = 2u^n - u^{n-1} - \\frac{b}{m}|u^n - u^{n-1}|(u^n - u^{n-1}) + \\frac{\\Delta t^2}{m}\\left(F^n - s(u^n)\\right).\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With $n=0$, this updating formula becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^1 = 2u^0 - u^{-1} - \\frac{b}{m}|u^0 - u^{-1}|(u^0 - u^{-1}) + \\frac{\\Delta t^2}{m}\\left(F^0 - s(u^0)\\right).\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, we handle the unknown $u^{-1}$ via the same expression as above, which be derived from a backward difference approximation to the initial condition on the derivative. Inserting this expression for $u^{-1}$ and simplifying, gives the special updating formula for $u^1$ as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^1 = u^0 + \\Delta t V + \\frac{\\Delta t^2}{m}\\left(-b|V|V - s(u^0) + F^0\\right).\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We implement these new computational schemes in a new solver function\n", + "`solver_bwdamping`, so that the discrete solution for $u$ can be found\n", + "by both the original and the new solver. The difference between the\n", + "two different solutions is then visualized in the same way as the\n", + "original solution in `main`.\n", + "\n", + "The convergence rates computed in `test_mms` demonstrates that our\n", + "scheme now is a first order scheme, as $r$ is seen to approach 1.0\n", + "with decreasing $\\Delta t$.\n", + "\n", + "Both solvers reproduce a constant solution exactly (within machine\n", + "precision), whereas sinusoidal and quadratic solutions differ, as\n", + "should be expected after comparing the schemes. Pointing out the\n", + "\"best\" approach is difficult: the backward differences yield a much\n", + "simpler mathematical problem to be solved, while the more complicated\n", + "method converges faster and gives more accuracy for the same cost. On\n", + "the other hand, the backward differences can yield any reasonable\n", + "accuracy by lowering $\\Delta t$, and the results are obtained within a\n", + "few seconds on a laptop.\n", + "\n", + "Here is the complete computer code, arising from copying `vib.py` and changing\n", + "the functions that have to be changed:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# THIS CODE BELOW ?DOESN'T WORK IN THE FIRST PLACE" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import scitools as plt\n", + "\n", + "import os, sys\n", + "sys.path.insert(0, os.path.join(os.path.abspath(os.getcwd()), 'src-vib'))\n", + "from vib import (plot_empirical_freq_and_amplitude,\n", + " visualize_front, visualize_front_ascii,\n", + " minmax, periods, amplitudes,\n", + " solver as solver2)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.18200549280924477\n", + "LINEAR DIFFERENCE ALL: \n", + "[0. 0.054 0.10314 0.1429974 0.16998503 0.18167401\n", + " 0.17701233 0.15641954 0.12174899 0.07612104 0.02364218 0.03096447\n", + " 0.08278431 0.12715357 0.16007901 0.17859733 0.1810419 0.1671927\n", + " 0.13829615 0.09695295 0.04688398 0.00740454 0.06102666 0.10915637\n", + " 0.14746202 0.17249608 0.18200549 0.17513441 0.15250124 0.11614295\n", + " 0.06933179]\n", + "0.18200549280924297\n" + ] + } + ], + "source": [ + "# both parts of \"testSinusoidal\" doesn't pass using original code (significantly larger error, 1E-14 required, 1E-1 observed)\n", + "# Same problem with the \"linaer\" section of \"testQuadratic\"\n", + "\n", + "def solver_bwdamping(I, V, m, b, s, F, dt, T, damping='linear'):\n", + " \"\"\"\n", + " Solve m*u'' + f(u') + s(u) = F(t) for t in (0,T],\n", + " u(0)=I and u'(0)=V. All terms except damping is discretized\n", + " by a central finite difference method with time step dt.\n", + " The damping term is discretized by a backward diff. approx.,\n", + " as is the init.cond. u'(0). If damping is 'linear', f(u')=b*u,\n", + " while if damping is 'quadratic', f(u')=b*u'*abs(u').\n", + " F(t) and s(u) are Python functions.\n", + " \"\"\"\n", + " dt = float(dt); b = float(b); m = float(m) # avoid integer div.\n", + " Nt = int(round(T/dt))\n", + " u = np.zeros(Nt+1)\n", + " t = np.linspace(0, Nt*dt, Nt+1)\n", + "\n", + " u_original = np.zeros(Nt+1); u_original[0] = I # for testing\n", + "\n", + " u[0] = I\n", + " if damping == 'linear':\n", + " u[1] = u[0] + dt*V + dt**2/m*(-b*V - s(u[0]) + F(t[0]))\n", + " elif damping == 'quadratic':\n", + " u[1] = u[0] + dt*V + \\\n", + " dt**2/m*(-b*V*abs(V) - s(u[0]) + F(t[0]))\n", + " for n in range(1, Nt):\n", + " if damping == 'linear':\n", + " u[n+1] = (2 - dt*b/m)*u[n] + dt**2/m*(- s(u[n]) + \\\n", + " F(t[n])) + (dt*b/m - 1)*u[n-1]\n", + " elif damping == 'quadratic':\n", + " u[n+1] = 2*u[n] - u[n-1] - b/m*abs(u[n] - \\\n", + " u[n-1])*(u[n] - u[n-1]) + dt**2/m*(-s(u[n]) + F(t[n]))\n", + " return u, t\n", + "\n", + "\n", + "import sympy as sym\n", + "\n", + "def test_constant():\n", + " \"\"\"Verify a constant solution.\"\"\"\n", + " u_exact = lambda t: I\n", + " I = 1.2; V = 0; m = 2; b = 0.9\n", + " w = 1.5\n", + " s = lambda u: w**2*u\n", + " F = lambda t: w**2*u_exact(t)\n", + " dt = 0.2\n", + " T = 2\n", + " #u, t = solver(I, V, m, b, s, F, dt, T, 'linear')\n", + " u, t = solver_bwdamping(I, V, m, b, s, F, dt, T, 'linear')\n", + " difference = np.abs(u_exact(t) - u).max()\n", + " print(difference)\n", + " tol = 1E-13\n", + " assert difference < tol\n", + "\n", + " #u, t = solver(I, V, m, b, s, F, dt, T, 'quadratic')\n", + " u, t = solver_bwdamping(I, V, m, b, s, F, dt, T, 'quadratic')\n", + " difference = np.abs(u_exact(t) - u).max()\n", + " print (difference)\n", + " assert difference < tol\n", + "\n", + "def lhs_eq(t, m, b, s, u, damping='linear'):\n", + " \"\"\"Return lhs of differential equation as sympy expression.\"\"\"\n", + " v = sym.diff(u, t)\n", + " if damping == 'linear':\n", + " return m*sym.diff(u, t, t) + b*v + s(u)\n", + " else:\n", + " return m*sym.diff(u, t, t) + b*v*sym.Abs(v) + s(u)\n", + "\n", + "def test_quadratic():\n", + " \"\"\"Verify a quadratic solution.\"\"\"\n", + " I = 1.2; V = 3; m = 2; b = 0.9\n", + " s = lambda u: 4*u\n", + " t = sym.Symbol('t')\n", + " dt = 0.2\n", + " T = 2\n", + "\n", + " q = 2 # arbitrary constant\n", + " u_exact = I + V*t + q*t**2\n", + " F = sym.lambdify(t, lhs_eq(t, m, b, s, u_exact, 'linear'))\n", + " u_exact = sym.lambdify(t, u_exact, modules='numpy')\n", + " #u1, t1 = solver(I, V, m, b, s, F, dt, T, 'linear')\n", + " u1, t1 = solver_bwdamping(I, V, m, b, s, F, dt, T, 'linear')\n", + " diff = np.abs(u_exact(t1) - u1).max()\n", + " print (diff)\n", + " tol = 1E-13\n", + " #assert diff < tol\n", + "\n", + " # In the quadratic damping case, u_exact must be linear\n", + " # in order to exactly recover this solution\n", + " u_exact = I + V*t\n", + " F = sym.lambdify(t, lhs_eq(t, m, b, s, u_exact, 'quadratic'))\n", + " u_exact = sym.lambdify(t, u_exact, modules='numpy')\n", + " #u2, t2 = solver(I, V, m, b, s, F, dt, T, 'quadratic')\n", + " u2, t2 = solver_bwdamping(I, V, m, b, s, F, dt, T, 'quadratic')\n", + " diff = np.abs(u_exact(t2) - u2).max()\n", + " print (diff)\n", + " #assert diff < tol\n", + "\n", + "def test_sinusoidal():\n", + " \"\"\"Verify a numerically exact sinusoidal solution when b=F=0.\"\"\"\n", + " from math import asin\n", + "\n", + " def u_exact(t):\n", + " w_numerical = 2/dt*np.arcsin(w*dt/2)\n", + " return I*np.cos(w_numerical*t)\n", + "\n", + " I = 1.2; V = 0; m = 2; b = 0\n", + " w = 1.5 # fix the frequency\n", + " s = lambda u: m*w**2*u\n", + " F = lambda t: 0\n", + " dt = 0.2\n", + " T = 6\n", + " #u, t = solver(I, V, m, b, s, F, dt, T, 'linear')\n", + " u, t = solver_bwdamping(I, V, m, b, s, F, dt, T, 'linear')\n", + " diff = np.abs(u_exact(t) - u).max()\n", + " print (diff)\n", + " print(\"LINEAR DIFFERENCE ALL: \")\n", + " print(np.abs(u_exact(t) - u))\n", + " tol = 1E-14\n", + " #assert diff < tol\n", + "\n", + " #u, t = solver(I, V, m, b, s, F, dt, T, 'quadratic')\n", + " u, t = solver_bwdamping(I, V, m, b, s, F, dt, T, 'quadratic')\n", + " diff = np.abs(u_exact(t) - u).max()\n", + " print(diff)\n", + " #assert diff < tol\n", + "\n", + "def test_mms():\n", + " \"\"\"Use method of manufactured solutions.\"\"\"\n", + " m = 4.; b = 1\n", + " w = 1.5\n", + " t = sym.Symbol('t')\n", + " u_exact = 3*sym.exp(-0.2*t)*sym.cos(1.2*t)\n", + " I = u_exact.subs(t, 0).evalf()\n", + " V = sym.diff(u_exact, t).subs(t, 0).evalf()\n", + " u_exact_py = sym.lambdify(t, u_exact, modules='numpy')\n", + " s = lambda u: u**3\n", + " dt = 0.2\n", + " T = 6\n", + " errors_linear = []\n", + " errors_quadratic = []\n", + " # Run grid refinements and compute exact error\n", + " for i in range(5):\n", + " F_formula = lhs_eq(t, m, b, s, u_exact, 'linear')\n", + " F = sym.lambdify(t, F_formula)\n", + " #u1, t1 = solver(I, V, m, b, s, F, dt, T, 'linear')\n", + " u1, t1 = solver_bwdamping(I, V, m, b, s,\n", + " F, dt, T, 'linear')\n", + " error = np.sqrt(np.sum((u_exact_py(t1) - u1)**2)*dt)\n", + " errors_linear.append((dt, error))\n", + "\n", + " F_formula = lhs_eq(t, m, b, s, u_exact, 'quadratic')\n", + " #print sym.latex(F_formula, mode='plain')\n", + " F = sym.lambdify(t, F_formula)\n", + " #u2, t2 = solver(I, V, m, b, s, F, dt, T, 'quadratic')\n", + " u2, t2 = solver_bwdamping(I, V, m, b, s,\n", + " F, dt, T, 'quadratic')\n", + " error = np.sqrt(np.sum((u_exact_py(t2) - u2)**2)*dt)\n", + " errors_quadratic.append((dt, error))\n", + " dt /= 2\n", + " # Estimate convergence rates\n", + " tol = 0.05\n", + " for errors in errors_linear, errors_quadratic:\n", + " for i in range(1, len(errors)):\n", + " dt, error = errors[i]\n", + " dt_1, error_1 = errors[i-1]\n", + " r = np.log(error/error_1)/np.log(dt/dt_1)\n", + " # check r for final simulation with (final and) smallest dt\n", + " # note that the method now is 1st order, i.e. r should\n", + " # approach 1.0\n", + " print(abs(r-1.0))\n", + " assert abs(r - 1.0) < tol\n", + "\n", + "def visualize(list_of_curves, legends, title='', filename='tmp'):\n", + " \"\"\"Plot list of curves: (u, t).\"\"\"\n", + " for u, t in list_of_curves:\n", + " plt.plot(t, u)\n", + " plt.hold('on')\n", + " plt.legend(legends)\n", + " plt.xlabel('t')\n", + " plt.ylabel('u')\n", + " plt.title(title)\n", + " plt.savefig(filename + '.png')\n", + " plt.savefig(filename + '.pdf')\n", + " plt.show()\n", + "\n", + "def main():\n", + " import argparse\n", + " parser = argparse.ArgumentParser()\n", + " parser.add_argument('--I', type=float, default=1.0)\n", + " parser.add_argument('--V', type=float, default=0.0)\n", + " parser.add_argument('--m', type=float, default=1.0)\n", + " parser.add_argument('--b', type=float, default=0.0)\n", + " parser.add_argument('--s', type=str, default='4*pi**2*u')\n", + " parser.add_argument('--F', type=str, default='0')\n", + " parser.add_argument('--dt', type=float, default=0.05)\n", + " parser.add_argument('--T', type=float, default=20)\n", + " parser.add_argument('--window_width', type=float, default=30.,\n", + " help='Number of periods in a window')\n", + " parser.add_argument('--damping', type=str, default='linear')\n", + " parser.add_argument('--savefig', action='store_true')\n", + " # Hack to allow --SCITOOLS options\n", + " # (scitools.std reads this argument at import)\n", + " parser.add_argument('--SCITOOLS_easyviz_backend',\n", + " default='matplotlib')\n", + " a = parser.parse_args()\n", + " from scitools import StringFunction\n", + " s = StringFunction(a.s, independent_variable='u')\n", + " F = StringFunction(a.F, independent_variable='t')\n", + " I, V, m, b, dt, T, window_width, savefig, damping = \\\n", + " a.I, a.V, a.m, a.b, a.dt, a.T, a.window_width, a.savefig, \\\n", + " a.damping\n", + "\n", + " # compute u by both methods and then visualize the difference\n", + " u, t = solver2(I, V, m, b, s, F, dt, T, damping)\n", + " u_bw, _ = solver_bwdamping(I, V, m, b, s, F, dt, T, damping)\n", + " u_diff = u - u_bw\n", + "\n", + " num_periods = plot_empirical_freq_and_amplitude(u_diff, t)\n", + " if num_periods <= 40:\n", + " plt.figure()\n", + " legends = ['1st-2nd order method',\n", + " '2nd order method',\n", + " '1st order method']\n", + " visualize([(u_diff, t), (u, t), (u_bw, t)], legends)\n", + " else:\n", + " visualize_front(u_diff, t, window_width, savefig)\n", + " #visualize_front_ascii(u_diff, t)\n", + " plt.show()\n", + "\n", + "if __name__ == '__main__':\n", + " #main()\n", + " #test_constant()\n", + " test_sinusoidal()\n", + " #test_mms()\n", + " #test_quadratic()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a comparison of standard method (2nd order) and backward differences for damping (1st order) for 10 (left) and 40 (right) time steps per period:\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Filename: `vib_gen_bwdamping`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 3: Use the forward-backward scheme with quadratic damping\n", + "
\n", + "\n", + "We consider the generalized model with quadratic damping, expressed\n", + "as a system of two first-order equations as in the section [A staggered Euler-Cromer scheme for a generalized model](#vib:ode2:staggered):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "u^{\\prime} &= v,\\\\ \n", + "v' &= \\frac{1}{m}\\left( F(t) - \\beta |v|v - s(u)\\right)\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, contrary to what is done in the section [A staggered Euler-Cromer scheme for a generalized model](#vib:ode2:staggered),\n", + "we want to apply the idea of a forward-backward discretization:\n", + "$u$ is marched forward by an one-sided Forward Euler scheme applied\n", + "to the first equation, and\n", + "thereafter $v$ can be marched forward by a Backward Euler scheme in the\n", + "second equation, see in the section [vib:model2x2:EulerCromer](#vib:model2x2:EulerCromer).\n", + "\n", + "Express the idea in operator notation and write out the\n", + "scheme. Unfortunately, the backward difference for the $v$ equation\n", + "creates a nonlinearity $|v^{n+1}|v^{n+1}$. To linearize this\n", + "nonlinearity, use the known value $v^n$ inside the absolute value\n", + "factor, i.e., $|v^{n+1}|v^{n+1}\\approx |v^n|v^{n+1}$. Show that the\n", + "resulting scheme is equivalent to the one in the section [A staggered Euler-Cromer scheme for a generalized model](#vib:ode2:staggered) for some time level $n\\geq 1$.\n", + "\n", + "What we learn from this exercise is that the first-order differences\n", + "and the linearization trick play together in \"the right way\" such that\n", + "the scheme is as good as when we (in the section [A staggered Euler-Cromer scheme for a generalized model](#vib:ode2:staggered))\n", + "carefully apply centered differences and a geometric mean on a\n", + "staggered mesh to achieve second-order accuracy.\n", + "There is a\n", + "difference in the handling of the initial conditions, though, as\n", + "explained at the end of the section [vib:model2x2:EulerCromer](#vib:model2x2:EulerCromer).\n", + "Filename: `vib_gen_bwdamping`.\n", + "\n", + "" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Devito", + "language": "python", + "name": "devito" + }, + "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.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/fdm-jupyter-book/notebooks/01_vib/vib_undamped.ipynb b/fdm-jupyter-book/notebooks/01_vib/vib_undamped.ipynb index bb2b052b..490a207f 100644 --- a/fdm-jupyter-book/notebooks/01_vib/vib_undamped.ipynb +++ b/fdm-jupyter-book/notebooks/01_vib/vib_undamped.ipynb @@ -515,9 +515,9 @@ "\n", " u.data[:] = I\n", " eqn = u.dt2 + (w**2)*u\n", - " stencil = Eq(u.forward, solve(eqn, u.forward))\n", + " stencil = Eq(u.forward, solve(eqn.evaluate, u.forward))\n", " op = Operator(stencil)\n", - " op.apply(h_t=dt, t_M=Nt-1)\n", + " summary = op.apply(h_t=dt, t_M=Nt-1)\n", " return u.data, np.linspace(0, Nt*dt, Nt+1)\n" ] }, @@ -534,7 +534,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -545,7 +545,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -575,26 +575,28 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Operator `Kernel` run in 0.01 s\n" + "Operator `Kernel` ran in 0.01 s\n", + "/mnt/c/Users/ASUS/Desktop/devito/Devito/lib/python3.10/site-packages/numpy/core/getlimits.py:549: UserWarning: The value of the smallest subnormal for type is zero.\n", + " setattr(self, word, getattr(machar, word).flat[0])\n", + "/mnt/c/Users/ASUS/Desktop/devito/Devito/lib/python3.10/site-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for type is zero.\n", + " return self._float_to_str(self.smallest_subnormal)\n" ] }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkcAAAHHCAYAAAC1G/yyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC70UlEQVR4nOydZ3gc1dWA391V7y6qK1lyLxjcKDHBlNADCSBKQgmEEBJIgFATSEJPMAmhBz5CEnoLGFFCCb0YDNjYGIx7k60uW7YlW1278/24M3d3pV1ZZXdnZve+z6NHo53Zmas9O3POPefccxyapmkoFAqFQqFQKABwmj0AhUKhUCgUCiuhjCOFQqFQKBQKP5RxpFAoFAqFQuGHMo4UCoVCoVAo/FDGkUKhUCgUCoUfyjhSKBQKhUKh8EMZRwqFQqFQKBR+KONIoVAoFAqFwg9lHCkUCoVCoVD4oYwjhUJhSW666SYcDofZw1AoFHGIMo4UCoUtuO2223j55ZfDes5du3bxi1/8gtzcXNLT0zniiCNYtmzZgN+/evVqjjvuODIyMhg5ciQ/+clP2LZtW8AxlZWVOByOoD/PPfdcWP8fhUIRHhLMHoBCoVAMhNtuu43TTjuNk08+OSzn83q9nHDCCXz99ddcc801jB49mgcffJDDDz+cpUuXMnHixH7fX11dzaGHHkp2dja33XYbe/bs4W9/+xsrVqxg8eLFJCUlBRx/5pln8v3vfz/gtblz54blf1EoFOFFGUcKhSIuWbBgAYsWLeKFF17gtNNOA+CMM85g0qRJ3HjjjTzzzDP9vv+2226jtbWVpUuXMmbMGAAOPPBAjj76aB577DF+8YtfBBw/e/ZszjnnnMj8MwqFIqyosJpCoTCdTz75hAMOOICUlBTGjx/PP/7xj4D9DoeD1tZWHn/8cRmS+ulPfzqsay5YsID8/HzKy8vla7m5uZxxxhm88sordHZ29vv+F198kRNPPFEaRgBHHXUUkyZN4vnnnw/6ntbWVrq6uoY1boVCEXmU50ihUJjKihUrOOaYY8jNzeWmm26ip6eHG2+8kfz8fHnMk08+yc9//nMOPPBA6ZEZP348AN3d3TQ3Nw/oWiNHjsTpFHPCr776itmzZ8u/DQ488EAefvhh1q1bx7777hv0PDU1NTQ2NrL//vv32XfggQfyxhtv9Hn95ptv5pprrsHhcDBnzhz+/Oc/c8wxxwxo3AqFIroo40ihUJjKDTfcgKZpLFy4UHphTj311ADD5JxzzuGiiy5i3LhxfUJTn376KUccccSArrV582bKysoAqKur49BDD+1zTGFhIQC1tbUhjaO6urqAY3u/f8eOHXR2dpKcnIzT6eSYY47hlFNOwe12s2nTJu666y6OP/54Xn31VU444YQBjV2hUEQPZRwpFArT8Hg8vPXWW5x88skB4ampU6dy7LHHBvXA9GbGjBm88847A7peQUGB3G5vbyc5ObnPMSkpKXJ/KIx9e3t/cnIyY8aM4a233go45ic/+QnTpk3jqquuUsaRQmFBlHGkUChMY9u2bbS3twddGTZ58uQBGUcjRozgqKOOGvS1U1NTg+YVdXR0yP39vRcY8vtHjhzJ+eefz+233051dTXFxcWDGrtCoYgsyjhSKBS2pqurix07dgzo2NzcXFwuFyDCX0Z4zB/jtaKiopDnMcJpod4/cuTIoF4lf0pKSgDYsWOHMo4UCouhjCOFQmEaubm5pKamsn79+j771q5dG/B3qGrZixYtGlLO0cyZM1m4cCFerzcgKfuLL74gLS2NSZMmhTyP2+0mNzeXL7/8ss++xYsXM3PmzL2OZdOmTYD4DBQKhbVQxpFCoTANl8vFsccey8svv8zWrVtl3tHq1av75Omkp6eza9euPucYas7RaaedxoIFC6ioqJB1jrZv384LL7zAD37wgwDPz8aNGwHfCjkQSeOPP/44VVVV0gv03nvvsW7dOq644gp53LZt2/oYQDU1NTzyyCPst99+QZO6FQqFuTg0TdPMHoRCoYhfvvnmGw466CDy8vL41a9+RU9PD/fffz/5+fl88803GI+oE044gY8++ohbbrmFoqIixo4dy0EHHTTk63o8Hg455BC+/fbbgArZW7duZcmSJUyePFkea3ibKisr5WtVVVXMmjWLnJwcfvOb37Bnzx7uuOMOiouLWbJkiTSuzj//fDZu3MiRRx5JUVERlZWV/OMf/2D37t289dZbHH744UP+HxQKRYTQFAqFwmQ++ugjbc6cOVpSUpI2btw47aGHHtJuvPFGzf8RtWbNGu3QQw/VUlNTNUA777zzhn3dHTt2aBdccIE2atQoLS0tTTvssMO0JUuW9DmutLRUKy0t7fP6t99+qx1zzDFaWlqalpOTo5199tlafX19wDHPPPOMduihh2q5ublaQkKCNnr0aO2UU07Rli5dOuzxKxSKyKA8RwqFQqFQKBR+qPYhCoVCoVAoFH4o40ihUCgUCoXCD2UcKRQKhUKhUPihjCOFQqFQKBQKP5RxpFAoFAqFQuGHMo4UCoVCoVAo/FAVsveC1+ultraWzMzMkO0LFAqFQqFQWAtN09i9ezdFRUUBLYIGgjKO9kJtba1sDaBQKBQKhcJeVFVVDbq5szKO9kJmZiYgPtysrCyTR6NQKBQKhWIgtLS0UFJSIvX4YFDG0V4wQmlZWVnKOFIoFAqFwmYMJSVGJWQrFAqFQqFQ+KGMI4VCoVAoFAo/lHGkUCgUCoVC4YfKOQoTHo+H7u5us4ehCAOJiYm4XC6zh6FQKBQKk1DG0TDRNI36+np27dpl9lAUYSQnJ4eCggJV20qhUCjiEGUcDRPDMMrLyyMtLU0pU5ujaRptbW00NjYCUFhYaPKIFAqFQhFtlHE0DDwejzSMRo0aZfZwFGEiNTUVgMbGRvLy8lSITaFQKOIMlZA9DIwco7S0NJNHogg3hkxVHplCoVDEH8o4CgMqlBZ7KJkqFApF/KKMI4VCoVAoFAo/lHGksAU33XQTM2fODNv5HnvsMXJycsJ2PoVCoVDEDso4sgIeD3z4ITz7rPjt8Zg9Istx9dVX895775k9DIVCoVDEAWq1mtlUVMBvfgPV1b7Xiovh3nuhvNy8cVkETdPweDxkZGSQkZFh9nAUCoVCEQcoz5GZVFTAaacFGkYANTXi9YqKiF368MMP57LLLuO3v/0tI0eOpKCggJtuugmAyspKHA4Hy5cvl8fv2rULh8PBhx9+CMCHH36Iw+HgrbfeYtasWaSmpvK9732PxsZG3nzzTaZOnUpWVhZnnXUWbW1t8jxer5f58+czduxYUlNTmTFjBgsWLJD7jfO++eabzJkzh+TkZD755JOgYbVHHnmEffbZh+TkZAoLC7nkkkvkvrvuuot9992X9PR0SkpK+NWvfsWePXvC/jkqFAqFIvZQxlEkaG0N/dPRIY7xeITHSNP6vt947Te/CQyxhTrnEHn88cdJT0/niy++4K9//Su33HIL77zzzqDOcdNNN/H3v/+dRYsWUVVVxRlnnME999zDM888w+uvv87bb7/N/fffL4+fP38+TzzxBA899BArV67kiiuu4JxzzuGjjz4KOO+1117L7bffzurVq9lvv/36XPf//u//+PWvf80vfvELVqxYwauvvsqECRPkfqfTyX333cfKlSt5/PHHef/99/ntb387yE9IoVAoFHGJpuiX5uZmDdCam5v77Gtvb9dWrVqltbe3B+4Q5k3wn+9/XxzzwQf9H2f8fPCB77yjRwc/Zggcdthh2iGHHBLw2gEHHKD97ne/0zZv3qwB2ldffSX37dy5UwO0D/TxfPDBBxqgvfvuu/KY+fPna4C2ceNG+dovf/lL7dhjj9U0TdM6Ojq0tLQ0bdGiRQHXveCCC7Qzzzwz4Lwvv/xywDE33nijNmPGDPl3UVGR9oc//GHA/+8LL7ygjRo1Sv796KOPatnZ2SGPDylbhUKhUNiC/vT33lA5R2ZRVxfe44ZAb49MYWGhbJsxlHPk5+eTlpbGuHHjAl5bvHgxABs2bKCtrY2jjz464BxdXV3MmjUr4LX9998/5DUbGxupra3lyCOPDHnMu+++y/z581mzZg0tLS309PTQ0dFBW1ubKtqpUCgUin5RxlEk6C+3xWhFMdCeXf7HVVYOeUjBSExMDPjb4XDg9XpxOkW0VfML+YWqFO1/DofDEfKcgMz5ef3113G73QHHJScnB/ydnp4ectxGe49QVFZWcuKJJ3LxxRfz5z//mZEjR/LJJ59wwQUX0NXVpYwjhUKhUPSLMo4iQT+KXTJvnliVVlMTPO/I4RD7580b3HnDQG5uLgB1dXXSo+OfnD1Upk2bRnJyMlu3buWwww4b8nkyMzMpKyvjvffe44gjjuizf+nSpXi9Xu68805p6D3//PNDvp5CoVAo4gtlHJmFyyWW6592mjCE/A0ko3XFPff4PE1RJDU1le985zvcfvvtjB07lsbGRv74xz8O+7yZmZlcffXVXHHFFXi9Xg455BCam5v59NNPycrK4rzzzhvwuW666SYuuugi8vLyOP7449m9ezeffvopl156KRMmTKC7u5v777+fH/zgB3z66ac89NBDwx6/QqFQKOIDtVrNTMrLYcEC6BViorhYvG5inaNHHnmEnp4e5syZw+WXX86f/vSnsJz31ltv5frrr2f+/PlMnTqV4447jtdff52xY8cO6jznnXce99xzDw8++CD77LMPJ554IuvXrwdgxowZ3HXXXfzlL39h+vTpPP3008yfPz8s41coFApF7OPQtGAxHYVBS0sL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1BnXNFdQvWA7FFOHXHOq0hbx8fDcc9C2rTrkmlTVUerbb4+aDtkzVW2LKDqyUGfOOcrOziYrK4vs7GyCwSBZWVlkZWVx+nTpUHi3bt1ID89U6PP5mDlzJnPnzuWdd95h586dTJ48maSkJMaPH+/R/6KWhadOoG3bssvPf7PXcHXNcs3xVW6KluLfn3wSUlOjZsjaMxdrC58PXn4ZJk1yOmQFo5rjmlKkQjq0XHvUFuXVwLfnasSUKVMMKHdb5/pKJ2CLFi0q+b34IpAJCQkWFxdnQ4cOtT179lzS89bVr/KX4brwoK1b51wW3v17BH8Vs15xXXSt5JacrOtLeUFtERnOu1KzLoTqoXrYFlfSf/vMqjLOH73y8/MJBALk5eXRvHlzr8uRui4YdE5+PHLEGaLWYRvvqC0iQ1oazJgBhw+XLktO1qFlL9SztriS/lvh6CIUjkREapiCauSoR21xJf23pydki4iI4PfrpOtIobYA6tAJ2SIiIiK1QeFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExKWB1wVEOjMDID8/3+NKREREpKqK++3ifvxSKBxdxIkTJwBITk72uBIRERG5VCdOnCAQCFzSNgpHF9GyZUsAsrOzL3nnSvXKz88nOTmZQ4cO0bx5c6/LiWpqi8ii9ogcaovIkZeXR/v27Uv68UuhcHQRMTHOaVmBQEAv9AjRvHlztUWEUFtEFrVH5FBbRI7ifvyStqmBOkRERETqLIUjEREREReFo4uIi4tjzpw5xMXFeV1K1FNbRA61RWRRe0QOtUXkuJK28NnlfMdNREREpJ7SyJGIiIiIi8KRiIiIiIvCkYiIiIiLwpGIiIiIi8LRBbz44ot07NiRhg0b0q9fPz7++GOvS4pKmZmZjB07lqSkJHw+H8uXL/e6pKj19NNP07dvX5o1a0br1q0ZP348e/bs8bqsqLRgwQJ69OhRcrHB/v37s2rVKq/LEmDevHn4fD5mzpzpdSlR6YknnsDn85W5devW7ZIeQ+GoEkuWLGHWrFnMmTOH7du3c/311zNy5EiOHj3qdWlRp6CggOuvv54XX3zR61KiXkZGBtOmTWPTpk2sWbOGc+fOMWLECAoKCrwuLeq0a9eOefPmsW3bNrZu3cqQIUMYN24cn376qdelRbUtW7awcOFCevTo4XUpUe3aa6/lyJEjJbeNGzde0vb6Kn8l+vXrR9++fXnhhRcACIVCJCcn8+CDD/LII494XF308vl8pKenM378eK9LEeDYsWO0bt2ajIwMBg0a5HU5Ua9ly5Y888wz3HfffV6XEpVOnz5Nr169eOmll5g7dy49e/Zk/vz5XpcVdZ544gmWL19OVlbWZT+GRo4qcPbsWbZt28awYcNKlsXExDBs2DA++ugjDysTiSx5eXkAlzWxo1SfYDDI4sWLKSgooH///l6XE7WmTZvGmDFjyvQd4o19+/aRlJREp06dmDRpEtnZ2Ze0vSaercDx48cJBoMkJCSUWZ6QkMDu3bs9qkoksoRCIWbOnMmAAQO47rrrvC4nKu3cuZP+/fvz3Xff0bRpU9LT0+nevbvXZUWlxYsXs337drZs2eJ1KVGvX79+vPbaa3Tt2pUjR47w5JNPMnDgQHbt2kWzZs2q9BgKRyJyWaZNm8auXbsu+Vi+VJ+uXbuSlZVFXl4eb7/9NlOmTCEjI0MBqZYdOnSIGTNmsGbNGho2bOh1OVFv9OjRJT/36NGDfv360aFDB5YuXVrlQ84KRxVo1aoVfr+f3NzcMstzc3NJTEz0qCqRyDF9+nRWrlxJZmYm7dq187qcqBUbG0vnzp0B6N27N1u2bOEPf/gDCxcu9Liy6LJt2zaOHj1Kr169SpYFg0EyMzN54YUXKCwsxO/3e1hhdGvRogVdunThs88+q/I2OueoArGxsfTu3Zu1a9eWLAuFQqxdu1bH8yWqmRnTp08nPT2dDz74gJSUFK9LEpdQKERhYaHXZUSdoUOHsnPnTrKyskpuffr0YdKkSWRlZSkYeez06dPs37+fNm3aVHkbjRxVYtasWUyZMoU+ffpwww03MH/+fAoKCvjZz37mdWlR5/Tp02US/4EDB8jKyqJly5a0b9/ew8qiz7Rp00hNTWXFihU0a9aMnJwcAAKBAI0aNfK4uujy6KOPMnr0aNq3b8+pU6dITU1l/fr1rF692uvSok6zZs3KnXfXpEkTrr76ap2P54GHH36YsWPH0qFDB7766ivmzJmD3+9n4sSJVX4MhaNK3H333Rw7dozZs2eTk5NDz549ee+998qdpC01b+vWrdx8880lv8+aNQuAKVOm8Nprr3lUVXRasGABAIMHDy6zfNGiRUydOrX2C4piR48eZfLkyRw5coRAIECPHj1YvXo1w4cP97o0EU8dPnyYiRMncuLECeLj47npppvYtGkT8fHxVX4MXedIRERExEXnHImIiIi4KByJiIiIuCgciYiIiLgoHImIiIi4KByJiIiIuCgciYiIiLgoHImIiIi4KByJiIiIuCgciUjUGjx4MDNnzvS6DBGJMApHIiIiIi6aPkREotLUqVN5/fXXyyw7cOAAHTt29KYgEYkYCkciEpXy8vIYPXo01113HU899RQA8fHx+P1+jysTEa818LoAEREvBAIBYmNjady4MYmJiV6XIyIRROcciYiIiLgoHImIiIi4KByJSNSKjY0lGAx6XYaIRBiFIxGJWh07dmTz5s0cPHiQ48ePEwqFvC5JRCKAwpGIRK2HH34Yv99P9+7diY+PJzs72+uSRCQC6Kv8IiIiIi4aORIRERFxUTgSERERcVE4EhEREXFROBIRERFxUTgSERERcVE4EhEREXFROBIRERFxUTgSERERcVE4EhEREXFROBIRERFxUTgSERERcVE4EhEREXH5fzny2819FSEgAAAAAElFTkSuQmCC", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -673,7 +675,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -788,7 +790,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -848,7 +850,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -876,7 +878,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -926,7 +928,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -1074,7 +1076,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -1087,26 +1089,24 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Operator `Kernel` run in 0.01 s\n" + "Operator `Kernel` ran in 0.01 s\n" ] }, { "data": { - "image/png": "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", + "image/png": "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ODKFQqGIPJQ4CgBqKy38UDZVKBSKyEWJI4VCoVAoFAoPlDhS2IJ77rmHGTNmBOz9nn76aVJTUwP2fgqFQqEIH5Q4sgKdnbBqFTz/vHzv7DR7RJbjtttu49133zV7GAqFQqGIAFS2mtmsWAE33QSVle7nnE545BFYvNi8cVkETdPo7Oxk6NChDB061OzhKBQKhSICUJ4jM1mxApYs8RZGAFVV8vyKFUE79Iknnsj3v/99fvjDHzJ8+HCysrK45557ACgtLcXhcLBx40bj9YcOHcLhcLBq1SoAVq1ahcPh4M0332TmzJkkJiZy8skns3fvXl5//XUmTpxIcnIy3/rWt2hqajLep6uri6VLl1JYWEhiYiLTp09n+fLlxu/193399deZPXs28fHxfPDBB3631Z588kkmT55MfHw82dnZ3HjjjcbvfvOb3zB16lSGDBlCbm4u119/PQ0NDQH/HBUKhUIRfihxFAwaG3v+ammR13R2isdI03z/Xn/uppu8t9h6es8B8swzzzBkyBA+/vhjfvWrX3Hffffx9ttv9+s97rnnHh5//HE+/PBDKioquPDCC1m2bBnPPfccr776Km+99RaPPfaY8fqlS5fy17/+lSeeeILNmzdzyy23cMkll7B69Wqv9/3Rj37EAw88wJYtW5g2bZrPcX//+99zww03cM0117Bp0yb+85//UFRUZPw+KiqKRx99lM2bN/PMM8/w3nvv8cMf/rCfn5BCoVAoIhJN0St1dXUaoNXV1fn8rrm5Wfvqq6+05uZm71+IvPH/9bWvyWtWruz9dfrXypXu901P9/+aAbBgwQJt3rx5Xs8dddRR2v/93/9pJSUlGqB99tlnxu8OHjyoAdpK13hWrlypAdo777xjvGbp0qUaoO3cudN47rvf/a62cOFCTdM0raWlRUtKStI+/PBDr+NeeeWV2kUXXeT1vi+//LLXa+6++25t+vTpxs85OTnaT37ykz7/vy+++KI2YsQI4+ennnpKS0lJ6fH1PdpWoVAoFLagt/n7SKiYI7OoqQns6wZAd49Mdna20TZjIO+RmZlJUlISo0eP9nruk08+AaC4uJimpiZOO+00r/doa2tj5syZXs/NmTOnx2Pu3buX6upqTjnllB5f884777B06VK2bt1KfX09HR0dtLS00NTUpIp2KhQKhaJXlDgKBr3FtuitKPras8vz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", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -1118,26 +1118,24 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Operator `Kernel` run in 0.01 s\n" + "Operator `Kernel` ran in 0.01 s\n" ] }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkcAAAHHCAYAAAC1G/yyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC70UlEQVR4nOydZ3gc1dWA391V7y6qK1lyLxjcKDHBlNADCSBKQgmEEBJIgFATSEJPMAmhBz5CEnoLGFFCCb0YDNjYGIx7k60uW7YlW1278/24M3d3pV1ZZXdnZve+z6NHo53Zmas9O3POPefccxyapmkoFAqFQqFQKABwmj0AhUKhUCgUCiuhjCOFQqFQKBQKP5RxpFAoFAqFQuGHMo4UCoVCoVAo/FDGkUKhUCgUCoUfyjhSKBQKhUKh8EMZRwqFQqFQKBR+KONIoVAoFAqFwg9lHCkUCoVCoVD4oYwjhUJhSW666SYcDofZw1AoFHGIMo4UCoUtuO2223j55ZfDes5du3bxi1/8gtzcXNLT0zniiCNYtmzZgN+/evVqjjvuODIyMhg5ciQ/+clP2LZtW8AxlZWVOByOoD/PPfdcWP8fhUIRHhLMHoBCoVAMhNtuu43TTjuNk08+OSzn83q9nHDCCXz99ddcc801jB49mgcffJDDDz+cpUuXMnHixH7fX11dzaGHHkp2dja33XYbe/bs4W9/+xsrVqxg8eLFJCUlBRx/5pln8v3vfz/gtblz54blf1EoFOFFGUcKhSIuWbBgAYsWLeKFF17gtNNOA+CMM85g0qRJ3HjjjTzzzDP9vv+2226jtbWVpUuXMmbMGAAOPPBAjj76aB577DF+8YtfBBw/e/ZszjnnnMj8MwqFIqyosJpCoTCdTz75hAMOOICUlBTGjx/PP/7xj4D9DoeD1tZWHn/8cRmS+ulPfzqsay5YsID8/HzKy8vla7m5uZxxxhm88sordHZ29vv+F198kRNPPFEaRgBHHXUUkyZN4vnnnw/6ntbWVrq6uoY1boVCEXmU50ihUJjKihUrOOaYY8jNzeWmm26ip6eHG2+8kfz8fHnMk08+yc9//nMOPPBA6ZEZP348AN3d3TQ3Nw/oWiNHjsTpFHPCr776itmzZ8u/DQ488EAefvhh1q1bx7777hv0PDU1NTQ2NrL//vv32XfggQfyxhtv9Hn95ptv5pprrsHhcDBnzhz+/Oc/c8wxxwxo3AqFIroo40ihUJjKDTfcgKZpLFy4UHphTj311ADD5JxzzuGiiy5i3LhxfUJTn376KUccccSArrV582bKysoAqKur49BDD+1zTGFhIQC1tbUhjaO6urqAY3u/f8eOHXR2dpKcnIzT6eSYY47hlFNOwe12s2nTJu666y6OP/54Xn31VU444YQBjV2hUEQPZRwpFArT8Hg8vPXWW5x88skB4ampU6dy7LHHBvXA9GbGjBm88847A7peQUGB3G5vbyc5ObnPMSkpKXJ/KIx9e3t/cnIyY8aM4a233go45ic/+QnTpk3jqquuUsaRQmFBlHGkUChMY9u2bbS3twddGTZ58uQBGUcjRozgqKOOGvS1U1NTg+YVdXR0yP39vRcY8vtHjhzJ+eefz+233051dTXFxcWDGrtCoYgsyjhSKBS2pqurix07dgzo2NzcXFwuFyDCX0Z4zB/jtaKiopDnMcJpod4/cuTIoF4lf0pKSgDYsWOHMo4UCouhjCOFQmEaubm5pKamsn79+j771q5dG/B3qGrZixYtGlLO0cyZM1m4cCFerzcgKfuLL74gLS2NSZMmhTyP2+0mNzeXL7/8ss++xYsXM3PmzL2OZdOmTYD4DBQKhbVQxpFCoTANl8vFsccey8svv8zWrVtl3tHq1av75Omkp6eza9euPucYas7RaaedxoIFC6ioqJB1jrZv384LL7zAD37wgwDPz8aNGwHfCjkQSeOPP/44VVVV0gv03nvvsW7dOq644gp53LZt2/oYQDU1NTzyyCPst99+QZO6FQqFuTg0TdPMHoRCoYhfvvnmGw466CDy8vL41a9+RU9PD/fffz/5+fl88803GI+oE044gY8++ohbbrmFoqIixo4dy0EHHTTk63o8Hg455BC+/fbbgArZW7duZcmSJUyePFkea3ibKisr5WtVVVXMmjWLnJwcfvOb37Bnzx7uuOMOiouLWbJkiTSuzj//fDZu3MiRRx5JUVERlZWV/OMf/2D37t289dZbHH744UP+HxQKRYTQFAqFwmQ++ugjbc6cOVpSUpI2btw47aGHHtJuvPFGzf8RtWbNGu3QQw/VUlNTNUA777zzhn3dHTt2aBdccIE2atQoLS0tTTvssMO0JUuW9DmutLRUKy0t7fP6t99+qx1zzDFaWlqalpOTo5199tlafX19wDHPPPOMduihh2q5ublaQkKCNnr0aO2UU07Rli5dOuzxKxSKyKA8RwqFQqFQKBR+qPYhCoVCoVAoFH4o40ihUCgUCoXCD2UcKRQKhUKhUPihjCOFQqFQKBQKP5RxpFAoFAqFQuGHMo4UCoVCoVAo/FAVsveC1+ultraWzMzMkO0LFAqFQqFQWAtN09i9ezdFRUUBLYIGgjKO9kJtba1sDaBQKBQKhcJeVFVVDbq5szKO9kJmZiYgPtysrCyTR6NQKBQKhWIgtLS0UFJSIvX4YFDG0V4wQmlZWVnKOFIoFAqFwmYMJSVGJWQrFAqFQqFQ+KGMI4VCoVAoFAo/lHGkUCgUCoVC4YfKOQoTHo+H7u5us4ehCAOJiYm4XC6zh6FQKBQKk1DG0TDRNI36+np27dpl9lAUYSQnJ4eCggJV20qhUCjiEGUcDRPDMMrLyyMtLU0pU5ujaRptbW00NjYCUFhYaPKIFAqFQhFtlHE0DDwejzSMRo0aZfZwFGEiNTUVgMbGRvLy8lSITaFQKOIMlZA9DIwco7S0NJNHogg3hkxVHplCoVDEH8o4CgMqlBZ7KJkqFApF/KKMI4VCoVAoFAo/lHGksAU33XQTM2fODNv5HnvsMXJycsJ2PoVCoVDEDso4sgIeD3z4ITz7rPjt8Zg9Istx9dVX895775k9DIVCoVDEAWq1mtlUVMBvfgPV1b7Xiovh3nuhvNy8cVkETdPweDxkZGSQkZFh9nAUCoVCEQcoz5GZVFTAaacFGkYANTXi9YqKiF368MMP57LLLuO3v/0tI0eOpKCggJtuugmAyspKHA4Hy5cvl8fv2rULh8PBhx9+CMCHH36Iw+HgrbfeYtasWaSmpvK9732PxsZG3nzzTaZOnUpWVhZnnXUWbW1t8jxer5f58+czduxYUlNTmTFjBgsWLJD7jfO++eabzJkzh+TkZD755JOgYbVHHnmEffbZh+TkZAoLC7nkkkvkvrvuuot9992X9PR0SkpK+NWvfsWePXvC/jkqFAqFIvZQxlEkaG0N/dPRIY7xeITHSNP6vt947Te/CQyxhTrnEHn88cdJT0/niy++4K9//Su33HIL77zzzqDOcdNNN/H3v/+dRYsWUVVVxRlnnME999zDM888w+uvv87bb7/N/fffL4+fP38+TzzxBA899BArV67kiiuu4JxzzuGjjz4KOO+1117L7bffzurVq9lvv/36XPf//u//+PWvf80vfvELVqxYwauvvsqECRPkfqfTyX333cfKlSt5/PHHef/99/ntb387yE9IoVAoFHGJpuiX5uZmDdCam5v77Gtvb9dWrVqltbe3B+4Q5k3wn+9/XxzzwQf9H2f8fPCB77yjRwc/Zggcdthh2iGHHBLw2gEHHKD97ne/0zZv3qwB2ldffSX37dy5UwO0D/TxfPDBBxqgvfvuu/KY+fPna4C2ceNG+dovf/lL7dhjj9U0TdM6Ojq0tLQ0bdGiRQHXveCCC7Qzzzwz4Lwvv/xywDE33nijNmPGDPl3UVGR9oc//GHA/+8LL7ygjRo1Sv796KOPatnZ2SGPDylbhUKhUNiC/vT33lA5R2ZRVxfe44ZAb49MYWGhbJsxlHPk5+eTlpbGuHHjAl5bvHgxABs2bKCtrY2jjz464BxdXV3MmjUr4LX9998/5DUbGxupra3lyCOPDHnMu+++y/z581mzZg0tLS309PTQ0dFBW1ubKtqpUCgUin5RxlEk6C+3xWhFMdCeXf7HVVYOeUjBSExMDPjb4XDg9XpxOkW0VfML+YWqFO1/DofDEfKcgMz5ef3113G73QHHJScnB/ydnp4ectxGe49QVFZWcuKJJ3LxxRfz5z//mZEjR/LJJ59wwQUX0NXVpYwjhUKhUPSLMo4iQT+KXTJvnliVVlMTPO/I4RD7580b3HnDQG5uLgB1dXXSo+OfnD1Upk2bRnJyMlu3buWwww4b8nkyMzMpKyvjvffe44gjjuizf+nSpXi9Xu68805p6D3//PNDvp5CoVAo4gtlHJmFyyWW6592mjCE/A0ko3XFPff4PE1RJDU1le985zvcfvvtjB07lsbGRv74xz8O+7yZmZlcffXVXHHFFXi9Xg455BCam5v59NNPycrK4rzzzhvwuW666SYuuugi8vLyOP7449m9ezeffvopl156KRMmTKC7u5v777+fH/zgB3z66ac89NBDwx6/QqFQKOIDtVrNTMrLYcEC6BViorhYvG5inaNHHnmEnp4e5syZw+WXX86f/vSnsJz31ltv5frrr2f+/PlMnTqV4447jtdff52xY8cO6jznnXce99xzDw8++CD77LMPJ554IuvXrwdgxowZ3HXXXfzlL39h+vTpPP3008yfPz8s41coFApF7OPQtGAxHYVBS0sL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1BnXNFdQvWA7FFOHXHOq0hbx8fDcc9C2rTrkmlTVUerbb4+aDtkzVW2LKDqyUGfOOcrOziYrK4vs7GyCwSBZWVlkZWVx+nTpUHi3bt1ID89U6PP5mDlzJnPnzuWdd95h586dTJ48maSkJMaPH+/R/6KWhadOoG3bssvPf7PXcHXNcs3xVW6KluLfn3wSUlOjZsjaMxdrC58PXn4ZJk1yOmQFo5rjmlKkQjq0XHvUFuXVwLfnasSUKVMMKHdb5/pKJ2CLFi0q+b34IpAJCQkWFxdnQ4cOtT179lzS89bVr/KX4brwoK1b51wW3v17BH8Vs15xXXSt5JacrOtLeUFtERnOu1KzLoTqoXrYFlfSf/vMqjLOH73y8/MJBALk5eXRvHlzr8uRui4YdE5+PHLEGaLWYRvvqC0iQ1oazJgBhw+XLktO1qFlL9SztriS/lvh6CIUjkREapiCauSoR21xJf23pydki4iI4PfrpOtIobYA6tAJ2SIiIiK1QeFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExEXhSERERMRF4UhERETEReFIRERExKWB1wVEOjMDID8/3+NKREREpKqK++3ifvxSKBxdxIkTJwBITk72uBIRERG5VCdOnCAQCFzSNgpHF9GyZUsAsrOzL3nnSvXKz88nOTmZQ4cO0bx5c6/LiWpqi8ii9ogcaovIkZeXR/v27Uv68UuhcHQRMTHOaVmBQEAv9AjRvHlztUWEUFtEFrVH5FBbRI7ifvyStqmBOkRERETqLIUjEREREReFo4uIi4tjzpw5xMXFeV1K1FNbRA61RWRRe0QOtUXkuJK28NnlfMdNREREpJ7SyJGIiIiIi8KRiIiIiIvCkYiIiIiLwpGIiIiIi8LRBbz44ot07NiRhg0b0q9fPz7++GOvS4pKmZmZjB07lqSkJHw+H8uXL/e6pKj19NNP07dvX5o1a0br1q0ZP348e/bs8bqsqLRgwQJ69OhRcrHB/v37s2rVKq/LEmDevHn4fD5mzpzpdSlR6YknnsDn85W5devW7ZIeQ+GoEkuWLGHWrFnMmTOH7du3c/311zNy5EiOHj3qdWlRp6CggOuvv54XX3zR61KiXkZGBtOmTWPTpk2sWbOGc+fOMWLECAoKCrwuLeq0a9eOefPmsW3bNrZu3cqQIUMYN24cn376qdelRbUtW7awcOFCevTo4XUpUe3aa6/lyJEjJbeNGzde0vb6Kn8l+vXrR9++fXnhhRcACIVCJCcn8+CDD/LII494XF308vl8pKenM378eK9LEeDYsWO0bt2ajIwMBg0a5HU5Ua9ly5Y888wz3HfffV6XEpVOnz5Nr169eOmll5g7dy49e/Zk/vz5XpcVdZ544gmWL19OVlbWZT+GRo4qcPbsWbZt28awYcNKlsXExDBs2DA++ugjDysTiSx5eXkAlzWxo1SfYDDI4sWLKSgooH///l6XE7WmTZvGmDFjyvQd4o19+/aRlJREp06dmDRpEtnZ2Ze0vSaercDx48cJBoMkJCSUWZ6QkMDu3bs9qkoksoRCIWbOnMmAAQO47rrrvC4nKu3cuZP+/fvz3Xff0bRpU9LT0+nevbvXZUWlxYsXs337drZs2eJ1KVGvX79+vPbaa3Tt2pUjR47w5JNPMnDgQHbt2kWzZs2q9BgKRyJyWaZNm8auXbsu+Vi+VJ+uXbuSlZVFXl4eb7/9NlOmTCEjI0MBqZYdOnSIGTNmsGbNGho2bOh1OVFv9OjRJT/36NGDfv360aFDB5YuXVrlQ84KRxVo1aoVfr+f3NzcMstzc3NJTEz0qCqRyDF9+nRWrlxJZmYm7dq187qcqBUbG0vnzp0B6N27N1u2bOEPf/gDCxcu9Liy6LJt2zaOHj1Kr169SpYFg0EyMzN54YUXKCwsxO/3e1hhdGvRogVdunThs88+q/I2OueoArGxsfTu3Zu1a9eWLAuFQqxdu1bH8yWqmRnTp08nPT2dDz74gJSUFK9LEpdQKERhYaHXZUSdoUOHsnPnTrKyskpuffr0YdKkSWRlZSkYeez06dPs37+fNm3aVHkbjRxVYtasWUyZMoU+ffpwww03MH/+fAoKCvjZz37mdWlR5/Tp02US/4EDB8jKyqJly5a0b9/ew8qiz7Rp00hNTWXFihU0a9aMnJwcAAKBAI0aNfK4uujy6KOPMnr0aNq3b8+pU6dITU1l/fr1rF692uvSok6zZs3KnXfXpEkTrr76ap2P54GHH36YsWPH0qFDB7766ivmzJmD3+9n4sSJVX4MhaNK3H333Rw7dozZs2eTk5NDz549ee+998qdpC01b+vWrdx8880lv8+aNQuAKVOm8Nprr3lUVXRasGABAIMHDy6zfNGiRUydOrX2C4piR48eZfLkyRw5coRAIECPHj1YvXo1w4cP97o0EU8dPnyYiRMncuLECeLj47npppvYtGkT8fHxVX4MXedIRERExEXnHImIiIi4KByJiIiIuCgciYiIiLgoHImIiIi4KByJiIiIuCgciYiIiLgoHImIiIi4KByJiIiIuCgciUjUGjx4MDNnzvS6DBGJMApHIiIiIi6aPkREotLUqVN5/fXXyyw7cOAAHTt29KYgEYkYCkciEpXy8vIYPXo01113HU899RQA8fHx+P1+jysTEa818LoAEREvBAIBYmNjady4MYmJiV6XIyIRROcciYiIiLgoHImIiIi4KByJSNSKjY0lGAx6XYaIRBiFIxGJWh07dmTz5s0cPHiQ48ePEwqFvC5JRCKAwpGIRK2HH34Yv99P9+7diY+PJzs72+uSRCQC6Kv8IiIiIi4aORIRERFxUTgSERERcVE4EhEREXFROBIRERFxUTgSERERcVE4EhEREXFROBIRERFxUTgSERERcVE4EhEREXFROBIRERFxUTgSERERcVE4EhEREXH5fzny2819FSEgAAAAAElFTkSuQmCC", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -1170,7 +1168,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -1509,7 +1507,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ @@ -1538,7 +1536,7 @@ " p = [] # list of plot objects\n", " # Make the first figure\n", " p_ = plt.figure(\n", - " width=300, plot_height=250, title=legends[0],\n", + " width=300, height=250, title=legends[0],\n", " x_axis_label='t', y_axis_label='u',\n", " x_range=t_range, y_range=u_range, tools=tools)\n", " p_.xaxis.axis_label_text_font_size=font_size\n", @@ -1552,7 +1550,7 @@ " # the first figure's axes\n", " for i in range(1, len(t)):\n", " p_ = plt.figure(\n", - " width=300, plot_height=250, title=legends[i],\n", + " width=300, height=250, title=legends[i],\n", " x_axis_label='t', y_axis_label='u',\n", " x_range=p[0].x_range, y_range=p[0].y_range, tools=tools)\n", " p_.xaxis.axis_label_text_font_size = font_size\n", @@ -1575,7 +1573,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ @@ -1609,18 +1607,18 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Operator `Kernel` run in 0.01 s\n", - "Operator `Kernel` run in 0.01 s\n", - "Operator `Kernel` run in 0.01 s\n", - "Operator `Kernel` run in 0.01 s\n", - "Operator `Kernel` run in 0.01 s\n" + "Operator `Kernel` ran in 0.01 s\n", + "Operator `Kernel` ran in 0.01 s\n", + "Operator `Kernel` ran in 0.01 s\n", + "Operator `Kernel` ran in 0.01 s\n", + "Operator `Kernel` ran in 0.01 s\n" ] } ], @@ -1646,7 +1644,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 42, "metadata": {}, "outputs": [], "source": [ @@ -1684,7 +1682,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -1866,7 +1864,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 44, "metadata": {}, "outputs": [], "source": [ @@ -1901,7 +1899,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 45, "metadata": {}, "outputs": [], "source": [ @@ -1931,7 +1929,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 46, "metadata": {}, "outputs": [], "source": [ @@ -1989,7 +1987,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 47, "metadata": {}, "outputs": [], "source": [ @@ -2043,40 +2041,36 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Operator `Kernel` run in 0.01 s\n", - "Operator `Kernel` run in 0.01 s\n", - "Operator `Kernel` run in 0.01 s\n" + "Operator `Kernel` ran in 0.01 s\n", + "Operator `Kernel` ran in 0.01 s\n", + "Operator `Kernel` ran in 0.01 s\n" ] }, { "data": { - "image/png": "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Y0fM/8vNzY08Nu6/Hd/atWv56U9/ygUXXMDixYspKSlJKrZob775Jps3b+bdd9+loKCA5cuX097eTlFREZ988gmvvvoq69ev509/+hO//vWvE8YuhEgfqexMwcqVK/ntb38b+dtMaueddx5PPfUUAK+88grHjx8HYPz48Rw7dgy/309HRwd/+ctfABg9ejQVFRU888wzgJG0P/nkk4TvfdFFF7FhwwZaW1sBaGhoAIyRlxdffDG33nprr+qWH/3oR5ESd7QVK1bw8MMPA0YdeVNTE01NTRQVFVFQUMCePXt47733APD5fIRCIdauXcs999zDRx99dFKxCyGGhyT0FNx///1UV1ezYMEC5s6dy/r16wH4yU9+wrZt25g3bx7PPfccU6dOBSA7O5u77rqLZcuWcdFFFzF79uzIaz355JM8+uijVFZWMm/ePF588cWE771q1SouvfRSlixZQlVVVa+eJNdeey0Oh4OVK1dGln322WdMmDCh3+v85je/4Y033mD+/PksXryYXbt2sWrVKrq7u5kzZw533nknZ555JgB1dXUsX76cqqoqvvWtb/Gv//qvCWP/8MMPKSsr45lnnmHdunXMm2eNqywhRgo10CX9UFmyZImurq7utWz37t3MmTMnLfEMpvLycqqrq3G73cPyfvfeey9NTU38/Oc/jyy7+OKLefXVV4fl/VNll/0sRDoopbZrrZfEWmfZOnSRnCuuuIIDBw7062Vi1WQuhBg6ktCHgNfrHbb3ilVPLoQYmaQOXQghbEISuhBC2IQkdCGEsAlJ6EIIYROS0PuQ6XNP3n333cfcuXNZsGABK1as4NChQ+kOSYgRRRJ6Hw899BCvv/46Tz75ZK/l3d3daYoocyxcuJDq6mo+/fRTrrzySn7wgx+kOyQhRhRJ6FFk+txTmz73a1/7WmTysDPPPJPa2tqT3hdCiNRZtx/6K3fCl58N7mtOmA+r/0fc1TJ97uBNn/voo4+yevXqAT8HIcTgSSqhK6W8wAkgCHT3HXaqlFoOvAh4woue01r/bPDCTB+ZPjf16XOfeOIJqqur2bp1a8JYhBCDK5US+te01r4E69/SWn/9VAOKSFCSHk4yfW5q0+du3ryZX/ziF2zdurXXdgghhp7UoadAps9NPH3uxx9/zLp163jppZcYN25c0p+rEGJwJJvQNfCaUmq7UurmOM85Syn1iVLqFaWULedNlelzE0+f+/3vf5+WlhauuuoqqqqquPTSS0/mYxZCnKSkps9VSk3WWtcppcYBrwN3aK23Ra0fDYS01i1KqUuA32itZ8Z4nZuBmwGmTp26uG8/ZbtMqyrT5yZml/0sRDqc8vS5Wuu68O9jSqnngWXAtqj1zVGPNyqlHlJKufvWuWutHwEeAWM+9JS3RPQj0+cKIUwDJnSllAtwaK1PhB+vBH7W5zkTgKNaa62UWoZRleMfioAzgUyfK4RIh2RK6OOB55VS5vOf0lpvUkrdAqC1Xg9cCdyqlOoG2oCrdbpuhSSEECPUgAlda30QqIyxfH3U4weABwY3NCGEEKmQbotCCGETktCFEMImJKH3IdPnnrz169czf/58qqqqOOecc3pNkyCEGHrWnZwrTR566CE2b95MWVlZr+Xd3d1kZcnHlcg111zDLbfcAsBLL73EP/3TP7Fp06Y0RyXEyCEl9Cgyfe6pTZ87evToyPsEAgHCPaOEEMPEskXOX37wS/Y07BnU15xdPJsfLvth3PUyfe6pT5/74IMPct9999HZ2dlvsJMQYmhZNqFbhUyfm9r0ubfffju33347Tz31FPfccw+/+93vEsYjhBg8lk3oiUrSw0mmz01t+lzT1Vdfza233ppyLEKIkyd16CmQ6XMTT5+7b9++yPu8/PLLzJzZb342IcQQkoSeApk+N/H0uQ888ADz5s2jqqqK++67T6pbhBhmSU2fOxSWLFmiq6urey2zy7SqMn1uYnbZz0KkwylPnyusS6bPFUKYJKEPAZk+VwiRDlKHLoQQNiEJXQghbEISuhBC2IQkdCGEsAlJ6MPohRdeiDulbH19PWeccQYLFy7krbfeGubIhBB2IAl9GCVK6H/961+ZP38+H3/8Meeee26vdcFgcDjCE0JkOEnofTzxxBMsW7aMqqoq1q1bRzAY5MMPP2TBggW0t7cTCASYN28eO3fupKWlhRUrVrBo0SLmz5/fa7Tn73//exYsWEBlZSXXXXcd77zzDi+99BLf//73qaqq4sCBA5Hn7tixgx/84Ae8+OKLVFVV0dbWxqhRo/je975HZWUl7777bsy4ADZs2MBpp53GsmXLuOmmm/j7v/97wJiGN3rq3VGjRkUe/9u//RtLly5lwYIF/OQnPwGMrpZz5szhpptuYt68eaxcuZK2tjYA9u/fz4UXXkhlZSWLFi3iwIEDXH/99bzwwguR17z22msHHO0qhBhiWuu0/CxevFj3tWvXrl5/n3/++f1+HnzwQa211oFAIOb6DRs2aK21rq+v77duILt27dJf//rXdWdnp9Za61tvvVX/7ne/01pr/eMf/1h/73vf07fddpv+l3/5F6211l1dXbqpqSnyfjNmzNChUEjv3LlTz5w5U9fX12uttfb7/VprrW+44Qb9zDPPxHzvDRs26Ntvvz3yN6CffvrphHEdOXJET5kyRR87dkx3dHTos88+O/Iafd/L5XJprbV+9dVX9U033aRDoZAOBoN6zZo1euvWrdrj8Win06k//vhjrbXWV111lf7DH/6gtdZ62bJl+rnnntNaa93W1qYDgYB+88039WWXXaa11rqxsVGXl5frrq6uAT9jc3uEECcHqNZx8qoMLIry17/+le3bt7N06VIA2traGDduHAB33XUXS5cuJS8vj/vvvx8wTob//M//zLZt23A4HNTV1XH06FG2bNnCVVddFRn6b051mwqn08natWsTxvX++++zfPlySktLAfi7v/s7Pv/884Sv+9prr/Haa6+xcOFCwJjKd9++fUydOpWKigqqqqoAWLx4MV6vlxMnTlBXV8cVV1wBEJlp8vzzz+e2226jvr6eP//5z6xdu1bu6CREmln6G/jmm2/GXVdQUJBwvdvtTrg+Fq01N9xwQ2QSqmh+v5+Wlha6urpob2/H5XLx5JNPUl9fz/bt28nOzqa8vDwyRe6pysvLw+l0Jowrusqjr+ipe0OhEJ2dnZHX+tGPfsS6det6Pd/r9faattfpdEaqXOK5/vrreeKJJ/jjH//Ihg0bkt84IcSQkDr0KCtWrODZZ5/l2LFjgDFF7aFDhwBYt24dP//5z7n22mv54Q+NudqbmpoYN24c2dnZvPHGG5HnXnDBBTzzzDP4/f7I6wAUFhZy4sSJQYvrjDPOYOvWrfj9frq6uiJT2oIxQdj27dsB4/6eXV1dgDFp12OPPRa5U1FdXV3kdWMpLCykrKwscvLo6OiITOF744038utf/xqAuXPnprxdQojBZekS+nCbO3cu99xzDytXriQUCpGdnc2DDz7I1q1byc7O5pprriEYDHL22WezZcsWrr32Wr7xjW8wf/58lixZEpked968efz4xz/m/PPPx+l0snDhQh5//HGuvvpqbrrpJu6//36effZZZsyYcUpxnXnmmdx9992cddZZjB07NlJdAnDTTTdx2WWXUVlZyapVqyI36li5ciW7d+/mrLPOAozG0ieeeCJyNRDLH/7wB9atW8ddd91FdnY2zzzzDNOnT2f8+PHMmTOHyy+//GQ/ciHEIJLpc23k8ccfp7q6mgceeGBY3q+1tZX58+fz0UcfRW5llwzZz0KcvETT50qVizgpmzdvZs6cOdxxxx0pJXMhxNCRKhcbufHGG7nxxhuH5b0uvPDCSJuBEMIapIQuhBA2YbmEnq46fTE8ZP8KMXQsldDz8vLw+/3ypbcprTV+vz8yOEkIMbgsVYdeVlZGbW0t9fX16Q5FDJG8vDzKysrSHYYQtmSphJ6dnU1FRUW6wxBCiIxkqSoXIYQQJ08SuhBC2IQkdCGEsIm0Df1XSp0A9qblzU+OG/ClO4gUSLxDS+IdepkW83DFO01rXRprRTobRffGm4/AipRS1RLv0JF4h1amxQuZF7MV4pUqFyGEsAlJ6EIIYRPpTOiPpPG9T4bEO7Qk3qGVafFC5sWc9njT1igqhBBicEmVixBC2ERaErpSapVSaq9Sar9S6s50xJAKpZRXKfWZUmqHUqp64P8YXkqpx5RSx5RSO6OWFSulXldK7Qv/LkpnjNHixHu3Uqou/BnvUEpdks4Yoymlpiil3lBK7VJK/YdS6h/Cyy35GSeI15KfsVIqTyn1gVLqk3C8Pw0vr1BKvR/OE08rpXLSHSskjPdxpZQn6vOtGui1Bp3Welh/ACdwAJgO5ACfAHOHO44UY/YC7nTHkSC+84BFwM6oZf8TuDP8+E7gl+mOc4B47wb+e7pjixPvRGBR+HEh8Dkw16qfcYJ4LfkZAwoYFX6cDbwPnAn8Cbg6vHw9cGu6Yx0g3seBK9MZWzpK6MuA/Vrrg1rrTuCPwGVpiMM2tNbbgIY+iy8Dfhd+/DvAMndyjhOvZWmtv9BafxR+fALYDUzGop9xgngtSRtawn9mh380cAHwbHi5lT7fePGmXToS+mSgJurvWix8sIVp4DWl1Hal1M3pDiZJ47XWX4QffwmMT2cwSfp7pdSn4SoZS1Rf9KWUKgcWYpTKLP8Z94kXLPoZK6WcSqkdwDHgdYyr+EatdXf4KZbKE33j1Vqbn+8vwp/vr5RSucMdlzSKJuccrfUiYDVwu1LqvHQHlAptXBtaogSRwMPADKAK+AL4X+kNpz+l1Cjgz8B/01o3R6+z4mccI17LfsZa66DWugoow7iKn53mkBLqG69S6nTgRxhxLwWKgR8Od1zpSOh1wJSov8vCyyxLa10X/n0MeB7jgLO6o0qpiQDh38fSHE9CWuuj4S9JCPg/WOwzVkplYyTHJ7XWz4UXW/YzjhWv1T9jAK11I/AGcBYwVillTk9iyTwRFe+qcFWX1lp3ABtIw+ebjoT+ITAz3IKdA1wNvJSGOJKilHIppQrNx8BKYGfi/7KEl4Abwo9vAF5MYywDMhNj2BVY6DNWSingUWC31vq+qFWW/IzjxWvVz1gpVaqUGht+nA9chFHv/wZwZfhpVvp8Y8W7J+rkrjDq+4f9803LwKJwd6lfY/R4eUxr/YthDyJJSqnpGKVyMCYze8pq8Sql/h1YjjHb21HgJ8ALGL0EpgKHgP+stbZEQ2SceJdjVAVojF5F66Lqp9NKKXUO8BbwGRAKL/5njHppy33GCeL9Jhb8jJVSCzAaPZ0Yhcw/aa1/Fv7u/RGj+uJj4Fvh0m9aJYh3C1CK0QtmB3BLVOPp8MSWjoQuhBBi8EmjqBBC2IQkdCGEsAlJ6EIIYROS0IUQwiYkoQshhE1IQhdCCJuQhC6EEDYhCV0IIWzi/wMbH4TWPnzCDgAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABskklEQVR4nO3deXxTVf438E+SpumeUihtSkvZyqLsjDCAFQQEBXlwnMGNEQpYHxWGYR7x5zDPjIPLI+MogzoqbtDyExGZQXDUnygILYjIKgiKLKXYFgpl6940aXKeP27vbdI2bZIut0k+79erL5rkJDk93OV7z/meczVCCAEiIiIilWjVrgAREREFNgYjREREpCoGI0RERKQqBiNERESkKgYjREREpCoGI0RERKQqBiNERESkKgYjREREpKogtSvgDrvdjgsXLiAyMhIajUbt6hAREZEbhBAoKytDQkICtFrX/R8+EYxcuHABSUlJaleDiIiIvJCfn4/ExESXr3sUjPTo0QM///xzg+cfe+wxvP766w2ez8zMxNy5c52eMxgMMJvNnnwtIiMjAUh/TFRUlEfvJSIiInWUlpYiKSlJOY+74lEwcuDAAdhsNuXx8ePHcdttt2HmzJku3xMVFYWTJ08qj70ZZpHfExUVxWCEiIjIxzR37vcoGImNjXV6/Le//Q29e/fGuHHjmqxAfHy8J19DREREAcTr2TQWiwXr1q3DvHnzmox4ysvLkZycjKSkJMyYMQM//PCDt19JREREfsjrYGTLli0oLi5GWlqayzL9+vXDmjVr8PHHH2PdunWw2+0YM2YMCgoKmvzs6upqlJaWOv0QERGRf9IIIYQ3b5wyZQqCg4PxySefuP0eq9WKAQMG4P7778ezzz7rstyyZcvw9NNPN3i+pKSEOSNEREQ+orS0FEajsdnzt1c9Iz///DO2b9+Ohx56yKP36fV6DBs2DGfOnGmy3NKlS1FSUqL85Ofne1NNIiIi8gFeBSMZGRno2rUrpk2b5tH7bDYbjh07BpPJ1GQ5g8GgzJzhDBoiIiL/5nEwYrfbkZGRgTlz5iAoyHkyzuzZs7F06VLl8TPPPIMvv/wSZ8+exeHDh/Hb3/4WP//8s8c9KkREROS/PF6Bdfv27cjLy8O8efMavJaXl+e03Ov169eRnp6OixcvolOnThgxYgS++eYb3HDDDS2rNREREfkNrxNY25O7CTBERETUcbRpAisRERFRa2EwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESq8igY6dGjBzQaTYOfBQsWuHzPv/71L/Tv3x8hISEYNGgQ/ud//qfFlSYiIiL/4VEwcuDAARQWFio/27ZtAwDMnDmz0fLffPMN7r//fsyfPx/fffcd7rrrLtx11104fvx4y2tOREREfkEjhBDevnnx4sX49NNPcfr0aWg0mgav33vvvaioqMCnn36qPPfLX/4SQ4cOxZtvvun295SWlsJoNKKkpARRUVHeVpeIiIjakbvnb69zRiwWC9atW4d58+Y1GogAwN69ezFp0iSn56ZMmYK9e/c2+dnV1dUoLS11+iEiIiL/5HUwsmXLFhQXFyMtLc1lmYsXLyIuLs7pubi4OFy8eLHJz16+fDmMRqPyk5SU5G01iYiIqIPzOhhZvXo17rjjDiQkJLRmfQAAS5cuRUlJifKTn5/f6t+hpivl1Sg1W9Wuhs+prrHhfHGV2tXwOUII/Hy1Ana71yOyAauo1IyK6hq1q+FzzFYbCku4r3pK3ldbkD3hs7wKRn7++Wds374dDz30UJPl4uPjcenSJafnLl26hPj4+CbfZzAYEBUV5fTjL8qra3DrS1m467U9AbnBtcTiDUcw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", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" }, { "data": { - "image/png": "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LGh4aEIIISxBzjQSQgg7J4leCCHsnCR6IYSwc5LohRDCzkmiF0IIOyeJXggh7JwkeiGEsHOS6IUQws5JohdCCDsniV4IIeycJHohhLBzkuiFEMLOSaIXQgg7J4leCCHsnCR6IYSwc5LohRDCzkmiF0IIOyeJXggh7JxZiV4pNUYpdUgpdVQp9cxFyjsppX5SSu1VSm1WSgVVKStTSsWabt9YMnghhBD1q/easUopR+A94EYgGdillPpGa32gymRvAIu11ouUUiOBV4ApprICrXW4heMWQghhJnNa9AOBo1rr41rrYmA5MK7GNMHARtPjTRcpF0IIYSPmJPr2QFKV58mm16raA9xhenw74KWU8jU9d1NKRSmltiulbqtrIUqp6abpotLT080MXwghRH0stTP2SeA6pdRu4DogBSgzlXXSWkcCk4C3lFLdLjYDrfV8rXWk1jrS39/fQmEJIYSot48eI2l3qPI8yPRaJa31KUwteqWUJzBea51lKksx3R9XSm0G+gHHGh25EEIIs5jTot8FdFdKdVFKuQB3AdWOnlFK+SmlKub1LLDA9HorpZRrxTTANUDVnbhCCCGsrN5Er7UuBWYCPwDxwBda6/1KqblKqVtNkw0HDimlDgNtgJdNr/cGopRSezB20r5a42gdIYQQVqa01raOoZbIyEgdFRVl6zCEEOKKoZSKNu0PrUXOjBVCCDsniV4IIeycJHohhLBzkuiFEMLOSaIXQgg7J4leCCHsnCR6IYSwc5LohRDCzpkz1k2zUFJSQnJyMoWFhbYORViJm5sbQUFBODs72zoUIezKFZPok5OT8fLyonPnziilbB2OsDCtNRkZGSQnJ9OlSxdbhyOEXblium4KCwvx9fWVJG+nlFL4+vrKPzYhrOCKSfSAJHk7J/UrhHVcUYleCCFEw0mibwY8PT0BOHXqFH/84x8BiI2NZd26dQ2e15w5c3jjjTcsGp8lZGRkMGLECDw9PZk5c6atwxHid0USfTMSGBjIihUrgMtP9M2Vm5sbL774YrPcCAlh766Yo26q+uea/Rw4lWPReQYHevPCLSGXnOa2224jKSmJwsJCHnvsMaZPnw4YLfKHHnqIdevW0a5dO/71r3/x9NNPk5iYyFtvvcWtt97KwoULWbVqFdnZ2aSkpDB58mReeOGFavM/efIkN998MzExMTz//PMUFBSw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", + "image/png": "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", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -2306,7 +2300,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 49, "metadata": {}, "outputs": [ { @@ -2370,7 +2364,7 @@ "program [`vib_plot_freq.py`](https://github.com/devitocodes/devito_book/blob/master/fdm-devito-notebooks/01_vib/src-vib/vib_plot_freq.py)).\n", "Although $\\tilde\\omega$ is a function of $\\Delta t$ in\n", "([19](#vib:ode1:tildeomega:series)), it is misleading to think of\n", - "$\\Delta t$ as the important discretization parameter. mathcal{I}_t is the\n", + "$\\Delta t$ as the important discretization parameter. It is the\n", "product $\\omega\\Delta t$ that is the key discretization\n", "parameter. This quantity reflects the *number of time steps per\n", "period* of the oscillations. To see this, we set $P=N_P\\Delta t$,\n", @@ -2543,7 +2537,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 50, "metadata": {}, "outputs": [ { @@ -2555,7 +2549,7 @@ "w" ] }, - "execution_count": 34, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -2587,7 +2581,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 51, "metadata": {}, "outputs": [ { @@ -2599,7 +2593,7 @@ "w + dt**2*w**3/24 + O(dt**4)" ] }, - "execution_count": 35, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -2623,7 +2617,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -2635,7 +2629,7 @@ "dt**2*w**3/24 + w" ] }, - "execution_count": 36, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -2656,7 +2650,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 53, "metadata": {}, "outputs": [ { @@ -2668,7 +2662,7 @@ "dt**2*t*w**3*sin(t*w)/24 + dt**4*t**2*w**6*cos(t*w)/1152 + O(dt**6)" ] }, - "execution_count": 37, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } @@ -2690,7 +2684,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 54, "metadata": {}, "outputs": [ { @@ -2702,7 +2696,7 @@ "dt**2*t*w**3*sin(t*w)/24" ] }, - "execution_count": 38, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" } @@ -3858,7 +3852,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 55, "metadata": {}, "outputs": [ { @@ -3870,7 +3864,7 @@ "1 + n*p**2/2 + O(p**4)" ] }, - "execution_count": 15, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } @@ -3896,7 +3890,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 56, "metadata": {}, "outputs": [ { @@ -3908,7 +3902,7 @@ "n*(p - p**3/3 + O(p**4))" ] }, - "execution_count": 16, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } @@ -4808,7 +4802,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 57, "metadata": {}, "outputs": [], "source": [ @@ -4818,7 +4812,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ @@ -4841,8 +4835,8 @@ " eq_v = Eq(v.dt, -(w**2)*u)\n", " eq_u = Eq(u.dt, v.forward)\n", " \n", - " stencil_v = solve(eq_v, v.forward)\n", - " stencil_u = solve(eq_u, u.forward)\n", + " stencil_v = solve(eq_v.evaluate, v.forward)\n", + " stencil_u = solve(eq_u.evaluate, u.forward)\n", " \n", " update_v = Eq(v.forward, stencil_v)\n", " update_u = Eq(u.forward, stencil_u)\n", @@ -4863,26 +4857,24 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 59, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Operator `Kernel` run in 0.01 s\n" + "Operator `Kernel` ran in 0.01 s\n" ] }, { "data": { - "image/png": "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", + "image/png": "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4tO8efMAGDZsWI3t8+fPZ8qUKee+QXHs0KFDTJo0iQMHDpCcnEyfPn1Yvnw5o0aNcrtpIq7617/+xc0338yRI0dISUlh8ODBbNy4kZSUlIh/huY5EhEREXHQmCMRERERByVHIiIiIg5KjkREREQclByJiIiIOCg5EhEREXFQciQiIiLioORIRERExEHJkYiIiIiDkiMRiVvDhg1j+vTpbjdDRBoYJUciIiIiDlo+RETi0pQpU3j55ZdrbNu7dy/dunVzp0Ei0mAoORKRuFRSUsK4cePo3bs3jzzyCAApKSl4vV6XWyYibmvudgNERNyQnJxMQkICrVq1Ii0tze3miEgDojFHIiIiIg5KjkREREQclByJSNxKSEjA5/O53QwRaWCUHIlI3OrWrRu5ubns27eP4uJiKisr3W6SiDQASo5EJG7dfffdeL1eLrnkElJSUigoKHC7SSLSAOhWfhEREREHVY5EREREHJQciYiIiDgoORIRERFxUHIkIiIi4qDkSERERMRByZGIiIiIg5IjEREREQclRyIiIiIOSo5EREREHJQciYiIiDgoORIRERFxUHIkIiIi4vD/Aasu6NNxD54WAAAAAElFTkSuQmCC", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -4922,7 +4914,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 60, "metadata": {}, "outputs": [], "source": [ @@ -5490,7 +5482,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 64, "metadata": {}, "outputs": [], "source": [ @@ -5513,8 +5505,8 @@ " eq_u = Eq(u.dt, v)\n", " eq_v = Eq(v.dt, -(w**2)*u.forward)\n", " \n", - " stencil_u = solve(eq_u, u.forward)\n", - " stencil_v = solve(eq_v, v.forward)\n", + " stencil_u = solve(eq_u.evaluate, u.forward)\n", + " stencil_v = solve(eq_v.evaluate, v.forward)\n", " \n", " update_u = Eq(u.forward, stencil_u)\n", " update_v = Eq(v.forward, stencil_v)\n", @@ -5541,26 +5533,24 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 65, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Operator `Kernel` run in 0.01 s\n" + "Operator `Kernel` ran in 0.01 s\n" ] }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkcAAAHHCAYAAAC1G/yyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC5yElEQVR4nOydd3gc1fW/39Wqd8mSJe+qWZa7wZUaih2KSYAApgVCCSEQAuSbACFAQqgJJo2EEBIS8nOA0IsgJISOTegY09yb+q6KbfUu7c7vj7uzO7taybK0uzOze9/n0QOWRjPXPjtzz5zzOedYFEVRkEgkEolEIpEAEKf3AiQSiUQikUiMhHSOJBKJRCKRSDRI50gikUgkEolEg3SOJBKJRCKRSDRI50gikUgkEolEg3SOJBKJRCKRSDRI50gikUgkEolEg3SOJBKJRCKRSDRI50gikUgkEolEg3SOJBKJIbntttuwWCx6L0MikcQg0jmSSCSm4K677uKFF14I6Tnb29u5/PLLyc/PJy0tjRUrVvDpp5+O+/e3bt3KSSedRHp6Orm5uVx44YXs2bPH75iamhosFkvQryeffDKkfx+JRBIa4vVegEQikYyHu+66i7POOovTTz89JOdzu92cfPLJfPHFF1x//fXk5eXx5z//meXLl7NhwwZmzpw55u83NDRwzDHHkJWVxV133UV3dze//e1v2bhxIx9//DGJiYl+x5933nl8/etf9/veEUccEZK/i0QiCS3SOZJIJDHJs88+y/vvv88zzzzDWWedBcA555zDrFmzuPXWW3n88cfH/P277rqLnp4eNmzYQElJCQCHHnooJ5xwAg899BCXX3653/FLlizhggsuCM9fRiKRhBSZVpNIJLrz7rvvcsghh5CcnMyMGTP461//6vdzi8VCT08PDz/8sDcl9e1vf3tS13z22WcpKChg1apV3u/l5+dzzjnn8K9//YuBgYExf/+5557jlFNO8TpGAMcffzyzZs3i6aefDvo7PT09DA4OTmrdEokk/MjIkUQi0ZWNGzdy4oknkp+fz2233cbw8DC33norBQUF3mP++c9/8t3vfpdDDz3UG5GZMWMGAENDQ3R0dIzrWrm5ucTFiXfCzz77jCVLlnj/rHLooYfyt7/9jR07dnDQQQcFPY/D4aClpYVly5aN+Nmhhx7Kf//73xHfv/3227n++uuxWCwsXbqUX/7yl5x44onjWrdEIoks0jmSSCS6csstt6AoCu+88443CnPmmWf6OSYXXHABV1xxBeXl5SNSU++99x4rVqwY17Wqq6spKysDoLGxkWOOOWbEMdOmTQPA6XSO6hw1Njb6HRv4+62trQwMDJCUlERcXBwnnngiZ5xxBna7naqqKu655x6+9rWv8eKLL3LyySePa+0SiSRySOdIIpHohsvl4tVXX+X000/3S0/NnTuXlStXBo3ABLJw4UJef/31cV2vsLDQ+/99fX0kJSWNOCY5Odn789FQf7a/309KSqKkpIRXX33V75gLL7yQefPmcd1110nnSCIxINI5kkgkurFnzx76+vqCVobNnj17XM5RTk4Oxx9//AFfOyUlJaiuqL+/3/vzsX4XmPDv5+bmcskll3D33XfT0NBAUVHRAa1dIpGEF+kcSSQSUzM4OEhra+u4js3Pz8dqtQIi/aWmx7So37PZbKOeR02njfb7ubm5QaNKWoqLiwFobW2VzpFEYjCkcySRSHQjPz+flJQUdu7cOeJn27dv9/vzaN2y33///QlpjhYtWsQ777yD2+32E2V/9NFHpKamMmvWrFHPY7fbyc/P55NPPhnxs48//phFixbtdy1VVVWA+DeQSCTGQjpHEolEN6xWKytXruSFF16grq7OqzvaunXrCJ1OWloa7e3tI84xUc3RWWedxbPPPktlZaW3z9HevXt55plnOPXUU/0iP7t37wZ8FXIgROMPP/ww9fX13ijQm2++yY4dO7jmmmu8x+3Zs2eEA+RwOFizZg0HH3xwUFG3RCLRF4uiKIrei5BIJLHLl19+yWGHHcbUqVO58sorGR4e5r777qOgoIAvv/wS9RF18skn8/bbb3PHHXdgs9mYPn06hx122ISv63K5OOqoo9i0aZNfh+y6ujrWr1/P7Nmzvceq0aaamhrv9+rr61m8eDHZ2dn88Ic/pLu7m9/85jcUFRWxfv16r3N1ySWXsHv3bo477jhsNhs1NTX89a9/pauri1dffZXly5dP+O8gkUjChCKRSCQ68/bbbytLly5VEhMTlfLycuWBBx5Qbr31VkX7iNq2bZtyzDHHKCkpKQqgXHzxxZO+bmtrq3LppZcqU6ZMUVJTU5Vjjz1WWb9+/YjjSktLldLS0hHf37Rpk3LiiScqqampSnZ2tvKtb31LaWpq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", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -5879,9 +5869,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "Missing parentheses in call to 'print'. Did you mean print(...)? (2487501958.py, line 36)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m Cell \u001b[0;32mIn[63], line 36\u001b[0;36m\u001b[0m\n\u001b[0;31m print '=== Testing exact solution: %s ===' % u\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m Missing parentheses in call to 'print'. Did you mean print(...)?\n" + ] + } + ], "source": [ "# NBVAL_SKIP\n", "import sympy as sym\n", @@ -5989,24 +5988,24 @@ " \"\"\"\n", " return (u(t+dt) - 2*u(t) + u(t-dt))/dt**2\n", "\n", - "def main(u):\n", - " \"\"\"\n", - " Given some chosen solution u (as a function of t, implemented\n", - " as a Python function), use the method of manufactured solutions\n", - " to compute the source term f, and check if u also solves\n", - " the discrete equations.\n", - " \"\"\"\n", - " print '=== Testing exact solution: %s ===' % u(t)\n", - " print \"Initial conditions u(0)=%s, u'(0)=%s:\" % \\\n", - " (u(t).subs(t, 0), sym.diff(u(t), t).subs(t, 0))\n", + "# def main(u):\n", + "# \"\"\"\n", + "# Given some chosen solution u (as a function of t, implemented\n", + "# as a Python function), use the method of manufactured solutions\n", + "# to compute the source term f, and check if u also solves\n", + "# the discrete equations.\n", + "# \"\"\"\n", + "# print '=== Testing exact solution: %s ===' % u(t)\n", + "# print \"Initial conditions u(0)=%s, u'(0)=%s:\" % \\\n", + "# (u(t).subs(t, 0), sym.diff(u(t), t).subs(t, 0))\n", "\n", - " # Method of manufactured solution requires fitting f\n", - " global f # source term in the ODE\n", - " f = sym.simplify(ode_source_term(u))\n", + "# # Method of manufactured solution requires fitting f\n", + "# global f # source term in the ODE\n", + "# f = sym.simplify(ode_source_term(u))\n", "\n", - " # Residual in discrete equations (should be 0)\n", - " print 'residual step1:', residual_discrete_eq_step1(u)\n", - " print 'residual:', residual_discrete_eq(u)" + "# # Residual in discrete equations (should be 0)\n", + "# print 'residual step1:', residual_discrete_eq_step1(u)\n", + "# print 'residual:', residual_discrete_eq(u)" ] }, { @@ -6114,9 +6113,11 @@ " t = np.linspace(0, Nt*dt, Nt+1)\n", "\n", " u[0] = I\n", - " u[1] = u[0] - 0.5*dt**2*w**2*u[0] + 0.5*dt**2*f(t[0]) + dt*V\n", + " u[1] = u[0] - 0.5*dt**2*w**2*u[0] + 0.5*dt**2*f(0) + dt*V\n", + " print(type(u[1]))\n", " for n in range(1, Nt):\n", " u[n+1] = 2*u[n] - u[n-1] - dt**2*w**2*u[n] + dt**2*f(t[n])\n", + " print(n)\n", " return u, t" ] }, @@ -6147,11 +6148,15 @@ "\n", " dt = 2./w\n", " u, t = solver(I=I, V=V, f=f, w=w, dt=dt, T=3)\n", + " print(u)\n", " u_e = u_e(t)\n", + " print(u_e)\n", " error = np.abs(u - u_e).max()\n", " tol = 1E-12\n", " assert error < tol\n", - " print 'Error in computing a quadratic solution:', error" + " #print 'Error in computing a quadratic solution:', error\n", + "\n", + "test_quadratic_exact_solution()" ] }, { @@ -6406,7 +6411,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -7156,18 +7161,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "ename": "SyntaxError", - "evalue": "Missing parentheses in call to 'print'. Did you mean print(E_series)? (, line 16)", - "output_type": "error", - "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m16\u001b[0m\n\u001b[0;31m print E_series\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m Missing parentheses in call to 'print'. Did you mean print(E_series)?\n" - ] - } - ], + "outputs": [], "source": [ "# NBVAL_SKIP\n", "import matplotlib.pyplot as plt\n", @@ -7860,17 +7856,17 @@ " to compute the source term f, and check if u also solves\n", " the discrete equations.\n", " \"\"\"\n", - " print '=== Testing exact solution: %s ===' % u(t)\n", - " print \"Initial conditions u(0)=%s, u'(0)=%s:\" % \\\n", - " (u(t).subs(t, 0), sym.diff(u(t), t).subs(t, 0))\n", + " print ('=== Testing exact solution: %s ===' % u(t))\n", + " print (\"Initial conditions u(0)=%s, u'(0)=%s:\" % \\\n", + " (u(t).subs(t, 0), sym.diff(u(t), t).subs(t, 0)))\n", "\n", " # Method of manufactured solution requires fitting F\n", " global F # source term in the ODE\n", " F = sym.simplify(ode_source_term(u, damping))\n", "\n", " # Residual in discrete equations (should be 0)\n", - " print 'residual step1:', residual_discrete_eq_step1(u, damping)\n", - " print 'residual:', residual_discrete_eq(u, damping)\n", + " print ('residual step1:', residual_discrete_eq_step1(u, damping))\n", + " print ('residual:', residual_discrete_eq(u, damping))\n", "\n", "\n", "def linear(damping):\n", @@ -7950,15 +7946,18 @@ " u_e = u_e(t)\n", " error = np.abs(u - u_e).max()\n", " tol = 1E-12\n", + " print(f'Devito u: {u}')\n", + " print(f'Correct u: {u}')\n", + " print(error)\n", " assert error < tol \n", - " print 'Error in computing a quadratic solution:', error\n", + " print ('Error in computing a quadratic solution:', error)\n", "\n", "if __name__ == '__main__':\n", " damping = ['zero', 'linear', 'quadratic']\n", " for e in damping:\n", " V, t, I, dt, m, b, c = sym.symbols('V t I dt m b c') # global\n", " F = None # global variable for the source term in the ODE\n", - " print '---------------------------------------Damping:', e\n", + " print ('---------------------------------------Damping:', e)\n", " linear(e) \t# linear solution used for MMS\n", " quadratic(e) \t# quadratic solution for MMS\n", " cubic(e) \t# ... and cubic\n", @@ -9029,15 +9028,33 @@ "\n", "\n", "\n", + "\n", "" ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# !pytest --nbval -s -vv vib_undamped.ipynb" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Devito", "language": "python", - "name": "python3" + "name": "devito" }, "language_info": { "codemirror_mode": { @@ -9049,7 +9066,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/fdm-jupyter-book/notebooks/02_wave/wave1D_fd1.ipynb b/fdm-jupyter-book/notebooks/02_wave/wave1D_fd1.ipynb index dcd3f005..a174446b 100644 --- a/fdm-jupyter-book/notebooks/02_wave/wave1D_fd1.ipynb +++ b/fdm-jupyter-book/notebooks/02_wave/wave1D_fd1.ipynb @@ -627,7 +627,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -658,7 +658,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -667,7 +667,7 @@ "# Initialise `u` for space and time order 2, using initialisation function I\n", "grid = Grid(shape=(Nx+1), extent=(L))\n", "u = TimeFunction(name='u', grid=grid, time_order=2, space_order=2)\n", - "u.data[:,:] = I(x[:])" + "u.data[:,:] = I(x[:]) # u(x,0) = I(x)" ] }, { @@ -679,7 +679,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -687,7 +687,7 @@ "output_type": "stream", "text": [ "LHS: u(t + dt, x)\n", - "RHS: 1.0*dt**2*(-2.0*u(t, x)/h_x**2 + u(t, x - h_x)/h_x**2 + u(t, x + h_x)/h_x**2 + 2.0*u(t, x)/dt**2 - 1.0*u(t - dt, x)/dt**2)\n" + "RHS: dt**2*(-(-2.0*u(t, x)/dt**2 + u(t - dt, x)/dt**2) - 2.0*u(t, x)/h_x**2 + u(t, x - h_x)/h_x**2 + u(t, x + h_x)/h_x**2)\n" ] } ], @@ -696,7 +696,7 @@ "\n", "# Set up wave equation and solve for forward stencil point in time\n", "pde = (1/c**2)*u.dt2-u.dx2\n", - "stencil = Eq(u.forward, solve(pde, u.forward))\n", + "stencil = Eq(u.forward, solve(pde.evaluate, u.forward))\n", "\n", "print(\"LHS: %s\" % stencil.lhs)\n", "print(\"RHS: %s\" % stencil.rhs)" @@ -713,11 +713,11 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ - "stencil_init = stencil.subs(u.backward, u.forward)" + "stencil_init = stencil.subs(u.backward, u.forward) # \\frac{\\partial}{\\partial t}u(x,0) = 0" ] }, { @@ -729,27 +729,25 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Data type float64 of runtime value `dt` does not match the Constant data type \n", - "Operator `Kernel` run in 0.01 s\n", - "Data type float64 of runtime value `dt` does not match the Constant data type \n", - "Operator `Kernel` run in 0.01 s\n" + "Operator `Kernel` ran in 0.01 s\n", + "Operator `Kernel` ran in 0.01 s\n" ] }, { "data": { "text/plain": [ "PerformanceSummary([(PerfKey(name='section0', rank=None),\n", - " PerfEntry(time=5.899999999999998e-05, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[]))])" + " PerfEntry(time=4.9999999999999996e-06, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[]))])" ] }, - "execution_count": 39, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -761,8 +759,8 @@ "t_s = grid.stepping_dim \n", "\n", "# Boundary conditions\n", - "bc = [Eq(u[t_s+1, 0], 0)]\n", - "bc += [Eq(u[t_s+1, Nx], 0)]\n", + "bc = [Eq(u[t_s+1, 0], 0)] # u(0,t) = 0\n", + "bc += [Eq(u[t_s+1, Nx], 0)] #u(L,t) = 0\n", "\n", "# Defining one Operator for initial timestep and one for the rest\n", "op_init = Operator([stencil_init]+bc)\n", @@ -781,19 +779,17 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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bRoSExMxZswYjBkzBikpKeZ93n33XSxfvhwrV67EoUOH4OLiguHDh6O8vLy5Dsusoce3d+9ePPTQQ9izZw/i4uIQFBSEYcOGITs7u8Z+I0aMwOXLl82PdevWNcfh3FZDjxGong315vrPnz9f4/vWfA6/++67GseWkpIClUqFcePG1dhPLuewpKQEkZGRWLFiRb32z8zMxKhRo3DvvfciKSkJs2bNwhNPPFEjLDTmPdFUGnp8+/btw/33349t27YhISEB9957Lx588EEkJibW2K9Lly41zt8ff/zRFOXXS0OP0SQjI6PGMfj6+pq/Z83n8H//+1+N48rKyoKXl9ctv4NyOYe//fYbnn76aRw8eBA7duxAVVUVhg0bhpKSklqfI4vPQoksonfv3tLTTz9t/tpgMEiBgYHSokWLbrv/+PHjpVGjRtXYFhMTIz355JOSJEmS0WiU/P39pf/+97/m7xcUFEgajUZat25dExxB3Rp6fH+m1+slNzc3ac2aNeZtU6ZMkUaPHm3pUhutocf4+eefSx4eHrW+nq2dw6VLl0pubm5ScXGxeZvczqEJAGnz5s117vPiiy9KXbp0qbFtwoQJ0vDhw81f3+3fWVOpz/HdTufOnaWFCxeav16wYIEUGRlpucIsqD7HuGfPHgmAdO3atVr3saVzuHnzZkmhUEjnzp0zb5PzOczNzZUASL/99lut+8jhs5AjQhZQWVmJhIQExMbGmrcplUrExsYiLi7uts+Ji4ursT8ADB8+3Lx/ZmYmtFptjX08PDwQExNT62s2lcYc35+VlpaiqqoKXl5eNbbv3bsXvr6+CAsLw1NPPYWrV69atPb6auwxFhcXo127dggKCsLo0aORmppq/p6tncNVq1Zh4sSJcHFxqbFdLuewoe70O2iJvzM5MRqNKCoquuV38NSpUwgMDERoaCgmT56MCxcuCKqw8aKiohAQEID7778f+/fvN2+3tXO4atUqxMbGol27djW2y/UcFhYWAsAt77mbyeGzkEHIAvLy8mAwGODn51dju5+f3y3Xqk20Wm2d+5v+25DXbCqNOb4/+9e//oXAwMAab+YRI0bgiy++wK5du/DOO+/gt99+wwMPPACDwWDR+uujMccYFhaGzz77DD/88AO++uorGI1G9OvXDxcvXgRgW+cwPj4eKSkpeOKJJ2psl9M5bKjafgd1Oh3K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", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -1511,9 +1507,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Devito", "language": "python", - "name": "python3" + "name": "devito" }, "language_info": { "codemirror_mode": { @@ -1525,7 +1521,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.3" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/fdm-jupyter-book/notebooks/02_wave/wave1D_fd2.ipynb b/fdm-jupyter-book/notebooks/02_wave/wave1D_fd2.ipynb new file mode 100644 index 00000000..5090197b --- /dev/null +++ b/fdm-jupyter-book/notebooks/02_wave/wave1D_fd2.ipynb @@ -0,0 +1,66790 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Generalization: reflecting boundaries\n", + "
\n", + "\n", + "The boundary condition $u=0$ in a wave equation reflects the wave, but\n", + "$u$ changes sign at the boundary, while the condition $u_x=0$ reflects\n", + "the wave as a mirror and preserves the sign, see a [web page](mov-wave/demo_BC_gaussian/index.html) or a\n", + "[movie file](mov-wave/demo_BC_gaussian/movie.flv) for\n", + "demonstration.\n", + "\n", + "\n", + "Our next task is to explain how to implement the boundary\n", + "condition $u_x=0$, which is\n", + "more complicated to express numerically and also to implement than\n", + "a given value of $u$.\n", + "\n", + "\n", + "## Neumann boundary condition\n", + "
\n", + "\n", + "\n", + "When a wave hits a boundary and is to be reflected back, one applies\n", + "the condition" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\frac{\\partial u}{\\partial n} \\equiv \\boldsymbol{n}\\cdot\\nabla u = 0\n", + "\\label{wave:pde1:Neumann:0} \\tag{1}\n", + "\\thinspace .\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The derivative $\\partial /\\partial n$ is in the\n", + "outward normal direction from a general boundary.\n", + "For a 1D domain $[0,L]$,\n", + "we have that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\left.\\frac{\\partial}{\\partial n}\\right\\vert_{x=L} =\n", + "\\left.\\frac{\\partial}{\\partial x}\\right\\vert_{x=L},\\quad\n", + "\\left.\\frac{\\partial}{\\partial n}\\right\\vert_{x=0} = -\n", + "\\left.\\frac{\\partial}{\\partial x}\\right\\vert_{x=0}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Boundary condition terminology.**\n", + "\n", + "Boundary conditions\n", + "that specify the value of $\\partial u/\\partial n$\n", + "(or shorter $u_n$) are known as\n", + "[Neumann](http://en.wikipedia.org/wiki/Neumann_boundary_condition) conditions, while [Dirichlet conditions](http://en.wikipedia.org/wiki/Dirichlet_conditions)\n", + "refer to specifications of $u$.\n", + "When the values are zero ($\\partial u/\\partial n=0$ or $u=0$) we speak\n", + "about *homogeneous* Neumann or Dirichlet conditions.\n", + "\n", + "\n", + "\n", + "## Discretization of derivatives at the boundary\n", + "
\n", + "\n", + "\n", + "How can we incorporate the condition ([1](#wave:pde1:Neumann:0))\n", + "in the finite difference scheme? Since we have used central\n", + "differences in all the other approximations to derivatives in the\n", + "scheme, it is tempting to implement ([1](#wave:pde1:Neumann:0)) at\n", + "$x=0$ and $t=t_n$ by the difference" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[D_{2x} u]^n_0 = \\frac{u_{-1}^n - u_1^n}{2\\Delta x} = 0\n", + "\\thinspace .\n", + "\\label{wave:pde1:Neumann:0:cd} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The problem is that $u_{-1}^n$ is not a $u$ value that is being\n", + "computed since the point is outside the mesh. However, if we combine\n", + "([2](#wave:pde1:Neumann:0:cd)) with the scheme\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^{n+1}_i = -u^{n-1}_i + 2u^n_i + C^2\n", + "\\left(u^{n}_{i+1}-2u^{n}_{i} + u^{n}_{i-1}\\right),\n", + "\\label{wave:pde1:Neumann:0:scheme} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for $i=0$, we can eliminate the fictitious value $u_{-1}^n$. We see that\n", + "$u_{-1}^n=u_1^n$ from ([2](#wave:pde1:Neumann:0:cd)), which\n", + "can be used in ([3](#wave:pde1:Neumann:0:scheme)) to\n", + "arrive at a modified scheme for the boundary point $u_0^{n+1}$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^{n+1}_i = -u^{n-1}_i + 2u^n_i + 2C^2\n", + "\\left(u^{n}_{i+1}-u^{n}_{i}\\right),\\quad i=0 \\thinspace . \\label{_auto1} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Figure](#wave:pde1:fig:Neumann:stencil) visualizes this equation\n", + "for computing $u^3_0$ in terms of $u^2_0$, $u^1_0$, and\n", + "$u^2_1$.\n", + "\n", + "\n", + "\n", + "
\n", + "\n", + "

Modified stencil at a boundary with a Neumann condition.

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Similarly, ([1](#wave:pde1:Neumann:0)) applied at $x=L$\n", + "is discretized by a central difference" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{u_{N_x+1}^n - u_{N_x-1}^n}{2\\Delta x} = 0\n", + "\\thinspace .\n", + "\\label{wave:pde1:Neumann:0:cd2} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Combined with the scheme for $i=N_x$ we get a modified scheme for\n", + "the boundary value $u_{N_x}^{n+1}$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^{n+1}_i = -u^{n-1}_i + 2u^n_i + 2C^2\n", + "\\left(u^{n}_{i-1}-u^{n}_{i}\\right),\\quad i=N_x \\thinspace . \\label{_auto2} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The modification of the scheme at the boundary is also required for\n", + "the special formula for the first time step. How the stencil moves\n", + "through the mesh and is modified at the boundary can be illustrated by\n", + "an animation in a [web page](${doc_notes}/book/html/mov-wave/N_stencil_gpl/index.html)\n", + "or a [movie file](${docraw}/mov-wave/N_stencil_gpl/movie.ogg). Using $i = 0$ as an example, the steps above can be implemented in Devito by" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from devito import *\n", + "\n", + "# du/dt(x,0) = V(x)\n", + "# We take the original PDE and apply central finite differences\n", + "# But if we let time = 0, we will require a value with time = -1\n", + "# We can also apply central finite differences to du/dt(x,0) = V(x),\n", + "# and rewrite the term with time = -1 in terms of real terms, and do substitution to get the equation below\n", + "\n", + "# Solving for u(t+dt, x) in the actual PDE\n", + "eq_u = Eq(u.dt2, c**2*u.dx2 + F)\n", + "stencil_u = solve(eq_u.evaluate, u.forward)\n", + "update_u = Eq(u.forward, stencil_u)\n", + "\n", + "# Applying central differences to du/dt(x,0) = V(x) and solving for u(-dt, x) in terms of points with physical meaning\n", + "Neumann_eq = Eq(u.dtc, V)\n", + "u_negative_time = solve(Neumann_eq.evaluate, u.backward)._subs(u.time_dim, 0)\n", + "\n", + "# Get the stencil at t=0 and replace u(-dt, x) with {u_negative_time} that we computed above\n", + "stencil_at_t0 = Eq(u.forward._subs(u.time_dim, 0), stencil_u._subs(u.backward.evaluate, u_negative_time.evaluate))\n", + "stencil_at_t0 = solve(stencil_at_t0.evaluate, u.forward._subs(u.time_dim, 0))._subs(u.time_dim, 0)\n", + "lower_Neumann = Eq(u.forward._subs(u.time_dim, 0), stencil_at_t0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We would replace `._subs(u.time_dim, 0)` with `._sub(u.time_dim, Nx)` for the $i = N_x$ case" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementation of Neumann conditions\n", + "
\n", + "\n", + "To deal with potential out of bounds problem, we can introduce\n", + "extra points outside the domain such that the fictitious values\n", + "$u_{-1}^n$ and $u_{N_x+1}^n$ are defined in the mesh. Adding the\n", + "intervals $[-\\Delta x,0]$ and $[L, L+\\Delta x]$, known as *ghost\n", + "cells*, to the mesh gives us all the needed mesh points, corresponding\n", + "to $i=-1,0,\\ldots,N_x,N_x+1$. The extra points with $i=-1$ and\n", + "$i=N_x+1$ are known as *ghost points*, and values at these points,\n", + "$u_{-1}^n$ and $u_{N_x+1}^n$, are called *ghost values*.\n", + "\n", + "The important idea is\n", + "to ensure that we always have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u_{-1}^n = u_{1}^n\\hbox{ and } u_{N_x+1}^n = u_{N_x-1}^n,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "because then\n", + "the application of the standard scheme at a boundary point $i=0$ or $i=N_x$\n", + "will be correct and guarantee that the solution is compatible with the\n", + "boundary condition $u_x=0$.\n", + "\n", + "Some readers may find it strange to just extend the domain with ghost\n", + "cells as a general technique, because in some problems there is a\n", + "completely different medium with different physics and equations right\n", + "outside of a boundary. Nevertheless, one should view the ghost cell\n", + "technique as a purely mathematical technique, which is valid in the\n", + "limit $\\Delta x \\rightarrow 0$ and helps us to implement derivatives." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Dealing with boundary points is made very easy by Devito as Devito automatically adds ghost points (called halo) to defined functions. The size of the `halo` is equal to its `space_order` (refer to `examples/compiler/01_data_region` example in the main Devito Github repo). The code below implements said function, an additional test case can be found in [`wave1D_n0.py`](${src_wave}/wave1D/wave1D_n0.py) along with the implementation." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "def solver(i, v, f, c, L, dt, C, T, user_action=None):\n", + " \"\"\"\n", + " Solve u_tt=c^2*u_xx + f on (0,L)x(0,T].\n", + "\n", + " Boundary Conditions:\n", + " du/dn = 0 at both U(0,t) and U(L,t)\n", + " u(x,0) = I(x)\n", + " du/dt(x,0) = V(x)\n", + " \"\"\"\n", + "\n", + " Nt = int(round(T/dt))\n", + " dx = dt*c/float(C)\n", + " Nx = int(round(L/dx))\n", + " \n", + " # Wrap user-given f, V\n", + " if f is None or f == 0:\n", + " f = (lambda x, t: 0)\n", + " if v is None or v == 0:\n", + " v = (lambda x: 0)\n", + " \n", + " # A padding, called halo in this case, of size {space_order} is automatically added when the grid is initialized\n", + " grid = Grid(shape=(Nx+1,), dtype=np.float64)\n", + "\n", + " # We need to have u(t,x) instead of u(x,t) so that the produced code loops through time {t} on the outside\n", + " # This is necessary because our boundary conditions are on the space-axis\n", + " u = TimeFunction(name='u', grid=grid, time_order=2, space_order=2)\n", + "\n", + " # Devito-ize external functions\n", + " t = grid.stepping_dim\n", + " x = grid.dimensions[0]\n", + " F = TimeFunction(name='F', dimensions=(t, x), shape=(Nt+1, Nx+1), space_order=2)\n", + " for time in range(0, Nt+1):\n", + " for space in range(0, Nx+1):\n", + " # f is given with arguments (x,t) not (t,x)\n", + " F.data[time][space] = f(space * dx, time * dt)\n", + "\n", + " I = Function(name='I', dimensions=(x,), shape=(Nx+1,), space_order=2)\n", + " for space in range(0, Nx+1):\n", + " I.data[space] = i(space*dx)\n", + "\n", + " V = Function(name='V', dimensions=(x,), shape=(Nx+1,), space_order=2)\n", + " for space in range(0, Nx+1):\n", + " V.data[space] = v(space*dx)\n", + "\n", + " # du/dt(x,0) = V(x)\n", + " # We take the original PDE and apply central finite differences\n", + " # Let time = 0, we will require a value with time = -1\n", + " # But we can also apply central finite differences to du/dt(x,0) = V(x),\n", + " # We write the term with time = -1 in terms of real terms, and do substitution to get the equation below\n", + "\n", + " # Solving for u(t+dt, x) in the actual PDE\n", + " eq_u = Eq(u.dt2, c**2*u.dx2 + F)\n", + " stencil_u = solve(eq_u.evaluate, u.forward)\n", + " update_u = Eq(u.forward, stencil_u)\n", + "\n", + " # Boundary conditions\n", + " boundary_eqns = []\n", + " bottom_Dirichlet = Eq(u[0, x], I)\n", + " boundary_eqns.append(bottom_Dirichlet)\n", + " \n", + " # Applying central differences to du/dt(x,0) = V(x) and solving for u(t-dt, x)\n", + " Neumann_eq = Eq(u.dtc, V)\n", + " u_negative_time = solve(Neumann_eq.evaluate, u.backward)._subs(u.time_dim, 0)\n", + "\n", + " # Get the stencil at t=0 and replace u(t-dt, x) with {u_negative_time} that we computed above\n", + " stencil_at_t0 = Eq(u.forward._subs(u.time_dim, 0), stencil_u._subs(u.backward.evaluate, u_negative_time.evaluate))\n", + " stencil_at_t0 = solve(stencil_at_t0.evaluate, u.forward._subs(u.time_dim, 0))._subs(u.time_dim, 0)\n", + " lower_Neumann = Eq(u.forward._subs(u.time_dim, 0), stencil_at_t0)\n", + " boundary_eqns.append(lower_Neumann)\n", + "\n", + " left_Neumann = Eq(u[t, -1], u[t,1])\n", + " boundary_eqns.append(left_Neumann)\n", + " right_Neumann = Eq(u[t, Nx+1], u[t, Nx-1])\n", + " boundary_eqns.append(right_Neumann)\n", + "\n", + " op = Operator([bottom_Dirichlet, lower_Neumann, left_Neumann, right_Neumann, update_u])\n", + "\n", + " import time; t0 = time.time()\n", + " op.apply(dt=dt, t_m=1, t_M=Nt, x_m=0, x_M=Nx)\n", + " cpu_time = time.time() - t0\n", + "\n", + " # Nt%3 as u.data is a 3 by Nx array. The 3 rows are used to store values at T=t, T=t-1, and T=t-2\n", + " # The exact array you return might have be checked case by case\n", + " return u.data[Nt%3], np.linspace(0, L, Nx+1), np.linspace(0, Nt*dt, Nt+1), cpu_time\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The program `wave1D_n0.py`\n", + "contains a complete implementation of the 1D wave equation with\n", + "boundary conditions $u_x = 0$ at $x=0$ and $x=L$.\n", + "\n", + "It would be nice to modify the `test_quadratic` test case from the\n", + "`wave1D_u0.py` with Dirichlet conditions, described in the section [wave:pde1:impl:vec:verify:quadratic](#wave:pde1:impl:vec:verify:quadratic). However, the Neumann\n", + "conditions require the polynomial variation in the $x$ direction to\n", + "be of third degree, which causes challenging problems when\n", + "designing a test where the numerical solution is known exactly.\n", + "[Exercise 9: Verification by a cubic polynomial in space](#wave:fd2:exer:verify:cubic) outlines ideas and code\n", + "for this purpose. The only test in `wave1D_n0.py` is to start\n", + "with a plug wave at rest and see that the initial condition is\n", + "reached again perfectly after one period of motion, but such\n", + "a test requires $C=1$ (so the numerical solution coincides with\n", + "the exact solution of the PDE, see the section [Numerical dispersion relation](wave_analysis.ipynb#wave:pde1:num:dispersion))." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Notice.**\n", + "\n", + "The program [`wave1D_dn.py`](src-wave/wave1D/python/wave1D_dn.py)\n", + "solves the 1D wave equation $u_{tt}=c^2u_{xx}+f(x,t)$ with\n", + "quite general boundary and initial conditions:\n", + "\n", + " * $x=0$: $u=U_0(t)$ or $u_x=0$\n", + "\n", + " * $x=L$: $u=U_L(t)$ or $u_x=0$\n", + "\n", + " * $t=0$: $u=I(x)$\n", + "\n", + " * $t=0$: $u_t=V(x)$\n", + "\n", + "The program combines Dirichlet and Neumann conditions into one piece of code.\n", + "A lot of test examples are also included in the program:\n", + "\n", + " * A rectangular plug-shaped initial condition. (For $C=1$ the solution\n", + " will be a rectangle that jumps one cell per time step, making the case\n", + " well suited for verification.)\n", + "\n", + " * A Gaussian function as initial condition.\n", + "\n", + " * A triangular profile as initial condition, which resembles the\n", + " typical initial shape of a guitar string.\n", + "\n", + " * A sinusoidal variation of $u$ at $x=0$ and either $u=0$ or\n", + " $u_x=0$ at $x=L$.\n", + "\n", + " * An analytical solution $u(x,t)=\\cos(m\\pi t/L)\\sin({\\frac{1}{2}}m\\pi x/L)$, which can be used for convergence rate tests.\n", + " \n", + "\n", + "## Verifying the implementation of Neumann conditions\n", + "
\n", + "\n", + "\n", + "How can we test that the Neumann conditions are correctly implemented?\n", + "The `solver` function in the `wave1D_dn.py` program described in the\n", + "box above accepts Dirichlet or Neumann conditions at $x=0$ and $x=L$.\n", + "It is tempting to apply a quadratic solution as described in\n", + "the sections [wave:pde2:fd](#wave:pde2:fd) and [wave:pde1:impl:verify:quadratic](#wave:pde1:impl:verify:quadratic),\n", + "but it turns out that this solution is no longer an exact solution\n", + "of the discrete equations if a Neumann condition is implemented on\n", + "the boundary. A linear solution does not help since we only have\n", + "homogeneous Neumann conditions in `wave1D_dn.py`, and we are\n", + "consequently left with testing just a constant solution: $u=\\hbox{const}$." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + " \n", + "
\n", + " \n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "from matplotlib.animation import FuncAnimation\n", + "import numpy as np\n", + "\n", + "# Create a figure and axis\n", + "fig = plt.figure()\n", + "ax = plt.axes(xlim=(0,2), ylim=(-2,2))\n", + "\n", + "# Initialize an empty line plot\n", + "line, = ax.plot([], [], lw=2)\n", + "\n", + "# Define initialization function\n", + "def init():\n", + " line.set_data([], [])\n", + " return line,\n", + "\n", + "# Define the animation function\n", + "def animate(frame):\n", + " x = np.linspace(0, 2, 1000)\n", + " y = np.sin(2 * (x - 0.01 * frame))\n", + " line.set_data(x, y)\n", + " return line,\n", + "\n", + "# Create the animation\n", + "ani = FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True)\n", + "\n", + "# Display the animation\n", + "plt.close() # Prevents double display in Jupyter Notebook\n", + "from IPython.display import HTML\n", + "HTML(ani.to_jshtml())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def test_constant():\n", + " \"\"\"\n", + " Check the scalar and vectorized versions for\n", + " a constant u(x,t). We simulate in [0, L] and apply\n", + " Neumann and Dirichlet conditions at both ends.\n", + " \"\"\"\n", + " u_const = 0.45\n", + " u_exact = lambda x, t: u_const\n", + " I = lambda x: u_exact(x, 0)\n", + " V = lambda x: 0\n", + " f = lambda x, t: 0\n", + "\n", + " def assert_no_error(u, x, t, n):\n", + " u_e = u_exact(x, t[n])\n", + " diff = np.abs(u - u_e).max()\n", + " msg = 'diff=%E, t_%d=%g' % (diff, n, t[n])\n", + " tol = 1E-13\n", + " assert diff < tol, msg\n", + "\n", + " for U_0 in (None, lambda t: u_const):\n", + " for U_L in (None, lambda t: u_const):\n", + " L = 2.5\n", + " c = 1.5\n", + " C = 0.75\n", + " Nx = 3 # Very coarse mesh for this exact test\n", + " dt = C*(L/Nx)/c\n", + " T = 18 # long time integration\n", + "\n", + " solver(I, V, f, c, U_0, U_L, L, dt, C, T,\n", + " user_action=assert_no_error,\n", + " version='scalar')\n", + " solver(I, V, f, c, U_0, U_L, L, dt, C, T,\n", + " user_action=assert_no_error,\n", + " version='vectorized')\n", + " print (U_0, U_L)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The quadratic solution is very useful for testing, but it requires\n", + "Dirichlet conditions at both ends.\n", + "\n", + "Another test may utilize the fact that the approximation error vanishes\n", + "when the Courant number is unity. We can, for example, start with a\n", + "plug profile as initial condition, let this wave split into two plug waves,\n", + "one in each direction, and check that the two plug waves come back and\n", + "form the initial condition again after \"one period\" of the solution\n", + "process. Neumann conditions can be applied at both ends. A proper\n", + "test function reads" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def test_plug():\n", + " \"\"\"Check that an initial plug is correct back after one period.\"\"\"\n", + " L = 1.0\n", + " c = 0.5\n", + " dt = (L/10)/c # Nx=10\n", + " I = lambda x: 0 if abs(x-L/2.0) > 0.1 else 1\n", + "\n", + " u_s, x, t, cpu = solver(\n", + " I=I,\n", + " V=None, f=None, c=0.5, U_0=None, U_L=None, L=L,\n", + " dt=dt, C=1, T=4, user_action=None, version='scalar')\n", + " u_v, x, t, cpu = solver(\n", + " I=I,\n", + " V=None, f=None, c=0.5, U_0=None, U_L=None, L=L,\n", + " dt=dt, C=1, T=4, user_action=None, version='vectorized')\n", + " tol = 1E-13\n", + " diff = abs(u_s - u_v).max()\n", + " assert diff < tol\n", + " u_0 = np.array([I(x_) for x_ in x])\n", + " diff = np.abs(u_s - u_0).max()\n", + " assert diff < tol" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Other tests must rely on an unknown approximation error, so effectively\n", + "we are left with tests on the convergence rate." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Generalization: variable wave velocity\n", + "
\n", + "\n", + "\n", + "Our next generalization of the 1D wave equation ([wave:pde1](#wave:pde1)) or\n", + "([wave:pde2](#wave:pde2)) is to allow for a variable wave velocity $c$:\n", + "$c=c(x)$, usually motivated by wave motion in a domain composed of\n", + "different physical media. When the media differ in physical properties\n", + "like density or porosity, the wave velocity $c$ is affected and\n", + "will depend on the position in space.\n", + "[Figure](#wave:pde1:fig:pulse1:two:media) shows a wave\n", + "propagating in one medium $[0, 0.7]\\cup [0.9,1]$ with wave\n", + "velocity $c_1$ (left) before it enters a second medium $(0.7,0.9)$\n", + "with wave velocity $c_2$ (right). When the wave meets the boundary\n", + "where $c$ jumps from $c_1$ to $c_2$, a part of the wave is reflected back\n", + "into the first medium (the *reflected* wave), while one part is\n", + "transmitted through the second medium (the *transmitted* wave).\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "\n", + "

Left: wave entering another medium; right: transmitted and reflected wave.

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## The model PDE with a variable coefficient\n", + "\n", + "Instead of working with the squared quantity $c^2(x)$, we\n", + "shall for notational convenience introduce $q(x) = c^2(x)$.\n", + "A 1D wave equation with variable wave velocity often takes the form" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{\\partial^2 u}{\\partial t^2} =\n", + "\\frac{\\partial}{\\partial x}\\left( q(x)\n", + "\\frac{\\partial u}{\\partial x}\\right) + f(x,t)\n", + "\\label{wave:pde2:var:c:pde} \\tag{8}\n", + "\\thinspace .\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the most frequent form of a wave\n", + "equation with variable wave velocity,\n", + "but other forms also appear, see the section [wave:app:string](#wave:app:string)\n", + "and equation ([wave:app:string:model2](#wave:app:string:model2)).\n", + "\n", + "As usual, we sample ([8](#wave:pde2:var:c:pde)) at a mesh point," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial^2 }{\\partial t^2} u(x_i,t_n) =\n", + "\\frac{\\partial}{\\partial x}\\left( q(x_i)\n", + "\\frac{\\partial}{\\partial x} u(x_i,t_n)\\right) + f(x_i,t_n),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the only new term to discretize is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial}{\\partial x}\\left( q(x_i)\n", + "\\frac{\\partial}{\\partial x} u(x_i,t_n)\\right) = \\left[\n", + "\\frac{\\partial}{\\partial x}\\left( q(x)\n", + "\\frac{\\partial u}{\\partial x}\\right)\\right]^n_i\n", + "\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discretizing the variable coefficient\n", + "
\n", + "\n", + "The principal idea is to first discretize the outer derivative.\n", + "Define" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\phi = q(x)\n", + "\\frac{\\partial u}{\\partial x},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and use a centered derivative around $x=x_i$ for the derivative of $\\phi$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\left[\\frac{\\partial\\phi}{\\partial x}\\right]^n_i\n", + "\\approx \\frac{\\phi_{i+\\frac{1}{2}} - \\phi_{i-\\frac{1}{2}}}{\\Delta x}\n", + "= [D_x\\phi]^n_i\n", + "\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then discretize" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\phi_{i+\\frac{1}{2}} = q_{i+\\frac{1}{2}}\n", + "\\left[\\frac{\\partial u}{\\partial x}\\right]^n_{i+\\frac{1}{2}}\n", + "\\approx q_{i+\\frac{1}{2}} \\frac{u^n_{i+1} - u^n_{i}}{\\Delta x}\n", + "= [q D_x u]_{i+\\frac{1}{2}}^n\n", + "\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\phi_{i-\\frac{1}{2}} = q_{i-\\frac{1}{2}}\n", + "\\left[\\frac{\\partial u}{\\partial x}\\right]^n_{i-\\frac{1}{2}}\n", + "\\approx q_{i-\\frac{1}{2}} \\frac{u^n_{i} - u^n_{i-1}}{\\Delta x}\n", + "= [q D_x u]_{i-\\frac{1}{2}}^n\n", + "\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These intermediate results are now combined to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\left[\n", + "\\frac{\\partial}{\\partial x}\\left( q(x)\n", + "\\frac{\\partial u}{\\partial x}\\right)\\right]^n_i\n", + "\\approx \\frac{1}{\\Delta x^2}\n", + "\\left( q_{i+\\frac{1}{2}} \\left({u^n_{i+1} - u^n_{i}}\\right)\n", + "- q_{i-\\frac{1}{2}} \\left({u^n_{i} - u^n_{i-1}}\\right)\\right)\n", + "\\label{wave:pde2:var:c:formula} \\tag{9}\n", + "\\thinspace .\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With operator notation we can write the discretization as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\left[\n", + "\\frac{\\partial}{\\partial x}\\left( q(x)\n", + "\\frac{\\partial u}{\\partial x}\\right)\\right]^n_i\n", + "\\approx [D_x (\\overline{q}^{x} D_x u)]^n_i\n", + "\\label{wave:pde2:var:c:formula:op} \\tag{10}\n", + "\\thinspace .\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Do not use the chain rule on the spatial derivative term!**\n", + "\n", + "Many are tempted to use the chain rule on the\n", + "term $\\frac{\\partial}{\\partial x}\\left( q(x)\n", + "\\frac{\\partial u}{\\partial x}\\right)$, but this is not a good idea\n", + "when discretizing such a term.\n", + "\n", + "The term with a variable coefficient expresses the net flux\n", + "$qu_x$ into a small volume (i.e., interval in 1D):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial}{\\partial x}\\left( q(x)\n", + "\\frac{\\partial u}{\\partial x}\\right) \\approx\n", + "\\frac{1}{\\Delta x}(q(x+\\Delta x)u_x(x+\\Delta x) - q(x)u_x(x))\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our discretization reflects this\n", + "principle directly: $qu_x$ at the right end of the cell minus $qu_x$\n", + "at the left end, because this follows from the formula\n", + "([9](#wave:pde2:var:c:formula)) or $[D_x(q D_x u)]^n_i$.\n", + "\n", + "When using the chain rule, we get two\n", + "terms $qu_{xx} + q_xu_x$. The typical discretization is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[D_x q D_x u + D_{2x}q D_{2x} u]_i^n,\n", + "\\label{wave:pde2:var:c:chainrule_scheme} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Writing this out shows that it is different from\n", + "$[D_x(q D_x u)]^n_i$ and lacks the physical interpretation of\n", + "net flux into a cell. With a smooth and slowly varying $q(x)$ the\n", + "differences between the two discretizations are not substantial.\n", + "However, when $q$ exhibits (potentially large) jumps,\n", + "$[D_x(q D_x u)]^n_i$ with harmonic averaging of $q$ yields\n", + "a better solution than arithmetic averaging or\n", + "([11](#wave:pde2:var:c:chainrule_scheme)).\n", + "In the literature, the discretization $[D_x(q D_x u)]^n_i$ totally\n", + "dominates and very few mention the alternative in\n", + "([11](#wave:pde2:var:c:chainrule_scheme)).\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Computing the coefficient between mesh points\n", + "
\n", + "\n", + "\n", + "If $q$ is a known function of $x$, we can easily evaluate\n", + "$q_{i+\\frac{1}{2}}$ simply as $q(x_{i+\\frac{1}{2}})$ with $x_{i+\\frac{1}{2}} = x_i +\n", + "\\frac{1}{2}\\Delta x$. However, in many cases $c$, and hence $q$, is only\n", + "known as a discrete function, often at the mesh points $x_i$.\n", + "Evaluating $q$ between two mesh points $x_i$ and $x_{i+1}$ must then\n", + "be done by *interpolation* techniques, of which three are of\n", + "particular interest in this context:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "q_{i+\\frac{1}{2}} \\approx\n", + "\\frac{1}{2}\\left( q_{i} + q_{i+1}\\right) =\n", + "[\\overline{q}^{x}]_i\n", + "\\quad \\hbox{(arithmetic mean)}\n", + "\\label{wave:pde2:var:c:mean:arithmetic} \\tag{12}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "q_{i+\\frac{1}{2}} \\approx\n", + "2\\left( \\frac{1}{q_{i}} + \\frac{1}{q_{i+1}}\\right)^{-1}\n", + "\\quad \\hbox{(harmonic mean)}\n", + "\\label{wave:pde2:var:c:mean:harmonic} \\tag{13}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "q_{i+\\frac{1}{2}} \\approx\n", + "\\left(q_{i}q_{i+1}\\right)^{1/2}\n", + "\\quad \\hbox{(geometric mean)}\n", + "\\label{wave:pde2:var:c:mean:geometric} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The arithmetic mean in ([12](#wave:pde2:var:c:mean:arithmetic)) is by\n", + "far the most commonly used averaging technique and is well suited\n", + "for smooth $q(x)$ functions.\n", + "The harmonic mean is often preferred when $q(x)$ exhibits large\n", + "jumps (which is typical for geological media).\n", + "The geometric mean is less used, but popular in\n", + "discretizations to linearize quadratic\n", + "% if BOOK == \"book\":\n", + "nonlinearities (see the section [vib:ode2:fdm:fquad](#vib:ode2:fdm:fquad) for an example).\n", + "% else:\n", + "nonlinearities.\n", + "% endif\n", + "\n", + "With the operator notation from ([12](#wave:pde2:var:c:mean:arithmetic))\n", + "we can specify the discretization of the complete variable-coefficient\n", + "wave equation in a compact way:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\lbrack D_tD_t u = D_x\\overline{q}^{x}D_x u + f\\rbrack^{n}_i\n", + "\\thinspace .\n", + "\\label{wave:pde2:var:c:scheme:op} \\tag{15}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Strictly speaking, $\\lbrack D_x\\overline{q}^{x}D_x u\\rbrack^{n}_i\n", + "= \\lbrack D_x (\\overline{q}^{x}D_x u)\\rbrack^{n}_i$.\n", + "\n", + "From the compact difference notation we immediately see what kind of differences that\n", + "each term is approximated with. The notation $\\overline{q}^{x}$\n", + "also specifies that the variable coefficient is approximated by\n", + "an arithmetic mean, the definition being\n", + "$[\\overline{q}^{x}]_{i+\\frac{1}{2}}=(q_i+q_{i+1})/2$.\n", + "\n", + "Before implementing, it remains to solve\n", + "([15](#wave:pde2:var:c:scheme:op)) with respect to $u_i^{n+1}$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^{n+1}_i = - u_i^{n-1} + 2u_i^n + \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\quad \\left(\\frac{\\Delta t}{\\Delta x}\\right)^2 \\left(\n", + "\\frac{1}{2}(q_{i} + q_{i+1})(u_{i+1}^n - u_{i}^n) -\n", + "\\frac{1}{2}(q_{i} + q_{i-1})(u_{i}^n - u_{i-1}^n)\\right)\n", + "+ \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + " \\quad \\Delta t^2 f^n_i\n", + "\\thinspace .\n", + "\\label{wave:pde2:var:c:scheme:impl} \\tag{16}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How a variable coefficient affects the stability\n", + "
\n", + "\n", + "\n", + "The stability criterion derived later (the section [wave:pde1:stability](#wave:pde1:stability))\n", + "reads $\\Delta t\\leq \\Delta x/c$. If $c=c(x)$, the criterion will depend\n", + "on the spatial location. We must therefore choose a $\\Delta t$ that\n", + "is small enough such that no mesh cell has $\\Delta t > \\Delta x/c(x)$.\n", + "That is, we must use the largest $c$ value in the criterion:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\Delta t \\leq \\beta \\frac{\\Delta x}{\\max_{x\\in [0,L]}c(x)}\n", + "\\thinspace .\n", + "\\label{_auto4} \\tag{17}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The parameter $\\beta$ is included as a safety factor: in some problems with a\n", + "significantly varying $c$ it turns out that one must choose $\\beta <1$ to\n", + "have stable solutions ($\\beta =0.9$ may act as an all-round value).\n", + "\n", + "A different strategy to handle the stability criterion with variable\n", + "wave velocity is to use a spatially varying $\\Delta t$. While the idea\n", + "is mathematically attractive at first sight, the implementation\n", + "quickly becomes very complicated, so we stick to a constant $\\Delta t$\n", + "and a worst case value of $c(x)$ (with a safety factor $\\beta$).\n", + "\n", + "## Neumann condition and a variable coefficient\n", + "
\n", + "\n", + "Consider a Neumann condition $\\partial u/\\partial x=0$ at $x=L=N_x\\Delta x$,\n", + "discretized as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "[D_{2x} u]^n_i =\n", + "\\frac{u_{i+1}^{n} - u_{i-1}^n}{2\\Delta x} = 0\\quad\\Rightarrow\\quad\n", + "u_{i+1}^n = u_{i-1}^n,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for $i=N_x$. Using the scheme ([16](#wave:pde2:var:c:scheme:impl))\n", + "at the end point $i=N_x$ with $u_{i+1}^n=u_{i-1}^n$ results in" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^{n+1}_i = - u_i^{n-1} + 2u_i^n + \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\quad \\left(\\frac{\\Delta t}{\\Delta x}\\right)^2 \\left(\n", + "q_{i+\\frac{1}{2}}(u_{i-1}^n - u_{i}^n) -\n", + "q_{i-\\frac{1}{2}}(u_{i}^n - u_{i-1}^n)\\right)\n", + "+ \\Delta t^2 f^n_i\n", + "\\label{_auto5} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "= - u_i^{n-1} + 2u_i^n + \\left(\\frac{\\Delta t}{\\Delta x}\\right)^2\n", + "(q_{i+\\frac{1}{2}} + q_{i-\\frac{1}{2}})(u_{i-1}^n - u_{i}^n) +\n", + "\\Delta t^2 f^n_i\n", + "\\label{wave:pde2:var:c:scheme:impl:Neumann0} \\tag{19}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\approx - u_i^{n-1} + 2u_i^n + \\left(\\frac{\\Delta t}{\\Delta x}\\right)^2\n", + "2q_{i}(u_{i-1}^n - u_{i}^n) + \\Delta t^2 f^n_i\n", + "\\thinspace .\n", + "\\label{wave:pde2:var:c:scheme:impl:Neumann} \\tag{20}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we used the approximation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "q_{i+\\frac{1}{2}} + q_{i-\\frac{1}{2}} =\n", + "q_i + \\left(\\frac{dq}{dx}\\right)_i \\Delta x\n", + "+ \\left(\\frac{d^2q}{dx^2}\\right)_i \\Delta x^2 + \\cdots\n", + "+\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\quad q_i - \\left(\\frac{dq}{dx}\\right)_i \\Delta x\n", + "+ \\left(\\frac{d^2q}{dx^2}\\right)_i \\Delta x^2 + \\cdots\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "= 2q_i + 2\\left(\\frac{d^2q}{dx^2}\\right)_i \\Delta x^2 + {\\cal O}(\\Delta x^4)\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\approx 2q_i\n", + "\\thinspace .\n", + "\\label{_auto6} \\tag{21}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "An alternative derivation may apply the arithmetic mean of\n", + "$q_{n-\\frac{1}{2}}$ and $q_{n+\\frac{1}{2}}$ in\n", + "([19](#wave:pde2:var:c:scheme:impl:Neumann0)), leading to the term" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "(q_i + \\frac{1}{2}(q_{i+1}+q_{i-1}))(u_{i-1}^n-u_i^n)\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since $\\frac{1}{2}(q_{i+1}+q_{i-1}) = q_i + {\\cal O}(\\Delta x^2)$,\n", + "we can approximate with $2q_i(u_{i-1}^n-u_i^n)$ for $i=N_x$ and\n", + "get the same term as we did above.\n", + "\n", + "A common technique when implementing $\\partial u/\\partial x=0$\n", + "boundary conditions, is to assume $dq/dx=0$ as well. This implies\n", + "$q_{i+1}=q_{i-1}$ and $q_{i+1/2}=q_{i-1/2}$ for $i=N_x$.\n", + "The implications for the scheme are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^{n+1}_i = - u_i^{n-1} + 2u_i^n + \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\quad \\left(\\frac{\\Delta t}{\\Delta x}\\right)^2 \\left(\n", + "q_{i+\\frac{1}{2}}(u_{i-1}^n - u_{i}^n) -\n", + "q_{i-\\frac{1}{2}}(u_{i}^n - u_{i-1}^n)\\right)\n", + "+ \\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + " \\quad \\Delta t^2 f^n_i\n", + "\\label{_auto7} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "= - u_i^{n-1} + 2u_i^n + \\left(\\frac{\\Delta t}{\\Delta x}\\right)^2\n", + "2q_{i-\\frac{1}{2}}(u_{i-1}^n - u_{i}^n) +\n", + "\\Delta t^2 f^n_i\n", + "\\thinspace .\n", + "\\label{wave:pde2:var:c:scheme:impl:Neumann2} \\tag{23}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementation of variable coefficients\n", + "
\n", + "\n", + "To implement this using Devito we can just take the code from the previous ghost points example and replace the equation accordingly. If necessary we can replace values of `q` between mesh points with approximations that we derived in the section right above.\n", + "\n", + "The implementation of the scheme with a variable wave velocity $q(x)=c^2(x)$\n", + "may assume that $q$ is available as an array `q[i]` at\n", + "the spatial mesh points. The following loop is a straightforward\n", + "implementation of the scheme ([16](#wave:pde2:var:c:scheme:impl)):" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(1, Nx):\n", + " u[i] = - u_nm1[i] + 2*u_n[i] + \\\n", + " C2*(0.5*(q[i] + q[i+1])*(u_n[i+1] - u_n[i]) - \\\n", + " 0.5*(q[i] + q[i-1])*(u_n[i] - u_n[i-1])) + \\\n", + " dt2*f(x[i], t[n])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The coefficient `C2` is now defined as `(dt/dx)**2`, i.e., *not* as the\n", + "squared Courant number, since the wave velocity is variable and appears\n", + "inside the parenthesis.\n", + "\n", + "With Neumann conditions $u_x=0$ at the\n", + "boundary, we need to combine this scheme with the discrete\n", + "version of the boundary condition, as shown in the section [Neumann condition and a variable coefficient](#wave:pde2:var:c:Neumann).\n", + "Nevertheless, it would be convenient to reuse the formula for the\n", + "interior points and just modify the indices `ip1=i+1` and `im1=i-1`\n", + "as we did in the section [Implementation of Neumann conditions](#wave:pde2:Neumann:impl). Assuming\n", + "$dq/dx=0$ at the boundaries, we can implement the scheme at\n", + "the boundary with the following code." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "i = 0\n", + "ip1 = i+1\n", + "im1 = ip1\n", + "u[i] = - u_nm1[i] + 2*u_n[i] + \\\n", + " C2*(0.5*(q[i] + q[ip1])*(u_n[ip1] - u_n[i]) - \\\n", + " 0.5*(q[i] + q[im1])*(u_n[i] - u_n[im1])) + \\\n", + " dt2*f(x[i], t[n])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With ghost cells we can just reuse the formula for the interior\n", + "points also at the boundary, provided that the ghost values of both\n", + "$u$ and $q$ are correctly updated to ensure $u_x=0$ and $q_x=0$.\n", + "\n", + "A vectorized version of the scheme with a variable coefficient\n", + "at internal mesh points becomes" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "u[1:-1] = - u_nm1[1:-1] + 2*u_n[1:-1] + \\\n", + " C2*(0.5*(q[1:-1] + q[2:])*(u_n[2:] - u_n[1:-1]) -\n", + " 0.5*(q[1:-1] + q[:-2])*(u_n[1:-1] - u_n[:-2])) + \\\n", + " dt2*f(x[1:-1], t[n])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A more general PDE model with variable coefficients\n", + "\n", + "\n", + "Sometimes a wave PDE has a variable coefficient in front of\n", + "the time-derivative term:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\varrho(x)\\frac{\\partial^2 u}{\\partial t^2} =\n", + "\\frac{\\partial}{\\partial x}\\left( q(x)\n", + "\\frac{\\partial u}{\\partial x}\\right) + f(x,t)\n", + "\\label{wave:pde2:var:c:pde2} \\tag{24}\n", + "\\thinspace .\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One example appears when modeling elastic waves in a rod\n", + "with varying density, cf. ([wave:app:string](#wave:app:string)) with $\\varrho (x)$.\n", + "\n", + "A natural scheme for ([24](#wave:pde2:var:c:pde2)) is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[\\varrho D_tD_t u = D_x\\overline{q}^xD_x u + f]^n_i\n", + "\\thinspace .\n", + "\\label{_auto8} \\tag{25}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We realize that the $\\varrho$ coefficient poses no particular\n", + "difficulty, since $\\varrho$ enters the formula just as a simple factor\n", + "in front of a derivative. There is hence no need for any averaging\n", + "of $\\varrho$. Often, $\\varrho$ will be moved to the right-hand side,\n", + "also without any difficulty:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[D_tD_t u = \\varrho^{-1}D_x\\overline{q}^xD_x u + f]^n_i\n", + "\\thinspace .\n", + "\\label{_auto9} \\tag{26}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Generalization: damping\n", + "\n", + "\n", + "Waves die out by two mechanisms. In 2D and 3D the energy of the wave\n", + "spreads out in space, and energy conservation then requires\n", + "the amplitude to decrease. This effect is not present in 1D.\n", + "Damping is another cause of amplitude reduction. For example,\n", + "the vibrations of a string die out because of damping due to\n", + "air resistance and non-elastic effects in the string.\n", + "\n", + "The simplest way of including damping is to add a first-order derivative\n", + "to the equation (in the same way as friction forces enter a vibrating\n", + "mechanical system):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{\\partial^2 u}{\\partial t^2} + b\\frac{\\partial u}{\\partial t} =\n", + "c^2\\frac{\\partial^2 u}{\\partial x^2}\n", + " + f(x,t),\n", + "\\label{wave:pde3} \\tag{27}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $b \\geq 0$ is a prescribed damping coefficient.\n", + "\n", + "A typical discretization of ([27](#wave:pde3)) in terms of centered\n", + "differences reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[D_tD_t u + bD_{2t}u = c^2D_xD_x u + f]^n_i\n", + "\\thinspace .\n", + "\\label{wave:pde3:fd} \\tag{28}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Writing out the equation and solving for the unknown $u^{n+1}_i$\n", + "gives the scheme" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^{n+1}_i = (1 + {\\frac{1}{2}}b\\Delta t)^{-1}(({\\frac{1}{2}}b\\Delta t -1)\n", + "u^{n-1}_i + 2u^n_i + C^2\n", + "\\left(u^{n}_{i+1}-2u^{n}_{i} + u^{n}_{i-1}\\right) + \\Delta t^2 f^n_i),\n", + "\\label{wave:pde3:fd2} \\tag{29}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for $i\\in\\mathcal{I}_x^i$ and $n\\geq 1$.\n", + "New equations must be derived for $u^1_i$, and for boundary points in case\n", + "of Neumann conditions.\n", + "\n", + "The damping is very small in many wave phenomena and thus only evident\n", + "for very long time simulations. This makes the standard wave equation\n", + "without damping relevant for a lot of applications.\n", + "\n", + "\n", + "# Building a general 1D wave equation solver\n", + "
\n", + "\n", + "\n", + "The program [`wave1D_dn_vc.py`](${src_wave}/wave1D/wave1D_dn_vc.py)\n", + "is a fairly general code for 1D wave propagation problems that\n", + "targets the following initial-boundary value problem" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!WHAT DO I DO WITH THIS SECTION?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u_{tt} = (c^2(x)u_x)_x + f(x,t),\\quad x\\in (0,L),\\ t\\in (0,T]\n", + "\\label{wave:pde2:software:ueq} \\tag{30}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u(x,0) = I(x),\\quad x\\in [0,L]\n", + "\\label{_auto10} \\tag{31}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u_t(x,0) = V(t),\\quad x\\in [0,L]\n", + "\\label{_auto11} \\tag{32}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u(0,t) = U_0(t)\\hbox{ or } u_x(0,t)=0,\\quad t\\in (0,T]\n", + "\\label{_auto12} \\tag{33}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u(L,t) = U_L(t)\\hbox{ or } u_x(L,t)=0,\\quad t\\in (0,T]\n", + "\\label{wave:pde2:software:bcL} \\tag{34}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The only new feature here is the time-dependent Dirichlet conditions, but\n", + "they are trivial to implement:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "i = mathcal{I}_x[0] # x=0\n", + "u[i] = U_0(t[n+1])\n", + "\n", + "i = mathcal{I}_x[-1] # x=L\n", + "u[i] = U_L(t[n+1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `solver` function is a natural extension of the simplest\n", + "`solver` function in the initial `wave1D_u0.py` program,\n", + "extended with Neumann boundary conditions ($u_x=0$),\n", + "time-varying Dirichlet conditions, as well as\n", + "a variable wave velocity. The different code segments needed\n", + "to make these extensions have been shown and commented upon in the\n", + "preceding text. We refer to the `solver` function in the\n", + "`wave1D_dn_vc.py` file for all the details. Note in that\n", + " `solver` function, however, that the technique of \"hashing\" is\n", + "used to check whether a certain simulation has been run before, or not.\n", + "% if BOOK == 'book':\n", + "This technique is further explained in the section [softeng2:wave1D:filestorage:hash](#softeng2:wave1D:filestorage:hash).\n", + "% endif\n", + "\n", + "The vectorization is only applied inside the time loop, not for the\n", + "initial condition or the first time steps, since this initial work\n", + "is negligible for long time simulations in 1D problems.\n", + "\n", + "The following sections explain various more advanced programming\n", + "techniques applied in the general 1D wave equation solver.\n", + "\n", + "## User action function as a class\n", + "\n", + "A useful feature in the `wave1D_dn_vc.py` program is the specification\n", + "of the `user_action` function as a class. This part of the program may\n", + "need some motivation and explanation. Although the `plot_u_st`\n", + "function (and the `PlotMatplotlib` class) in the `wave1D_u0.viz`\n", + "function remembers the local variables in the `viz` function, it is a\n", + "cleaner solution to store the needed variables together with the\n", + "function, which is exactly what a class offers.\n", + "\n", + "### The code\n", + "\n", + "A class for flexible plotting, cleaning up files, making movie\n", + "files, like the function `wave1D_u0.viz` did, can be coded as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "class PlotAndStoreSolution:\n", + " \"\"\"\n", + " Class for the user_action function in solver.\n", + " Visualizes the solution only.\n", + " \"\"\"\n", + " def __init__(\n", + " self,\n", + " casename='tmp', # Prefix in filenames\n", + " umin=-1, umax=1, # Fixed range of y axis\n", + " pause_between_frames=None, # Movie speed\n", + " backend='matplotlib', # or 'gnuplot' or None\n", + " screen_movie=True, # Show movie on screen?\n", + " title='', # Extra message in title\n", + " skip_frame=1, # Skip every skip_frame frame\n", + " filename=None): # Name of file with solutions\n", + " self.casename = casename\n", + " self.yaxis = [umin, umax]\n", + " self.pause = pause_between_frames\n", + " self.backend = backend\n", + " if backend is None:\n", + " # Use native matplotlib\n", + " import matplotlib.pyplot as plt\n", + " elif backend in ('matplotlib', 'gnuplot'):\n", + " module = 'scitools.easyviz.' + backend + '_'\n", + " exec('import %s as plt' % module)\n", + " self.plt = plt\n", + " self.screen_movie = screen_movie\n", + " self.title = title\n", + " self.skip_frame = skip_frame\n", + " self.filename = filename\n", + " if filename is not None:\n", + " # Store time points when u is written to file\n", + " self.t = []\n", + " filenames = glob.glob('.' + self.filename + '*.dat.npz')\n", + " for filename in filenames:\n", + " os.remove(filename)\n", + "\n", + " # Clean up old movie frames\n", + " for filename in glob.glob('frame_*.png'):\n", + " os.remove(filename)\n", + "\n", + " def __call__(self, u, x, t, n):\n", + " \"\"\"\n", + " Callback function user_action, call by solver:\n", + " Store solution, plot on screen and save to file.\n", + " \"\"\"\n", + " # Save solution u to a file using numpy.savez\n", + " if self.filename is not None:\n", + " name = 'u%04d' % n # array name\n", + " kwargs = {name: u}\n", + " fname = '.' + self.filename + '_' + name + '.dat'\n", + " np.savez(fname, **kwargs)\n", + " self.t.append(t[n]) # store corresponding time value\n", + " if n == 0: # save x once\n", + " np.savez('.' + self.filename + '_x.dat', x=x)\n", + "\n", + " # Animate\n", + " if n % self.skip_frame != 0:\n", + " return\n", + " title = 't=%.3f' % t[n]\n", + " if self.title:\n", + " title = self.title + ' ' + title\n", + " if self.backend is None:\n", + " # native matplotlib animation\n", + " if n == 0:\n", + " self.plt.ion()\n", + " self.lines = self.plt.plot(x, u, 'r-')\n", + " self.plt.axis([x[0], x[-1],\n", + " self.yaxis[0], self.yaxis[1]])\n", + " self.plt.xlabel('x')\n", + " self.plt.ylabel('u')\n", + " self.plt.title(title)\n", + " self.plt.legend(['t=%.3f' % t[n]])\n", + " else:\n", + " # Update new solution\n", + " self.lines[0].set_ydata(u)\n", + " self.plt.legend(['t=%.3f' % t[n]])\n", + " self.plt.draw()\n", + " else:\n", + " # scitools.easyviz animation\n", + " self.plt.plot(x, u, 'r-',\n", + " xlabel='x', ylabel='u',\n", + " axis=[x[0], x[-1],\n", + " self.yaxis[0], self.yaxis[1]],\n", + " title=title,\n", + " show=self.screen_movie)\n", + " # pause\n", + " if t[n] == 0:\n", + " time.sleep(2) # let initial condition stay 2 s\n", + " else:\n", + " if self.pause is None:\n", + " pause = 0.2 if u.size < 100 else 0\n", + " time.sleep(pause)\n", + "\n", + " self.plt.savefig('frame_%04d.png' % (n))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dissection\n", + "\n", + "Understanding this class requires quite some familiarity with Python\n", + "in general and class programming in particular.\n", + "The class supports plotting with Matplotlib (`backend=None`) or\n", + "SciTools (`backend=matplotlib` or `backend=gnuplot`) for maximum\n", + "flexibility.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The constructor shows how we can flexibly import the plotting engine\n", + "as (typically) `scitools.easyviz.gnuplot_` or\n", + "`scitools.easyviz.matplotlib_` (note the trailing underscore - it is required).\n", + "With the `screen_movie` parameter\n", + "we can suppress displaying each movie frame on the screen.\n", + "Alternatively, for slow movies associated with\n", + "fine meshes, one can set\n", + "`skip_frame=10`, causing every 10 frames to be shown.\n", + "\n", + "The `__call__` method makes `PlotAndStoreSolution` instances behave like\n", + "functions, so we can just pass an instance, say `p`, as the\n", + "`user_action` argument in the `solver` function, and any call to\n", + "`user_action` will be a call to `p.__call__`. The `__call__`\n", + "method plots the solution on the screen,\n", + "saves the plot to file, and stores the solution in a file for\n", + "later retrieval.\n", + "\n", + "More details on storing the solution in files appear in\n", + "in\n", + "the document\n", + "[Scientific software engineering; wave equation case](http://tinyurl.com/k3sdbuv/pub/softeng2)\n", + "[[Langtangen_deqbook_softeng2]](#Langtangen_deqbook_softeng2).\n", + "\n", + "## Pulse propagation in two media\n", + "\n", + "\n", + "The function `pulse` in `wave1D_dn_vc.py` demonstrates wave motion in\n", + "heterogeneous media where $c$ varies. One can specify an interval\n", + "where the wave velocity is decreased by a factor `slowness_factor`\n", + "(or increased by making this factor less than one).\n", + "[Figure](#wave:pde1:fig:pulse1:two:media) shows a typical simulation\n", + "scenario.\n", + "\n", + "Four types of initial conditions are available:\n", + "\n", + "1. a rectangular pulse (`plug`),\n", + "\n", + "2. a Gaussian function (`gaussian`),\n", + "\n", + "3. a \"cosine hat\" consisting of one period of the cosine function\n", + " (`cosinehat`),\n", + "\n", + "4. frac{1}{2} a period of a \"cosine hat\" (`frac{1}{2}-cosinehat`)\n", + "\n", + "These peak-shaped initial conditions can be placed in the middle\n", + "(`loc='center'`) or at the left end (`loc='left'`) of the domain.\n", + "With the pulse in the middle, it splits in two parts, each with frac{1}{2}\n", + "the initial amplitude, traveling in opposite directions. With the\n", + "pulse at the left end, centered at $x=0$, and using the symmetry\n", + "condition $\\partial u/\\partial x=0$, only a right-going pulse is\n", + "generated. There is also a left-going pulse, but it travels from $x=0$\n", + "in negative $x$ direction and is not visible in the domain $[0,L]$.\n", + "\n", + "The `pulse` function is a flexible tool for playing around with\n", + "various wave shapes and jumps in the wave velocity (i.e.,\n", + "discontinuous media). The code is shown to demonstrate how easy it is\n", + "to reach this flexibility with the building blocks we have already\n", + "developed:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "def pulse(\n", + " C=1, # Maximum Courant number\n", + " Nx=200, # spatial resolution\n", + " animate=True,\n", + " version='vectorized',\n", + " T=2, # end time\n", + " loc='left', # location of initial condition\n", + " pulse_thinspace .='gaussian', # pulse/init.cond. type\n", + " slowness_factor=2, # inverse of wave vel. in right medium\n", + " medium=[0.7, 0.9], # interval for right medium\n", + " skip_frame=1, # skip frames in animations\n", + " sigma=0.05 # width measure of the pulse\n", + " ):\n", + " \"\"\"\n", + " Various peaked-shaped initial conditions on [0,1].\n", + " Wave velocity is decreased by the slowness_factor inside\n", + " medium. The loc parameter can be 'center' or 'left',\n", + " depending on where the initial pulse is to be located.\n", + " The sigma parameter governs the width of the pulse.\n", + " \"\"\"\n", + " # Use scaled parameters: L=1 for domain length, c_0=1\n", + " # for wave velocity outside the domain.\n", + " L = 1.0\n", + " c_0 = 1.0\n", + " if loc == 'center':\n", + " xc = L/2\n", + " elif loc == 'left':\n", + " xc = 0\n", + "\n", + " if pulse_thinspace . in ('gaussian','Gaussian'):\n", + " def I(x):\n", + " return np.exp(-0.5*((x-xc)/sigma)**2)\n", + " elif pulse_thinspace . == 'plug':\n", + " def I(x):\n", + " return 0 if abs(x-xc) > sigma else 1\n", + " elif pulse_thinspace . == 'cosinehat':\n", + " def I(x):\n", + " # One period of a cosine\n", + " w = 2\n", + " a = w*sigma\n", + " return 0.5*(1 + np.cos(np.pi*(x-xc)/a)) \\\n", + " if xc - a <= x <= xc + a else 0\n", + "\n", + " elif pulse_thinspace . == 'frac{1}{2}-cosinehat':\n", + " def I(x):\n", + " # Half a period of a cosine\n", + " w = 4\n", + " a = w*sigma\n", + " return np.cos(np.pi*(x-xc)/a) \\\n", + " if xc - 0.5*a <= x <= xc + 0.5*a else 0\n", + " else:\n", + " raise ValueError('Wrong pulse_thinspace .=\"%s\"' % pulse_thinspace .)\n", + "\n", + " def c(x):\n", + " return c_0/slowness_factor \\\n", + " if medium[0] <= x <= medium[1] else c_0\n", + "\n", + " umin=-0.5; umax=1.5*I(xc)\n", + " casename = '%s_Nx%s_sf%s' % \\\n", + " (pulse_thinspace ., Nx, slowness_factor)\n", + " action = PlotMediumAndSolution(\n", + " medium, casename=casename, umin=umin, umax=umax,\n", + " skip_frame=skip_frame, screen_movie=animate,\n", + " backend=None, filename='tmpdata')\n", + "\n", + " # Choose the stability limit with given Nx, worst case c\n", + " # (lower C will then use this dt, but smaller Nx)\n", + " dt = (L/Nx)/c_0\n", + " cpu, hashed_input = solver(\n", + " I=I, V=None, f=None, c=c,\n", + " U_0=None, U_L=None,\n", + " L=L, dt=dt, C=C, T=T,\n", + " user_action=action,\n", + " version=version,\n", + " stability_safety_factor=1)\n", + "\n", + " if cpu > 0: # did we generate new data?\n", + " action.close_file(hashed_input)\n", + " action.make_movie_file()\n", + " print 'cpu (-1 means no new data generated):', cpu\n", + "\n", + "def convergence_rates(\n", + " u_exact,\n", + " I, V, f, c, U_0, U_L, L,\n", + " dt0, num_meshes,\n", + " C, T, version='scalar',\n", + " stability_safety_factor=1.0):\n", + " \"\"\"\n", + " Half the time step and estimate convergence rates for\n", + " for num_meshes simulations.\n", + " \"\"\"\n", + " class ComputeError:\n", + " def __init__(self, norm_type):\n", + " self.error = 0\n", + "\n", + " def __call__(self, u, x, t, n):\n", + " \"\"\"Store norm of the error in self.E.\"\"\"\n", + " error = np.abs(u - u_exact(x, t[n])).max()\n", + " self.error = max(self.error, error)\n", + "\n", + " E = []\n", + " h = [] # dt, solver adjusts dx such that C=dt*c/dx\n", + " dt = dt0\n", + " for i in range(num_meshes):\n", + " error_calculator = ComputeError('Linf')\n", + " solver(I, V, f, c, U_0, U_L, L, dt, C, T,\n", + " user_action=error_calculator,\n", + " version='scalar',\n", + " stability_safety_factor=1.0)\n", + " E.append(error_calculator.error)\n", + " h.append(dt)\n", + " dt /= 2 # halve the time step for next simulation\n", + " print 'E:', E\n", + " print 'h:', h\n", + " r = [np.log(E[i]/E[i-1])/np.log(h[i]/h[i-1])\n", + " for i in range(1,num_meshes)]\n", + " return r\n", + "\n", + "def test_convrate_sincos():\n", + " n = m = 2\n", + " L = 1.0\n", + " u_exact = lambda x, t: np.cos(m*np.pi/L*t)*np.sin(m*np.pi/L*x)\n", + "\n", + " r = convergence_rates(\n", + " u_exact=u_exact,\n", + " I=lambda x: u_exact(x, 0),\n", + " V=lambda x: 0,\n", + " f=0,\n", + " c=1,\n", + " U_0=0,\n", + " U_L=0,\n", + " L=L,\n", + " dt0=0.1,\n", + " num_meshes=6,\n", + " C=0.9,\n", + " T=1,\n", + " version='scalar',\n", + " stability_safety_factor=1.0)\n", + " print 'rates sin(x)*cos(t) solution:', \\\n", + " [round(r_,2) for r_ in r]\n", + " assert abs(r[-1] - 2) < 0.002" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `PlotMediumAndSolution` class used here is a subclass of\n", + "`PlotAndStoreSolution` where the medium with reduced $c$ value,\n", + "as specified by the `medium` interval,\n", + "is visualized in the plots.\n", + "\n", + "**Comment on the choices of discretization parameters.**\n", + "\n", + "The argument $N_x$ in the `pulse` function does not correspond to\n", + "the actual spatial resolution of $C<1$, since the `solver`\n", + "function takes a fixed $\\Delta t$ and $C$, and adjusts $\\Delta x$\n", + "accordingly. As seen in the `pulse` function,\n", + "the specified $\\Delta t$ is chosen according to the\n", + "limit $C=1$, so if $C<1$, $\\Delta t$ remains the same, but the\n", + "`solver` function operates with a larger $\\Delta x$ and smaller\n", + "$N_x$ than was specified in the call to `pulse`. The practical reason\n", + "is that we always want to keep $\\Delta t$ fixed such that\n", + "plot frames and movies are synchronized in time regardless of the\n", + "value of $C$ (i.e., $\\Delta x$ is varied when the\n", + "Courant number varies).\n", + "\n", + "\n", + "\n", + "The reader is encouraged to play around with the `pulse` function:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To easily kill the graphics by Ctrl-C and restart a new simulation it might be\n", + "easier to run the above two statements from the command line\n", + "with" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> python -c 'import wave1D_dn_vc as w; w.pulse(...)'\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exercises\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 1: Find the analytical solution to a damped wave equation\n", + "
\n", + "\n", + "Consider the wave equation with damping ([27](#wave:pde3)).\n", + "The goal is to find an exact solution to a wave problem with damping and zero source term.\n", + "A starting point is the standing wave solution from\n", + "[wave:exer:standingwave](#wave:exer:standingwave). mathcal{I}_t becomes necessary to\n", + "include a damping term $e^{-\\beta t}$ and also have both a sine and cosine\n", + "component in time:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\uex(x,t) = e^{-\\beta t}\n", + "\\sin kx \\left( A\\cos\\omega t\n", + "+ B\\sin\\omega t\\right)\n", + "\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Find $k$ from the boundary conditions\n", + "$u(0,t)=u(L,t)=0$. Then use the PDE to find constraints on\n", + "$\\beta$, $\\omega$, $A$, and $B$.\n", + "Set up a complete initial-boundary value problem\n", + "and its solution.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "Mathematical model:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial^2 u}{\\partial t^2} + b\\frac{\\partial u}{\\partial t} =\n", + "c^2\\frac{\\partial^2 u}{\\partial x^2},\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$b \\geq 0$ is a prescribed damping coefficient.\n", + "\n", + "Ansatz:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u(x,t) = e^{-\\beta t}\n", + "\\sin kx \\left( A\\cos\\omega t\n", + "+ B\\sin\\omega t\\right)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Boundary condition: $u=0$ for $x=0,L$. Fulfilled for $x=0$. Requirement\n", + "at $x=L$ gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "kL = m\\pi,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for an arbitrary integer $m$. Hence, $k=m\\pi/L$.\n", + "\n", + "Inserting the ansatz in the PDE and dividing by $e^{-\\beta t}$ results in" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "(\\beta^2 sin kx -\\omega^2 sin kx - b\\beta sin kx) (A\\cos\\omega t + B\\sin\\omega t) &+ \\nonumber \\\\ \n", + "(b\\omega sin kx - 2\\beta\\omega sin kx) (-A\\sin\\omega t + B\\cos\\omega t) &= -(A\\cos\\omega t + B\\sin\\omega t)k^2c^2 \\nonumber\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This gives us two requirements:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\beta^2 - \\omega^2 + b\\beta + k^2c^2 = 0\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "-2\\beta\\omega + b\\omega = 0\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since $b$, $c$ and $k$ are to be given in advance, we may solve these two equations to get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\beta &= \\frac{b}{2} \\nonumber \\\\ \n", + "\\omega &= \\sqrt{c^2k^2 - \\frac{b^2}{4}} \\nonumber\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the initial condition on the derivative, i.e. $\\frac{\\partial u_e}{\\partial t} = 0$, we find that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "B\\omega = \\beta A\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inserting the expression for $\\omega$, we find that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "B = \\frac{b}{2\\sqrt{c^2k^2 - \\frac{b^2}{4}}} A\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for $A$ prescribed.\n", + "\n", + "Using $t = 0$ in the expression for $u_e$ gives us the initial condition as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "I(x) = A sin kx\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Summarizing, the PDE problem can then be states as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial^2 u}{\\partial t^2} + b\\frac{\\partial u}{\\partial t} =\n", + "c^2 \\frac{\\partial^2 u}{\\partial x^2}, \\quad x\\in (0,L),\\ t\\in (0,T]\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u(x,0) = I(x), \\quad x\\in [0,L]\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial}{\\partial t}u(x,0) = 0, \\quad x\\in [0,L]\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u(0,t) = 0, \\quad t\\in (0,T]\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u(L,t) = 0, \\quad t\\in (0,T]\n", + "\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where constants $c$, $A$, $b$ and $k$, as well as $I(x)$, are prescribed.\n", + "\n", + "The solution to the problem is then given as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\uex(x,t) = e^{-\\beta t}\n", + "\\sin kx \\left( A\\cos\\omega t\n", + "+ B\\sin\\omega t\\right)\n", + "\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $k=m\\pi/L$ for arbitrary integer $m$, $\\beta = \\frac{b}{2}$,\n", + "$\\omega = \\sqrt{c^2k^2 - \\frac{b^2}{4}}$, $B = \\frac{b}{2\\sqrt{c^2k^2 - \\frac{b^2}{4}}} A$\n", + "and $I(x) = A sin kx$.\n", + "\n", + "\n", + "Filename: `damped_waves`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Problem 2: Explore symmetry boundary conditions\n", + "
\n", + "\n", + "Consider the simple \"plug\" wave where $\\Omega = [-L,L]$ and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "I(x) = \\left\\lbrace\\begin{array}{ll}\n", + "1, & x\\in [-\\delta, \\delta],\\\\ \n", + "0, & \\hbox{otherwise}\n", + "\\end{array}\\right.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for some number $0 < \\delta < L$. The other initial condition is\n", + "$u_t(x,0)=0$ and there is no source term $f$.\n", + "The boundary conditions can be set to $u=0$.\n", + "The solution to this problem is symmetric around $x=0$.\n", + "This means that we can simulate the wave process in only frac{1}{2}\n", + "of the domain $[0,L]$.\n", + "\n", + "\n", + "**a)**\n", + "Argue why the symmetry boundary condition\n", + "is $u_x=0$ at $x=0$.\n", + "\n", + "\n", + "\n", + "**Hint.**\n", + "Symmetry of a function about $x=x_0$ means that\n", + "$f(x_0+h) = f(x_0-h)$.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "A symmetric $u$ around $x=0$ means that $u(-x,t)=u(x,t)$.\n", + "Let $x_0=0$ and $x=x_0+h$. Then we can use a *centered* finite difference\n", + "definition of the derivative:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial}{\\partial x}u(x_0,t) =\n", + "\\lim_{h\\rightarrow 0}\\frac{u(x_0+h,t)- u(x_0-h)}{2h} =\n", + "\\lim_{h\\rightarrow 0}\\frac{u(h,t)- u(-h,t)}{2h} = 0,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "since $u(h,t)=u(-h,t)$ for any $h$. Symmetry around a point $x=x_0$\n", + "therefore always implies $u_x(x_0,t)=0$.\n", + "\n", + "\n", + "\n", + "**b)**\n", + "Perform simulations of the complete wave problem\n", + "on $[-L,L]$. Thereafter, utilize the\n", + "symmetry of the solution and run a simulation\n", + "in frac{1}{2} of the domain $[0,L]$, using a boundary condition\n", + "at $x=0$. Compare plots from the two solutions and\n", + "confirm that they are the same.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "We can utilize the `wave1D_dn.py` code which allows Dirichlet and\n", + "Neumann conditions. The `solver` and `viz` functions must take $x_0$\n", + "and $x_L$ as parameters instead of just $L$ such that we can solve the\n", + "wave equation in $[x_0, x_L]$. The we can call up `solver` for the two\n", + "problems on $[-L,L]$ and $[0,L]$ with boundary conditions\n", + "$u(-L,t)=u(L,t)=0$ and $u_x(0,t)=u(L,t)=0$, respectively.\n", + "\n", + "The original `wave1D_dn.py` code makes a movie by playing all the\n", + "`.png` files in a browser. mathcal{I}_t can then be wise to let the `viz`\n", + "function create a movie directory and place all the frames and HTML\n", + "player file in that directory. Alternatively, one can just make\n", + "some ordinary movie file (Ogg, WebM, MP4, Flash) with `ffmpeg` or\n", + "`ffmpeg` and give it a name. mathcal{I}_t is a point that the name is\n", + "transferred to `viz` so it is easy to call `viz` twice and get two\n", + "separate movie files or movie directories.\n", + "\n", + "The plots produced by the code (below) shows that the solutions indeed\n", + "are the same.\n", + "\n", + "\n", + "\n", + "**c)**\n", + "Prove the symmetry property of the solution\n", + "by setting up the complete initial-boundary value problem\n", + "and showing that if $u(x,t)$ is a solution, then also $u(-x,t)$\n", + "is a solution.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "The plan in this proof is to introduce $v(x,t)=u(-x,t)$\n", + "and show that $v$ fulfills the same\n", + "initial-boundary value problem as $u$. If the problem has a unique\n", + "solution, then $v=u$. Or, in other words, the solution is\n", + "symmetric: $u(-x,t)=u(x,t)$.\n", + "\n", + "We can work with a general initial-boundary value problem on the form" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u_tt(x,t) = c^2u_{xx}(x,t) + f(x,t)\n", + "\\label{_auto13} \\tag{35}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u(x,0) = I(x)\n", + "\\label{_auto14} \\tag{36}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u_t(x,0) = V(x)\n", + "\\label{_auto15} \\tag{37}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u(-L,0) = 0\n", + "\\label{_auto16} \\tag{38}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u(L,0) = 0\n", + "\\label{_auto17} \\tag{39}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Introduce a new coordinate $\\bar x = -x$. We have that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial^2 u}{\\partial x^2} = \\frac{\\partial}{\\partial x}\n", + "\\left(\n", + "\\frac{\\partial u}{\\partial\\bar x}\n", + "\\frac{\\partial\\bar x}{\\partial x}\n", + "\\right)\n", + "= \\frac{\\partial}{\\partial x}\n", + "\\left(\n", + "\\frac{\\partial u}{\\partial\\bar x} (-1)\\right)\n", + "= (-1)^2 \\frac{\\partial^2 u}{\\partial \\bar x^2}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The derivatives in time are unchanged.\n", + "\n", + "Substituting $x$ by $-\\bar x$ leads to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u_{tt}(-\\bar x,t) = c^2u_{\\bar x\\bar x}(-\\bar x,t) + f(-\\bar x,t)\n", + "\\label{_auto18} \\tag{40}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u(-\\bar x,0) = I(-\\bar x)\n", + "\\label{_auto19} \\tag{41}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u_t(-\\bar x,0) = V(-\\bar x)\n", + "\\label{_auto20} \\tag{42}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u(L,0) = 0\n", + "\\label{_auto21} \\tag{43}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "u(-L,0) = 0\n", + "\\label{_auto22} \\tag{44}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, dropping the bars and introducing $v(x,t)=u(-x,t)$, we find that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_{tt}(x,t) = c^2v_{xx}(x,t) + f(-x,t)\n", + "\\label{_auto23} \\tag{45}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v(x,0) = I(-x)\n", + "\\label{_auto24} \\tag{46}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v_t(x ,0) = V(-x)\n", + "\\label{_auto25} \\tag{47}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v(-L,0) = 0\n", + "\\label{_auto26} \\tag{48}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v(L,0) = 0\n", + "\\label{_auto27} \\tag{49}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Provided that $I$, $f$, and $V$ are all symmetric* around $x=0$\n", + "such that $I(x)=I(-x)$, $V(x)=V(-x)$, and $f(x,t)=f(-x,t)$, we\n", + "can express the initial-boundary value problem as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_{tt}(x,t) = c^2v_{xx}(x,t) + f(x,t)\n", + "\\label{_auto28} \\tag{50}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v(x,0) = I(x)\n", + "\\label{_auto29} \\tag{51}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v_t(x ,0) = V(x)\n", + "\\label{_auto30} \\tag{52}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v(-L,0) = 0\n", + "\\label{_auto31} \\tag{53}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "v(L,0) = 0\n", + "\\label{_auto32} \\tag{54}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the same problem as the one that $u$ fulfills. If the solution\n", + "is unique, which can be proven, then $v=u$, and $u(-x,t)=u(x,t)$.\n", + "\n", + "To summarize, the necessary conditions for symmetry are that\n", + "\n", + " * all involved functions $I$, $V$, and $f$ must be symmetric, and\n", + "\n", + " * the boundary conditions are symmetric in the sense that they\n", + " can be flipped (the condition at $x=-L$ can be applied\n", + " at $x=L$ and vice versa).\n", + "\n", + "\n", + "\n", + "**d)**\n", + "If the code works correctly, the solution $u(x,t) = x(L-x)(1+\\frac{t}{2})$\n", + "should be reproduced exactly. Write a test function `test_quadratic` that\n", + "checks whether this is the case. Simulate for $x$ in $[0, \\frac{L}{2}]$ with\n", + "a symmetry condition at the end $x = \\frac{L}{2}$.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "Running the code below, shows that the test case indeed is reproduced exactly." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "#!/usr/bin/env python\n", + "from scitools.std import *\n", + "\n", + "# Add an x0 coordinate for solving the wave equation on [x0, xL]\n", + "\n", + "def solver(I, V, f, c, U_0, U_L, x0, xL, Nx, C, T,\n", + " user_action=None, version='scalar'):\n", + " \"\"\"\n", + " Solve u_tt=c^2*u_xx + f on (0,L)x(0,T].\n", + " u(0,t)=U_0(t) or du/dn=0 (U_0=None), u(L,t)=U_L(t) or du/dn=0 (u_L=None).\n", + " \"\"\"\n", + " x = linspace(x0, xL, Nx+1) # Mesh points in space\n", + " dx = x[1] - x[0]\n", + " dt = C*dx/c\n", + " Nt = int(round(T/dt))\n", + " t = linspace(0, Nt*dt, Nt+1) # Mesh points in time\n", + " C2 = C**2; dt2 = dt*dt # Help variables in the scheme\n", + "\n", + " # Wrap user-given f, V, U_0, U_L\n", + " if f is None or f == 0:\n", + " f = (lambda x, t: 0) if version == 'scalar' else \\\n", + " lambda x, t: zeros(x.shape)\n", + " if V is None or V == 0:\n", + " V = (lambda x: 0) if version == 'scalar' else \\\n", + " lambda x: zeros(x.shape)\n", + " if U_0 is not None:\n", + " if isinstance(U_0, (float,int)) and U_0 == 0:\n", + " U_0 = lambda t: 0\n", + " if U_L is not None:\n", + " if isinstance(U_L, (float,int)) and U_L == 0:\n", + " U_L = lambda t: 0\n", + "\n", + " u = zeros(Nx+1) # Solution array at new time level\n", + " u_1 = zeros(Nx+1) # Solution at 1 time level back\n", + " u_2 = zeros(Nx+1) # Solution at 2 time levels back\n", + "\n", + " mathcal{I}_x = range(0, Nx+1)\n", + " mathcal{I}_t = range(0, Nt+1)\n", + "\n", + " import time; t0 = time.clock() # CPU time measurement\n", + "\n", + " # Load initial condition into u_1\n", + " for i in mathcal{I}_x:\n", + " u_1[i] = I(x[i])\n", + "\n", + " if user_action is not None:\n", + " user_action(u_1, x, t, 0)\n", + "\n", + " # Special formula for the first step\n", + " for i in mathcal{I}_x[1:-1]:\n", + " u[i] = u_1[i] + dt*V(x[i]) + \\\n", + " 0.5*C2*(u_1[i-1] - 2*u_1[i] + u_1[i+1]) + \\\n", + " 0.5*dt2*f(x[i], t[0])\n", + "\n", + " i = mathcal{I}_x[0]\n", + " if U_0 is None:\n", + " # Set boundary values du/dn = 0\n", + " # x=0: i-1 -> i+1 since u[i-1]=u[i+1]\n", + " # x=L: i+1 -> i-1 since u[i+1]=u[i-1])\n", + " ip1 = i+1\n", + " im1 = ip1 # i-1 -> i+1\n", + " u[i] = u_1[i] + dt*V(x[i]) + \\\n", + " 0.5*C2*(u_1[im1] - 2*u_1[i] + u_1[ip1]) + \\\n", + " 0.5*dt2*f(x[i], t[0])\n", + " else:\n", + " u[0] = U_0(dt)\n", + "\n", + " i = mathcal{I}_x[-1]\n", + " if U_L is None:\n", + " im1 = i-1\n", + " ip1 = im1 # i+1 -> i-1\n", + " u[i] = u_1[i] + dt*V(x[i]) + \\\n", + " 0.5*C2*(u_1[im1] - 2*u_1[i] + u_1[ip1]) + \\\n", + " 0.5*dt2*f(x[i], t[0])\n", + " else:\n", + " u[i] = U_L(dt)\n", + "\n", + " if user_action is not None:\n", + " user_action(u, x, t, 1)\n", + "\n", + " # Update data structures for next step\n", + " u_2[:], u_1[:] = u_1, u\n", + "\n", + " for n in mathcal{I}_t[1:-1]:\n", + " # Update all inner points\n", + " if version == 'scalar':\n", + " for i in mathcal{I}_x[1:-1]:\n", + " u[i] = - u_2[i] + 2*u_1[i] + \\\n", + " C2*(u_1[i-1] - 2*u_1[i] + u_1[i+1]) + \\\n", + " dt2*f(x[i], t[n])\n", + "\n", + " elif version == 'vectorized':\n", + " u[1:-1] = - u_2[1:-1] + 2*u_1[1:-1] + \\\n", + " C2*(u_1[0:-2] - 2*u_1[1:-1] + u_1[2:]) + \\\n", + " dt2*f(x[1:-1], t[n])\n", + " else:\n", + " raise ValueError('version=%s' % version)\n", + "\n", + " # Insert boundary conditions\n", + " i = mathcal{I}_x[0]\n", + " if U_0 is None:\n", + " # Set boundary values\n", + " # x=0: i-1 -> i+1 since u[i-1]=u[i+1] when du/dn=0\n", + " # x=L: i+1 -> i-1 since u[i+1]=u[i-1] when du/dn=0\n", + " ip1 = i+1\n", + " im1 = ip1\n", + " u[i] = - u_2[i] + 2*u_1[i] + \\\n", + " C2*(u_1[im1] - 2*u_1[i] + u_1[ip1]) + \\\n", + " dt2*f(x[i], t[n])\n", + " else:\n", + " u[0] = U_0(t[n+1])\n", + "\n", + " i = mathcal{I}_x[-1]\n", + " if U_L is None:\n", + " im1 = i-1\n", + " ip1 = im1\n", + " u[i] = - u_2[i] + 2*u_1[i] + \\\n", + " C2*(u_1[im1] - 2*u_1[i] + u_1[ip1]) + \\\n", + " dt2*f(x[i], t[n])\n", + " else:\n", + " u[i] = U_L(t[n+1])\n", + "\n", + " if user_action is not None:\n", + " if user_action(u, x, t, n+1):\n", + " break\n", + "\n", + " # Update data structures for next step\n", + " u_2[:], u_1[:] = u_1, u\n", + "\n", + " cpu_time = t0 - time.clock()\n", + " return u, x, t, cpu_time\n", + "\n", + "\n", + "def viz(I, V, f, c, U_0, U_L, x0, xL, Nx, C, T, umin, umax,\n", + " version='scalar', animate=True,\n", + " movie_dir='tmp'):\n", + " \"\"\"Run solver and visualize u at each time level.\"\"\"\n", + " import scitools.std as plt, time, glob, os\n", + "\n", + " def plot_u(u, x, t, n):\n", + " \"\"\"user_action function for solver.\"\"\"\n", + " plt.plot(x, u, 'r-',\n", + " xlabel='x', ylabel='u',\n", + " axis=[x0, xL, umin, umax],\n", + " title='t=%f' % t[n])\n", + " # Let the initial condition stay on the screen for 2\n", + " # seconds, else insert a pause of 0.2 s between each plot\n", + " time.sleep(2) if t[n] == 0 else time.sleep(0.2)\n", + " plt.savefig('frame_%04d.png' % n) # for movie making\n", + "\n", + " # Clean up old movie frames\n", + " for filename in glob.glob('frame_*.png'):\n", + " os.remove(filename)\n", + "\n", + " user_action = plot_u if animate else None\n", + " u, x, t, cpu = solver(I, V, f, c, U_0, U_L, L, Nx, C, T,\n", + " user_action, version)\n", + " if animate:\n", + " # Make a directory with the frames\n", + " if os.path.isdir(movie_dir):\n", + " shutil.rmtree(movie_dir)\n", + " os.mkdir(movie_dir)\n", + " os.chdir(movie_dir)\n", + " # Move all frame_*.png files to this subdirectory\n", + " for filename in glob.glob(os.path.join(os.pardir, 'frame_*.png')):\n", + " os.renamve(os.path.join(os.pardir, filename), filename)\n", + " plt.movie('frame_*.png', encoder='html', fps=4,\n", + " output_file='movie.html')\n", + " # Invoke movie.html in a browser to steer the movie\n", + "\n", + " return cpu\n", + "\n", + "import nose.tools as nt\n", + "\n", + "def test_quadratic():\n", + " \"\"\"\n", + " Check the scalar and vectorized versions work for\n", + " a quadratic u(x,t)=x(L-x)(1+t/2) that is exactly reproduced.\n", + " We simulate in [0, L/2] and apply a symmetry condition\n", + " at the end x=L/2.\n", + " \"\"\"\n", + " exact_solution = lambda x, t: x*(L-x)*(1+0.5*t)\n", + " I = lambda x: exact_solution(x, 0)\n", + " V = lambda x: 0.5*exact_solution(x, 0)\n", + " f = lambda x, t: 2*(1+0.5*t)*c**2\n", + " U_0 = lambda t: exact_solution(0, t)\n", + " U_L = None\n", + " L = 2.5\n", + " c = 1.5\n", + " Nx = 3 # very coarse mesh\n", + " C = 1\n", + " T = 18 # long time integration\n", + "\n", + " def assert_no_error(u, x, t, n):\n", + " u_e = exact_solution(x, t[n])\n", + " diff = abs(u - u_e).max()\n", + " nt.assert_almost_equal(diff, 0, places=13)\n", + "\n", + " solver(I, V, f, c, U_0, U_L, 0, L/2, Nx, C, T,\n", + " user_action=assert_no_error, version='scalar')\n", + " solver(I, V, f, c, U_0, U_L, 0, L/2, Nx, C, T,\n", + " user_action=assert_no_error, version='vectorized')\n", + "\n", + "\n", + "def plug(C=1, Nx=50, animate=True, version='scalar', T=2):\n", + " \"\"\"Plug profile as initial condition.\"\"\"\n", + " L = 1.\n", + " c = 1\n", + " delta = 0.1\n", + "\n", + " def I(x):\n", + " if abs(x) > delta:\n", + " return 0\n", + " else:\n", + " return 1\n", + "\n", + " # Solution on [-L,L]\n", + " cpu = viz(I=I, V=0, f=0, c, U_0=0, U_L=0, -L, L, 2*Nx, C, T,\n", + " umin=-1.1, umax=1.1, version=version, animate=animate,\n", + " movie_dir='full')\n", + "\n", + " # Solution on [0,L]\n", + " cpu = viz(I=I, V=0, f=0, c, U_0=None, U_L=0, 0, L, Nx, C, T,\n", + " umin=-1.1, umax=1.1, version=version, animate=animate,\n", + " movie_dir='frac{1}{2}')\n", + "\n", + "\n", + "if __name__ == '__main__':\n", + " plug()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "Filename: `wave1D_symmetric`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 3: Send pulse waves through a layered medium\n", + "
\n", + "\n", + "Use the `pulse` function in `wave1D_dn_vc.py` to investigate\n", + "sending a pulse, located with its peak at $x=0$, through two\n", + "media with different wave velocities. The (scaled) velocity in\n", + "the left medium is 1 while it is $\\frac{1}{s_f}$ in the right medium.\n", + "Report what happens with a Gaussian pulse, a \"cosine hat\" pulse, half a \"cosine hat\" pulse, and a plug pulse for resolutions\n", + "$N_x=40,80,160$, and $s_f=2,4$. Simulate until $T=2$.\n", + "\n", + "\n", + "\n", + "**Solution.**\n", + "In all cases, the change in velocity causes some of the wave to\n", + "be reflected back (while the rest is let through). When the waves\n", + "go from higher to lower velocity, the amplitude builds, and vice versa." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import wave1D_dn_vc as wave\n", + "import os, sys, shutil, glob\n", + "\n", + "for pulse_thinspace . in 'gaussian', 'cosinehat', 'frac{1}{2}-cosinehat', 'plug':\n", + " for Nx in 40, 80, 160:\n", + " for sf in 2, 4:\n", + " if sf == 1 and Nx > 40:\n", + " continue # homogeneous medium with C=1: Nx=40 enough\n", + " print 'wave1D.pulse:', pulse_thinspace ., Nx, sf\n", + "\n", + " wave.pulse(C=1, Nx=Nx, animate=False, # just hardcopies\n", + " version='vectorized',\n", + " T=2, loc='left', pulse_thinspace .=pulse_thinspace .,\n", + " slowness_factor=sf, medium=[0.7, 0.9],\n", + " skip_frame = 1,\n", + " sigma=0.05)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Filename: `pulse1D`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 4: Explain why numerical noise occurs\n", + "
\n", + "\n", + "The experiments performed in [Exercise 3: Send pulse waves through a layered medium](#wave:app:exer:pulse1D) shows\n", + "considerable numerical noise in the form of non-physical waves,\n", + "especially for $s_f=4$ and the plug pulse or the half a \"cosinehat\"\n", + "pulse. The noise is much less visible for a Gaussian pulse. Run the\n", + "case with the plug and half a \"cosinehat\" pulse for $s_f=1$, $C=0.9,\n", + "0.25$, and $N_x=40,80,160$. Use the numerical dispersion relation to\n", + "explain the observations.\n", + "Filename: `pulse1D_analysis`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 5: Investigate harmonic averaging in a 1D model\n", + "
\n", + "\n", + "Harmonic means are often used if the wave velocity is non-smooth or\n", + "discontinuous. Will harmonic averaging of the wave velocity give less\n", + "numerical noise for the case $s_f=4$ in [Exercise 3: Send pulse waves through a layered medium](#wave:app:exer:pulse1D)?\n", + "Filename: `pulse1D_harmonic`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Problem 6: Implement open boundary conditions\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "To enable a wave to leave the computational domain and travel\n", + "undisturbed through\n", + "the boundary $x=L$, one can in a one-dimensional problem impose the\n", + "following condition, called a *radiation condition* or\n", + "*open boundary condition*:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{\\partial u}{\\partial t} + c\\frac{\\partial u}{\\partial x} = 0\\thinspace .\n", + "\\label{wave:app:exer:radiationBC:eq} \\tag{55}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The parameter $c$ is the wave velocity.\n", + "\n", + "Show that ([55](#wave:app:exer:radiationBC:eq)) accepts\n", + "a solution $u = g_R(x-ct)$ (right-going wave),\n", + "but not $u = g_L(x+ct)$ (left-going wave). This means\n", + "that ([55](#wave:app:exer:radiationBC:eq)) will allow any\n", + "right-going wave $g_R(x-ct)$ to pass through the boundary undisturbed.\n", + "\n", + "A corresponding open boundary condition for a left-going wave\n", + "through $x=0$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{\\partial u}{\\partial t} - c\\frac{\\partial u}{\\partial x} = 0\\thinspace .\n", + "\\label{wave:app:exer:radiationBC:eqL} \\tag{56}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**a)**\n", + "A natural idea for discretizing\n", + "the condition ([55](#wave:app:exer:radiationBC:eq))\n", + "at the spatial end point $i=N_x$ is to apply\n", + "centered differences in time and space:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[D_{2t}u + cD_{2x}u =0]^n_{i},\\quad i=N_x\\thinspace .\n", + "\\label{wave:app:exer:radiationBC:eq:op} \\tag{57}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Eliminate the fictitious value $u_{N_x+1}^n$ by using\n", + "the discrete equation at the same point.\n", + "\n", + "The equation for the first step, $u_i^1$, is in principle also affected,\n", + "but we can then use the condition $u_{N_x}=0$ since the wave\n", + "has not yet reached the right boundary.\n", + "\n", + "**b)**\n", + "A much more convenient implementation of the open boundary condition\n", + "at $x=L$ can be based on an explicit discretization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[D^+_tu + cD_x^- u = 0]_i^n,\\quad i=N_x\\thinspace .\n", + "\\label{wave:app:exer:radiationBC:eq:op:1storder} \\tag{58}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From this equation, one can solve for $u^{n+1}_{N_x}$ and apply the\n", + "formula as a Dirichlet condition at the boundary point.\n", + "However, the finite difference approximations involved are of\n", + "first order.\n", + "\n", + "Implement this scheme for a wave equation\n", + "$u_{tt}=c^2u_{xx}$ in a domain $[0,L]$,\n", + "where you have $u_x=0$ at $x=0$, the condition ([55](#wave:app:exer:radiationBC:eq))\n", + "at $x=L$, and an initial disturbance in the middle\n", + "of the domain, e.g., a plug profile like" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u(x,0) = \\left\\lbrace\\begin{array}{ll} 1,& L/2-\\ell \\leq x \\leq L/2+\\ell,\\\\ \n", + "0,\\hbox{otherwise}\\end{array}\\right.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Observe that the initial wave is split in two, the left-going wave\n", + "is reflected at $x=0$, and both waves travel out of $x=L$,\n", + "leaving the solution as $u=0$ in $[0,L]$. Use a unit Courant number\n", + "such that the numerical solution is exact.\n", + "Make a movie to illustrate what happens.\n", + "\n", + "Because this simplified\n", + "implementation of the open boundary condition works, there is no\n", + "need to pursue the more complicated discretization in a).\n", + "\n", + "\n", + "\n", + "**Hint.**\n", + "Modify the solver function in\n", + "[`wave1D_dn.py`](${src_wave}/wave1D/wave1D_dn.py).\n", + "\n", + "\n", + "\n", + "**c)**\n", + "Add the possibility to have either $u_x=0$ or an open boundary\n", + "condition at the left boundary. The latter condition is discretized\n", + "as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[D^+_tu - cD_x^+ u = 0]_i^n,\\quad i=0,\n", + "\\label{wave:app:exer:radiationBC:eq:op:1storder2} \\tag{59}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "leading to an explicit update of the boundary value $u^{n+1}_0$.\n", + "\n", + "The implementation can be tested with a Gaussian function as initial condition:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g(x;m,s) = \\frac{1}{\\sqrt{2\\pi}s}e^{-\\frac{(x-m)^2}{2s^2}}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run two tests:\n", + "\n", + "1. Disturbance in the middle of the domain, $I(x)=g(x;L/2,s)$, and\n", + " open boundary condition at the left end.\n", + "\n", + "2. Disturbance at the left end, $I(x)=g(x;0,s)$, and $u_x=0$\n", + " as symmetry boundary condition at this end.\n", + "\n", + "Make test functions for both cases, testing that the solution is zero\n", + "after the waves have left the domain.\n", + "\n", + "**d)**\n", + "In 2D and 3D it is difficult to compute the correct wave velocity\n", + "normal to the boundary, which is needed in generalizations of\n", + "the open boundary conditions in higher dimensions. Test the effect\n", + "of having a slightly wrong wave velocity in\n", + "([58](#wave:app:exer:radiationBC:eq:op:1storder)).\n", + "Make movies to illustrate what happens.\n", + "\n", + "\n", + "\n", + "Filename: `wave1D_open_BC`.\n", + "\n", + "\n", + "\n", + "### Remarks\n", + "\n", + "The condition ([55](#wave:app:exer:radiationBC:eq))\n", + "works perfectly in 1D when $c$ is known. In 2D and 3D, however, the\n", + "condition reads $u_t + c_x u_x + c_y u_y=0$, where $c_x$ and\n", + "$c_y$ are the wave speeds in the $x$ and $y$ directions. Estimating\n", + "these components (i.e., the direction of the wave) is often\n", + "challenging. Other methods are normally used in 2D and 3D to\n", + "let waves move out of a computational domain.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 7: Implement periodic boundary conditions\n", + "
\n", + "\n", + "\n", + "It is frequently of interest to follow wave motion over large\n", + "distances and long times. A straightforward approach is to\n", + "work with a very large domain, but that might lead to a lot of\n", + "computations in areas of the domain where the waves cannot\n", + "be noticed. A more efficient approach is to let a right-going\n", + "wave out of the domain and at the same time let it enter\n", + "the domain on the left. This is called a *periodic boundary\n", + "condition*.\n", + "\n", + "The boundary condition at the right end $x=L$ is an open boundary\n", + "condition (see [Problem 6: Implement open boundary conditions](#wave:app:exer:radiationBC)) to let a\n", + "right-going wave out of the domain. At the left end, $x=0$, we apply,\n", + "in the beginning of the simulation, either a symmetry boundary\n", + "condition (see [Problem 2: Explore symmetry boundary conditions](#wave:exer:symmetry:bc)) $u_x=0$, or an\n", + "open boundary condition.\n", + "\n", + "This initial wave will split in two and either be reflected or\n", + "transported out of the domain at $x=0$. The purpose of the exercise is\n", + "to follow the right-going wave. We can do that with a *periodic\n", + "boundary condition*. This means that when the right-going wave hits\n", + "the boundary $x=L$, the open boundary condition lets the wave out of\n", + "the domain, but at the same time we use a boundary condition on the\n", + "left end $x=0$ that feeds the outgoing wave into the domain\n", + "again. This periodic condition is simply $u(0)=u(L)$. The switch from\n", + "$u_x=0$ or an open boundary condition at the left end to a periodic\n", + "condition can happen when $u(L,t)>\\epsilon$, where $\\epsilon =10^{-4}$\n", + "might be an appropriate value for determining when the right-going\n", + "wave hits the boundary $x=L$.\n", + "\n", + "The open boundary conditions can conveniently be discretized as\n", + "explained in [Problem 6: Implement open boundary conditions](#wave:app:exer:radiationBC). Implement the\n", + "described type of boundary conditions and test them on two different\n", + "initial shapes: a plug $u(x,0)=1$ for $x\\leq 0.1$, $u(x,0)=0$ for\n", + "$x>0.1$, and a Gaussian function in the middle of the domain:\n", + "$u(x,0)=\\exp{(-\\frac{1}{2}(x-0.5)^2/0.05)}$. The domain is the unit\n", + "interval $[0,1]$. Run these two shapes for Courant numbers 1 and\n", + "0.5. Assume constant wave velocity. Make movies of the four cases.\n", + "Reason why the solutions are correct.\n", + "Filename: `periodic`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 8: Compare discretizations of a Neumann condition\n", + "\n", + "We have a 1D wave equation with variable wave velocity:\n", + "$u_{tt}=(qu_x)_x$.\n", + "A Neumann condition $u_x$ at $x=0, L$ can be\n", + "discretized as shown in ([20](#wave:pde2:var:c:scheme:impl:Neumann))\n", + "and ([23](#wave:pde2:var:c:scheme:impl:Neumann2)).\n", + "\n", + "The aim of this exercise is to examine the rate of the numerical\n", + "error when using different ways of discretizing the Neumann condition.\n", + "\n", + "\n", + "**a)**\n", + "As a test problem, $q=1+(x-L/2)^4$ can be used, with $f(x,t)$\n", + "adapted such that the solution has a simple form, say\n", + "$u(x,t)=\\cos (\\pi x/L)\\cos (\\omega t)$ for, e.g., $\\omega = 1$.\n", + "Perform numerical experiments and find the convergence rate of the\n", + "error using the approximation\n", + "([20](#wave:pde2:var:c:scheme:impl:Neumann)).\n", + "\n", + "**b)**\n", + "Switch to $q(x)=1+\\cos(\\pi x/L)$, which is symmetric at $x=0,L$,\n", + "and check the convergence rate\n", + "of the scheme\n", + "([23](#wave:pde2:var:c:scheme:impl:Neumann2)). Now,\n", + "$q_{i-1/2}$ is a 2nd-order approximation to $q_i$,\n", + "$q_{i-1/2}=q_i + 0.25q_i''\\Delta x^2 + \\cdots$, because $q_i'=0$\n", + "for $i=N_x$ (a similar argument can be applied to the case $i=0$).\n", + "\n", + "**c)**\n", + "A third discretization can be based on a simple and convenient,\n", + "but less accurate, one-sided difference:\n", + "$u_{i}-u_{i-1}=0$ at $i=N_x$ and $u_{i+1}-u_i=0$ at $i=0$.\n", + "Derive the resulting scheme in detail and implement it.\n", + "Run experiments with $q$ from a) or b) to establish the rate of convergence\n", + "of the scheme.\n", + "\n", + "**d)**\n", + "A fourth technique is to view the scheme as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "[D_tD_tu]^n_i = \\frac{1}{\\Delta x}\\left(\n", + "[qD_xu]_{i+\\frac{1}{2}}^n - [qD_xu]_{i-\\frac{1}{2}}^n\\right)\n", + "+ [f]_i^n,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and place the boundary at $x_{i+\\frac{1}{2}}$, $i=N_x$, instead of\n", + "exactly at the physical boundary. With this idea of approximating (moving) the\n", + "boundary,\n", + "we can just set $[qD_xu]_{i+\\frac{1}{2}}^n=0$.\n", + "Derive the complete scheme\n", + "using this technique. The implementation of the boundary condition at\n", + "$L-\\Delta x/2$ is $\\Oof{\\Delta x^2}$ accurate, but the interesting question\n", + "is what impact the movement of the boundary has on the convergence\n", + "rate. Compute the errors as usual over the entire mesh and use $q$ from\n", + "a) or b).\n", + "\n", + "\n", + "Filename: `Neumann_discr`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Exercise 9: Verification by a cubic polynomial in space\n", + "
\n", + "\n", + "The purpose of this exercise is to verify the implementation of the\n", + "`solver` function in the program [`wave1D_n0.py`](#src_wave/wave1D/wave1D_n0.py) by using an exact numerical solution\n", + "for the wave equation $u_{tt}=c^2u_{xx} + f$ with Neumann boundary\n", + "conditions $u_x(0,t)=u_x(L,t)=0$.\n", + "\n", + "A similar verification is used in the file [`wave1D_u0.py`](#src_wave}/wave1D/wave1D_u0.py), which solves the same PDE, but with\n", + "Dirichlet boundary conditions $u(0,t)=u(L,t)=0$. The idea of the\n", + "verification test in function `test_quadratic` in `wave1D_u0.py` is to\n", + "produce a solution that is a lower-order polynomial such that both the\n", + "PDE problem, the boundary conditions, and all the discrete equations\n", + "are exactly fulfilled. Then the `solver` function should reproduce\n", + "this exact solution to machine precision. More precisely, we seek\n", + "$u=X(x)T(t)$, with $T(t)$ as a linear function and $X(x)$ as a\n", + "parabola that fulfills the boundary conditions. Inserting this $u$ in\n", + "the PDE determines $f$. mathcal{I}_t turns out that $u$ also fulfills the\n", + "discrete equations, because the truncation error of the discretized\n", + "PDE has derivatives in $x$ and $t$ of order four and higher. These\n", + "derivatives all vanish for a quadratic $X(x)$ and linear $T(t)$.\n", + "\n", + "mathcal{I}_t would be attractive to use a similar approach in the case of\n", + "Neumann conditions. We set $u=X(x)T(t)$ and seek lower-order\n", + "polynomials $X$ and $T$.\n", + "To force $u_x$ to vanish at the boundary, we let $X_x$ be\n", + "a parabola. Then $X$ is a cubic polynomial. The fourth-order\n", + "derivative of a cubic polynomial vanishes, so $u=X(x)T(t)$\n", + "will fulfill the discretized PDE also in this case, if $f$\n", + "is adjusted such that $u$ fulfills the PDE.\n", + "\n", + "However, the discrete boundary condition is not exactly fulfilled\n", + "by this choice of $u$. The reason is that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[D_{2x}u]^n_i = u_{x}(x_i,t_n) + \\frac{1}{6}u_{xxx}(x_i,t_n)\\Delta x^2\n", + "+ \\mathcal{O}(\\Delta x^4)\\thinspace .\n", + "\\label{wave:fd2:exer:verify:cubic:D2x} \\tag{60}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At the two boundary points, we must demand that\n", + "the derivative $X_x(x)=0$ such that $u_x=0$.\n", + "However, $u_{xxx}$ is a constant and not zero\n", + "when $X(x)$ is a cubic polynomial.\n", + "Therefore, our $u=X(x)T(t)$ fulfills" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "[D_{2x}u]^n_i = \\frac{1}{6}u_{xxx}(x_i,t_n)\\Delta x^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and not" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "[D_{2x}u]^n_i =0, \\quad i=0,N_x,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "as it should. (Note that all the higher-order terms $\\mathcal{O}(\\Delta x^4)$\n", + "also have higher-order derivatives that vanish for a cubic polynomial.)\n", + "So to summarize, the fundamental problem is that $u$ as a product of\n", + "a cubic polynomial and a linear or quadratic polynomial in time\n", + "is not an exact solution of the discrete boundary conditions.\n", + "\n", + "To make progress,\n", + "we assume that $u=X(x)T(t)$, where $T$ for simplicity is taken as a\n", + "prescribed linear function $1+\\frac{1}{2}t$, and $X(x)$ is taken\n", + "as an *unknown* cubic polynomial $\\sum_{j=0}^3 a_jx^j$.\n", + "There are two different ways of determining the coefficients\n", + "$a_0,\\ldots,a_3$ such that both the discretized PDE and the\n", + "discretized boundary conditions are fulfilled, under the\n", + "constraint that we can specify a function $f(x,t)$ for the PDE to feed\n", + "to the `solver` function in `wave1D_n0.py`. Both approaches\n", + "are explained in the subexercises.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "**a)**\n", + "One can insert $u$ in the discretized PDE and find the corresponding $f$.\n", + "Then one can insert $u$ in the discretized boundary conditions.\n", + "This yields two equations for the four coefficients $a_0,\\ldots,a_3$.\n", + "To find the coefficients, one can set $a_0=0$ and $a_1=1$ for\n", + "simplicity and then determine $a_2$ and $a_3$. This approach will make\n", + "$a_2$ and $a_3$ depend on $\\Delta x$ and $f$ will depend on both\n", + "$\\Delta x$ and $\\Delta t$.\n", + "\n", + "Use `sympy` to perform analytical computations.\n", + "A starting point is to define $u$ as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "def test_cubic1():\n", + " import sympy as sm\n", + " x, t, c, L, dx, dt = sm.symbols('x t c L dx dt')\n", + " i, n = sm.symbols('i n', integer=True)\n", + "\n", + " # Assume discrete solution is a polynomial of degree 3 in x\n", + " T = lambda t: 1 + sm.Rational(1,2)*t # Temporal term\n", + " a = sm.symbols('a_0 a_1 a_2 a_3')\n", + " X = lambda x: sum(a[q]*x**q for q in range(4)) # Spatial term\n", + " u = lambda x, t: X(x)*T(t)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The symbolic expression for $u$ is reached by calling `u(x,t)`\n", + "with `x` and `t` as `sympy` symbols.\n", + "\n", + "Define `DxDx(u, i, n)`, `DtDt(u, i, n)`, and `D2x(u, i, n)`\n", + "as Python functions for returning the difference\n", + "approximations $[D_xD_x u]^n_i$, $[D_tD_t u]^n_i$, and\n", + "$[D_{2x}u]^n_i$. The next step is to set up the residuals\n", + "for the equations $[D_{2x}u]^n_0=0$ and $[D_{2x}u]^n_{N_x}=0$,\n", + "where $N_x=L/\\Delta x$. Call the residuals `R_0` and `R_L`.\n", + "Substitute $a_0$ and $a_1$ by 0 and 1, respectively, in\n", + "`R_0`, `R_L`, and `a`:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "R_0 = R_0.subs(a[0], 0).subs(a[1], 1)\n", + "R_L = R_L.subs(a[0], 0).subs(a[1], 1)\n", + "a = list(a) # enable in-place assignment\n", + "a[0:2] = 0, 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Determining $a_2$ and $a_3$ from the discretized boundary conditions\n", + "is then about solving two equations with respect to $a_2$ and $a_3$,\n", + "i.e., `a[2:]`:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "s = sm.solve([R_0, R_L], a[2:])\n", + "# s is dictionary with the unknowns a[2] and a[3] as keys\n", + "a[2:] = s[a[2]], s[a[3]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, `a` contains computed values and `u` will automatically use\n", + "these new values since `X` accesses `a`.\n", + "\n", + "Compute the source term $f$ from the discretized PDE:\n", + "$f^n_i = [D_tD_t u - c^2D_xD_x u]^n_i$. Turn $u$, the time\n", + "derivative $u_t$ (needed for the initial condition $V(x)$),\n", + "and $f$ into Python functions. Set numerical values for\n", + "$L$, $N_x$, $C$, and $c$. Prescribe the time interval as\n", + "$\\Delta t = CL/(N_xc)$, which imply $\\Delta x = c\\Delta t/C = L/N_x$.\n", + "Define new functions `I(x)`, `V(x)`, and `f(x,t)` as wrappers of the ones\n", + "made above, where fixed values of $L$, $c$, $\\Delta x$, and $\\Delta t$\n", + "are inserted, such that `I`, `V`, and `f` can be passed on to the\n", + "`solver` function. Finally, call `solver` with a `user_action`\n", + "function that compares the numerical solution to this exact\n", + "solution $u$ of the discrete PDE problem.\n", + "\n", + "\n", + "\n", + "**Hint.**\n", + "To turn a `sympy` expression `e`, depending on a series of\n", + "symbols, say `x`, `t`, `dx`, `dt`, `L`, and `c`, into a plain\n", + "Python function `e_exact(x,t,L,dx,dt,c)`, one can write" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "e_exact = sm.lambdify([x,t,L,dx,dt,c], e, 'numpy')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `'numpy'` argument is a good habit as the `e_exact` function\n", + "will then work with array arguments if it contains mathematical\n", + "functions (but here we only do plain arithmetics, which automatically\n", + "work with arrays).\n", + "\n", + "\n", + "\n", + "**b)**\n", + "An alternative way of determining $a_0,\\ldots,a_3$ is to reason as\n", + "follows. We first construct $X(x)$ such that the boundary conditions\n", + "are fulfilled: $X=x(L-x)$. However, to compensate for the fact\n", + "that this choice of $X$ does not fulfill the discrete boundary\n", + "condition, we seek $u$ such that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u_x = \\frac{\\partial}{\\partial x}x(L-x)T(t) - \\frac{1}{6}u_{xxx}\\Delta x^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "since this $u$ will fit the discrete boundary condition.\n", + "Assuming $u=T(t)\\sum_{j=0}^3a_jx^j$, we can use the above equation to\n", + "determine the coefficients $a_1,a_2,a_3$. A value, e.g., 1 can be used for\n", + "$a_0$. The following `sympy` code computes this $u$:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "def test_cubic2():\n", + " import sympy as sm\n", + " x, t, c, L, dx = sm.symbols('x t c L dx')\n", + " T = lambda t: 1 + sm.Rational(1,2)*t # Temporal term\n", + " # Set u as a 3rd-degree polynomial in space\n", + " X = lambda x: sum(a[i]*x**i for i in range(4))\n", + " a = sm.symbols('a_0 a_1 a_2 a_3')\n", + " u = lambda x, t: X(x)*T(t)\n", + " # Force discrete boundary condition to be zero by adding\n", + " # a correction term the analytical suggestion x*(L-x)*T\n", + " # u_x = x*(L-x)*T(t) - 1/6*u_xxx*dx**2\n", + " R = sm.diff(u(x,t), x) - (\n", + " x*(L-x) - sm.Rational(1,6)*sm.diff(u(x,t), x, x, x)*dx**2)\n", + " # R is a polynomial: force all coefficients to vanish.\n", + " # Turn R to Poly to extract coefficients:\n", + " R = sm.poly(R, x)\n", + " coeff = R.all_coeffs()\n", + " s = sm.solve(coeff, a[1:]) # a[0] is not present in R\n", + " # s is dictionary with a[i] as keys\n", + " # Fix a[0] as 1\n", + " s[a[0]] = 1\n", + " X = lambda x: sm.simplify(sum(s[a[i]]*x**i for i in range(4)))\n", + " u = lambda x, t: X(x)*T(t)\n", + " print 'u:', u(x,t)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step is to find the source term `f_e` by inserting `u_e`\n", + "in the PDE. Thereafter, turn `u`, `f`, and the time derivative of `u`\n", + "into plain Python functions as in a), and then wrap these functions\n", + "in new functions `I`, `V`, and `f`, with the right signature as\n", + "required by the `solver` function. Set parameters as in a) and\n", + "check that the solution is exact to machine precision at each\n", + "time level using an appropriate `user_action` function.\n", + "\n", + "Filename: `wave1D_n0_test_cubic`.\n", + "\n", + "" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/fdm-jupyter-book/notebooks/02_wave/wave1D_prog.ipynb b/fdm-jupyter-book/notebooks/02_wave/wave1D_prog.ipynb index 07b646ec..deb0d231 100644 --- a/fdm-jupyter-book/notebooks/02_wave/wave1D_prog.ipynb +++ b/fdm-jupyter-book/notebooks/02_wave/wave1D_prog.ipynb @@ -1366,7 +1366,7 @@ " u_1 = np.zeros(Nx+1) # Solution at 1 time level back\n", " u_2 = np.zeros(Nx+1) # Solution at 2 time levels back\n", "\n", - " import time; t0 = time.clock() # for measuring CPU time\n", + " import time; t0 = time.perf_counter() # for measuring CPU time\n", "\n", " # Load initial condition into u_1\n", " for i in range(0,Nx+1):\n", @@ -1405,7 +1405,7 @@ " # Switch variables before next step\n", " u_2[:] = u_1; u_1[:] = u\n", "\n", - " cpu_time = t0 - time.clock()\n", + " cpu_time = t0 - time.perf_counter()\n", " return u, x, t, cpu_time\n", "\n", "def test_quadratic():\n", @@ -1642,7 +1642,7 @@ " u_1 = np.zeros(Nx+1) # Solution at 1 time level back\n", " u_2 = np.zeros(Nx+1) # Solution at 2 time levels back\n", "\n", - " import time; t0 = time.clock() # for measuring CPU time\n", + " import time; t0 = time.perf_counter() # for measuring CPU time\n", "\n", " # Load initial condition into u_1\n", " for i in range(0,Nx+1):\n", @@ -1681,7 +1681,7 @@ " # Switch variables before next step\n", " u_2[:] = u_1; u_1[:] = u\n", "\n", - " cpu_time = t0 - time.clock()\n", + " cpu_time = t0 - time.perf_counter()\n", " return u, x, t, cpu_time\n", "\n", "def test_quadratic():\n", @@ -1928,7 +1928,7 @@ " u_1 = np.zeros(Nx+1) # Solution at 1 time level back\n", " u_2 = np.zeros(Nx+1) # Solution at 2 time levels back\n", "\n", - " import time; t0 = time.clock() # for measuring CPU time\n", + " import time; t0 = time.perf_counter() # for measuring CPU time\n", "\n", " # Load initial condition into u_1\n", " for i in range(0,Nx+1):\n", @@ -1967,7 +1967,7 @@ " # Switch variables before next step\n", " u_2[:] = u_1; u_1[:] = u\n", "\n", - " cpu_time = time.clock() - t0\n", + " cpu_time = time.perf_counter() - t0\n", " return u, x, t, cpu_time\n", "\n", "def viz(\n", @@ -2572,7 +2572,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -2586,7 +2586,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/fdm-jupyter-book/notebooks/02_wave/wave2D_fd.ipynb b/fdm-jupyter-book/notebooks/02_wave/wave2D_fd.ipynb new file mode 100644 index 00000000..6762cc45 --- /dev/null +++ b/fdm-jupyter-book/notebooks/02_wave/wave2D_fd.ipynb @@ -0,0 +1,587 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Finite difference methods for 2D and 3D wave equations\n", + "
\n", + "\n", + "A natural next step is to consider extensions of the methods for\n", + "various\n", + "variants of the one-dimensional wave equation to two-dimensional (2D) and\n", + "three-dimensional (3D) versions of the wave equation.\n", + "\n", + "## Multi-dimensional wave equations\n", + "
\n", + "\n", + "The general wave equation in $d$ space dimensions, with constant\n", + "wave velocity $c$,\n", + "can be written in the compact form" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{\\partial^2 u}{\\partial t^2} = c^2\\nabla^2 u\\hbox{ for } \\textbf{x}\\in\\Omega\\subset\\mathbb{R}^d,\\ t\\in (0,T] ,\n", + "\\label{wave:2D3D:model1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\nabla^2 u = \\frac{\\partial^2 u}{\\partial x^2} +\n", + "\\frac{\\partial^2 u}{\\partial y^2} ,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in a 2D problem ($d=2$) and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\nabla^2 u = \\frac{\\partial^2 u}{\\partial x^2} +\n", + "\\frac{\\partial^2 u}{\\partial y^2} + \\frac{\\partial^2 u}{\\partial z^2},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in three space dimensions ($d=3$).\n", + "\n", + "Many applications involve variable coefficients, and the general\n", + "wave equation in $d$ dimensions is in this case written as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\varrho\\frac{\\partial^2 u}{\\partial t^2} = \\nabla\\cdot (q\\nabla u) + f\\hbox{ for } \\textbf{x} \\in\\Omega\\subset\\mathbb{R}^d,\\ t\\in (0,T],\n", + "\\label{wave:2D3D:model2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which in, e.g., 2D becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\varrho(x,y)\n", + "\\frac{\\partial^2 u}{\\partial t^2} =\n", + "\\frac{\\partial}{\\partial x}\\left( q(x,y)\n", + "\\frac{\\partial u}{\\partial x}\\right)\n", + "+\n", + "\\frac{\\partial}{\\partial y}\\left( q(x,y)\n", + "\\frac{\\partial u}{\\partial y}\\right)\n", + "+ f(x,y,t)\n", + "\\thinspace .\n", + "\\label{_auto1} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To save some writing and space we may use the index notation, where\n", + "subscript $t$, $x$, or $y$ means differentiation with respect\n", + "to that coordinate. For example," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\frac{\\partial^2 u}{\\partial t^2} &= u_{tt},\\\\\n", + "\\frac{\\partial}{\\partial y}\\left( q(x,y)\n", + "\\frac{\\partial u}{\\partial y}\\right) &= (q u_y)_y\n", + "\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These comments extend straightforwardly to 3D, which means that\n", + "the 3D versions of the\n", + "two wave PDEs, with and without variable coefficients,\n", + "can be stated as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u_{tt} = c^2(u_{xx} + u_{yy} + u_{zz}) + f,\n", + "\\label{wave:2D3D:model1:v2} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\varrho u_{tt} = (q u_x)_x + (q u_y)_y + (q u_z)_z + f\\thinspace .\n", + "\\label{wave:2D3D:model2:v2} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At *each point* of the boundary $\\partial\\Omega$ (of $\\Omega$) we need\n", + "*one* boundary condition involving the unknown $u$.\n", + "The boundary conditions are of three principal types:\n", + "\n", + "1. $u$ is prescribed ($u=0$ or a known time variation of $u$ at\n", + " the boundary points, e.g.,\n", + " modeling an incoming wave),\n", + "\n", + "2. $\\partial u/\\partial n = \\boldsymbol{n}\\cdot\\nabla u$ is prescribed\n", + " (zero for reflecting boundaries),\n", + "\n", + "3. an open boundary condition (also called radiation condition)\n", + " is specified to let waves travel undisturbed out of the domain,\n", + " see [wave:app:exer:radiationBC](#wave:app:exer:radiationBC) for details.\n", + "\n", + "All the listed wave equations with *second-order* derivatives in\n", + "time need *two* initial conditions:\n", + "\n", + "1. $u=I$,\n", + "\n", + "2. $u_t = V$.\n", + "\n", + "## Mesh\n", + "
\n", + "\n", + "We introduce a mesh in time and in space. The mesh in time consists\n", + "of time points" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "t_0=0 < t_1 < \\cdots < t_{N_t},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "normally, for wave equation problems, with a constant spacing $\\Delta\n", + "t= t_{n+1}-t_{n}$, $n\\in\\setl{\\mathcal{I}_t}$.\n", + "\n", + "Finite difference methods are easy to implement on simple rectangle-\n", + "or box-shaped *spatial domains*. More complicated shapes of the\n", + "spatial domain require substantially more advanced techniques and\n", + "implementational efforts (and a finite element method is usually a more\n", + "convenient approach). On a rectangle- or box-shaped domain, mesh\n", + "points are introduced separately in the various space directions:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "&x_0 < x_1 < \\cdots < x_{N_x} \\hbox{ in the }x \\hbox{ direction},\\\\\n", + "&y_0 < y_1 < \\cdots < y_{N_y} \\hbox{ in the }y \\hbox{ direction},\\\\\n", + "&z_0 < z_1 < \\cdots < z_{N_z} \\hbox{ in the }z \\hbox{ direction}\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can write a general mesh point as $(x_i,y_j,z_k,t_n)$, with\n", + "$i\\in\\mathcal{I}_x$, $j\\in\\Iy$, $k\\in\\Iz$, and $n\\in\\mathcal{I}_t$.\n", + "\n", + "It is a very common choice to use constant mesh spacings:\n", + "$\\Delta x = x_{i+1}-x_{i}$, $i\\in\\setl{\\mathcal{I}_x}$,\n", + "$\\Delta y = y_{j+1}-y_{j}$, $j\\in\\setl{\\Iy}$, and\n", + "$\\Delta z = z_{k+1}-z_{k}$, $k\\in\\setl{\\Iz}$.\n", + "With equal mesh spacings one often introduces\n", + "$h = \\Delta x = \\Delta y =\\Delta z$.\n", + "\n", + "The unknown $u$ at mesh point $(x_i,y_j,z_k,t_n)$ is denoted by\n", + "$u^{n}_{i,j,k}$. In 2D problems we just skip the $z$ coordinate\n", + "(by assuming no variation in that direction: $\\partial/\\partial z=0$)\n", + "and write $u^n_{i,j}$.\n", + "\n", + "\n", + "## Discretization\n", + "
\n", + "\n", + "Two- and three-dimensional wave equations are easily discretized by\n", + "assembling building blocks for discretization of\n", + "1D wave equations, because the multi-dimensional versions just contain\n", + "terms of the same type as those in 1D.\n", + "\n", + "### Discretizing the PDEs\n", + "\n", + "Equation ([4](#wave:2D3D:model1:v2)) can be discretized as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[D_tD_t u = c^2(D_xD_x u + D_yD_yu + D_zD_z u) + f]^n_{i,j,k}\n", + "\\thinspace .\n", + "\\label{_auto2} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A 2D version might be instructive to write out in detail:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "[D_tD_t u = c^2(D_xD_x u + D_yD_yu) + f]^n_{i,j},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{u^{n+1}_{i,j} - 2u^{n}_{i,j} + u^{n-1}_{i,j}}{\\Delta t^2}\n", + "= c^2\n", + "\\frac{u^{n}_{i+1,j} - 2u^{n}_{i,j} + u^{n}_{i-1,j}}{\\Delta x^2}\n", + "+ c^2\n", + "\\frac{u^{n}_{i,j+1} - 2u^{n}_{i,j} + u^{n}_{i,j-1}}{\\Delta y^2}\n", + "+ f^n_{i,j},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Assuming, as usual, that all values at time levels $n$ and $n-1$\n", + "are known, we can solve for the only unknown $u^{n+1}_{i,j}$. The\n", + "result can be compactly written as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^{n+1}_{i,j} = 2u^n_{i,j} + u^{n-1}_{i,j} + c^2\\Delta t^2[D_xD_x u + D_yD_y u]^n_{i,j}\\thinspace .\n", + "\\label{wave:2D3D:models:unp1} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As in the 1D case, we need to develop a special formula for $u^1_{i,j}$\n", + "where we combine the general scheme for $u^{n+1}_{i,j}$, when $n=0$,\n", + "with the discretization of the initial condition:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "[D_{2t}u = V]^0_{i,j}\\quad\\Rightarrow\\quad u^{-1}_{i,j} = u^1_{i,j} - 2\\Delta t V_{i,j}\n", + "\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result becomes, in compact form," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^{1}_{i,j} = u^0_{i,j} -2\\Delta V_{i,j} + {\\frac{1}{2}}\n", + "c^2\\Delta t^2[D_xD_x u + D_yD_y u]^0_{i,j}\\thinspace .\n", + "\\label{wave:2D3D:models:u1} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The PDE ([5](#wave:2D3D:model2:v2))\n", + "with variable coefficients is discretized term by term using\n", + "the corresponding elements from the 1D case:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[\\varrho D_tD_t u = (D_x\\overline{q}^x D_x u +\n", + "D_y\\overline{q}^y D_yu + D_z\\overline{q}^z D_z u) + f]^n_{i,j,k}\n", + "\\thinspace .\n", + "\\label{_auto3} \\tag{9}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When written out and solved for the unknown $u^{n+1}_{i,j,k}$, one gets the\n", + "scheme" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "u^{n+1}_{i,j,k} &= - u^{n-1}_{i,j,k} + 2u^{n}_{i,j,k} + \\\\\n", + "&\\quad \\frac{1}{\\varrho_{i,j,k}}\\frac{1}{\\Delta x^2} ( \\frac{1}{2}(q_{i,j,k} + q_{i+1,j,k})(u^{n}_{i+1,j,k} - u^{n}_{i,j,k}) - \\\\\n", + "&\\qquad\\qquad \\frac{1}{2}(q_{i-1,j,k} + q_{i,j,k})(u^{n}_{i,j,k} - u^{n}_{i-1,j,k})) + \\\\\n", + "&\\quad \\frac{1}{\\varrho_{i,j,k}}\\frac{1}{\\Delta y^2} ( \\frac{1}{2}(q_{i,j,k} + q_{i,j+1,k})(u^{n}_{i,j+1,k} - u^{n}_{i,j,k}) - \\\\\n", + "&\\qquad\\qquad\\frac{1}{2}(q_{i,j-1,k} + q_{i,j,k})(u^{n}_{i,j,k} - u^{n}_{i,j-1,k})) + \\\\\n", + "&\\quad \\frac{1}{\\varrho_{i,j,k}}\\frac{1}{\\Delta z^2} ( \\frac{1}{2}(q_{i,j,k} + q_{i,j,k+1})(u^{n}_{i,j,k+1} - u^{n}_{i,j,k}) -\\\\\n", + "&\\qquad\\qquad \\frac{1}{2}(q_{i,j,k-1} + q_{i,j,k})(u^{n}_{i,j,k} - u^{n}_{i,j,k-1})) + \\\\\n", + "&\\quad \\Delta t^2 f^n_{i,j,k}\n", + "\\thinspace .\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Also here we need to develop a special formula for $u^1_{i,j,k}$\n", + "by combining the scheme for $n=0$ with the discrete initial condition,\n", + "which is just a matter of inserting\n", + "$u^{-1}_{i,j,k}=u^1_{i,j,k} - 2\\Delta tV_{i,j,k}$ in the scheme\n", + "and solving for $u^1_{i,j,k}$.\n", + "\n", + "### Handling boundary conditions where $u$ is known\n", + "\n", + "The schemes listed above are valid for the internal points in the mesh.\n", + "After updating these, we need to visit all the mesh points at the\n", + "boundaries and set the prescribed $u$ value.\n", + "\n", + "### Discretizing the Neumann condition\n", + "\n", + "The condition $\\partial u/\\partial n = 0$ was implemented in 1D by\n", + "discretizing it with a $D_{2x}u$ centered difference, followed by\n", + "eliminating the fictitious $u$ point outside the mesh by using the\n", + "general scheme at the boundary point. Alternatively, one can introduce\n", + "ghost cells and update a ghost value for use in the Neumann\n", + "condition. Exactly the same ideas are reused in multiple dimensions.\n", + "\n", + "Consider the condition $\\partial u/\\partial n = 0$\n", + "at a boundary $y=0$ of a rectangular domain $[0, L_x]\\times [0,L_y]$ in 2D.\n", + "The normal direction is then in $-y$ direction,\n", + "so" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial u}{\\partial n} = -\\frac{\\partial u}{\\partial y},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and we set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "[-D_{2y} u = 0]^n_{i,0}\\quad\\Rightarrow\\quad \\frac{u^n_{i,1}-u^n_{i,-1}}{2\\Delta y} = 0\n", + "\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From this it follows that $u^n_{i,-1}=u^n_{i,1}$.\n", + "The discretized PDE at the boundary point $(i,0)$ reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{u^{n+1}_{i,0} - 2u^{n}_{i,0} + u^{n-1}_{i,0}}{\\Delta t^2}\n", + "= c^2\n", + "\\frac{u^{n}_{i+1,0} - 2u^{n}_{i,0} + u^{n}_{i-1,0}}{\\Delta x^2}\n", + "+ c^2\n", + "\\frac{u^{n}_{i,1} - 2u^{n}_{i,0} + u^{n}_{i,-1}}{\\Delta y^2}\n", + "+ f^n_{i,j},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then just insert $u^n_{i,1}$ for $u^n_{i,-1}$ in this equation\n", + "and solve for the boundary value $u^{n+1}_{i,0}$, just as was done in 1D.\n", + "\n", + "From these calculations, we see a pattern:\n", + "the general scheme applies at the boundary $j=0$ too if we just\n", + "replace $j-1$ by $j+1$. Such a pattern is particularly useful for\n", + "implementations. The details follow from the explained 1D case\n", + "in the section [wave:pde2:Neumann:impl](#wave:pde2:Neumann:impl).\n", + "\n", + "The alternative approach to eliminating fictitious values outside the\n", + "mesh is to have $u^n_{i,-1}$ available as a ghost value. The mesh is\n", + "extended with one extra line (2D) or plane (3D) of ghost cells at a\n", + "Neumann boundary. In the present example it means that we need a line\n", + "with ghost cells below the $y$ axis. The ghost values must be updated\n", + "according to $u^{n+1}_{i,-1}=u^{n+1}_{i,1}$." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/fdm-jupyter-book/notebooks/02_wave/wave_analysis.ipynb b/fdm-jupyter-book/notebooks/02_wave/wave_analysis.ipynb new file mode 100644 index 00000000..50e943b3 --- /dev/null +++ b/fdm-jupyter-book/notebooks/02_wave/wave_analysis.ipynb @@ -0,0 +1,1567 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# Analysis of the difference equations\n", + "
\n", + "\n", + "## Properties of the solution of the wave equation\n", + "
\n", + "\n", + "The wave equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial^2 u}{\\partial t^2} =\n", + "c^2 \\frac{\\partial^2 u}{\\partial x^2}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "has solutions of the form" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u(x,t) = g_R(x-ct) + g_L(x+ct),\n", + "\\label{wave:pde1:gensol} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for any functions $g_R$ and $g_L$ sufficiently smooth to be differentiated\n", + "twice. The result follows from inserting ([1](#wave:pde1:gensol))\n", + "in the wave equation. A function of the form $g_R(x-ct)$ represents a\n", + "signal\n", + "moving to the right in time with constant velocity $c$.\n", + "This feature can be explained as follows.\n", + "At time $t=0$ the signal looks like $g_R(x)$. Introducing a\n", + "moving horizontal coordinate $\\xi = x-ct$, we see the function\n", + "$g_R(\\xi)$ is \"at rest\"\n", + "in the $\\xi$ coordinate system, and the shape is always\n", + "the same. Say the $g_R(\\xi)$ function has a peak at $\\xi=0$. This peak\n", + "is located at $x=ct$, which means that it moves with the velocity\n", + "$dx/dt=c$ in the $x$ coordinate system. Similarly, $g_L(x+ct)$\n", + "is a function, initially with shape $g_L(x)$, that moves in the negative\n", + "$x$ direction with constant velocity $c$ (introduce $\\xi=x+ct$,\n", + "look at the point $\\xi=0$, $x=-ct$, which has velocity $dx/dt=-c$).\n", + "\n", + "With the particular initial conditions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u(x,0)=I(x),\\quad \\frac{\\partial}{\\partial t}u(x,0) =0,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we get, with $u$ as in ([1](#wave:pde1:gensol))," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g_R(x) + g_L(x) = I(x),\\quad -cg_R'(x) + cg_L'(x) = 0\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The former suggests $g_R=g_L$, and the former then leads to\n", + "$g_R=g_L=I/2$. Consequently," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u(x,t) = \\frac{1}{2} I(x-ct) + \\frac{1}{2} I(x+ct) \\thinspace .\n", + "\\label{wave:pde1:gensol2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The interpretation of ([2](#wave:pde1:gensol2)) is that\n", + "the initial shape of $u$ is split into two parts, each with the same\n", + "shape as $I$ but frac{1}{2}\n", + "of the initial amplitude. One part is traveling to the left and the\n", + "other one to the right.\n", + "\n", + "\n", + "The solution has two important physical features: constant amplitude\n", + "of the left and right wave, and constant velocity of these two waves.\n", + "mathcal{I}_t turns out that the numerical solution will also preserve the\n", + "constant amplitude, but the velocity depends on the mesh parameters\n", + "$\\Delta t$ and $\\Delta x$.\n", + "\n", + "The solution ([2](#wave:pde1:gensol2)) will be influenced by\n", + "boundary conditions when the parts\n", + "$\\frac{1}{2} I(x-ct)$ and $\\frac{1}{2} I(x+ct)$ hit the boundaries and get, e.g.,\n", + "reflected back into the domain. However, when $I(x)$ is nonzero\n", + "only in a small part in the middle\n", + "of the spatial domain $[0,L]$, which means that the\n", + "boundaries are placed far away from the initial disturbance of $u$,\n", + "the solution ([2](#wave:pde1:gensol2)) is very clearly observed\n", + "in a simulation.\n", + "\n", + "\n", + "\n", + "A useful representation of solutions of wave equations is a linear\n", + "combination of sine and/or cosine waves. Such a sum of waves is a\n", + "solution if the governing PDE is linear and each sine or cosine\n", + "wave fulfills the\n", + "equation. To ease analytical calculations by hand we shall work with\n", + "complex exponential functions instead of real-valued sine or cosine\n", + "functions. The real part of complex expressions will typically be\n", + "taken as the physical relevant quantity (whenever a physical relevant\n", + "quantity is strictly needed).\n", + "The idea now is to build $I(x)$ of complex wave components\n", + "$e^{ikx}$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} I(x) \\approx \\sum_{k\\in K} b_k e^{ikx} \\thinspace .\n", + "\\label{wave:Fourier:I} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, $k$ is the frequency of a component,\n", + "$K$ is some set of all the discrete\n", + "$k$ values needed to approximate $I(x)$ well,\n", + "and $b_k$ are\n", + "constants that must be determined. We will very seldom\n", + "need to compute the $b_k$ coefficients: most of the insight\n", + "we look for, and the understanding of the numerical methods we want to\n", + "establish, come from\n", + "investigating how the PDE and the scheme treat a single\n", + "component $e^{ikx}$ wave.\n", + "\n", + "Letting the number of $k$ values in $K$ tend to infinity, makes the sum\n", + "([3](#wave:Fourier:I)) converge to $I(x)$. This sum is known as a\n", + "*Fourier series* representation of $I(x)$. Looking at\n", + "([2](#wave:pde1:gensol2)), we see that the solution $u(x,t)$, when\n", + "$I(x)$ is represented as in ([3](#wave:Fourier:I)), is also built of\n", + "basic complex exponential wave components of the form $e^{ik(x\\pm\n", + "ct)}$ according to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u(x,t) = \\frac{1}{2} \\sum_{k\\in K} b_k e^{ik(x - ct)}\n", + "+ \\frac{1}{2} \\sum_{k\\in K} b_k e^{ik(x + ct)} \\thinspace .\n", + "\\label{wave:Fourier:u1} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "mathcal{I}_t is common to introduce the frequency in time $\\omega = kc$ and\n", + "assume that $u(x,t)$ is a sum of basic wave components\n", + "written as $e^{ikx -\\omega t}$.\n", + "(Observe that inserting such a wave component in the governing PDE reveals that\n", + "$\\omega^2 = k^2c^2$, or $\\omega =\\pm kc$, reflecting the\n", + "two solutions: one ($+kc$) traveling to the right and the other ($-kc$)\n", + "traveling to the left.)\n", + "\n", + "## More precise definition of Fourier representations\n", + "
\n", + "\n", + "The above introduction to function representation by sine and cosine\n", + "waves was quick and intuitive, but will suffice as background\n", + "knowledge for the following material of single wave component\n", + "analysis.\n", + "However, to understand\n", + "all details of how different wave components sum up to the analytical\n", + "and numerical solutions, a more precise mathematical treatment is helpful\n", + "and therefore summarized below.\n", + "\n", + "mathcal{I}_t is well known that periodic functions can be represented by\n", + "Fourier series. A generalization of the Fourier series idea to\n", + "non-periodic functions defined on the real line is the *Fourier transform*:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "I(x) = \\int_{-\\infty}^\\infty A(k)e^{ikx}dk,\n", + "\\label{wave:pde1:Fourier:I} \\tag{5} \n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "A(k) = \\int_{-\\infty}^\\infty I(x)e^{-ikx}dx\\thinspace .\n", + "\\label{wave:pde1:Fourier:A} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function $A(k)$ reflects the weight of each wave component $e^{ikx}$\n", + "in an infinite sum of such wave components. That is, $A(k)$\n", + "reflects the frequency content in the function $I(x)$. Fourier transforms\n", + "are particularly fundamental for analyzing and understanding time-varying\n", + "signals.\n", + "\n", + "The solution of the linear 1D wave PDE can be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u(x,t) = \\int_{-\\infty}^\\infty A(k)e^{i(kx-\\omega(k)t)}dx\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In a finite difference method, we represent $u$ by a mesh function\n", + "$u^n_q$, where $n$ counts temporal mesh points and $q$ counts\n", + "the spatial ones (the usual counter for spatial points, $i$, is\n", + "here already used as imaginary unit). Similarly, $I(x)$ is approximated by\n", + "the mesh function $I_q$, $q=0,\\ldots,N_x$.\n", + "On a mesh, it does not make sense to work with wave\n", + "components $e^{ikx}$ for very large $k$, because the shortest possible\n", + "sine or cosine wave that can be represented uniquely\n", + "on a mesh with spacing $\\Delta x$\n", + "is the wave with wavelength $2\\Delta x$. This wave has its peaks\n", + "and throughs at every two mesh points. That is, the wave \"jumps up and down\"\n", + "between the mesh points.\n", + "\n", + "The corresponding $k$ value for the shortest possible wave in the mesh is\n", + "$k=2\\pi /(2\\Delta x) = \\pi/\\Delta x$. This maximum frequency is\n", + "known as the *Nyquist frequency*.\n", + "Within the range of\n", + "relevant frequencies $(0,\\pi/\\Delta x]$ one defines\n", + "the [discrete Fourier transform](http://en.wikipedia.org/wiki/Discrete_Fourier_transform), using $N_x+1$ discrete frequencies:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "I_q = \\frac{1}{N_x+1}\\sum_{k=0}^{N_x} A_k e^{i2\\pi k q/(N_x+1)},\\quad\n", + "q=0,\\ldots,N_x,\n", + "\\label{_auto1} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "A_k = \\sum_{q=0}^{N_x} I_q e^{-i2\\pi k q/(N_x+1)},\n", + "\\quad k=0,\\ldots,N_x\\thinspace .\n", + "\\label{_auto2} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The $A_k$ values represent the discrete Fourier transform of the $I_q$ values,\n", + "which themselves are the inverse discrete Fourier transform of the $A_k$\n", + "values.\n", + "\n", + "The discrete Fourier transform is efficiently computed by the\n", + "*Fast Fourier transform* algorithm. For a real function $I(x)$,\n", + "the relevant Python code for computing and plotting\n", + "the discrete Fourier transform appears in the example below." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "import numpy as np\n", + "from numpy import sin, pi\n", + "\n", + "def I(x):\n", + " return sin(2*pi*x) + 0.5*sin(4*pi*x) + 0.1*sin(6*pi*x)\n", + "\n", + "# Mesh\n", + "L = 10; Nx = 100\n", + "x = np.linspace(0, L, Nx+1)\n", + "dx = L/float(Nx)\n", + "\n", + "# Discrete Fourier transform\n", + "A = np.fft.rfft(I(x))\n", + "A_amplitude = np.abs(A)\n", + "\n", + "# Compute the corresponding frequencies\n", + "freqs = np.linspace(0, pi/dx, A_amplitude.size)\n", + "\n", + "import matplotlib.pyplot as plt\n", + "plt.plot(freqs, A_amplitude)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Stability\n", + "
\n", + "\n", + "\n", + "The scheme" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "[D_tD_t u = c^2 D_xD_x u]^n_q\n", + "\\label{wave:pde1:analysis:scheme} \\tag{9}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for the wave equation $u_{tt} = c^2u_{xx}$ allows basic wave components" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u^n_q=e^{i(kx_q - \\tilde\\omega t_n)}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "as solution, but it turns out that\n", + "the frequency in time, $\\tilde\\omega$, is not equal to\n", + "the exact frequency $\\omega = kc$. The goal now is to\n", + "find exactly what $\\tilde \\omega$ is. We ask two key\n", + "questions:\n", + "\n", + " * How accurate is $\\tilde\\omega$\n", + " compared to $\\omega$?\n", + "\n", + " * Does the amplitude of such a wave component\n", + " preserve its (unit) amplitude, as it should,\n", + " or does it get amplified or damped in time (because of a complex $\\tilde\\omega$)?\n", + "\n", + "The following analysis will answer these questions. We shall\n", + "continue using $q$ as an identifier for a certain mesh point in\n", + "the $x$ direction.\n", + "\n", + "\n", + "### Preliminary results\n", + "\n", + "A key result needed in the investigations is the finite difference\n", + "approximation of a second-order derivative acting on a complex\n", + "wave component:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "[D_tD_t e^{i\\omega t}]^n = -\\frac{4}{\\Delta t^2}\\sin^2\\left(\n", + "\\frac{\\omega\\Delta t}{2}\\right)e^{i\\omega n\\Delta t}\n", + "\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By just changing symbols ($\\omega\\rightarrow k$,\n", + "$t\\rightarrow x$, $n\\rightarrow q$) it follows that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "[D_xD_x e^{ikx}]_q = -\\frac{4}{\\Delta x^2}\\sin^2\\left(\n", + "\\frac{k\\Delta x}{2}\\right)e^{ikq\\Delta x} \\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Numerical wave propagation\n", + "\n", + "Inserting a basic wave component $u^n_q=e^{i(kx_q-\\tilde\\omega t_n)}$ in\n", + "([9](#wave:pde1:analysis:scheme)) results in the need to\n", + "evaluate two expressions:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\lbrack D_tD_t e^{ikx}e^{-i\\tilde\\omega t}\\rbrack^n_q = \\lbrack D_tD_t e^{-i\\tilde\\omega t}\\rbrack^ne^{ikq\\Delta x}\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} = -\\frac{4}{\\Delta t^2}\\sin^2\\left(\n", + "\\frac{\\tilde\\omega\\Delta t}{2}\\right)e^{-i\\tilde\\omega n\\Delta t}e^{ikq\\Delta x}\n", + "\\label{_auto3} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\lbrack D_xD_x e^{ikx}e^{-i\\tilde\\omega t}\\rbrack^n_q = \\lbrack D_xD_x e^{ikx}\\rbrack_q e^{-i\\tilde\\omega n\\Delta t}\\nonumber\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} = -\\frac{4}{\\Delta x^2}\\sin^2\\left(\n", + "\\frac{k\\Delta x}{2}\\right)e^{ikq\\Delta x}e^{-i\\tilde\\omega n\\Delta t} \\thinspace . \\label{_auto4} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then the complete scheme," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\lbrack D_tD_t e^{ikx}e^{-i\\tilde\\omega t} = c^2D_xD_x e^{ikx}e^{-i\\tilde\\omega t}\\rbrack^n_q\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "leads to the following equation for the unknown numerical\n", + "frequency $\\tilde\\omega$\n", + "(after dividing by $-e^{ikx}e^{-i\\tilde\\omega t}$):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{4}{\\Delta t^2}\\sin^2\\left(\\frac{\\tilde\\omega\\Delta t}{2}\\right)\n", + "= c^2 \\frac{4}{\\Delta x^2}\\sin^2\\left(\\frac{k\\Delta x}{2}\\right),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\sin^2\\left(\\frac{\\tilde\\omega\\Delta t}{2}\\right)\n", + "= C^2\\sin^2\\left(\\frac{k\\Delta x}{2}\\right),\n", + "\\label{wave:pde1:analysis:sineq1} \\tag{12}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "C = \\frac{c\\Delta t}{\\Delta x}\n", + "\\label{_auto5} \\tag{13}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "is the Courant number.\n", + "Taking the square root of ([12](#wave:pde1:analysis:sineq1)) yields" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\sin\\left(\\frac{\\tilde\\omega\\Delta t}{2}\\right)\n", + "= C\\sin\\left(\\frac{k\\Delta x}{2}\\right),\n", + "\\label{wave:pde1:analysis:sineq2} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since the exact $\\omega$ is real it is reasonable to look for a real\n", + "solution $\\tilde\\omega$ of ([14](#wave:pde1:analysis:sineq2)).\n", + "The right-hand side of\n", + "([14](#wave:pde1:analysis:sineq2)) must then be in $[-1,1]$ because\n", + "the sine function on the left-hand side has values in $[-1,1]$\n", + "for real $\\tilde\\omega$. The magnitude of the sine function on\n", + "the right-hand side attains the value 1 when" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{k\\Delta x}{2} = \\frac{\\pi}{2} + m\\pi,\\quad m \\in\\mathbb{Z}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With $m=0$ we have $k\\Delta x = \\pi$, which means that\n", + "the wavelength $\\lambda = 2\\pi/k$ becomes $2\\Delta x$. This is\n", + "the absolutely shortest wavelength that can be represented on the mesh:\n", + "the wave jumps up and down between each mesh point. Larger values of $|m|$\n", + "are irrelevant since these correspond to $k$ values whose\n", + "waves are too short to be represented\n", + "on a mesh with spacing $\\Delta x$.\n", + "For the shortest possible wave in the mesh, $\\sin\\left(k\\Delta x/2\\right)=1$,\n", + "and we must require" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "C\\leq 1 \\thinspace .\n", + "\\label{wave:pde1:stability:crit} \\tag{15}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Consider a right-hand side in ([14](#wave:pde1:analysis:sineq2)) of\n", + "magnitude larger\n", + "than unity. The solution $\\tilde\\omega$ of ([14](#wave:pde1:analysis:sineq2))\n", + "must then be a complex number\n", + "$\\tilde\\omega = \\tilde\\omega_r + i\\tilde\\omega_i$ because\n", + "the sine function is larger than unity for a complex argument.\n", + "One can show that for any $\\omega_i$ there will also be a\n", + "corresponding solution with $-\\omega_i$. The component with $\\omega_i>0$\n", + "gives an amplification factor $e^{\\omega_it}$ that grows exponentially\n", + "in time. We cannot allow this and must therefore require $C\\leq 1$\n", + "as a *stability criterion*.\n", + "\n", + "**Remark on the stability requirement.**\n", + "\n", + "For smoother wave components with longer wave lengths per length $\\Delta x$,\n", + "([15](#wave:pde1:stability:crit)) can in theory be relaxed. However,\n", + "small round-off errors are always present in a numerical solution and these\n", + "vary arbitrarily from mesh point to mesh point and can be viewed as\n", + "unavoidable noise with wavelength $2\\Delta x$. As explained, $C>1$\n", + "will for this very small noise lead to exponential growth of\n", + "the shortest possible wave component in the mesh. This noise will\n", + "therefore grow with time and destroy the whole solution.\n", + "\n", + "\n", + "\n", + "## Numerical dispersion relation\n", + "
\n", + "\n", + "\n", + "Equation ([14](#wave:pde1:analysis:sineq2)) can be solved with respect\n", + "to $\\tilde\\omega$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\tilde\\omega = \\frac{2}{\\Delta t}\n", + "\\sin^{-1}\\left( C\\sin\\left(\\frac{k\\Delta x}{2}\\right)\\right) \\thinspace .\n", + "\\label{wave:pde1:disprel} \\tag{16}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The relation between the numerical frequency $\\tilde\\omega$ and\n", + "the other parameters $k$, $c$, $\\Delta x$, and $\\Delta t$ is called\n", + "a *numerical dispersion relation*. Correspondingly,\n", + "$\\omega =kc$ is the *analytical dispersion relation*.\n", + "In general, dispersion refers to the phenomenon where the wave\n", + "velocity depends on the spatial frequency ($k$, or the\n", + "wave length $\\lambda = 2\\pi/k$) of the wave.\n", + "Since the wave velocity is $\\omega/k =c$, we realize that the\n", + "analytical dispersion relation reflects the fact that there is no\n", + "dispersion. However, in a numerical scheme we have dispersive waves\n", + "where the wave velocity depends on $k$.\n", + "\n", + "The special case $C=1$ deserves attention since then the right-hand side\n", + "of ([16](#wave:pde1:disprel)) reduces to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{2}{\\Delta t}\\frac{k\\Delta x}{2} = \\frac{1}{\\Delta t}\n", + "\\frac{\\omega\\Delta x}{c} = \\frac{\\omega}{C} = \\omega \\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That is, $\\tilde\\omega = \\omega$ and the numerical solution is exact\n", + "at all mesh points regardless of $\\Delta x$ and $\\Delta t$!\n", + "This implies that the numerical solution method is also an analytical\n", + "solution method, at least for computing $u$ at discrete points (the\n", + "numerical method says nothing about the\n", + "variation of $u$ *between* the mesh points, and employing the\n", + "common linear interpolation for extending the discrete solution\n", + "gives a curve that in general deviates from the exact one).\n", + "\n", + "For a closer examination of the error in the numerical dispersion\n", + "relation when $C<1$, we can study\n", + "$\\tilde\\omega -\\omega$, $\\tilde\\omega/\\omega$, or the similar\n", + "error measures in wave velocity: $\\tilde c - c$ and $\\tilde c/c$,\n", + "where $c=\\omega /k$ and $\\tilde c = \\tilde\\omega /k$.\n", + "mathcal{I}_t appears that the most convenient expression to work with is $\\tilde c/c$,\n", + "since it can be written as a function of just two parameters:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\tilde c}{c} = \\frac{1}{Cp}{\\sin}^{-1}\\left(C\\sin p\\right),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $p=k\\Delta x/2$ as a non-dimensional measure of the spatial frequency.\n", + "In essence, $p$ tells how many spatial mesh points we have per\n", + "wave length in space for the wave component with frequency $k$ (recall\n", + "that the wave\n", + "length is $2\\pi/k$). That is, $p$ reflects how well the\n", + "spatial variation of the wave component\n", + "is resolved in the mesh. Wave components with wave length\n", + "less than $2\\Delta x$ ($2\\pi/k < 2\\Delta x$) are not visible in the mesh,\n", + "so it does not make sense to have $p>\\pi/2$.\n", + "\n", + "We may introduce the function $r(C, p)=\\tilde c/c$ for further investigation\n", + "of numerical errors in the wave velocity:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "r(C, p) = \\frac{1}{Cp}{\\sin}^{-1}\\left(C\\sin p\\right), \\quad C\\in (0,1],\\ p\\in (0,\\pi/2] \\thinspace .\n", + "\\label{wave:pde1:disprel2} \\tag{17}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This function is very well suited for plotting since it combines several\n", + "parameters in the problem into a dependence on two dimensionless\n", + "numbers, $C$ and $p$.\n", + "\n", + "\n", + "\n", + "
\n", + "\n", + "

The fractional error in the wave velocity for different Courant numbers.

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Defining" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " def r(C, p):\n", + " return 2/(C*p)*asin(C*sin(p))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we can plot $r(C,p)$ as a function of $p$ for various values of\n", + "$C$, see [Figure](#wave:pde1:fig:disprel). Note that the shortest\n", + "waves have the most erroneous velocity, and that short waves move\n", + "more slowly than they should.\n", + "\n", + "\n", + "We can also easily make a Taylor series expansion in the\n", + "discretization parameter $p$:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import sympy as sym\n", + "C, p = sym.symbols('C p')\n", + "# Compute the 7 first terms around p=0 with no O() term\n", + "rs = r(C, p).series(p, 0, 7).removeO()\n", + "rs" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Pick out the leading order term, but drop the constant 1\n", + "rs_error_leading_order = (rs - 1).extract_leading_order(p)\n", + "rs_error_leading_order" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Turn the series expansion into a Python function\n", + "rs_pyfunc = lambdify([C, p], rs, modules='numpy')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Check: rs_pyfunc is exact (=1) for C=1\n", + "rs_pyfunc(1, 0.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that without the `.removeO()` call the series gets an `O(x**7)` term\n", + "that makes it impossible to convert the series to a Python function\n", + "(for, e.g., plotting).\n", + "\n", + "From the `rs_error_leading_order` expression above, we see that the leading\n", + "order term in the error of this series expansion is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{1}{6}\\left(\\frac{k\\Delta x}{2}\\right)^2(C^2-1)\n", + "= \\frac{k^2}{24}\\left( c^2\\Delta t^2 - \\Delta x^2\\right),\n", + "\\label{_auto6} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "pointing to an error $\\Oof{\\Delta t^2, \\Delta x^2}$, which is\n", + "compatible with the errors in the difference approximations ($D_tD_tu$\n", + "and $D_xD_xu$).\n", + "\n", + "We can do more with a series expansion, e.g., factor it to see how\n", + "the factor $C-1$ plays a significant role.\n", + "To this end, we make a list of the terms, factor each term,\n", + "and then sum the terms:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "rs = r(C, p).series(p, 0, 4).removeO().as_ordered_terms()\n", + "rs" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "rs = [factor(t) for t in rs]\n", + "rs" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "rs = sum(rs) # Python's sum function sums the list\n", + "rs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see from the last expression\n", + "that $C=1$ makes all the terms in `rs` vanish.\n", + "Since we already know that the numerical solution is exact for $C=1$, the\n", + "remaining terms in the Taylor series expansion\n", + "will also contain factors of $C-1$ and cancel for $C=1$.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Extending the analysis to 2D and 3D\n", + "
\n", + "\n", + "The typical analytical solution of a 2D wave equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u_{tt} = c^2(u_{xx} + u_{yy}),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "is a wave traveling in the direction of $\\kk = k_x\\ii + k_y\\jj$, where\n", + "$\\ii$ and $\\jj$ are unit vectors in the $x$ and $y$ directions, respectively\n", + "($\\ii$ should not be confused with $i=\\sqrt{-1}$ here).\n", + "Such a wave can be expressed by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u(x,y,t) = g(k_xx + k_yy - kct)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for some twice differentiable function $g$, or with $\\omega =kc$, $k=|\\kk|$:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "u(x,y,t) = g(k_xx + k_yy - \\omega t)\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can, in particular, build a solution by adding complex Fourier components\n", + "of the form" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "e^{(i(k_xx + k_yy - \\omega t))}\n", + "\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A discrete 2D wave equation can be written as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\lbrack D_tD_t u = c^2(D_xD_x u + D_yD_y u)\\rbrack^n_{q,r}\n", + "\\thinspace .\n", + "\\label{wave:pde1:analysis:scheme2D} \\tag{19}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This equation admits a Fourier component" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "u^n_{q,r} = e^{\\left( i(k_x q\\Delta x + k_y r\\Delta y -\n", + "\\tilde\\omega n\\Delta t)\\right)},\n", + "\\label{wave:pde1:analysis:numsol2D} \\tag{20}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "as solution. Letting the operators $D_tD_t$, $D_xD_x$, and $D_yD_y$\n", + "act on $u^n_{q,r}$ from ([20](#wave:pde1:analysis:numsol2D)) transforms\n", + "([19](#wave:pde1:analysis:scheme2D)) to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{4}{\\Delta t^2}\\sin^2\\left(\\frac{\\tilde\\omega\\Delta t}{2}\\right)\n", + "= c^2 \\frac{4}{\\Delta x^2}\\sin^2\\left(\\frac{k_x\\Delta x}{2}\\right)\n", + "+ c^2 \\frac{4}{\\Delta y^2}\\sin^2\\left(\\frac{k_y\\Delta y}{2}\\right) \\thinspace . \\label{_auto7} \\tag{21}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\sin^2\\left(\\frac{\\tilde\\omega\\Delta t}{2}\\right)\n", + "= C_x^2\\sin^2 p_x\n", + "+ C_y^2\\sin^2 p_y, \\label{_auto8} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where we have eliminated the factor 4 and introduced the symbols" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C_x = \\frac{c\\Delta t}{\\Delta x},\\quad\n", + "C_y = \\frac{c\\Delta t}{\\Delta y}, \\quad\n", + "p_x = \\frac{k_x\\Delta x}{2},\\quad\n", + "p_y = \\frac{k_y\\Delta y}{2}\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a real-valued $\\tilde\\omega$ the right-hand side\n", + "must be less than or equal to unity in absolute value, requiring in general\n", + "that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "C_x^2 + C_y^2 \\leq 1 \\thinspace .\n", + "\\label{wave:pde1:analysis:2DstabC} \\tag{23}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This gives the stability criterion, more commonly expressed directly\n", + "in an inequality for the time step:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\Delta t \\leq \\frac{1}{c} \\left( \\frac{1}{\\Delta x^2} +\n", + "\\frac{1}{\\Delta y^2}\\right)^{-\\frac{1}{2}i}\n", + "\\label{wave:pde1:analysis:2Dstab} \\tag{24}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A similar, straightforward analysis for the 3D case leads to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\Delta t \\leq \\frac{1}{c}\\left( \\frac{1}{\\Delta x^2} +\n", + "\\frac{1}{\\Delta y^2} + \\frac{1}{\\Delta z^2}\\right)^{-\\frac{1}{2}i}\n", + "\\label{_auto9} \\tag{25}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the case of a variable coefficient $c^2=c^2(\\xpoint)$, we must use\n", + "the worst-case value" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\bar c = \\sqrt{\\max_{\\xpoint\\in\\Omega} c^2(\\xpoint)}\n", + "\\label{_auto10} \\tag{26}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in the stability criteria. Often, especially in the variable wave\n", + "velocity case, it is wise to introduce a safety factor $\\beta\\in (0,1]$ too:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\Delta t \\leq \\beta \\frac{1}{\\bar c}\n", + "\\left( \\frac{1}{\\Delta x^2} +\n", + "\\frac{1}{\\Delta y^2} + \\frac{1}{\\Delta z^2}\\right)^{-\\frac{1}{2}i}\n", + "\\label{_auto11} \\tag{27}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The exact numerical dispersion relations in 2D and 3D becomes, for constant $c$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\tilde\\omega = \\frac{2}{\\Delta t}\\sin^{-1}\\left(\n", + "\\left( C_x^2\\sin^2 p_x + C_y^2\\sin^2 p_y\\right)^\\frac{1}{2}\\right),\n", + "\\label{_auto12} \\tag{28}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \n", + "\\tilde\\omega = \\frac{2}{\\Delta t}\\sin^{-1}\\left(\n", + "\\left( C_x^2\\sin^2 p_x + C_y^2\\sin^2 p_y + C_z^2\\sin^2 p_z\\right)^\\frac{1}{2}\\right)\\thinspace .\n", + "\\label{_auto13} \\tag{29}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can visualize the numerical dispersion error in 2D much like we did\n", + "in 1D. To this end, we need to reduce the number of parameters in\n", + "$\\tilde\\omega$. The direction of the wave is parameterized by the\n", + "polar angle $\\theta$, which means that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "k_x = k\\sin\\theta,\\quad k_y=k\\cos\\theta\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A simplification is to set $\\Delta x=\\Delta y=h$.\n", + "Then $C_x=C_y=c\\Delta t/h$, which we call $C$. Also," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "p_x=\\frac{1}{2} kh\\cos\\theta,\\quad p_y=\\frac{1}{2} kh\\sin\\theta\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The numerical frequency $\\tilde\\omega$\n", + "is now a function of three parameters:\n", + "\n", + " * $C$, reflecting the number of cells a wave is displaced during a time step,\n", + "\n", + " * $p=\\frac{1}{2} kh$, reflecting the number of cells per wave length in space,\n", + "\n", + " * $\\theta$, expressing the direction of the wave.\n", + "\n", + "We want to visualize the error in the numerical frequency. To avoid having\n", + "$\\Delta t$ as a free parameter in $\\tilde\\omega$, we work with\n", + "$\\tilde c/c = \\tilde\\omega/(kc)$. The coefficient in front of the\n", + "$\\sin^{-1}$ factor is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{2}{kc\\Delta t} = \\frac{2}{2kc\\Delta t h/h} =\n", + "\\frac{1}{Ckh} = \\frac{2}{Cp},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\tilde c}{c} = \\frac{2}{Cp}\n", + "\\sin^{-1}\\left(C\\left(\\sin^2 (p\\cos\\theta)\n", + "+ \\sin^2(p\\sin\\theta) \\right)^\\frac{1}{2}\\right)\\thinspace .\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We want to visualize this quantity as a function of\n", + "$p$ and $\\theta$ for some values of $C\\leq 1$. mathcal{I}_t is\n", + "instructive\n", + "to make color contour plots of $1-\\tilde c/c$ in\n", + "*polar coordinates* with $\\theta$ as the angular coordinate and\n", + "$p$ as the radial coordinate.\n", + "\n", + "The stability criterion ([23](#wave:pde1:analysis:2DstabC))\n", + "becomes $C\\leq C_{\\max} = 1/\\sqrt{2}$ in the present 2D case with the\n", + "$C$ defined above. Let us plot $1-\\tilde c/c$ in polar coordinates\n", + "for $C_{\\max}, 0.9C_{\\max}, 0.5C_{\\max}, 0.2C_{\\max}$.\n", + "The program below does the somewhat tricky\n", + "work in Matplotlib, and the result appears\n", + "in [Figure](#wave:pde1:fig:disprel2D). From the figure we clearly\n", + "see that the maximum $C$ value gives the best results, and that\n", + "waves whose propagation direction makes an angle of 45 degrees with\n", + "an axis are the most accurate." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def dispersion_relation_2D(p, theta, C):\n", + " arg = C*sqrt(sin(p*cos(theta))**2 +\n", + " sin(p*sin(theta))**2)\n", + " c_frac = 2./(C*p)*arcsin(arg)\n", + "\n", + " return c_frac\n", + "\n", + "import numpy as np\n", + "from numpy import \\\n", + " cos, sin, arcsin, sqrt, pi # for nicer math formulas\n", + "\n", + "r = p = np.linspace(0.001, pi/2, 101)\n", + "theta = np.linspace(0, 2*pi, 51)\n", + "r, theta = np.meshgrid(r, theta)\n", + "\n", + "# Make 2x2 filled contour plots for 4 values of C\n", + "import matplotlib.pyplot as plt\n", + "C_max = 1/sqrt(2)\n", + "C = [[C_max, 0.9*C_max], [0.5*C_max, 0.2*C_max]]\n", + "fix, axes = plt.subplots(2, 2, subplot_kw=dict(polar=True))\n", + "for row in range(2):\n", + " for column in range(2):\n", + " error = 1 - dispersion_relation_2D(\n", + " p, theta, C[row][column])\n", + " print error.min(), error.max()\n", + " # use vmin=error.min(), vmax=error.max()\n", + " cax = axes[row][column].contourf(\n", + " theta, r, error, 50, vmin=-1, vmax=-0.28)\n", + " axes[row][column].set_xticks([])\n", + " axes[row][column].set_yticks([])\n", + "\n", + "# Add colorbar to the last plot\n", + "cbar = plt.colorbar(cax)\n", + "cbar.ax.set_ylabel('error in wave velocity')\n", + "plt.savefig('disprel2D.png'); plt.savefig('disprel2D.pdf')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
\n", + "\n", + "

Error in numerical dispersion in 2D.

\n", + "\n", + "\n", + "" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/fdm-jupyter-book/notebooks/03_diffu/diffu_rw.ipynb b/fdm-jupyter-book/notebooks/03_diffu/diffu_rw.ipynb index 4f873f88..8f14c5eb 100644 --- a/fdm-jupyter-book/notebooks/03_diffu/diffu_rw.ipynb +++ b/fdm-jupyter-book/notebooks/03_diffu/diffu_rw.ipynb @@ -243,7 +243,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -252,7 +252,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -298,7 +298,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -317,7 +317,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -326,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -364,7 +364,7 @@ }, { "cell_type": "code", - "execution_count": 259, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -683,7 +683,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -765,7 +765,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -790,15 +790,15 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Operator `Kernel` run in 0.01 s\n", - "Operator `Kernel` run in 0.01 s\n" + "Operator `Kernel` ran in 0.01 s\n", + "Operator `Kernel` ran in 0.01 s\n" ] }, { @@ -893,7 +893,7 @@ }, { "cell_type": "code", - "execution_count": 239, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -1097,7 +1097,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -1158,7 +1158,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -1190,7 +1190,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -1239,7 +1239,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -1301,9 +1301,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Devito", "language": "python", - "name": "python3" + "name": "devito" }, "language_info": { "codemirror_mode": { @@ -1315,7 +1315,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/fdm-jupyter-book/notebooks/04_advec/advec.ipynb b/fdm-jupyter-book/notebooks/04_advec/advec.ipynb index 87bd507a..ef3c39ac 100644 --- a/fdm-jupyter-book/notebooks/04_advec/advec.ipynb +++ b/fdm-jupyter-book/notebooks/04_advec/advec.ipynb @@ -294,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -307,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -426,7 +426,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -468,12 +468,12 @@ " dt = 0.001\n", " C = 1\n", " T = 1\n", - " solver(I=I, U0=U0, v=1.0, L=L, dt=dt, C=C, T=T,\n", + " solver_FECS(I=I, U0=U0, v=1.0, L=L, dt=dt, C=C, T=T,\n", " user_action=plot)\n", " plt.legend(legends, loc='lower left')\n", " plt.savefig('tmp.png'); plt.savefig('tmp.pdf')\n", " plt.axis([0, L, -0.75, 1.1])\n", - " plt.show()\n" + " plt.show()" ] }, { @@ -1186,7 +1186,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -1304,7 +1304,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -1576,7 +1576,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -1603,7 +1603,7 @@ "" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -1643,7 +1643,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -1670,7 +1670,7 @@ "" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -2382,7 +2382,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -2885,22 +2885,6 @@ "\n", "" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Bibliography\n", - "\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -2941,9 +2925,9 @@ } }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Devito", "language": "python", - "name": "python3" + "name": "devito" }, "language_info": { "codemirror_mode": { @@ -2955,7 +2939,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.10.6" } }, "nbformat": 4,