{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Laboratory 8: Solution of the Quasi-geostrophic Equations \n", "\n", " Lin Yang & John M. Stockie \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## List of Problems ##\n", "\n", "- [Problem 1:](#Problem-One) Discretization of the Jacobian term\n", "- [Problem 2:](#Problem-Two) Numerical instability in the “straightforward” Jacobian \n", "- [Problem 3:](#Problem-Three) Implement the SOR relaxation\n", "- [Problem 4:](#Problem-Four) No-slip boundary conditions\n", "- [Problem 5:](#Problem-Five) Starting values for the time integration\n", "- [Problem 6:](#Problem-Six) Duplication of classical results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objectives ##\n", "\n", "This lab is an introduction to the use of implicit schemes for the\n", "solution of PDE’s, using as an example the quasi-geostrophic equations\n", "that govern the large-scale circulation of the oceans.\n", "\n", "You will see that the discretization of the governing equations leads to\n", "a large, sparse system of linear equations. The resulting matrix problem\n", "is solved with relaxation methods, one of which you will write the code\n", "for, by modifying the simpler Jacobi relaxation. There are two types of\n", "boundary conditions typically used for this problem, one of which you\n", "will program yourself – your computations are easily compared to\n", "previously-obtained “classical” results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Readings\n", "There are no required readings for this lab. If you would like some\n", "additional background beyond the material in the lab itself, then you\n", "may refer to the references listed below:\n", "\n", "- **Equations of motion:**\n", "\n", " - [Pedlosky](#Ref:Pedlosky) Sections 4.6 & 4.11 (derivation of QG\n", " equations)\n", "\n", "- **Nonlinear instability:**\n", "\n", " - [Mesinger & Arakawa](#Ref:MesingerArakawa) (classic paper with\n", " description of instability and aliasing)\n", "\n", " - [Arakawa & Lamb](#Ref:ArakawaLamb) (non-linear instability in the QG\n", " equations, with the Arakawa-Jacobian)\n", "\n", "- **Numerical methods:**\n", "\n", " - [Strang](#Ref:Strang) (analysis of implicit schemes)\n", "\n", " - [McCalpin](#Ref:McCalpin) (QGbox model)\n", "\n", "- **Classical numerical results:**\n", "\n", " - [Veronis](#Ref:Veronis) (numerical results)\n", "\n", " - [Bryan](#Ref:Bryan) (numerical results)\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "******************************\n", "context imported. Front of path:\n", "/Users/phil/repos/numeric\n", "back of path: /Users/phil/.ipython\n", "******************************\n", "\n", "through /Users/phil/repos/numeric/notebooks/lab8/context.py\n" ] } ], "source": [ "import context\n", "from IPython.display import Image\n", "# import the quiz script\n", "from numlabs.lab8 import quiz8 as quiz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction ##\n", "\n", "An important aspect in the study of large-scale circulation in the ocean\n", "is the response of the ocean to wind stress. Solution of this problem\n", "using the full Navier-Stokes equations is quite complicated, and it is\n", "natural to look for some way to simplify the governing equations. A\n", "common simplification in many models of large-scale, wind-driven ocean\n", "circulation, is to assume a system that is homogeneous and barotropic.\n", "\n", "It is now natural to ask:\n", "\n", "> *Does the simplified model capture the important dynamics in the\n", "> real ocean?*\n", "\n", "This question can be investigated by solving the equations numerically,\n", "and comparing the results to observations in the real ocean. Many\n", "numerical results are already available, and so the purpose of this lab\n", "is to introduce you to the numerical methods used to solve this problem,\n", "and to compare the computed results to those from some classical papers\n", "on numerical ocean simulations.\n", "\n", "Some of the numerical details (in Sections [Right Hand Side](#Right-Hand-Side), [Boundary Conditions](#Boundary-Conditions), [Matrix Form of Discrete Equations](#Matrix-Form-of-the-Discrete-Equations), [Solution of the Poisson Equation by Relaxation](#Solution-of-the-Poisson-Equation-by-Relaxation)\n", "and the\n", "appendices) are quite technical, and may be passed over the first time\n", "you read through the lab. You can get a general idea of the basic\n", "solution procedure without them. However, you should return to them\n", "later and understand the material contained in them, since these\n", "sections contain techniques that are commonly encountered when solving\n", "PDE’s, and an understanding of these sections is required for you to\n", "answer the problems in the Lab.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Quasi-Geostrophic Model ##\n", "\n", "Consider a rectangular ocean with a flat bottom, as pictured in\n", "[Figure Model Ocean](#Figure-Model-Ocean), and ignore curvature effects, by confining the region of interest to a *mid-latitude $\\beta$-plane*." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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ECAg0DsHCBAgQIAAAQIECGQsINBn3DxDJ0CAAAECBAgQICDQOwcIECBAgAABAgQIZCwg0GfcPEMnQIAAAQIECBAgINA7BwgQIECAAAECBAhkLCDQZ9w8QydAgAABAgQIECAg0DsHCBAgQIAAAQIECGQsINBn3DxDJ0CAAAECBAgQICDQOwcIECBAgAABAgQIZCwg0GfcPEMnQIAAAQIECBAgINA7BwgQIECAAAECBAhkLCDQZ9w8QydAgAABAgQIECAg0DsHCBAgQIAAAQIECGQsINBn3DxDJ0CAAAECBAgQICDQOwcIECBAgAABAgQIZCwg0GfcPEMnQIAAAQIECBAgINA7BwgQIECAAAECBAhkLCDQZ9w8QydAgAABAgQIECAg0DsHCBAgQIAAAQIECGQsINBn3DxDJ0CAAAECBAgQICDQOwcIECBAgAABAgQIZCwg0GfcPEMnQIAAAQIECBAgINA7BwgQIECAAAECBAhkLCDQZ9w8QydAgAABAgQIECAg0DsHCBAgQIAAAQIECGQsINBn3DxDJ0CAAAECBAgQICDQOwcIECBAgAABAgQIZCwg0GfcPEMnQIAAAQIECBAgINA7BwgQIECAAAECBAhkLCDQZ9w8QydAgAABAgQIECAg0DsHCBAgQIAAAQIECGQsINBn3DxDJ0CAAAECBAgQICDQOwcIECBAgAABAgQIZCwg0GfcPEMnQIAAAQIECBAgINA7BwgQIECAAAECBAhkLCDQZ9w8QydAgAABAgQIECAg0DsHCBAgQIAAAQIECGQsINBn3DxDJ0CAAAECBAgQICDQOwcIECBAgAABAgQIZCwg0GfcPEMnQIAAAQIECBAgINA7BwgQIECAAAECBAhkLCDQZ9w8QydAgAABAgQIECAg0DsHCBAgQIAAAQIECGQsINBn3DxDJ0CAAAECBAgQICDQOwcIECBAgAABAgQIZCwg0GfcPEMnQIAAAQIECBAgINA7BwgQIECAAAECBAhkLCDQZ9w8QydAgAABAgQIECAg0DsHCBAgQIAAAQIECGQsINBn3DxDJ0CAAAECBAgQICDQOwcIECBAgAABAgQIZCwg0GfcPEMnQIAAAQIECBAgINA7BwgQIECAAAECBAhkLCDQZ9w8QydAgAABAgQIECAg0DsHCBAgQIAAAQIECGQsINBn3DxDJ0CAAAECBAgQICDQ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5CZgyk1uHTPeIgTe+96pMr761an59FPP+ooAAQIECBAgMJiAQD+Yk60IjExg//6I666LOPPMZpfpQ7LTb2M5sgPZEQECBAgQIFCFgEBfRZsV2RWBdEeba69tRvPFL0bccUfzdZp+0/+QbFfGahwECBAgQIBAHgICfR59MsoCBOa6PWW6q036QGx6pA/K7trVfO13AgQIECBAgMCgAj4UO6iU7QgsU2Dz5oidO5vbU27devLOLrssIt3KMi06tXeve9GfrOM7AgQIECBAYCEBV+gX0vEagWUKpKvye/ZEvOMdTZjfsKEJ6489NrXjtM0f/3HE6adHPPtsxMaNEX/3dxFprr0HAQIECBAgQGAxAVfoFxPyOoFlCPSvys/cxTnnRDz6aPPsfNukVw8ejFizZua7fU+AAAECBAgQmBIQ6KcsfEVg5ALp6vtcV9pTSO8H9fm2Wb3a1JuRN8QOCRAgQIBAgQICfYFNVRIBAgQIECBAgEA9AubQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQjINDX02uVEiBAgAABAgQIFCgg0BfYVCURIECAAAECBAjUIyDQ19NrlRIgQIAAAQIECBQoINAX2FQlESBAgAABAgQI1CMg0NfTa5USIECAAAECBAgUKCDQF9hUJREgQIAAAQIECNQj8P8BV3Gaf6oWZe8AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 2, "metadata": { "image/png": { "width": "45%" } }, "output_type": "execute_result" } ], "source": [ "Image(filename='images/rect.png',width='45%') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**Figure Model Ocean.** The rectangular ocean with flat bottom, ignoring curvature\n", "effects.\n", "
\n", "\n", "More information on what is a $\\beta$-plane and on the neglect of\n", "curvature terms in the $\\beta$-plane approximation is given in the\n", "appendix.\n", "\n", "If we assume that the ocean is homogeneous (it has constant density\n", "throughout), then the equations governing the fluid motion on the\n", "$\\beta$-plane are: \n", "\n", "
(X-Momentum Eqn)
\n", "\n", "\\begin{equation}\n", "\\frac{\\partial u}{\\partial t} + u \\frac {\\partial u}{\\partial x} + v \\frac {\\partial u}{\\partial y} + w \\frac{\\partial u}{\\partial z} - fv = - \\, \\frac{1}{\\rho} \\, \\frac {\\partial p}{\\partial x}\n", "+ A_v \\, \\frac{\\partial^2 u}{\\partial z^2} + A_h \\, \\nabla^2 u\n", "\\end{equation}\n", "\n", "
(Y-Momentum Eqn)
\n", "\n", "\\begin{equation}\n", "\\frac{\\partial v}{\\partial t} + u \\frac{\\partial v}{\\partial x} + v \\frac{\\partial v}{\\partial y} + w \\frac{\\partial v}{\\partial z} + fu = - \\, \\frac{1}{\\rho} \\, \\frac{\\partial p}{\\partial y}\n", "+ A_v \\, \\frac{\\partial^2 v}{\\partial z^2} + A_h \\, \\nabla^2 v\n", "\\end{equation}\n", "\n", "
(Hydrostatic Eqn)
\n", "\n", "\\begin{equation}\n", "\\frac{\\partial p}{\\partial z} = - \\rho g\n", "\\end{equation}\n", "\n", "
(Continuity Eqn)
\n", "\n", "\\begin{equation}\n", "\\frac {\\partial u}{\\partial x} + \\frac{\\partial v}{\\partial y} = - \\, \\frac{\\partial w}{\\partial z}\n", "\\end{equation}\n", "\n", "where\n", "\n", "- ([X-Momentum Eqn](#eq:xmom)) and ([Y-Momentum Eqn](#eq:ymom)) are the lateral momentum equations,\n", "\n", "- ([Hydrostatic Eqn](#eq:hydrostatic)) is the hydrostatic balance (and replaces the vertical momentum\n", " equation), and\n", "\n", "- ([Continuity Eqn](#eq:continuity)) is the continuity (or incompressibility or conservation of volume) condition.\n", "\n", "The variables and parameters appearing above are:\n", "\n", "- $(u,v,w)$, the fluid velocity components;\n", "\n", "- $f(y)$, the Coriolis parameter (assumed to be a linear function of\n", " $y$);\n", "\n", "- $\\rho$, the density (assumed constant for a homogeneous fluid);\n", "\n", "- $A_v$ and $A_h$, the vertical and horizontal coefficients of\n", " viscosity, respectively (constants);\n", "\n", "- $g$, the gravitational acceleration (constant).\n", "\n", "Equations ([X-Momentum Eqn](#eq:xmom)), ([Y-Momentum Eqn](#eq:ymom)), ([Hydrostatic Eqn](#eq:hydrostatic)) and ([Continuity Eqn](#eq:continuity)) form a non-linear system of PDE’s, for which there are many\n", "numerical methods available. However, due to the complexity of the\n", "equations, the methods themselves are *very complex*, and\n", "consume a large amount of CPU time. It is therefore advantageous for us\n", "to reduce the equations to a simpler form, for which common, and more\n", "efficient numerical solution techniques can be used.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By applying a sequence of physically-motivated approximations (see\n", "[Appendix Simplification of the QG Model Equations](#Simplification-of-the-QG-Model-Equations])) and by using the boundary conditions, the system([X-Momentum Eqn](#eq:xmom)), ([Y-Momentum Eqn](#eq:ymom)), ([Hydrostatic Eqn](#eq:hydrostatic)) and ([Continuity Eqn](#eq:continuity)) can be\n", "reduced to a single PDE: \n", "
\n", "(Quasi-Geotrophic Eqn)\n", "$$\n", " \\frac{\\partial}{\\partial t} \\, \\nabla_h^2 \\psi + {\\cal J} \\left( \\psi, \\nabla_h^2 \\psi \\right)\n", " + \\beta \\, \\frac {\\partial \\psi}{\\partial x} = \\frac{1}{\\rho H} \\, \\nabla_h \\times \\tau - \\kappa\n", " \\, \\nabla_h^2 \\psi + A_h \\, \\nabla_h^4 \\psi $$\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " where\n", "\n", "- $\\psi$ is the stream function, defined by\n", " $$u = - \\frac{\\partial \\psi}{\\partial y},$$\n", " $$v = \\frac{\\partial \\psi}{\\partial x}$$\n", "\n", "- $$\\nabla_h = \\left(\\frac{\\partial}{\\partial x},\\frac{\\partial}{\\partial y}\\right)$$ \n", " is the “horizontal”\n", " gradient operator, so-called because it involves only derivatives in\n", " $x$ and $y$;\n", "\n", "- $${\\cal J} (a,b) = \\frac{\\partial a}{\\partial x} \\frac{\\partial\n", " b}{\\partial y} - \\frac{\\partial a}{\\partial y} \\frac{\\partial b}{\\partial x}$$ \n", " is the *Jacobian* operator;\n", "\n", "- $\\vec{\\tau}(x,y) = \\left(\\,\\tau_1(x,y),\\tau_2(x,y)\\,\\right)$ is the\n", " wind stress boundary condition at the surface $z=0$. A simple form\n", " of the wind stress might assume an ocean “box” that extends from\n", " near the equator to a latitude of about $60^\\circ$, for which\n", " typical winds are easterly near the equator and turn westerly at\n", " middle latitudes. A simple function describing this is\n", " $$\\vec{\\tau} = \\tau_{max} (-\\cos y, 0),$$ \n", " which is what we will use in this lab. \n", " \n", " More complicated wind stress functions are possible. See [McCalpin’s](#Ref:McCalpin)\n", " QGBOX documentation [p. 24] for another\n", " example." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- $\\beta = df/dy$ is a constant, where $f(y) = f_0+\\beta y$ (see\n", " [Appendix Definition of the Beta-plane](#Definition-of-the-Beta-plane));\n", "\n", "- $\\kappa = {1}/{H} \\left[ (A_v f_0)/{2} \\right]^{1/2}$ is the bottom friction scaling (constant); and\n", "\n", "- $H$ is the vertical depth of the water column (constant).\n", "\n", "Notice that the original (second order) system of four equations in four\n", "unknowns ($u$, $v$, $w$, $p$) has now been reduced to a single (fourth\n", "order) PDE in one unknown function, $\\psi$. It will become clear in the\n", "next section just how much simpler the system of equations has become …\n", "\n", "Before going on, though, we need to close the system with the\n", "*boundary conditions* for the stream function $\\psi$. We\n", "must actually consider two cases, based on whether or not the lateral\n", "eddy viscosity parameter, $A_h$, is zero:\n", "\n", "- **if $A_h=0$:** the boundary conditions are\n", " *free-slip*; that is, $\\psi=0$ on the boundary.\n", "\n", "- **if $A_h\\neq 0$:** the boundary conditions are\n", " *no-slip*; that is both $\\psi$ and its normal\n", " derivative $\\nabla\\psi\\cdot\\hat{n}$ are zero on the boundary (where\n", " $\\hat{n}$ is the normal vector to the boundary)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Scaling the Equations of Motion ###\n", "\n", "In physical problems, it is not uncommon for some of the quantities of\n", "interest to differ in size by many orders of magnitude. This is of\n", "particular concern when computing numerical solutions to such problems,\n", "since then round-off errors can begin to pollute the computations (see\n", "Lab 2).\n", "\n", "This is also the case for the QG equations, where the parameters have a\n", "large variation in size. The QG model parameters, and typical numerical\n", "values, are given in [Table of Parameters](#tab:parameters). For such problems it is customary to *rescale* the\n", "variables in such a way that the size differences are minimized.\n", "\n", "\n", "**Problem Parameters**\n", "\n", "| Symbol | Name | Range of Magnitude | Units |\n", "| :----------: | :-------------------------: | :---------------------------------------: | :----------------: |\n", "| $R$ | Earth’s radius | $6.4 \\times 10^6$ | $m$ |\n", "|$\\Omega$ | Angular frequency for Earth | $7.27 \\times 10^{-5}$ | $s^{-1}$ |\n", "| $H$ | Depth of active layer | $100 \\rightarrow 4000$ | $m$ |\n", "| $B$ | Length and width of ocean | $1.0 \\rightarrow 5.0 \\times 10^6$ | $m$ |\n", "| $\\rho$ | Density of water | $10^3$ | $kg/m^3$ |\n", "| $A_h$ | Lateral eddy viscosity | $0$ or $10^1 \\rightarrow 10^4$ | $m^2/s$ |\n", "| $A_v$ | Vertical eddy viscosity | $10^{-4} \\rightarrow 10^{-1}$ | $m^2/s$ |\n", "| $\\tau_{max}$ | Maximum wind stress | $10^{-2} \\rightarrow 1$ | $kg m^{-1} s^{-2}$ |\n", "| $\\theta_0$ | Latitude | $0 \\rightarrow \\frac{\\pi}{3}$ | - |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Derived Quantities**\n", "\n", "| Symbol | Name | Range of Magnitude | Units |\n", "| :----------: | :-------------------------------------------: | :----------------------------------------: | :----------------: |\n", "| $\\beta$ | $\\beta =2\\Omega \\cos \\theta_0 / R$ | $1.1 \\rightarrow 2.3 \\times 10^{-11}$ | $m^{-1} s^{-1}$ |\n", "| $f_0$ | $f_0 = 2 \\Omega \\sin \\theta_0$ | $0.0 \\rightarrow 1.3 \\times 10^{-4}$ | $s^{-1}$ |\n", "| $U_0$ | Velocity scale = $\\tau_{max}/(\\beta\\rho H B)$ | $10^{-5} \\rightarrow 10^{-1}$ | $m s^{-1}$ | \n", "| $\\kappa$ | bottom friction parameter | $0.0 \\rightarrow 10^{-5}$ | $m^2 s^{-2}$ |\n", "\n", "**Non-dimensional Quantities**\n", "\n", "| Symbol / Name | Range of Magnitude for Quantity |\n", "| :----------------------------------------------------: | :------------------------------------------: |\n", "| $\\epsilon$ / Vorticity ratio = $U_0/(\\beta B^2)$ | (computed) | \n", "| $\\frac{\\tau_{max}}{\\epsilon\\beta^2 \\rho H B^3}$ | $10^{-12} \\rightarrow 10^{-14}$ |\n", "| $\\frac{\\kappa}{\\beta B}$ | $4 \\times 10^{-4} \\rightarrow 6 \\times 10^1$ |\n", "| $\\frac{A_h}{\\beta B^3}$ | $10^{-7} \\rightarrow 10^{-4}$ |\n", "\n", "
\n", "**Table of Parameters**\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us go through this scaling process for the evolution\n", "equation [(Quasi-Geostrophic Eqn)](#eq:quasi) for the stream function, which is reproduced\n", "here for easy comparison:\n", "\n", "$$\\frac{\\partial}{\\partial t} \\nabla^2_h \\psi = - \\beta \\frac{\\partial \\psi}{\\partial x} - {\\cal J}(\\psi, \\nabla_h^2\\psi)+ \\frac{1}{\\rho H} \\nabla_h \\times \\vec{\\tau} - \\kappa \\nabla_h^2 \\psi + A_h \\nabla_h^4 \\psi$$ \n", " \n", "The basic idea is to find typical\n", "*scales of motion*, and then redefine the dependent and\n", "independent variables in terms of these scales to obtain\n", "*dimensionless variables*.\n", "\n", "For example, the basin width and length, $B$, can be used as a scale for\n", "the dependent variables $x$ and $y$. Then, we define dimensionless\n", "variables \n", "
\n", "(x-scale eqn)\n", "$$x^\\prime = \\frac{x}{B}$$\n", "
\n", "(y-scale eqn)\n", "$$y^\\prime = \\frac{y}{B}$$\n", "
\n", "\n", "Notice that where $x$ and $y$ varied between\n", "0 and $B$ (where $B$ could be on the order of hundreds of kilometres),\n", "the new variables $x^\\prime$ and $y^\\prime$ now vary between 0 and 1\n", "(and so the ocean is now a unit square).\n", "\n", "Similarly, we can redefine the remaining variables in the problem as\n", "
\n", "(t-scale eqn)\n", "$$\n", " t^\\prime = \\frac{t}{\\left(\\frac{1}{\\beta B}\\right)} $$\n", "
\n", "($\\psi$-scale eqn)\n", "$$ \\psi^\\prime = \\frac{\\psi}{\\epsilon \\beta B^3} $$\n", "
\n", "($\\tau$-scale eqn)\n", "$$ \\vec{\\tau}^\\prime = \\frac{\\vec{\\tau}}{\\tau_{max}}\n", " $$
\n", "\n", "where the scales have been\n", "specially chosen to represent typical sizes of the variables. Here, the\n", "parameter $\\epsilon$ is a measure of the the ratio between the “relative\n", "vorticity” ($\\max|\\nabla_h^2 \\psi|$) and the planetary vorticity (given\n", "by $\\beta B$)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we need only substitute for the original variables in the\n", "equations, and replace derivatives with their dimensionless\n", "counterparts; for example, using the chain rule,\n", "$$\\frac{\\partial}{\\partial x} = \\frac{\\partial x^\\prime}{\\partial x}\n", "\\frac{\\partial}{\\partial x^\\prime}.$$ Then the equation of motion\n", "becomes \n", "\n", "\n", "(Rescaled Quasi-Geostrophic Eqn)\n", "$$ \\frac{\\partial}{\\partial t^\\prime} \\nabla^{\\prime 2}_h \\psi^\\prime = - \\, \\frac{\\partial \\psi^\\prime}{\\partial x^\\prime} - \\epsilon {\\cal J^\\prime}(\\psi^\\prime, \\nabla_h^{\\prime 2}\\psi^\\prime) + \\frac{\\tau_{max}}{\\epsilon \\beta^2 \\rho H B^3} \\nabla^\\prime_h \\times \\vec{\\tau}^\\prime - \\, \\frac{\\kappa}{\\beta B} \\nabla_h^{\\prime 2} \\psi^\\prime + \\frac{A_h}{\\beta B^3} \\nabla_h^{\\prime 4} \\psi^\\prime $$ \n", " The superscript\n", "“$\\,^\\prime$” on $\\nabla_h$ and ${\\cal J}$ signify that the derivatives\n", "are taken with respect to the dimensionless variables. Notice that each\n", "term in ([Rescaled Quasi-Geostrophic Eqn](#eq:qg-rescaled)) is now dimensionless, and that there are\n", "now 4 dimensionless combinations of parameters $$\\epsilon, \\;\\; \n", "\\frac{\\tau_{max}}{\\epsilon \\beta^2 \\rho H B^3}, \\;\\;\n", "\\frac{\\kappa}{\\beta B}, \\;\\; \\mbox{ and} \\;\\;\n", "\\frac{A_h}{\\beta B^3}.$$ These four expressions define four new\n", "dimensionless parameters that replace the original (unscaled) parameters\n", "in the problem.\n", "\n", "The terms in the equation now involve the dimensionless stream function,\n", "$\\psi^\\prime$, and its derivatives, which have been scaled so that they\n", "are now of order 1 in magnitude. The differences in sizes between terms\n", "in the equation are now embodied solely in the four dimensionless\n", "parameters. A term which is multiplied by a small parameter is thus\n", "truly small in comparison to the other terms, and hence additive\n", "round-off errors will not contribute substantially to a numerical\n", "solution based on this form of the equations.\n", "\n", "For the remainder of this lab, we will use the scaled version of the\n", "equations. Consequently, the notation will be simplified by dropping the\n", "“primes” on the dimensionless variables. But, **do not\n", "forget**, that any solution (numerical or analytical) from the\n", "scaled equations must be converted back into dimensional variables\n", "using [the scale equations](#eq:xscale)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Discretization of the QG equations ##\n", "\n", "At first glance, it is probably not clear how one might discretize the\n", "QG equation ([Rescaled Quasi-Geostrophic Eqn](#eq:qg-rescaled)) from the previous section. This equation is an evolution\n", "equation for $\\nabla_h^2 \\psi$ (the Laplacian of the stream function)\n", "but has a right hand side that depends not only on $\\nabla_h^2 \\psi$,\n", "but also on $\\psi$ and $\\nabla_h^4 \\psi$. The problem may be written in\n", "a more suggestive form, by letting $\\chi = \\partial\\psi/\\partial t$.\n", "Then, the ([Rescaled Quasi-Geostrophic Eqn](#eq:qg-rescaled)) becomes \n", "\n", "\n", "(Poisson Eqn)\n", "$$\\nabla_h^2 \\chi = F(x,y,t), \n", "$$\n", "\n", "where $F(x,y,t)$ contains all of the terms\n", "except the time derivative. We will see that the discrete version of\n", "this equation is easily solved for the new unknown variable $\\chi$,\n", "after which \n", "
\n", "$$\\frac{\\partial\\psi}{\\partial t} = \\chi\n", "$$
\n", "\n", "may be used to evolve the stream function in\n", "time.\n", "\n", "The next two sections discuss the spatial and temporal discretization,\n", "including some details related to the right hand side, the boundary\n", "conditions, and the iterative scheme for solving the large sparse system\n", "of equations that arises from the Poisson equation for $\\chi$. Following\n", "that is an summary of the steps in the solution procedure.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Spatial Discretization\n", "\n", "Assume that we are dealing with a square ocean, with dimensions\n", "$1\\times 1$ (in non-dimensional coordinates) and begin by dividing the\n", "domain into a grid of discrete points\n", "$$x_i = i \\Delta x, \\;\\;i = 0, 1, 2, \\dots, M$$\n", "$$y_j = j \\Delta y, \\;\\;j = 0, 1, 2, \\dots, N$$ where $\\Delta x = 1/M$\n", "and $\\Delta y = 1/N$. In order to simplify the discrete equations, it\n", "will be helpful to assume that $M=N$, so that\n", "$\\Delta x = \\Delta y \\equiv d$. We can then look for approximate values\n", "of the stream function at the discrete points; that is, we look for\n", "$$\\Psi_{i,j} \\approx \\psi(x_i,y_j)$$ (and similarly for $\\chi_{i,j}$).\n", "The computational grid and placement of unknowns is pictured in\n", "Figure [Spatial Grid](#Spatial-Grid)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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16WllJMAAQIECBBoK3DsseXie+4px8K33WiSheedV+67//7lzahydhyJQF0EBPR1aSnlJECAAAECBNoK5Kw02aue6aKLyueRP++4Y+S78a9XrYq44oqI5cvLC2NzusucGef1rx+/rSUEqiggoK9iqygTAQIECBAgMC2BF7+43DwD85e+tHydM9eccUZE9txPlNaujbj44oic0SYvgs1x8+98Z7n1u98dkeslAlUXENBXvYWUjwABAgQIEJhU4JprIl7yknKzj32s7LF//OMjPve5iIMPLpevXl0uz5lwWjeWOv/8ct3mzRGtG0uNDOJzffb+u7HUpE1ggz4K7P6Cqo8lcGgCBAgQIECAQBcEPvKRiJzC8nWvi8hhNjm2/g1vKAPyt7yl7IXPOedbN4nKG0vl3PPZO//Yx5a981mMHMKzaVO57sc/jvilXxrepwvFlAWBrgsI6LtOKkMCBAgQIECgXwI5O83HPz7+6M9//vhleWOpdimnscyHRKAuAobc1KWllJMAAQIECBAgQIBAGwEBfRsUiwgQIECAAAECBAjURUBAX5eWUk4CBAgQIECAAAECbQQE9G1QLCJAgAABAgQIECBQFwEBfV1aSjkJECBAgAABAgQItBEQ0LdBsYgAAQIECBAgQIBAXQQE9HVpKeUkQIAAAQIECBAg0EZAQN8GxSICBAgQIECAAAECdREQ0NelpZSTAAECBAgQIECAQBsBAX0bFIsIECBAgAABAgQI1EVAQF+XllJOAgQIECBAgAABAm0EBPRtUCwiQIAAAQIECBAgUBcBAX1dWko5CRAgQIAAAQIECLQRmNdmmUUECPRYYPPmiC9+MeKQQyJOPz3i2GN7fEDZEyBAgAABAo0VENA3tmlVbCYCT396xJe+FLF0acQnPzmTHPa+Twbyz352xMMPj95uwYKI22+PyGeJAAECBAgQIDAdAUNupqNl28YLfO97ZRXvuqs3VT3zzDKYz5755csjfud3IvbbL2L79oj8MCERIECAAAECBKYrIKCfrpjtGy1w/fURl14a8YUvdL+ar3pVRH5gOOigiK1bI9asiXjf+yK+9rWIuXMj7rwz4k1v6v5x5UiAAAECBAg0W0BA3+z2VbtpCuRY9gsv7M3QlxtuKAtzzjmj889jvvCF5bp//Mfy2U8CBAgQIECAwFQFBPRTlbJdowVyyEsG2mec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\n", "text/plain": [ "" ] }, "execution_count": 3, "metadata": { "image/png": { "width": "45%" } }, "output_type": "execute_result" } ], "source": [ "Image(filename='images/spatial.png',width='45%') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**Figure Spatial Grid**\n", "
\n", "\n", "Derivatives are replaced by their centered, second-order finite\n", "difference approximations \n", "$$\n", " \\left. \\frac{\\partial \\Psi}{\\partial x} \\right|_{i,j}\n", " \\approx \n", " \\frac{\\Psi_{i+1,j}-\\Psi_{i-1,j}}{2d}\n", " \\left. \\frac{\\partial^2 \\Psi}{\\partial x^2} \\right|_{i,j} \n", " \\approx\n", " \\frac{\\Psi_{i+1,j} - 2 \\Psi_{i,j} + \\Psi_{i-1,j}}{d^2}\n", "$$ \n", "and similarly for the\n", "$y$-derivatives. The discrete analogue of the ([Poisson equation](#eq:poisson)),\n", "centered at the point $(x_i,y_j)$, may be written as\n", "$$\\frac{\\chi_{i+1,j} - 2\\chi_{i,j} +\\chi_{i-1,j}}{d^2} + \n", " \\frac{\\chi_{i,j+1} - 2\\chi_{i,j} +\\chi_{i,j-1}}{d^2} = F_{i,j}$$ or,\n", "after rearranging,\n", "\n", "\n", "(Discrete $\\chi$ Eqn)\n", "$$\\chi_{i+1,j}+\\chi_{i-1,j}+\\chi_{i,j+1}+\\chi_{i,j-1}-4\\chi_{i,j} =\n", " d^2F_{i,j}.\n", "$$\n", "\n", "Here, we’ve used\n", "$F_{i,j} = F(x_i,y_j,t)$ as the values of the right hand side function\n", "at the discrete points, and said nothing of how to discretize $F$ (this\n", "will be left until [Right Hand Side](#Right-Hand-Side). The ([Discrete $\\chi$ equation](#eq:discrete-chi)) is an equation centered at the grid point $(i,j)$, and relating\n", "the values of the approximate solution, $\\chi_{i,j}$, at the $(i,j)$\n", "point, to the four neighbouring values, as described by the *5-point difference stencil* pictured in\n", "[Figure Stencil](#fig:stencil)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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tHoIECBAgAABAgQINCAg0DeAqkgCBAgQIECAAAECtQQE+lrS6iFAgAABAgQIECDQgIBA3wCqIgkQIECAAAECBAjUEhDoa0mrhwABAgQIECBAgEADAgJ9A6iKJECAAAECBAgQIFBLQKCvJa0eAgQIECBAgAABAg0ICPQNoCqSAAECBAgQIECAQC0Bgb6WtHoIECBAgAABAgQINCAg0DeAqkgCBAgQIECAAAECtQQE+lrS6iFAgAABAgQIECDQgIBA3wCqIgkQIECAAAECBAjUEhDoa0mrhwABAgQIECBAgEADAgJ9A6iKJECAAAECBAgQIFBLQKCvJa0eAgQIECBAgAABAg0ICPQNoCqSAAECBAgQIECAQC0Bgb6WtHoIECBAgAABAgQINCAg0DeAqkgCBAgQIECAAAECtQQE+lrS6iFAgAABAgQIECDQgIBA3wCqIgkQIECAAAECBAjUEhDoa0mrhwABAgQIECBAgEADAgJ9A6iKJECAAAECBAgQIFBLQKCvJa0eAgQIECBAgAABAg0ICPQNoCqSAAECBAgQIECAQC0Bgb6WtHoIECBAgAABAgQINCAg0DeAqkgCBAgQIECAAAECtQQE+lrS6iFAgAABAgQIECDQgIBA3wCqIgkQIECAAAECBAjUEhDoa0mrhwABAgQIECBAgEADAgJ9A6iKJECAAAECBAgQIFBLQKCvJa0eAgQIECBAgAABAg0ICPQNoCqSAAECBAgQIECAQC0Bgb6WtHoIECBAgAABAgQINCAg0DeAqkgCBAgQIECAAAECtQQE+lrS6iFAgAABAgQIECDQgIBA3wCqIgkQIECAAAECBAjUEhDoa0mrhwABAgQIECBAgEADAgJ9A6iKJECAAAECBAgQIFBLQKCvJa0eAgQIECBAgAABAg0ICPQNoCqSAAECBAgQIECAQC0Bgb6WtHoIECBAgAABAgQINCAg0DeAqkgCBAgQIECAAAECtQQE+lrS6iFAgAABAgQIECDQgIBA3wCqIgkQIECAAAECBAjUEhDoa0mrhwABAgQIECBAgEADAgJ9A6iKJECAAAECBAgQIFBLQKCvJa0eAgQIECBAgAABAg0ICPQNoCqSAAECBAgQIECAQC0Bgb6WtHoIECBAgAABAgQINCAg0DeAqkgCBAgQIECAAAECtQQE+lrS6iFAgAABAgQIECDQgIBA3wCqIgkQIECAAAECBAjUEhDoa0mrhwABAgQIECBAgEADAgJ9A6iKJECAAAECBAgQIFBLQKCvJa0eAgQIECBAgAABAg0ICPQNoCqSAAECBAgQIECAQC0Bgb6WtHoIECBAgAABAgQINCAg0DeAqkgCBAgQIECAAAECtQQE+lrS6iFAgAABAgQIECDQgMCCDZSpSAIERihw1VURDz0U8cQTEYsuWhqy3noRSy45wkapurrArbdG5J/77y9VX3BBxMorlz/VG6PCkQnkz4L8mZDHPfdELLts+VmQPxMcBAiMj8CU554/xqc7ekKgPwL5SzpD2sUXl+B2002v3PcpUyLyf/ryy5eQv8MOEfkLfcstBf1XVuvGv2Roz/PgJz+JuPTSiN/+NuKRR+be9sUWK8Fu220j1lijnAcZ9h3dFcjgnudB/lw49dSIZ5+NuOOO39+fFVaIePvbIzbYoJwHgv7vN/MIAm0UEOjbOCraROAVBL72tYhrr4343vcinnxy5oMyjK27bsRrXxuxxBIlpOXsfM7G5S/5m2+OePObIy6/POLnP494/PGZz91884iNN47YccdSxsx/8VlbBc46K+KnP434/vcj7r67vFjLtr7+9RFrrx2x1loRDz8csfrqEW98Y+nFnXdGXH11OSd++cuIX/+6PDf/NV/w5eN22SVio40itt++PMff7RbI8TzjjIh/+qcytoPWvuY1EeuvH7HhhhE57jm2+eI9Z+jznbtf/CLiqafKz4EsI18UDo78ubHbbuWdnAMPHHzXRwIE2i4g0Ld9hLSv9wI583bkkRHHHhvx6KOF433vi1h66Yjp08tM+/wi5S/wH/0o4l//tYT8228vJUybVsrMX/6O9gkcd1w5FwbjlS/iVlwxYr/9SmCb3xYPlmPkC8Wczc1wl0eWm+dW/nG0TyBfpOe5cNpppW15DuSY5c+F//bfJrasKsvMmf382XDhhaXcfCdn330jMthbste+80CLCMwqINDPquFzAi0SGAT5o4+O+K//Kr+wM3BneBv2L9eLLiqz/iecUAA22STikEMmFhJbRDg2TcnwduihEQ8+WAJ8zqDvtdfw31HJQH/yySUs5rKdqVMjDjtMsG/LiZSh+7OfjbjsstKiffaJ2G674b+jkj97vv718oIhz4kFF4z42McE+7acB9pBYE4CAv2cVHyPwIgFPv7xiGOOiXjm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\n", "text/plain": [ "" ] }, "execution_count": 4, "metadata": { "image/png": { "width": "40%" } }, "output_type": "execute_result" } ], "source": [ "Image(filename='images/2diff.png',width='40%') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**Figure Stencil:**\n", "The standard 5-point centered difference stencil for the Laplacian\n", "(multiply by $\\frac{1}{d^2}$ to get the actual coefficients.
\n", "\n", "These stencil diagrams are a compact way of representing the information\n", "contained in finite difference formulas. To see how useful they are, do\n", "the following:\n", "\n", "- Choose the point on the grid in [Figure Spatial Grid](#Spatial-Grid) that\n", " you want to apply the difference formula ([Discrete $\\chi$ Eqn](#eq:discrete-chi)).\n", "\n", "- Overlay the difference stencil diagram on the grid, placing the\n", " center point (with value $-4$) on this point.\n", "\n", "- The numbers in the stencil are the multiples for each of the\n", " unknowns $\\chi_{i,j}$ in the difference formula.\n", "\n", "An illustration of this is given in [Figure Overlay](#fig:overlay)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvQAAAIyCAYAAACkbV6/AAAKQWlDQ1BJQ0MgUHJvZmlsZQAASA2dlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAACXBIWXMAAAsTAAALEwEAmpwYAABAAElEQVR4Ae3dC5gkVXkw/pfbHwRRQFAw6q5rxIgaQETwCkQQNAlgFATUgIGg4ucdAwL6GIMKkShoxI+bQpBwUwKIiC5+gKKCgII3RG6rJBEEAZWIPEL2P+8eipndnd2dnq6u7ur6nX12uru66lx+p3rmrepTp1ZaOJFCIkCAAAECBAgQIECglQIrt7LWKk2AAAECBAgQIECAwCIBAb0dgQABAgQIECBAgECLBQT0Le48VSdAgAABAgQIECAgoLcPECBAgAABAgQIEGixgIC+xZ2n6gQIECBAgAABAgQE9PYBAgQIECBAgAABAi0WENC3uPNUnQABAgQIECBAgICA3j5AgAABAgQIECBAoMUCAvoWd56qEyBAgAABAgQIEBDQ2wcIECBAgAABAgQItFhAQN/izlN1AgQIECBAgAABAgJ6+wABAgQIECBAgACBFgsI6FvceapOgAABAgQIECBAQEBvHyBAgAABAgQIECDQYgEBfYs7T9UJECBAgAABAgQICOjtAwQIECBAgAABAgRaLCCgb3HnqToBAgQIECBAgAABAb19gAABAgQIECBAgECLBQT0Le48VSdAgAABAgQIECAgoLcPECBAgAABAgQIEGixgIC+xZ2n6gQIECBAgAABAgQE9PYBAgQIECBAgAABAi0WENC3uPNUnQABAgQIECBAgICA3j5AgAABAgQIECBAoMUCAvoWd56qEyBAgAABAgQIEBDQ2wcIECBAgAABAgQItFhAQN/izlN1AgQIECBAgAABAgJ6+wABAgQIECBAgACBFgsI6FvceapOgAABAgQIECBAQEBvHyBAgAABAgQIECDQYgEBfYs7T9UJECBAgAABAgQICOjtAwQIECBAgAABAgRaLCCgb3HnqToBAgQIECBAgAABAb19gAABAgQIECBAgECLBQT0Le48VSdAgAABAgQIECAgoLcPECBAgAABAgQIEGixgIC+xZ2n6gQIECBAgAABAgQE9PYBAgQIECBAgAABAi0WENC3uPNUnQABAgQIECBAgICA3j5AgAABAgQIECBAoMUCAvoWd56qEyBAgAABAgQIEBDQ2wcIECBAgAABAgQItFhAQN/izlN1AgQIECBAgAABAgJ6+wABAgQIECBAgACBFgsI6FvceapOgAABAgQIECBAQEBvHyBAgAABAgQIECDQYgEBfYs7T9UJECBAgAABAgQICOjtAwQIECBAgAABAgRaLCCgb3HnqToBAgQIECBAgAABAb19gAABAgQIECBAgECLBQT0Le48VSdAgAABAgQIECAgoLcPECBAgAABAgQIEGixgIC+xZ2n6gQIECBAgAABAgQE9PYBAgQIECBAgAABAi0WENC3uPNUnQABAgQIECBAgICA3j5AgAABAgQIECBAoMUCAvoWd56qEyBAgAABAgQIEBDQ2wcIECBAgAABAgQItFhAQN/izlN1AgQIECBAgAABAgJ6+wABAgQIECBAgACBFgsI6FvceapOgAABAgQIECBAQEBvHyBAgAABAgQIECDQYgEBfYs7T9UJECBAgAABAgQICOjtAwQIECBAgAABAgRaLCCgb3HnqToBAgQIECBAgAABAb19gAABAgQIECBAgECLBQT0Le48VSdAgAABAgQIECAgoLcPECBAgAABAgQIEGixgIC+xZ2n6gQIECBAgAABAgQE9PYBAgQIECBAgAABAi0WENC3uPNUnQABAgQIECBAgICA3j5AgAABAgQIECBAoMUCAvoWd56qEyBAgAABAgQIEBDQ2wcIECBAgAABAgQItFhAQN/izlN1AgQIECBAgAABAgJ6+wABAgQIECBAgACBFgsI6FvceapOgAABAgQIECBAQEBvHyBAgAABAgQIECDQYgEBfYs7T9UJECBAgAABAgQICOjtAwQIECBAgAABAgRaLCCgb3HnqToBAgQIECBAgAABAb19gAABAgQIECBAgECLBQT0Le48VSdAgAABAgQIECAgoLcPECBAgAABAgQIEGixgIC+xZ2n6gQIECBAgAABAgQE9PYBAgQIECBAgAABAi0WENC3uPNUnQABAgQIECBAgICA3j5AgAABAgQIECBAoMUCAvoWd56qEyBAgAABAgQIEBDQ2wcIECBAgAABAgQItFhAQN/izlN1AgQIECBAgAABAgJ6+wABAgQIECBAgACBFgsI6FvceapOgAABAgQIECBAQEBvHyBAgAABAgQIECDQYgEBfYs7T9UJECBAgAABAgQICOjtAwQIECBAgAABAgRaLCCgb3HnqToBAgQIECBAgAABAb19gAABAgQIECBAgECLBQT0Le48VSdAgAABAgQIECAgoLcPECBAgAABAgQIEGixgIC+xZ2n6gQIECBAgAABAgQE9PYBAgQIECBAgAABAi0WENC3uPNUvX0CZ58dcc897av3sGucZmkn9S5wzTUR+V/qXeD443vfxhbld5zPqz2BQLMCAvpmvZXWcYE994w48siOI8yi+WmWdlLvAgcfHJH/pd4ELr444oADIvJR6k3A57U3L2sTqENAQF+HojwIECBAgAABAgQIDElAQD8keMUSIECAAAECBAgQqENAQF+HojwIECBAgAABAgQIDElAQD8keMUSIECAAAECBAgQqENAQF+HojwIECBAgAABAgQIDElAQD8keMUSIECAAAECBAgQqENAQF+HojwIECBAgAABAgQIDElAQD8keMUSIECAAAECBAgQqENAQF+HojwIECBAgAABAgQIDElAQD8keMUSIECAAAECBAgQqENAQF+HojwIECBAgAABAgQIDElAQD8keMUSIECAAAECBAgQqENAQF+HojwIECBAgAABAgQIDElg1SGVq1gCnRX4zW862/RZN/yBB2a9aec3/K//6jxBXwD33dfX5p3c+Oc/72SzNZrAUAWcoR8qv8K7JHDxxaW1F13UpVbX09ZLLy35HH98Pfl1JZd77onI4Cr/53Np5gJnnlnWrR5nvqU1r7iiGNxyCwsCBJoScIa+KWnldE4g/5hN/YN28MGTBEceGbHFFpOvt99+8rlnEddcMxmAZiC6YEFRSbd58yaF8vnU15PvdPNZWqVdlc4+O+Lxjy+vcv/bbbfqnbL/rbvu5OuuP5u6z6XFl79cRPIxHSurfJz62e26W7a/Olmx5PM3vSnioIMmhdKtcpxc6hkBAnUICOjrUJQHgWUI7LRTxIEHliArA89rr43YcMOIDEz3339yuYB+ccAMoDJISJc8K/9nfxZx1VXldQam1fKzzhLQT5XLYCmDqGp/mhrcT32etjffPHVLz/NgKO3yoCf3v+c+NyK/TfvLvyzL8/OabvkooF98f6m+Ocvfcfn8Gc+IuO22sk518iKX2+cWd/OKQJ0CK9eZmbwIEJgUyD9uGcxnyjP1xx1Xnm+zTQkK8lUGEUccUZb7OSkw1SQDrDTLVBmmbS6vAtfyrp+VUe5Xuc+l45/+afmfz3NZvlc5EpsUyH0p96s8KMrHd76zvLfvvmU/y2WZMqCXFheo9q1cms+rz2secOf+linP1Ds7Xyz8JDAIgZUWTqRBZCxPAuMgkGeDjzpqHFqiDQQIEGivwOmnLz5krL0tUXMCgxEw5GYwrnIdE4GpY45n06Sc0ebkk8uQkR13LAcHW24Zsdlmiy+fTd7jvs1ll5UhSrvuWsbQ55Cb/MZj6vI5c8ZdYXbtO+WUiD/8oQwVqS7qfO1ry5n5NdaI2Hvv2eU77lvdcEMZZrPtthHrrFOG3lS/A849t3xuq7PP427Ra/tyP7v33oh99onIi2Krz+t550XcfnvEHntEPPaxveY6ub5v4yYtPCMwnYCAfjoVywg8LJBjZfsZL7vDDhFf+lIZM5+BQZ7tz4Aghz5Uy/MPlT9Wi+9y6ZPjmH/844jddy8+GSBU45ir5XnWTlpcIL9VqgL2HOKQQ24yVePryytDvSqH6jGHhuTnNfetfPyXfyn7YA65SdPLLy8HSIaOVGKTj3ltQfrl77F8nr/jqmte8rP8qU+VsfWf+czkNp4RIFCvgCE39XrKjcAjAnkRYgYCVbrkkvJs7bUj1ltv8mLOPGDIcafSpEBeSJeBQaYMFPJiut/9LuIxj1n8ACuDKwdDxamyygs7q3HLuQ8+9FB5f5VVJu0yuM9x9MY0T9rlAWR1cWf6/exnEb//fcSaa0ZsvPGkVe5vU2dumcyhu89yn8vAPVM+3n13+bzm6+22y58l5T5XXYtQLfNIgEA9AgL6ehzlQmCFAtV4/AzoM9Dyh22FZItWyOAqrTKgz+Bg/vyZbWetEqD+0z8Vife/3wWdvewTeaB93XURT3taRA7FkWYmkL/bXvOaMstNDpFzsmJmbtYi0K/Ayv1mYHsCBGYmUJ3VyykYBfMzM8u18izy1luX9c3OMnO3XDOHKN1/f/lvdpbe7HLMd6a89kCauUAeCOXUvJmq33nllZ8ECAxSQEA/SF15E5giUA1vqILTKW95ugKBTTctKzgQWgHUNG9X01ZO85ZFyxHYfPPy5ktfupyVvDWtQPU7rvqdN+1KFhIgUKvAqrXmJjMCBFYosPrqK1zFCgRqE8ghXhKBJgX8jmtSW1kEioAz9PYEAgQIECBAgAABAi0WENC3uPNUnQABAgQIECBAgICA3j5AgAABAgQIECBAoMUCAvoWd56qEyBAgAABAgQIEBDQ2wcIECBAgAABAgQItFhAQN/izlN1AgQIECBAgAABAgJ6+wABAgQIECBAgACBFgsI6FvceapOgAABAgQIECBAQEBvHyBAgAABAgQIECDQYgEBfYs7T9UJECBAgAABAgQICOjtAwQIECBAgAABAgRaLCCgb3HnqToBAgQIECBAgAABAb19gAABAgQIECBAgECLBQT0Le48VSdAgAABAgQIECAgoLcPECBAgAABAgQIEGixgIC+xZ2n6gQIECBAgAABAgQE9PYBAgQIECBAgAABAi0WENC3uPNUnQABAgQIECBAgICA3j5AgAABAgQIECBAoMUCAvoWd56qEyBAgAABAgQIEBDQ2wcIECBAgAABAgQItFhAQN/izlN1AgQIECBAgAABAgJ6+wABAgQIECBAgACBFgsI6FvceapOgAABAgQIECBAQEBvHyBAgAABAgQIECDQYgEBfYs7T9UJECBAgAABAgQICOjtAwQIECBAgAABAgRaLCCgb3HnqToBAgQIECBAgAABAb19gAABAgQIECBAgECLBQT0Le48VSdAgAABAgQIECAgoLcPECBAgAABAgQIEGixgIC+xZ2n6gQIECBAgAABAgQE9PYBAgQIECBAgAABAi0WENC3uPNUnQABAgQIECBAgICA3j5AgAABAgQIECBAoMUCAvoWd56qEyBAgAABAgQIEBDQ2wcIECBAgAABAgQItFhAQN/izlN1AgQIECBAgAABAgJ6+wABAgQIECBAgACBFgsI6FvceapOgAABAgQIECBAQEBvHyBAgAABAgQIECDQYgEBfYs7T9UJECBAgAABAgQICOjtAwQIECBAgAABAgRaLCCgb3HnqToBAgQIECBAgAABAb19gAABAgQIECBAgECLBQT0Le48VSdAgAABAgQIECAgoLcPECBAgAABAgQIEGixgIC+xZ2n6gQIECBAgAABAgQE9PYBAgQIECBAgAABAi0WENC3uPNUnQABAgQIECBAgICA3j5AgAABAgQIECBAoMUCq7a47qpOgAABAlMFzj8/4vrrIy66KOK++yLuuivithPKGo/fK2LOnIhVJ37t77prxFZbRWy77dStPSdAgACBlgoI6FvacapNgACBRQK33BLxsY9FnHFGxO9+V1BWnvjy9elPj1hjjTjimZ8vyx58XAnmr7km4qqryrK1147YY4+I9743Yt68ssxPAgQIEGidgIC+dV2mwgQIEJgQuPbaiGOOiTj11MKRZ9/f8Y5y1n3KmfctpsO69NKI/P/Zz0acMHEGP//vvnvEP/xDxGabTbeFZQQIECAwwgITp3EkAgQI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AQIECBAgQGC0BAT0o9UfakOAAAECBAgQIECgJwEBfU9cViZAgAABAgQIECAwWgIC+tHqD7UhQIAAAQIECBAg0JOAgL4nLisTIECAAAECBAgQGC0BAf1o9YfaECBAgAABAgQIEOhJQEDfE5eVCRAgQIAAAQIECIyWgIB+tPpDbQgQIECAAAECBAj0JCCg74nLygQIECBAgAABAgRGS0BAP1r9oTYECBAgQIAAAQIEehIQ0PfEZWUCBAgQIECAAAECoyUgoB+t/lAbAgQIECBAgAABAj0JCOh74rIyAQIECBAgQIAAgdESENCPVn+oDQECBAgQIECAAIGeBAT0PXFZmQABAgQIECBAgMBoCQjoR6s/1IYAAQIECBAgQIBATwIC+p64rEyAAAECBAgQIEBgtAQE9KPVH2pDgAABAgQIECBAoCcBAX1PXFYmQIAAAQIECBAgMFoCAvrR6g+1IUCAAAECBAgQINCTgIC+Jy4rEyBAgAABAgQIEBgtAQH9aPWH2hAgQIAAAQIECBDoSUBA3xOXlQkQIECAAAECBAiMloCAfrT6Q20IECBAgAABAgQI9CSwak9rW5kAAQIERlvgmmsiLr444vbbIy66KOK22yJWWinimc+M2GmniJUnzuPstVfEFluMdjvUjgABAgRmLCCgnzGVFQkQIDCiAiefHPGFL5RA/sEHJyu5+uoRj31seX3rrRGf+lR5fswxEautFvHiF0e87nUR++wzuY1nBAgQINA6AQF967pMhQkQIPCwwPHHRxxySMS995Yz79tsU87Eb799xM47T890/vkl8L/++ohLL4245JKIAw+M+MhHIvbff/ptLCVAgACBkRYwhn6ku0flCBAgMI1ADquZOzfigAMiHnoo4j3vibjjjoj58yM++cllB/OZVQb6uU6u+6tflW1zeeaVeWbeEgECBAi0SkBA36ruUlkCBDovcOSREVttFXHXXRH77htxzz0RuWzddXunyW1y28zr7W8vj5l3LpMIECBAoDUCAvrWdJWKEiDQeYG/+quIQw+N2HjjiMsvjzjuuPpIPv7xkucmm5QyXv3q+vKWEwECBAgMVEBAP1BemRMgQKAmge22K7PW5Ew1P/lJxGab1ZTxlGwyzx/8oMyGc955EZtvPuVNTwkQIEBgVAUE9KPaM+pFgACBSiCD+W9+M2KHHSIuuKBaOrjHLGO3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\n", "text/plain": [ "" ] }, "execution_count": 5, "metadata": { "image/png": { "width": "40%" } }, "output_type": "execute_result" } ], "source": [ "Image(filename='images/2diffgrid.png',width='40%') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**Figure Overlay:**\n", " The 5-point difference stencil overlaid on the grid.\n", "
\n", " \n", "Before going any further with the discretization, we need to provide a\n", "few more details for the discretization of the right hand side function,\n", "$F(x,y,t)$, and the boundary conditions. If you’d rather skip these for\n", "now, and move on to the time discretization\n", "([Section Temporal Discretization](#Temporal-Discretization))\n", "or the outline of the solution procedure\n", "([Section Outline of Solution Procedure](#Outline-of-Solution-Procedure)), then you may do so now." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Right Hand Side\n", "\n", "The right hand side function for the ([Poisson equation](#eq:poisson)) is reproduced here\n", "in scaled form (with the “primes” dropped): \n", "$$F(x,y,t) = - \\, \\frac{\\partial \\psi}{\\partial x} - \\epsilon {\\cal J}(\\psi,\\nabla_h^{2}\\psi) + \\frac{\\tau_{max}}{\\epsilon \\beta^2 \\rho H B^3} \\nabla_h \\times \\vec{\\tau} - \\frac{\\kappa}{\\beta B} \\nabla_h^{2} \\psi + \\frac{A_h}{\\beta B^3} \\nabla_h^{4} \\psi$$\n", "\n", "Alternatively, the Coriolis and Jacobian terms can be grouped together\n", "as a single term: \n", "$$- \\, \\frac{\\partial\\psi}{\\partial x} - \\epsilon {\\cal J}(\\psi, \\nabla^2_h\\psi) = - {\\cal J}(\\psi, y + \\epsilon \\nabla^2_h\\psi)$$\n", "\n", "Except for the Jacobian term, straightforward second-order centered\n", "differences will suffice for the Coriolis force\n", "$$\\frac{\\partial\\psi}{\\partial x} \\approx \n", " \\frac{1}{2d} \\left(\\Psi_{i+1,j} - \\Psi_{i-1,j}\\right),$$ \n", " the wind\n", "stress \n", "$$\\nabla_h \\times \\vec{\\tau} \\approx\n", " \\frac{1}{2d} \\, \n", " \\left( \\tau_{2_{i+1,j}}-\\tau_{2_{i-1,j}} - \n", " \\tau_{1_{i,j+1}}+\\tau_{1_{i,j-1}} \\right),$$ and the second order\n", "viscosity term $$\\nabla_h^2 \\psi \\approx\n", " \\frac{1}{d^2} \\left( \\Psi_{i+1,j}+\\Psi_{i-1,j}+\\Psi_{i,j+1} +\n", " \\Psi_{i,j-1} - 4 \\Psi_{i,j} \\right).$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The higher order (biharmonic) viscosity term, $\\nabla_h^4 \\psi$, is\n", "slightly more complicated. The difference stencil can be derived in a\n", "straightforward way by splitting into $\\nabla_h^2 (\\nabla_h^2 \\psi)$ and\n", "applying the discrete version of the Laplacian operator twice. The\n", "resulting difference formula is \n", "
\n", "(Bi-Laplacian)\n", "$$ \\nabla_h^4 \\psi \n", " = \\nabla_h^2 ( \\nabla_h^2 \\psi ) $$ $$\n", " \\approx \\frac{1}{d^4} \\left( \\Psi_{i+2,j} + \\Psi_{i,j+2} +\n", " \\Psi_{i-2,j} + \\Psi_{i,j-2} \\right. + \\, 2 \\Psi_{i+1,j+1} + 2 \\Psi_{i+1,j-1} + 2 \\Psi_{i-1,j+1} +\n", " 2 \\Psi_{i-1,j-1}\n", " \\left. - 8 \\Psi_{i,j+1} - 8 \\Psi_{i-1,j} - 8 \\Psi_{i,j-1} - 8 \\, \\Psi_{i+1,j} + 20 \\Psi_{i,j} \\right)\n", " $$
which is pictured in the\n", "difference stencil in [Figure Bi-Laplacian Stencil](#fig:d4stencil)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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PXiFAAIIIIAAAggggEBUAgT0UTUXlUUAAQQQQAABBBBAoLMAAX1nD14hgAACCCCAAAIIIBCVAAF9VM1FZRFAAAEEEEAAAQQQ6CxAQN/Zg1cIIIAAAggggAACCEQlQEAfVXNRWQQQQAABBBD4/+3WoQ0AAADCsP+/Ru8EkkocKQYCBAhUwKGvh0SAAAECBAgQIEDgSsChv5pLWQIECBAgQIAAAQIVcOjrIREgQIAAAQIECBC4EnDor+ZSlgABAgQIECBAgEAFHPp6SAQIECBAgAABAgSuBBz6q7mUJUCAAAECBAgQIFABh74eEgECBAgQIECAAIErAYf+ai5lCRAgQIAAAQIECFTAoa+HRIAAAQIECBAgQOBKwKG/mktZAgQIECBAgAABAhVw6OshESBAgAABAgQIELgScOiv5lKWAAECBAgQIECAQAUc+npIBAgQIECAAAECBK4EHPqruZQlQIAAAQIECBAgUAGHvh4SAQIECBAgQIAAgSsBh/5qLmUJECBAgAABAgQIVMChr4dEgAABAgQIECBA4ErAob+aS1kCBAgQIECAAAECFXDo6yERIECAAAECBAgQuBJw6K/mUpYAAQIECBAgQIBABRz6ekgECBAgQIAAAQIErgQc+qu5lCVAgAABAgQIECBQAYe+HhIBAgQIECBAgACBKwGH/mouZQkQIECAAAECBAhUwKGvh0SAAAECBAgQIEDgSsChv5pLWQIECBAgQIAAAQIVcOjrIREgQIAAAQIECBC4EnDor+ZSlgABAgQIECBAgEAFHPp6SAQIECBAgAABAgSuBBz6q7mUJUCAAAECBAgQIFABh74eEgECBAgQIECAAIErAYf+ai5lCRAgQIAAAQIECFTAoa+HRIAAAQIECBAgQOBKwKG/mktZAgQIECBAgAABAhVw6OshESBAgAABAgQIELgScOiv5lKWAAECBAgQIECAQAUc+npIBAgQIECAAAECBK4EHPqruZQlQIAAAQIECBAgUAGHvh4SAQIECBAgQIAAgSsBh/5qLmUJECBAgAABAgQIVMChr4dEgAABAgQIECBA4ErAob+aS1kCBAgQIECAAAECFXDo6yERIECAAAECBAgQuBJw6K/mUpYAAQIECBAgQIBABRz6ekgECBAgQIAAAQIErgQc+qu5lCVAgAABAgQIECBQAYe+HhIBAgQIECBAgACBKwGH/mouZQkQIECAAAECBAhUwKGvh0SAAAECBAgQIEDgSsChv5pLWQIECBAgQIAAAQIVcOjrIREgQIAAAQIECBC4EnDor+ZSlgABAgQIECBAgEAFHPp6SAQIECBAgAABAgSuBBz6q7mUJUCAAAECBAgQIFABh74eEgECBAgQIECAAIErAYf+ai5lCRAgQIAAAQIECFRg23y8zKyRAVYAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 6, "metadata": { "image/png": { "width": "40%" } }, "output_type": "execute_result" } ], "source": [ "Image(filename='images/4diff.png',width='40%') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**Figure Bi-Laplacian Stencil:**\n", "13-point difference stencil for the centered difference formula for\n", "$\\nabla_h^4$ (multiply by $\\frac{1}{d^4}$ to get the actual\n", "coefficients).
\n", "\n", "The final term is the Jacobian term, ${\\cal J}(\\psi,\n", "\\nabla^2_h\\psi)$ which, as you might have already guessed, is the one\n", "that is going to give us the most headaches. To get a feeling for why\n", "this might be true, go back to ([Rescaled Quasi-Geostropic Equation](#eq:qg-rescaled))  and notice that the only\n", "nonlinearity arises from this term. Typically, it is the nonlinearity in\n", "a problem that leads to difficulties in a numerical scheme. Remember the\n", "formula given for ${\\cal J}$ in the previous section:\n", "\n", "\n", "(Jacobian: Expansion 1)\n", "$${\\cal J}(a,b) = \\frac{\\partial a}{\\partial x} \\, \\frac{\\partial b}{\\partial y} - \n", " \\frac{\\partial a}{\\partial y} \\, \\frac{\\partial b}{\\partial x}\n", " $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Problem One\n", "> Apply the standard centered difference formula\n", "(see Lab 1 if you need to refresh you memory) to get a difference\n", "approximation to the Jacobian based on ([Jacobian: Expansion 1](#eq:jacob1). You will use this later in\n", "[Problem Two](#Problem-Two)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We’ve seen before that there is usually more than one way to discretize\n", "a given expression. This case is no different, and there are many\n", "possible ways to derive a discrete version of the Jacobian. Two other\n", "approaches are to apply centered differences to the following equivalent\n", "forms of the Jacobian: \n", "
\n", "(Jacobian: Expansion 2)\n", "$$\n", " {\\cal J}(a,b) = \\frac{\\partial}{\\partial x} \\, \\left( a \\frac{\\partial b}{\\partial y} \\right) -\n", " \\frac{\\partial}{\\partial y} \\left( a \\frac{\\partial b}{\\partial x} \\right)\n", " $$
\n", "
\n", "(Jacobian: Expansion 3)\n", "$$\n", " {\\cal J}(a,b) = \\frac{\\partial}{\\partial y} \\, \\left( b \\frac{\\partial a}{\\partial x} \\right) -\n", " \\frac{\\partial}{\\partial x} \\left( b \\frac{\\partial a}{\\partial y} \\right)\n", " $$\n", "
\n", " \n", "Each formula leads to a different discrete formula, and we will see in\n", "[Section Aliasing Error and Nonlinear Instability](#Aliasing-Error-and-Nonlinear-Instability)\n", " what effect the non-linear term has on\n", "the discrete approximations and how the use of the different formulas\n", "affect the behaviour of the numerical scheme. Before moving on, try to\n", "do the following two quizzes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Quiz on Jacobian Expansion \\#2\n", "\n", "Using second order centered differences, what is the discretization of the second form of the Jacobian given by\n", "\n", "$$\n", " {\\cal J}(a,b) = \\frac{\\partial}{\\partial x} \\, \\left( a \\frac{\\partial b}{\\partial y} \\right) -\n", " \\frac{\\partial}{\\partial y} \\left( a \\frac{\\partial b}{\\partial x} \\right)\n", " $$\n", "\n", "- A: $$\\frac 1 {d^2} \\left[ \\left( a_{i+1,j} - a_{i-1,j} \\right) \\left( b_{i,j+1} - b_{i,j-1} \\right) - \\left( a_{i,j+1} - a_{i,j-1} \\right) \\left( b_{i+1,j} - b_{i-1,j} \\right) \\right]$$\n", "\n", "- B: $$\\frac 1 {4d^2} \\left[ a_{i+1,j} \\left( b_{i+1,j+1} - b_{i+1,j-1} \\right) - a_{i-1,j} \\left( b_{i-1,j+1} - b_{i-1,j-1} \\right) - a_{i,j+1} \\left( b_{i+1,j+1} - b_{i-1,j+1} \\right) + a_{i,j-1} \\left( b_{i+1,j-1} - b_{i-1,j-1} \\right) \\right]$$\n", "\n", "- C: $$\\frac 1 {d^2} \\left[ \\left( a_{i+1/2,j} - a_{i-1/2,j} \\right) \\left( b_{i,j+1/2} - b_{i,j-1/2} \\right) - \\left( a_{i,j+1/2} - a_{i,j-1/2} \\right) \\left( b_{i+1/2,j} - b_{i-1/2,j} \\right) \\right]$$\n", "\n", "- D: $$\\frac 1 {4d^2} \\left[ b_{i+1,j} \\left( a_{i+1,j+1} - a_{i+1,j-1} \\right) - b_{i-1,j} \\left( a_{i-1,j+1} - a_{i-1,j-1} \\right) - b_{i,j+1} \\left( a_{i+1,j+1} - a_{i-1,j+1} \\right) + b_{i,j-1} \\left( a_{i+1,j-1} - a_{i-1,j-1} \\right) \\right]$$\n", "\n", "- E: $$\\frac 1 {4d^2} \\left[ a_{i+1,j+1} \\left( b_{i+1,j+1} - b_{i+1,j-1} \\right) - a_{i-1,j-1} \\left( b_{i-1,j+1} - b_{i-1,j-1} \\right) - a_{i+1,j+1} \\left( b_{i+1,j+1} - b_{i-1,j+1} \\right) + a_{i-1,j-1} \\left( b_{i+1,j-1} - b_{i-1,j-1} \\right) \\right]$$\n", "\n", "- F: $$\\frac 1 {4d^2} \\left[ \\left( a_{i+1,j} - a_{i-1,j} \\right) \\left( b_{i,j+1} - b_{i,j-1} \\right) - \\left( a_{i,j+1} - a_{i,j-1} \\right) \\left( b_{i+1,j} - b_{i-1,j} \\right) \\right]$$\n", "\n", "- G: $$\\frac 1 {4d^2} \\left[ b_{i,j+1} \\left( a_{i+1,j+1} - a_{i-1,j+1} \\right) - b_{i,j-1} \\left( a_{i+1,j-1} - a_{i-1,j-1} \\right) - b_{i+1,j} \\left( a_{i+1,j+1} - a_{i+1,j-1} \\right) + b_{i-1,j} \\left( a_{i-1,j+1} - a_{i-1,j-1} \\right) \\right]$$\n", " \n", "In the following, replace 'x' by 'A', 'B', 'C', 'D', 'E', 'F', 'G', or 'Hint'" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Acceptable answers are 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'Hint'\n" ] } ], "source": [ "print (quiz.jacobian_2(answer = 'x'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Quiz on Jacobian Expansion #3 \n", "\n", "Using second order centered differences, what is the discretization of the third form of the Jacobian given by\n", "\n", "$$\n", " {\\cal J}(a,b) = \\frac{\\partial}{\\partial y} \\, \\left( b \\frac{\\partial a}{\\partial x} \\right) -\n", " \\frac{\\partial}{\\partial x} \\left( b \\frac{\\partial a}{\\partial y} \\right)\n", " $$\n", "\n", "- A: - A: $$\\frac 1 {d^2} \\left[ \\left( a_{i+1,j} - a_{i-1,j} \\right) \\left( b_{i,j+1} - b_{i,j-1} \\right) - \\left( a_{i,j+1} - a_{i,j-1} \\right) \\left( b_{i+1,j} - b_{i-1,j} \\right) \\right]$$\n", "\n", "- B: $$\\frac 1 {4d^2} \\left[ a_{i+1,j} \\left( b_{i+1,j+1} - b_{i+1,j-1} \\right) - a_{i-1,j} \\left( b_{i-1,j+1} - b_{i-1,j-1} \\right) - a_{i,j+1} \\left( b_{i+1,j+1} - b_{i-1,j+1} \\right) + a_{i,j-1} \\left( b_{i+1,j-1} - b_{i-1,j-1} \\right) \\right]$$\n", "\n", "- C: $$\\frac 1 {d^2} \\left[ \\left( a_{i+1/2,j} - a_{i-1/2,j} \\right) \\left( b_{i,j+1/2} - b_{i,j-1/2} \\right) - \\left( a_{i,j+1/2} - a_{i,j-1/2} \\right) \\left( b_{i+1/2,j} - b_{i-1/2,j} \\right) \\right]$$\n", "\n", "- D: $$\\frac 1 {4d^2} \\left[ b_{i+1,j} \\left( a_{i+1,j+1} - a_{i+1,j-1} \\right) - b_{i-1,j} \\left( a_{i-1,j+1} - a_{i-1,j-1} \\right) - b_{i,j+1} \\left( a_{i+1,j+1} - a_{i-1,j+1} \\right) + b_{i,j-1} \\left( a_{i+1,j-1} - a_{i-1,j-1} \\right) \\right]$$\n", "\n", "- E: $$\\frac 1 {4d^2} \\left[ a_{i+1,j+1} \\left( b_{i+1,j+1} - b_{i+1,j-1} \\right) - a_{i-1,j-1} \\left( b_{i-1,j+1} - b_{i-1,j-1} \\right) - a_{i+1,j+1} \\left( b_{i+1,j+1} - b_{i-1,j+1} \\right) + a_{i-1,j-1} \\left( b_{i+1,j-1} - b_{i-1,j-1} \\right) \\right]$$\n", "\n", "- F: $$\\frac 1 {4d^2} \\left[ \\left( a_{i+1,j} - a_{i-1,j} \\right) \\left( b_{i,j+1} - b_{i,j-1} \\right) - \\left( a_{i,j+1} - a_{i,j-1} \\right) \\left( b_{i+1,j} - b_{i-1,j} \\right) \\right]$$\n", "\n", "- G: $$\\frac 1 {4d^2} \\left[ b_{i,j+1} \\left( a_{i+1,j+1} - a_{i-1,j+1} \\right) - b_{i,j-1} \\left( a_{i+1,j-1} - a_{i-1,j-1} \\right) - b_{i+1,j} \\left( a_{i+1,j+1} - a_{i+1,j-1} \\right) + b_{i-1,j} \\left( a_{i-1,j+1} - a_{i-1,j-1} \\right) \\right]$$\n", " \n", "In the following, replace 'x' by 'A', 'B', 'C', 'D', 'E', 'F', 'G', or 'Hint'" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Acceptable answers are 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'Hint'\n" ] } ], "source": [ "print (quiz.jacobian_3(answer = 'x'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Boundary Conditions\n", "\n", "One question that arises immediately when applying the difference\n", "stencils in [Figure Stencil](#fig:stencil) and [Figure Bi-Laplacian Stencil](#fig:d4stencil)\n", "is\n", "\n", "> *What do we do at the boundary, where at least one of the nodes\n", "> of the difference stencil lies outside of the domain?*\n", "\n", "The answer to this question lies with the *boundary\n", "conditions* for $\\chi$ and $\\psi$. We already know the boundary\n", "conditions for $\\psi$ from [Section The Quasi-Geostrophic Model](#The-Quasi-Geostrophic-Model):\n", "\n", "Free slip:\n", "\n", "> The free slip boundary condition, $\\psi=0$, is applied when $A_h=0$,\n", " which we can differentiate with respect to time to get the identical\n", " condition $\\chi=0$. In terms of the discrete unknowns, this\n", " translates to the requirement that\n", "> $$\\Psi_{0,j} = \\Psi_{N,j} = \\Psi_{i,0} = \\Psi_{i,N} = 0 \\;\\;\n", " \\mbox{ for} \\; i,j = 0,1,\\ldots,N,$$ \n", " \n", "> and similarly for $\\chi$. All\n", " boundary values for $\\chi$ and $\\Psi$ are known, and so we need only\n", " apply the difference stencils at *interior points* (see\n", " [Figure Ghost Points](#fig:ghost)). When $A_h=0$, the high-order viscosity\n", " term is not present, and so the only stencil appearing in the\n", " discretization is the 5-point formula (the significance of this will\n", " become clear when we look at no-slip boundary conditions)." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 9, "metadata": { "image/png": { "width": "50%" } }, "output_type": "execute_result" } ], "source": [ "Image(filename='images/ghost3.png',width='50%') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**Figure Ghost Points:**\n", "The points on the computational grid, which are classified into\n", " interior, real boundary, and ghost boundary points. The 5- and\n", " 13-point difference stencils, when overlaid on the grid, demonstrate\n", " that only the real boundary values are needed for the free-slip\n", " boundary values (when $A_h=0$), while ghost points must be\n", " introduced for the no-slip conditions (when $A_h\\neq 0$, and the\n", " higher order viscosity term is present).\n", "
\n", "\n", "\n", "No-slip:\n", "\n", "> The no-slip conditions appear when $A_h\\neq 0$, and include the free\n", " slip conditions $\\psi=\\chi=0$ (which we already discussed above),\n", " and the normal derivative condition $\\nabla\\psi\\cdot\\hat{n}=0$,\n", " which must be satisfied at all boundary points. It is clear that if\n", " we apply the standard, second-order centered difference\n", " approximation to the first derivative, then the difference stencil\n", " extends *beyond the boundary of the domain and contains at\n", " least one non-existent point! How can we get around this\n", " problem?*\n", "\n", "> The most straightforward approach (and the one we will use in this\n", " Lab) is to introduce a set of *fictitious points* or\n", " *ghost points*,\n", " \n", "> $$\\Psi_{-1,j}, \\;\\; \\Psi_{N+1,j}, \\;\\; \\Psi_{i,-1}, \\;\\; \\Psi_{i,N+1}$$\n", "\n", "> for $i,j=0,1,2,\\ldots,N+1$, which extend one grid space outside of\n", " the domain, as shown in [Figure Ghost Points](#fig:ghost). We can then\n", " discretize the Neumann condition in a straightforward manner. For\n", " example, consider the point $(0,1)$, pictured in\n", " [Figure No Slip Boundary Condition](#fig:noslip), at which the discrete version of\n", " $\\nabla\\psi\\cdot\\hat{n}=0$ is\n", "\n", "> $$\\frac{1}{2d} ( \\Psi_{1,1} - \\Psi_{-1,1}, \\Psi_{0,2} -\n", " \\Psi_{0,0} ) \\cdot (-1,0) = 0,$$ \n", " \n", "> (where $(-1,0)$ is the unit\n", " outward normal vector), which simplifies to\n", " \n", "> $$\\Psi_{-1,1} = \\Psi_{1,1}.$$\n", "\n", "> The same can be done for all the\n", " remaining ghost points: the value of $\\Psi$ at at point outside the\n", " boundary is given quite simply as the value at the corresponding\n", " interior point reflected across the boundary.\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 10, "metadata": { "image/png": { "width": "40%" } }, "output_type": "execute_result" } ], "source": [ "Image(filename='images/noslip.png',width='40%') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**Figure No Slip Boundary Condition:**\n", "The discrete Neumann boundary conditions are discretized using\n", " ghost points. Here, at point $(0,1)$, the unit outward normal vector\n", " is $\\hat{n}=(-1,0)$, and the discrete points involved are the four\n", " points circled in red. The no-slip condition simply states that\n", " $\\Psi_{-1,1}$ is equal to the interior value $\\Psi_{1,1}$.\n", "
\n", "\n", "Now, remember that when $A_h\\neq 0$, the $\\nabla_h^4\\psi$ term\n", " appears in the equations, which is discretized as a 13-point\n", " stencil . Looking at [Figure Ghost Points](#fig:ghost), it is easy to see that\n", " when the 13-point stencil is applied at points adjacent to the\n", " boundary (such as $(N-1,N-1)$ in the Figure) it involves not only\n", " real boundary points, but also ghost boundary points (compare this\n", " to the 5-point stencil). But, as we just discovered above, the\n", " presence of the ghost points in the stencil poses no difficulty,\n", " since these values are known in terms of interior values of $\\Psi$\n", " using the boundary conditions.\n", " \n", "Just as there are many Runge-Kutta schemes, there are many finite difference stencils for the different derivatives.\n", "For example, one could use a 5-point, $\\times$-shaped stencil for $\\nabla^2\\psi$. The flexibility of\n", "having several second-order stencils is what makes it possible to determine an energy- and enstrophy-conserving scheme for the Jacobian which we do later.\n", "\n", "A good discussion of boundary conditions is given by [McCalpin](#Ref:McCalpin) in his\n", "QGBOX code documentation, on page 44." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Matrix Form of the Discrete Equations\n", "\n", "In order to write the discrete equations  in matrix form, we must first\n", "write the unknown values $\\chi_{i,j}$ in vector form. The most obvious\n", "way to do this is to traverse the grid (see\n", "[Figure Spatial Grid](#Spatial-Grid)), one row at a time, from left to right,\n", "leaving out the known, zero boundary values, to obtain the ordering:\n", "$$\n", " \\vec{\\chi} =\n", " \\left(\\chi_{1,1},\\chi_{2,1},\\dots,\\chi_{N-1,1},\n", " \\chi_{1,2},\\chi_{2,2},\\dots,\\chi_{N-1,2}, \\dots, \\right. \n", " \\left.\\chi_{N-1,N-2},\n", " \\chi_{1,N-1},\\chi_{2,N-1},\\dots,\\chi_{N-1,N-1}\\right)^T$$\n", " \n", "and similarly for $\\vec{F}$. The resulting matrix (with this ordering of\n", "unknowns) results in a matrix of the form given in\n", "[Figure Matrix](#fig:matrix)." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 11, "metadata": { "image/png": { "width": "40%" } }, "output_type": "execute_result" } ], "source": [ "Image(filename='images/matrix.png',width='40%') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**Figure Matrix:** The matrix form for the discrete Laplacian. The 5 diagonals (displayed\n", "in blue and red) represent the non-zero values in the matrix $-$ all\n", "other values are zero.\n", "
\n", "\n", "The diagonals with the 1’s (pictured in red) contain some zero entries\n", "due to the boundary condition $u=0$. Notice how similar this matrix\n", "appears to the *tridiagonal matrix* in the Problems from\n", "Lab 3, which arose in the discretization of the second derivative in a\n", "boundary value problem. The only difference here is that the Laplacian\n", "has an additional second derivative with respect to $y$, which is what\n", "adds the additional diagonal entries in the matrix.\n", "\n", "Before you think about running off and using Gaussian elimination (which\n", "was reviewed in Lab 3), think about the size of the matrix you would\n", "have to solve. If $N$ is the number of grid points, then the matrix is\n", "size $N^2$-by-$N^2$. Consequently, Gaussian elimination will require on\n", "the order of $N^6$ operations to solve the matrix only once. Even for\n", "moderate values of $N$, this cost can be prohibitively expensive. For\n", "example, taking $N=101$ results in a $10000\\times 10000$ system of\n", "linear equations, for which Gaussian elimination will require on the\n", "order of $10000^3=10^{12}$ operations! As mentioned in Lab 3, direct\n", "methods are not appropriate for large sparse systems such as this one. A\n", "more appropriate choice is an iterative or *relaxation\n", "scheme*, which is the subject of the next section.." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Solution of the Poisson Equation by Relaxation\n", "\n", "One thing to notice about the matrix in [Figure Matrix](#fig:matrix) is that\n", "it contains many zeros. Direct methods, such as Gaussian elimination\n", "(GE), are so inefficient for this problem because they operate on all of\n", "these zero entries (in fact, there are other direct methods that exploit\n", "the sparse nature of the matrix to reduce the operation count, but none\n", "are as efficient as the methods we will talk about here).\n", "\n", "However, there is another class of solution methods, called\n", "*iterative methods* (refer to Lab 3) which are natural\n", "candidates for solving such sparse problems. They can be motivated by\n", "the fact that since the discrete equations are only approximations of\n", "the PDE to begin with, *why should we bother computing an exact\n", "solution to an approximate problem?* Iterative methods are based\n", "on the notion that one sets up an iterative procedure to compute\n", "successive approximations to the solution $-$ approximations that get\n", "closer and closer to the exact solution as the iteration proceeds, but\n", "never actually reach the exact solution. As long as the iteration\n", "converges and the approximate solution gets to within some tolerance of\n", "the exact solution, then we are happy! The cost of a single iterative\n", "step is designed to depend on only the number of non-zero elements in\n", "the matrix, and so is considerably cheaper than a GE step. Hence, as\n", "long as the iteration converges in a “reasonable number” of steps, then\n", "the iterative scheme will outperform GE." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Iterative methods are also know as *relaxation methods*, of\n", "which the *Jacobi method* is the simplest. Here are the\n", "basic steps in the Jacobi iteration (where we’ve dropped the time\n", "superscript $p$ to simplify the notation):\n", "\n", "1. Take an initial guess, $\\chi_{i,j}^{(0)}$. Let $n=0$.\n", "\n", "2. For each grid point $(i,j)$, compute the *residual\n", " vector* $$ R_{i,j}^{(n)} = F_{i,j} - \\nabla^2\\chi^{(n)}_{i,j} $$ \n", " $$ = F_{i,j} - \\frac{1}{d^2} ( \\chi_{i+1,j}^{(n)} + \\chi_{i,j+1}^{(n)} + \\chi_{i-1,j}^{(n)} +\\chi_{i,j-1}^{(n)} - 4 \\chi_{i,j}^{(n)} )$$ (which is non-zero unless $\\chi_{i,j}$ is the\n", " exact solution).\n", "\n", " You should not confuse the relaxation iteration index (superscript\n", " $\\,^{(n)}$) with the time index (superscript $\\,^p$). Since the\n", " relaxation iteration is being performed at a single time step, we’ve\n", " dropped the time superscript for now to simplify notation. Just\n", " remember that all of the discrete values in the relaxation are\n", " evaluated at the current time level $p$.\n", "\n", "3. “Adjust” $\\chi_{i,j}^{(n)}$, (leaving the other neighbours\n", " unchanged) so that $R_{i,j}^{(n)}=0$. That is, replace\n", " $\\chi_{i,j}^{(n)}$ by whatever you need to get a zero residual. This\n", " replacement turns out to be:\n", " $$\\chi_{i,j}^{(n+1)} = \\chi_{i,j}^{(n)} - \\frac{d^2}{4} R_{i,j}^{(n)},$$ which defines the iteration.\n", "\n", "4. Set $n\\leftarrow n+1$, and repeat steps 2 & 3 until the residual is\n", " less than some tolerance value. In order to measure the size of the\n", " residual, we use a *relative maximum norm* measure,\n", " which says\n", " $$d^2 \\frac{\\|R_{i,j}^{(n)}\\|_\\infty}{\\|\\chi_{i,j}^{(n)}\\|_\\infty} < TOL$$\n", " where $$\\|R_{i,j}^{(n)}\\|_\\infty = \\max_{i,j} |R_{i,j}^{(n)}|$$ is\n", " the *max-norm* of $R_{i,j}$, or the maximum value of\n", " the residual on the grid (there are other error tolerances we could\n", " use but this is one of the simplest and most effective). Using this\n", " measure for the error ensures that the residual remains small\n", " *relative* to the solution, $\\chi_{i,j}$. A typical\n", " value of the tolerance that might be used is $TOL=10^{-4}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are a few **important things** to note about the\n", "basic relaxation procedure outlined above\n", "\n", "- This Jacobi method is the simplest form of relaxation. It requires\n", " that you have two storage vectors, one for $\\chi_{i,j}^{(n)}$ and\n", " one for $\\chi_{i,j}^{(n+1)}$.\n", "\n", "- The relaxation can be modified by using a single vector to store the\n", " $\\chi$ values. In this case, as you compute the residual vector and\n", " update $\\chi$ at each point $(i,j)$, the residual involves some\n", " $\\chi$ values from the previous iteration and some that have already\n", " been updated. For example, if we traverse the grid by rows (that is,\n", " loop over $j$ first and then $i$), then the residual is now given by\n", " $$R_{i,j}^{(n)} = F_{i,j} - \\frac{1}{d^2} ( \\chi_{i+1,j}^{(n)} +\n", " \\chi_{i,j+1}^{(n)} + \n", " \\underbrace{\\chi_{i-1,j}^{(n+1)} +\n", " \\chi_{i,j-1}^{(n+1)}}_{\\mbox{{updated already}}} - 4\n", " \\chi_{i,j}^{(n)} ),$$ (where the $(i,j-1)$ and $(i-1,j)$ points\n", " have already been updated), and then the solution is updated\n", " $$\\chi_{i,j}^{(n+1)} = \\chi_{i,j}^{(n)} - \\frac{d^2}{4}\n", " R_{i,j}^{(n)}.$$ Not only does this relaxation scheme save on\n", " storage (since only one solution vector is now required), but it\n", " also converges more rapidly (typically, it takes half the number of\n", " iterations as Jacobi), which speeds up convergence somewhat, but\n", " still leaves the cost at the same order as Jacobi, as we can see\n", " from [Cost of Schemes Table](#tab:cost). This is known as the\n", " *Gauss-Seidel* relaxation scheme.\n", " \n", "- In practice, we actually use a modification of Gauss-Seidel\n", " $$\\chi_{i,j}^{(n+1)} = \\chi_{i,j}^{(n)} - \\frac{\\mu d^2}{4}\n", " R_{i,j}^{(n)}$$ where $1<\\mu<2$ is the *relaxation\n", " parameter*. The resulting scheme is called *successive\n", " over-relaxation*, or *SOR*, and it improves\n", " convergence considerably (see [Cost of Schemes Table](#tab:cost).\n", "\n", " What happens when $0<\\mu<1$? Or $\\mu>2$? The first case is called\n", " *under-relaxation*, and is useful for smoothing the\n", " solution in multigrid methods. The second leads to an iteration that\n", " never converges.\n", "\n", "- *Does the iteration converge?* For the Poisson problem,\n", " yes, but not in general." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- *How fast does the iteration converge?* and *How\n", " much does each iteration cost?* The answer to both of these\n", " questions gives us an idea of the cost of the relaxation procedure …\n", " \n", " Assume we have a grid of size $N\\times N$. If we used Gaussian\n", " elimination to solve this matrix system (with $N^2$ unknowns), we\n", " would need to perform on the order of $N^6$ operations (you saw this\n", " in Lab \\#3). One can read in any numerical linear algebra textbook\n", " ([Strang 1988,](#Ref:Strang) for example), that the number of iterations\n", " required for Gauss-Seidel and Jacobi is on the order of $N^3$, while\n", " for SOR it reduces to $N^2$. There is another class of iterative\n", " methods, called *multigrid methods*, which converge in\n", " a constant number of iterations (the optimal result)\n", " \n", " If you look at the arithmetic operations performed in the the\n", " relaxation schemes described above, it is clear that a single\n", " iteration involves on the order of $N^2$ operations (a constant\n", " number of multiplications for each point).\n", "\n", " Putting this information together, the cost of each iterative scheme\n", " can be compared as in [Cost of Schemes Table](#tab:cost).\n", " \n", " \n", " \n", "| Method | Order of Cost |\n", "| :----------------------: | :---------------: |\n", "| Gaussian Elimination | $N^6$ |\n", "| Jacobi | $N^5$ |\n", "| Gauss-Seidel | $N^5$ |\n", "| SOR | $N^4$ |\n", "| Multigrid | $N^2$ |\n", "\n", "
\n", " **Cost of Schemes Table:** Cost of iterative schemes compared to direct methods.
\n", " \n", "- Multigrid methods are obviously the best, but are also\n", " *extremely complicated* … we will stick to the much\n", " more manageable Jacobi, Gauss-Seidel and SOR schemes.\n", "\n", "- There are other methods (called conjugate gradient and capacitance\n", " matrix methods) which improve on the relaxation methods we’ve seen.\n", " These won’t be described here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Temporal Discretization ###\n", "\n", "Let us now turn to the time evolution equation for the stream function.\n", "Supposing that the initial time is $t=0$, then we can approximate the\n", "solution at the discrete time points $t_p = p\\Delta t$, and write the\n", "discrete solution as $$\\Psi_{i,j}^p \\approx \\psi(x_i,y_j,t_p).$$ Notice\n", "that the spatial indices appear as subscripts and the time index as a\n", "superscript on the discrete approximation $\\chi$.\n", "\n", "We can choose any discretization for time that we like, but for the QG\n", "equation, it is customary (see [Mesinger and Arakawa](#Ref:MesingerArakawa), for\n", "example) to use a centered time difference to approximate the derivative\n", "in :\n", "$$\\frac{\\Psi_{i,j}^{p+1} - \\Psi_{i,j}^{p-1}}{2\\Delta t} = \\chi_{i,j}^p$$\n", "or, after rearranging,\n", "\n", "\n", "(Leapfrog Eqn)\n", "$$\n", "\\Psi_{i,j}^{p+1} = \\Psi_{i,j}^{p-1} + 2\\Delta t \\chi_{i,j}^p\n", "$$\n", "This time differencing method is called the\n", "*leap frog scheme*, and was introduced in Lab 7. A\n", "pictorial representation of this scheme is given in\n", "[Figure Leap-Frog Scheme](#fig:leap-frog)." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 12, "metadata": { "image/png": { "width": "40%" } }, "output_type": "execute_result" } ], "source": [ "Image(filename='images/leapfrog.png',width='40%') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**Figure Leap-Frog Scheme:** A pictorial representation of the “leap-frog” character of the\n", "time-stepping scheme. The values of $\\chi$ at even time steps are linked\n", "together with the odd $\\Psi$ values; likewise, values of $\\chi$ at odd\n", "time steps are linked to the even $\\Psi$ values.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are two additional considerations related to the time\n", "discretization:\n", "\n", "- The viscous terms ($\\nabla_h^2\\psi$ and $\\nabla_h^4\\psi$) are\n", " evaluated at the $p-1$ time points, while all other terms in the\n", " right hand side are evaluated at $p$ points. The reasoning for this\n", " is described in [McCalpin’s](#Ref:McCalpin) QGBOX\n", " documentation [p. 8]:\n", "\n", " > Note that the frictional terms are all calculated at the old\n", " $(n-1)$ time level, and are therefore first-order accurate in\n", " time. This ’time lagging’ is necessary for linear computational\n", " stability.\n", "\n", "- This second item *will not be implemented in this lab or the\n", " problems*, but should still be kept in mind …\n", "\n", " The leap-frog time-stepping scheme has a disadvantage in that it\n", " introduces a “computational mode” …  [McCalpin](#Ref:McCalpin) [p. 23]\n", " describes this as follows:\n", "\n", " > *Leap-frog models are plagued by a phenomenon called the\n", " “computational mode”, in which the odd and even time levels become\n", " independent. Although a variety of sophisticated techniques have\n", " been developed for dealing with this problem, McCalpin’s model\n", " takes a very simplistic approach. Every *narg* time\n", " steps, adjacent time levels are simply averaged together (where\n", " *narg*$\\approx 100$ and odd)*\n", "\n", " Why don’t we just abandon the leap-frog scheme? Well, [Mesinger and Arakawa](#Ref:MesingerArakawa) [p. 18] make the following observations\n", " regarding the leap-frog scheme:\n", "\n", " - its advantages: simple and second order accurate; neutral within\n", " the stability range.\n", "\n", " - its disadvantages: for non-linear equations, there is a tendency\n", " for slow amplification of the computational mode.\n", "\n", " - the usual method for suppressing the spurious mode is to insert\n", " a step from a two-level scheme occasionally (or, as McCalpin\n", " suggests, to occasionally average the solutions at successive\n", " time steps).\n", "\n", " - In Chapter 4, they mention that it is possible to construct\n", " grids and/or schemes with the same properties as leap-frog and\n", " yet the computational mode is absent.\n", "\n", " The important thing to get from this is that when integrating for\n", " long times, the computational mode will grow to the point where it\n", " will pollute the solution, unless one of the above methods is\n", " implemented. For simplicity, we will not be worrying about this in\n", " Lab \\#8." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Outline of Solution Procedure ###\n", "\n", "Now that we have discretized in both space and time, it is possible to\n", "outline the basic solution procedure.\n", "\n", "1. Assume that at $t=t_p$, we know $\\Psi^0, \\Psi^1, \\dots,\n", " \\Psi^{p-1}$\n", "\n", "2. Calculate $F_{i,j}^p$ for each grid point $(i,j)$ (see\n", " [Section Right Hand Side](#Right-Hand-Side)). Keep in mind that the viscosity terms\n", " ($\\nabla_h^2\\psi$ and $\\nabla_h^4\\psi$) are evaluated at time level\n", " $p-1$, while all other terms are evaluated at time level $p$ (this\n", " was discussed in [Section Temporal Discretization](#Temporal-Discretization)).\n", "\n", "3. Solve the ([Discrete $\\chi$ equation](#eq:discrete-chi)) for $\\chi_{i,j}^p$ (the actual\n", " solution method will be described in [Section Solution of the Poisson Equation by Relaxation](#Solution-of-the-Poisson-Equation-by-Relaxation).\n", "\n", "4. Given $\\chi_{i,j}^p$, we can find $\\Psi_{i,j}^{p+1}$ by using the\n", " ([Leap-frog time stepping scheme](#leapfrog))\n", "\n", "5. Let $p \\leftarrow p+1$ and return to step 2." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that step 1 requires a knowledge of two starting values, $\\Psi^0$\n", "and $\\Psi^1$, at the initial time. An important addition to the\n", "procedure below is some way to get two starting values for $\\Psi$. Here\n", "are several alternatives:\n", "\n", "- Set $\\Psi^0$ and $\\Psi^1$ both to zero.\n", "\n", "- Set $\\Psi^0=0$, and then use a forward Euler step to find $\\Psi^1$.\n", "\n", "- Use a predictor-corrector step, like that employed in Lab 7.\n", "\n", "### Problem Two\n", "> Now that you’ve seen how the basic\n", "numerical scheme works, it’s time to jump into the numerical scheme. The\n", "code has already been written for the discretization described above,\n", "with free-slip boundary conditions and the SOR relaxation scheme. The\n", "code is in **qg.py** and the various functions are:\n", "\n", ">**main**\n", ": the main routine, contains the time-stepping and the output.\n", "\n", ">**param()**\n", ": sets the physical parameters of the system.\n", "\n", ">**numer\\_init()**\n", ": sets the numerical parameters.\n", "\n", ">**vis(psi, nx, ny)**\n", ": calculates the second order ($\\nabla^2$) viscosity term (not\n", " leap-frogged).\n", "\n", ">**wind(psi, nx, ny)**\n", ": calculates the the wind term.\n", "\n", ">**mybeta(psi, nx, ny)**\n", ": calculates the beta term\n", "\n", ">**jac(psi, vis, nx, ny)**\n", ": calculate the Jacobian term. (Arakawa Jacobian given here).\n", "\n", ">**chi(psi, vis_curr, vis_prev, chi_prev, nx, ny, dx, r_coeff, tol, max_count, epsilon, wind_par, vis_par)**\n", ": calculates $\\chi$ using a call to relax\n", "\n", ">**relax(rhs, chi_prev, dx, nx, ny, r_coeff, tol, max_count)**\n", ": does the relaxation.\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> Your task in this problem is to program the “straightforward”\n", "discretization of the Jacobian term, using [(Jacobian: Expansion 1)](#eq:jacob1), that you derived in\n", "[Problem One](#Problem-One). The only change this involves is\n", "inserting the code into the function **jac**. Once\n", "finished, run the code. The parameter functions **param**\n", "**init\\_numer** provide some sample parameter values for you to\n", "execute the code with. Try these input values and observe what happens\n", "in the solution. Choose one of the physical parameters to vary. Does\n", "changing the parameter have any effect on the solution? in what way?\n", "\n", "> Hand in the code for the Jacobian, and a couple of plots demonstrating\n", "the solution as a function of parameter variation. Describe your results\n", "and make sure to provide parameter values to accompany your explanations\n", "and plots.\n", "\n", ">If the solution is unstable, check your CFL condition. The relevant\n", "waves are Rossby waves with wave speed: $$c=\\beta k^{-2}$$ where $k$ is\n", "the wave-number. The maximum wave speed is for the longest wave,\n", "$k=\\pi/b$ where $b$ is the size fo your domain.\n", "\n", "> If the code is still unstable, even though the CFL is satisfied, see\n", "[Section Aliasing Error and Nonlinear Instability](#Aliasing-Error-and-Nonlinear-Instability). The solution is nonlinear unstable.\n", "Switch to the Arakawa Jacobian for stability." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Problem Three\n", ">The code provided for [Problem Two](#Problem-Two) implements the SOR relaxation\n", "scheme. Your job in this problem is to modify the relaxation code to\n", "perform a Jacobi iteration.\n", "\n", ">Hand in a comparison of the two methods, in tabular form. Use two\n", "different relaxation parameters for the SOR scheme. (Include a list of\n", "the physical and numerical parameter you are using). Also submit your\n", "code for the Jacobi relaxation scheme." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Problem Four\n", "> Modify the code to implement the no-slip boundary\n", "conditions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Problem Five\n", ">The code you’ve been working with so far uses the\n", "simplest possible type of starting values for the unknown stream\n", "function: both are set to zero. If you’re keen to play around with the\n", "code, you might want to try modifying the SOR code for the two other\n", "methods of computing starting values: using a forward Euler step, or a\n", "predictor-corrector step (see [Section Outline of Solution Procedure](#Outline-of-Solution-Procedure))." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aliasing Error and Nonlinear Instability\n", "\n", "In [Problem Two](#Problem-Two), you encountered an example\n", "of the instability that can occur when computing numerical solutions to\n", "some *nonlinear problems*, of which the QG equations is\n", "just one example. This effect has in fact been known for quite some\n", "time. Early numerical experiments by [N. Phillips in 1956](#Ref:Phillips)\n", "exploded after approximately 30 days of integration due to nonlinear\n", "instability. He used the straightforward centered difference formula for\n", "as you did.\n", "\n", "It is important to realize that this instability does not occur in the\n", "physical system modeled by the equations of motion. Rather is an\n", "artifact of the discretization process, something known as\n", "*aliasing error*. Aliasing error can be best understood by\n", "thinking in terms of decomposing the solution into modes. In brief,\n", "aliasing error arises in non-linear problems when a numerical scheme\n", "amplifies the high-wavenumber modes in the solution, which corresponds\n", "physically to a spurious addition of energy into the system. Regardless\n", "of how much the grid spacing is reduced, the resulting computation will\n", "be corrupted, since a significant amount of energy is present in the\n", "smallest resolvable scales of motion. This doesn’t happen for every\n", "non-linear problem or every difference scheme, but is an issue that one\n", "who is using numerical codes must be aware of." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example One ###\n", "\n", ">Before moving on to how we can handle the\n", "instability in our discretization of the QG equations, you should try\n", "out the following demo on aliasing error. It is taken from an example in\n", "[Mesinger and Arakawa](#Ref:MesingerArakawa) [p. 35ff.], based on the simplest\n", "of non-linear PDE’s, the advection equation:\n", "$$\\frac{du}{dt}+u\\frac{du}{dx} = 0.$$ If we decompose the solution into\n", "Fourier mode, and consider a single mode with wavenumber $k$,\n", "$$u(x) = \\sin{kx}$$ then the solution will contain additional modes, due\n", "to the non-linear term, and given by\n", "$$u \\frac{du}{dx} = k \\sin{kx} \\cos{kx} =\\frac{1}{2}k \\sin{2kx}.$$\n", "\n", ">With this as an introduction, keep the following in mind while going\n", "through the demo:\n", "\n", ">- on a computational grid with spacing $\\Delta x$, the discrete\n", " versions of the modes can only be resolved up to a maximum\n", " wavenumber, $k_{max}=\\frac{\\pi}{\\Delta x}$.\n", "\n", ">- even if we start with modes that are resolvable on the grid, the\n", " non-linear term introduces modes with a higher wavenumber, which may\n", " it not be possible to resolve. These modes, when evaluated at\n", " discrete points, appear as modes with lower wavenumber; that is,\n", " they are *aliased* to the lower modes (this becomes\n", " evident in the demo as the wavenumber is increased …).\n", "\n", ">- not only does aliasing occur, but for this problem, these additional\n", " modes are *amplified* by a factor of $\\frac{1}{2}k$.\n", " This is the source of the *aliasing error* – such\n", " amplified modes will grow in time, no matter how small the time step\n", " taken, and will pollute the computations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The previous example is obviously a much simpler non-linearity than that\n", "of the QG equations, but the net effect is the same. The obvious\n", "question we might ask now is:\n", "\n", "> *Can this problem be averted for our discretization of the QG\n", "> equations with the leap-frog time-stepping scheme, or do we have to\n", "> abandon it?*\n", "\n", "There are several possible solutions, presented by [Mesinger and Arakawa](#Ref:MesingerArakawa) [p. 37], summarized here, including\n", "\n", "- filter out the top half or third of the wavenumbers, so that the\n", " aliasing is eliminated.\n", "\n", "- use a differencing scheme that has a built-in damping of the\n", " shortest wavelengths.\n", "\n", "- the most elegant, and one that allows us to continue using the\n", " leap-frog time stepping scheme, is one suggested by Arakawa, is one\n", " that aims to eliminate the spurious inflow of energy into the system\n", " by developing a discretization of the Jacobian term that satisfies\n", " discrete analogues of the conservation properties for average\n", " vorticity, enstrophy and kinetic energy.\n", " \n", "This third approach will be the one we take here. The details can be\n", "found in the Mesinger-Arakawa paper, and are not essential here; the\n", "important point is that there is a discretization of the Jacobian that\n", "avoids the instability problem arising from aliasing error. This\n", "discrete Jacobian is called the *Arakawa Jacobian* and is\n", "obtained by averaging the discrete Jacobians obtained by using standard\n", "centered differences on the formulae [(Jacobian: Expansion 1)](#eq:jacob1), [(Jacobian: Expansion 2)](#eq:jacob2) and [(Jacobian: Expansion 3)](#eq:jacob3) (see\n", "[Problem One](#Problem-One) and the two quizzes following it in\n", "[Section Right Hand Side](#Right-Hand-Side).\n", "\n", "You will not be required to derive or code the Arakawa Jacobian (the\n", "details are messy!), and the code will be provided for you for all the\n", "problems following [Problem Two](#Problem-Two)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Classical Solutions ##\n", "\n", "[Bryan (1963)](#Ref:Bryan) and [Veronis (1966)](#Ref:Veronis)\n", "\n", "### Problem Six ###\n", "> Using the SOR code from\n", "Problems [Three](#Problem-Three) (free-slip BC’s) and [Four](#Problem-Four)\n", "(no-slip BC’s), try to reproduce the classical results of Bryan and\n", "Veronis." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mathematical Notes ##\n", "\n", "### Definition of the Beta-plane ###\n", "\n", "A $\\beta$-plane is a plane approximation of a curved section of the\n", "Earth’s surface, where the Coriolis parameter, $f(y)$, can be written\n", "roughly as a linear function of $y$ $$f(y) = f_0 + \\beta y$$ for $f_0$\n", "and $\\beta$ some constants. The motivation behind this approximation\n", "follows." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 13, "metadata": { "image/png": { "width": "30%" } }, "output_type": "execute_result" } ], "source": [ "Image(filename='images/coriolis.png',width='30%') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**Figure Rotating Globe:**\n", "A depiction of the earth and its angular frequency of rotation,\n", "$\\Omega$, the local planetary vorticity vector in blue, and the Coriolis\n", "parameter, $f_0$, at a latitude of $\\theta_0$.\n", "
\n", "\n", "Consider a globe (the earth) which is rotating with angular frequency\n", "$\\Omega$ (see [Figure Rotating Globe](#fig:globe)),\n", "and assume that the patch of ocean under consideration is at latitude\n", "$\\theta$. The most important component of the Coriolis force is the\n", "local vertical (see the in [Figure Rotating Globe](#fig:globe)), which is defined in\n", "terms of the Coriolis parameter, $f$, to be $$f/2 = \\Omega \\sin\\theta.$$\n", "This expression may be simplified somewhat by ignoring curvature effects\n", "and approximating the earth’s surface at this point by a plane $-$ if\n", "the plane is located near the middle latitudes, then this is a good\n", "approximation. If $\\theta_0$ is the latitude at the center point of the\n", "plane, and $R$ is the radius of the earth (see\n", "[Figure Rotating Globe](#fig:globe)), then we can apply trigonometric ratios to\n", "obtain the following expression on the plane:\n", "$$f = \\underbrace{2\\Omega\\sin\\theta_0}_{f_0} +\n", " \\underbrace{\\frac{2\\Omega\\cos\\theta_0}{R}}_\\beta \\, y$$ Not\n", "surprisingly, this plane is called a *mid-latitude\n", "$\\beta$-plane*." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 14, "metadata": { "image/png": { "width": "30%" } }, "output_type": "execute_result" } ], "source": [ "Image(filename='images/beta-plane.png',width='30%') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "**Figure Beta-plane:**\n", "The $\\beta$-plane approximation, with points on the plane located\n", "along the local $y$-axis. The Coriolis parameter, $f$, at any latitude\n", "$\\theta$, can be written in terms of $y$ using trigonometric\n", "ratios.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Simplification of the QG Model Equations ##\n", "\n", "The first approximation we will make eliminates several of the\n", "non-linear terms in the set of equations: ([X-Momentum Eqn](#eq:xmom)), ([Y-Momentum Eqn](#eq:ymom)), ([Hydrostatic Eqn](#eq:hydrostatic)) and ([Continuity Eqn](#eq:continuity)). A common simplification that is made in\n", "this type of flow is the *quasi-geostrophic* (QG)\n", "approximation, where the horizontal pressure gradient and horizontal\n", "components of the Coriolis force are matched:\n", "$$fv \\approx \\frac{1}{\\rho} \\, \\frac {\\partial p}{\\partial x}, \\, \\, fu \\approx - \\,\\frac{1}{\\rho}\n", "\\, \\frac{\\partial p}{\\partial y} .$$ \n", "Remembering that the fluid is homogeneous (the density is\n", "constant), ([Continuity Eqn](#eq:continuity)) implies\n", "$$\\frac{\\partial^2 p}{\\partial x\\partial z} = 0, \\, \\, \\frac{\\partial^2 p}{\\partial y\\partial z} = 0.$$ We can\n", "then differentiate the QG balance equations to obtain\n", "$$\\frac{\\partial v}{\\partial z} \\approx 0, \\, \\, \\frac{\\partial u}{\\partial z} \\approx 0.$$ Therefore, the terms\n", "$w \\, \\partial u/\\partial z$ and $w \\, \\partial v/\\partial z$ can be neglected in ([(X-Momentum Eqn)](#eq:xmom)) and\n", "([(Y-Momentum Eqn)](#eq:ymom)).\n", "\n", "The next simplification is to eliminate the pressure terms in\n", "([(X-Momentum Eqn)](#eq:xmom)) and\n", "([(Y-Momentum Eqn)](#eq:ymom)) by cross-differentiating. If we define\n", "the vorticity $$\\zeta = \\partial v/\\partial x - \\partial u/\\partial y$$ then we can\n", "cross-differentiate the two momentum equations and replace them with a\n", "single equation in $\\zeta$:\n", "$$\\frac{\\partial \\zeta}{\\partial t} + u \\frac{\\partial \\zeta}{\\partial x} + v \\frac{\\partial \\zeta}{\\partial y} + v\\beta + (\\zeta+f)(\\frac {\\partial u}{\\partial x}+\\frac{\\partial v}{\\partial y}) =\n", "A_v \\, \\frac{\\partial^2 \\zeta}{\\partial z^2} + A_h \\, \\nabla_h^2 \\zeta,$$ where\n", "$\\beta \\equiv df/dy$. Notice the change in notation for derivatives,\n", "from $\\nabla$ to $\\nabla_h$: this indicates that derivative now appear\n", "only with respect to the “horizontal” coordinates, $x$ and $y$, since\n", "the $z$-dependence in the solution has been eliminated.\n", "\n", "The third approximation we will make is to assume that vorticity effects\n", "are dominated by the Coriolis force, or that $|\\zeta| \\ll f$. Using\n", "this, along with the ([Continuity Eqn](#eq:continuity)) implies that\n", "\n", "\n", "(Vorticity Eqn)\n", "$$\\frac{\\partial \\zeta}{\\partial t} + u \\frac {\\partial \\zeta}{\\partial x} + v \\frac{\\partial \\zeta}{\\partial y} + v \\beta -f \\, \\frac{\\partial w}{\\partial z} = A_v \\,\n", "\\frac{\\partial^2 \\zeta}{\\partial z^2} + A_h \\, \\nabla_h^2 \\zeta .$$ \n", "The reason for\n", "making this simplification may not be obvious now but it is a good\n", "approximation in flows in the ocean and, as we will see next, it allows\n", "us to eliminate the Coriolis term.\n", "\n", "The final sequence of simplifications eliminate the $z$-dependence in\n", "the problem by integrating ([Vorticity Eqn](#eq:diff)) in the vertical direction and using boundary\n", "conditions.\n", "\n", "The top 500 metres of the ocean tend to act as a single slab-like layer.\n", "The effect of stratification and rotation cause mainly horizontal\n", "motion. To first order, the upper layers are approximately averaged flow\n", "(while to the next order, surface and deep water move in opposition with\n", "deep flow much weaker). Consequently, our averaging over depth takes\n", "into account this “first order” approximation embodying the horizontal\n", "(planar) motion, and ignoring the weaker (higher order) effects." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, recognize that the vertical component of velocity on both the top\n", "and bottom surfaces should be zero: $$w = 0 \\;\\;\\; \\mbox{at $z=0$}$$\n", "$$w = 0 \\;\\;\\; \\mbox{at $z=-H$}$$ Notice that the in second\n", "condition we’ve also assumed that the water surface is approximately\n", "flat $-$ this is commonly known as the *rigid lid\n", "approximation*. Integrate the differential equation ([Vorticity Eqn](#eq:diff)) with respect\n", "to $z$, applying the above boundary conditions, and using the fact that\n", "$u$ and $v$ (and therefore also $\\zeta$) are independent of $z$,\n", "\n", "\n", "(Depth-Integrated Vorticity)\n", "$$\n", " \\frac{1}{H} \\int_{-H}^0 \\mbox{(Vorticity Eqn)} dz \\Longrightarrow \n", " \\frac {\\partial \\zeta}{\\partial t} + u \\frac {\\partial \\zeta}{\\partial x} + v \\frac {\\partial \\zeta}{\\partial y} + v\\beta \n", " = \\frac{1}{H} \\, \\left( \\left. A_v \\, \n", " \\frac{\\partial \\zeta}{\\partial z} \\right|_{z=0} - \\left. A_v \\, \n", " \\frac{\\partial \\zeta}{\\partial z} \\right|_{z=-H} \\right) \\, + A_h \\, \\nabla_h^2 \\zeta\n", " $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The two boundary terms on the right hand side can be rewritten in terms\n", "of known information if we apply two additional boundary conditions: the\n", "first, that the given wind stress on the ocean surface,\n", "$$\\vec{\\tau}(x,y) = (\\tau_1,\\tau_2) \\;\\;\\mbox{at }\\;\\; z=0,$$ can be\n", "written as\n", "$$\\rho A_v \\left( \\frac{\\partial u}{\\partial z} , \\frac{\\partial v}{\\partial z} \\right) = \\left( \\tau_1 , \\tau_2\n", " \\right)$$ which, after differentiating, leads to\n", " \n", "\n", "(Stress Boundary Condition)\n", "$$\\frac{1}{H} \\, A_v \\, \\left. \\frac{\\partial \\zeta}{\\partial z} \\right|_{z=0} = \\frac{1}{\\rho H} \\,\n", " \\nabla_h \\times \\tau \\,;\n", " $$ and, the second, that the *Ekman\n", "layer* along the bottom of the ocean, $z=-H$, generates Ekman\n", "pumping which obeys the following relationship:\n", "\n", "\n", "(Ekman Boundary Condition)\n", "$$\\frac{1}{H} \\, A_v \\, \\left. \\frac{\\partial \\zeta}{\\partial z} \\right|_{z=-H} =\n", " \\; \\kappa \\zeta, \n", " $$ where the *Ekman number*,\n", "$\\kappa$, is defined by\n", "$$\\kappa \\equiv \\frac{1}{H} \\left( \\frac{A_v f}{2} \\right)^{1/2}.$$\n", "Using ([Stress Boundary Condition](#eq:stressbc)) and ([Ekman Boundary Condition](#ekmanbc)) to replace the boundary terms in ([Depth-Integrated Vorticity](#vort-depth-integ)), we get the following\n", "equation for the vorticity:\n", "$$\\frac{\\partial \\zeta}{\\partial t} + u \\frac{\\partial \\zeta}{\\partial x} + v \\frac{\\partial \\zeta}{\\partial y} + v \\beta = \\frac{1}{\\rho H} \\, \\nabla_h \n", "\\times \\tau - \\kappa \\zeta + A_h \\, \\nabla_h^2 \\zeta.$$\n", "\n", "The next and final step may not seem at first to be much of a\n", "simplification, but it is essential in order to derive a differential\n", "equation that can be easily solved numerically. Integrate ([Continuity Eqn](#eq:continuity)) with respect\n", "to $z$ in order to obtain $$\\frac {\\partial u}{\\partial x} + \\frac{\\partial v}{\\partial y} = 0,$$ after which we can\n", "introduce a *stream function*, $\\psi$, defined in terms of\n", "the velocity as\n", "$$u = - \\, \\frac{\\partial \\psi}{\\partial y} \\, , \\, v = \\frac{\\partial \\psi}{\\partial x}.$$ The\n", "stream function satisfies this equation exactly, and we can write the\n", "vorticity as $$\\zeta = \\nabla_h^2 \\psi,$$ which then allows us to write\n", "both the velocity and vorticity in terms of a single variable, $\\psi$.\n", "\n", "After substituting into the vorticity equation, we are left with a\n", "single equation in the unknown stream function. $$\n", "\\frac{\\partial}{\\partial t} \\, \\nabla_h^2 \\psi + {\\cal J} \\left( \\psi, \\nabla_h^2 \\psi \\right) + \\beta \\, \\frac {\\partial \\psi}{\\partial x} = \\frac{-1}{\\rho H} \\, \\nabla_h \\times \\tau - \\, \\kappa \\, \\nabla_h^2 \\psi + A_h \\, \\nabla_h^4 \\psi $$\n", "where\n", "$${\\cal J} (a,b) = \\frac{\\partial a}{\\partial x} \\, \\frac{\\partial b}{\\partial y} - \\frac{\\partial a}{\\partial y} \\, \\frac{\\partial b}{\\partial x}$$ is called the *Jacobian* operator." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The original system ([X-Momentum Eqn](#eq:xmom)), ([Y-Momentum Eqn](#eq:ymom)), ([Hydrostatic Eqn](#eq:hydrostatic)) and ([Continuity Eqn](#eq:continuity)) was a system of four non-linear PDE’s, in four\n", "independent variables (the three velocities and the pressure), each of\n", "which depend on the three spatial coordinates. Now let us review the\n", "approximations made above, and their effects on this system:\n", "\n", "1. After applying the QG approximation and homogeneity, two of the\n", " non-linear terms were eliminated from the momentum equations, so\n", " that the vertical velocity, $w$, no longer appears.\n", "\n", "2. By introducing the vorticity, $\\zeta$, the pressure was eliminated,\n", " and the two momentum equations to be rewritten as a single equation\n", " in $\\zeta$ and the velocities.\n", "\n", "3. Some additional terms were eliminated by assuming that Coriolis\n", " effects dominate vorticity, and applying the continuity condition.\n", "\n", "4. Integrating over the vertical extent of the ocean, and applying\n", " boundary conditions eliminated the $z$-dependence in the problem.\n", "\n", "5. The final step consists of writing the unknown vorticity and\n", " velocities in terms of the single unknown stream function, $\\psi$.\n", "\n", "It is evident that the final equation is considerably simpler: it is a\n", "single, non-linear PDE for the unknown stream function, $\\psi$, which is\n", "a function of only two independent variables. As we will see in the next\n", "section, this equation is of a very common type, for which simple and\n", "efficient numerical techniques are available." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Glossary ##\n", "\n", "- **advection:** A property or quantity transferred by the flow of a fluid is said to be “advected” by the flow.\n", "aliasing error: In a numerical scheme, this is the phenomenon that occurs when a grid is not fine enough to resolve the high modes in a solution. These high waveumbers consequently appear as lower modes in the solution due to aliasing. If the scheme is such that these high wavenumber modes are amplified, then the aliased modes can lead to a significant error in the computed solution.\n", "- **$\\beta$-plane:** A $\\beta$-plane is a plane approximation of a curved section of the Earth’s surface, where the Coriolis parameter can be written roughly as a linear function.\n", "- **continuity equation:** The equation that describes mass conservation in a fluid, ${\\partial \\rho}/{\\partial t} + \\nabla \\cdot (\\rho \\vec u) = 0$\n", "- **Coriolis force:** An additional force experienced by an observer positioned in a rotating frame of reference. If $\\Omega$ is the angular velocity of the rotating frame, and $\\vec u$ is the velocity of an object observed within the rotating frame, then the Coriolis force, $\\Omega \\times \\vec u$, appears as a force tending to deflect the moving object to the right.\n", "- **Coriolis parameter:** The component of the planetary vorticity which is normal to the earth’s surface, usually denoted by f.\n", "- **difference stencil:** A convenient notation for representing difference approximation formula for derivatives. \n", "- **Ekman layer:** The frictional layer in a geophysical fluid flow field which appears on a rigid surface perpendicular to the rotation vector.\n", "- **Gauss-Seidel relaxation:** One of a class of iterative schemes for solving systems of linear equations. See Lab 8 for a complete discussion.\n", "- **homogeneous fluid:** A fluid with constant density. Even though the density of ocean water varies with depth, it is often assumed homogeneous in order to simplify the equations of motion.\n", "- **hydrostatic balance:** A balance, in the vertical direction, between the vertical pressure gradient and the buoyancy force. The pressure difference between any two points on a vertical line is assumed to depend only on the weight of the fluid between the points, as if the fluid were at rest, even though it is actually in motion. This approximation leads to a simplification in the equations of fluid flow, by replacing the vertical momentum equation.\n", "- **incompressible fluid:** A fluid for which changes in the density with pressure are negligible. For a fluid with velocity field, $\\vec u$, this is expressed by the equation $\\nabla \\cdot \\vec u = 0$. This equation states that the local increase of density with time must be balanced by the divergence of the mass flux.\n", "- **Jacobi relaxation:** The simplest of the iterative methods for solving linear systems of equations. See Lab 8 for a complete discussion.\n", "- **momentum equation(s):** The equations representing Newton’s second law of motion for a fluid. There is one momentum equation for each component of the velocity.\n", "- **over-relaxation:** Within a relaxation scheme, this refers to the use of a relaxation parameter $\\mu > 1$. It accelerates the standard Gauss-Seidel relaxation by forcing the iterates to move closer to the actual solution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- **Poisson equation:** The partial differential equation $\\nabla^2 u = f$ or, written two dimensions, ${\\partial^2 u}/{\\partial x^2} + {\\partial^2 u}/{\\partial y^2} =f(x,y)$.\n", "- **QG:** abbreviation for quasi-geostrophic.\n", "- **quasi-geostrophic balance:** Approximate balance between the pressure gradient and the Coriolis Force.\n", "- **relaxation:** A term that applies to a class of iterative schemes for solving large systems of equations. The advantage to these schemes for sparse matrices (compared to direct schemes such as Gaussian elimination) is that they operate only on the non-zero entries of the matrix. For a description of relaxation methods, see Lab 8." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- **rigid lid approximation:** Assumption that the water surface deflection is negligible in the continuity equation (or conservation of volume equation)\n", "- **SOR:** see successive over-relaxation.\n", "- **sparse system:** A system of linear equations whose matrix representation has a large percentage of its entries equal to zero.\n", "- **stream function:** Incompressible, two-dimensional flows with velocity field $(u,v)$, may be described by a stream function, $\\psi(x, y)$, which satisfies $u = −{\\partial \\psi}/{\\partial y}, v = {\\partial \\psi}/{\\partial x}$. These equations are a consequence of the incompressibility condition.\n", "- **successive over-relaxation:** An iterative method for solving large systems of linear equations. See Lab 8 for a complete discussion.\n", "- **under-relaxation:** Within a relaxation scheme, this refers to the use of a relaxation parameter $\\mu < 1$. It is not appropriate for solving systems of equations directly, but does have some application to multigrid methods.\n", "- **vorticity:** Defined to be the curl of the velocity field, $\\zeta = \\nabla \\times \\vec u$. In geophysical flows, where the Earth is a rotating frame of reference, the vorticity can be considered as the sum of a relative vorticity (the curl of the velocity in the nonrotating frame) and the planetary vorticity, $2 \\Omega$. For these large-scale flows, vorticity is almost always present, and the planetary vorticity dominates." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References ##\n", "\n", "
\n", "Arakawa, A. and V. R. Lamb, 1981: A potential enstrophy and energy conserving scheme for the shallow water equations. Monthly Weather Review, 109, 18–36.\n", "
\n", "
\n", "Bryan, K., 1963: A numerical investigation of a non-linear model of a wind-driven ocean. Journal of Atmospheric Science, 20, 594–606
\n", "
\n", "On the adjustment of azimuthally perturbed vortices. Journal of Geophysical Research, 92, 8213–8225.\n", "
\n", "
\n", "Mesinger, F. and A. Arakawa, 1976: Numerical Methods Used in Atmospheric Models,GARP Publications Series No.~17, Global Atmospheric Research Programme.\n", "
\n", "
\n", "Pedlosky, J., 1987: Geophysical Fluid Dynamics. Springer-Verlag, New York, 2nd edition.Pond, \n", "
\n", "
\n", "Phillips, N. A., 1956: The general circulation of the atmosphere: A numerical experiment.\n", "Quarterly Journal of the Royal Meteorological Society, 82, 123–164.\n", "
\n", "
\n", "Strang, G., 1988: Linear Algebra and its Applications. Harcourt Brace Jovanovich, San Diego,\n", "CA, 2nd edition.\n", "
\n", "
\n", "Veronis, G., 1966: Wind-driven ocean circulation – Part 2. Numerical solutions of the non- linear problem. Deep Sea Research, 13, 31–55.\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "jupytext": { "cell_metadata_filter": "all", "encoding": "# -*- coding: utf-8 -*-", "formats": "ipynb,py:percent", "notebook_metadata_filter": "all,-language_info,-toc,-latex_envs" }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "meta-9" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 4 }