{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import HTML\n", "css_file = '../style/style.css'\n", "HTML(open(css_file, \"r\").read())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Workshop on Modelling Tsunamis and Flash Flood Inundation with GeoClaw \n", "\n", "## Part 1: A simplified dam break flooding event.\n", "\n", "### José Galaz\n", "[https://jgalazm.github.io](https://jgalazm.github.io)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "The objective of this workshop is to work on simple cases that may allow the student to experience some example applications of the *GeoClaw* software, completely functional in a virtual machine, and that may serve as starting point to model more complex scenarios.\n", "\n", "GeoClaw is a part of [ClawPack](https://www.clawpack.org), a free open source software developed by the University of Washington. It consists of several packages that by means of numerical methods integrate a family of partial differential equations often called **conservation laws**, and hence the name: *ClawPack = Conservation Laws Package*. Geoclaw specializes at solving geophysical problems, as tsunamis, storm-surges amongst others.\n", "\n", "In our case, it allows us to solve the initial boundary value problem (IBVP) of the **Non Linear Shallow Water Equations** including **strong variations in topography**, **bottom friction** and handling **shock waves** (discontinuities) by solving a ** Riemann problem** between each cell's interface. Also, to improve the performance of the computations it employes **adaptive grids**, that allow to vary the grid size (say $\\Delta x$) both in space and time.\n", "\n", "In case you do not understand some of the words in **bold**, I suggest you to investigate. There exists excelent material for studying on the internet, for example that of the [PASI-TSUNAMI course that took place the year 2013 at the Federico Santa María university in Valparaíso, Chile](http://www.bu.edu/pasi-tsunami/materials).\n", "\n", "The (excelent) documentation, license information, contribution guidelines (in case you are interested in cooperating as developer), and other topics can be found in the [official site](https://www.clawpack.org).\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How to work with the Jupyter Notebook\n", "\n", "[Jupyter notebooks](https://jupyter.org) are documents that can be edited using a web-based user interface. As they describe it\n", "\n", ">The Jupyter Notebook is a web application that allows you to create and share documents that contain live code, equations, visualizations and explanatory text\n", "\n", "They split their content in cells, which can contain code or formatted text, and you can also write/append its content to a file. At the begining you will probably only work with the toolbar and menus at the top of the page, but what I recommend the most is to memorize some keyboard shortcuts. At least the ones I use are:\n", "\n", "* select a cell and press enter: edit the content of the current cell\n", "* esc: exit editing mode\n", "* ctrl + enter: Execute current cell\n", "* shift+ enter: Execute current cell and move to the next one.\n", "\n", "When out of edit mode, select a cell and use the following\n", "\n", "* m: change cell to normal text mode\n", "* y: change cell to code text mode\n", "* a: insert cell above\n", "* b: insert cell below\n", "* d+d: delete current cell\n", "\n", "You can find more in the dropdown menu **Help > Keyboard Shortcuts**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Overview of this notebook\n", "\n", "We will simulate a partial dambreak over a horizontal rectangular channel. First we shall see how to define the **topography**, including the vertical wall that defines the dam. Also we will see that the **initial condition** can be defined in a very similar way. Later we will examine some parameters in the **setrun.py** file that will set the simulation run!, and also the output we want to generate. To run the simulation we will make use of some *make* commands in the *Makefile* file. Finally, with the **setplot.py** file we will set how our figures shall look like, and we will see that output we configured before." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Disclaimer\n", "\n", "The style sheets that define the fancy colors and fonts in this notebook were borrowed from [here](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/info)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting Started: Topography and Initial Condition" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we are interested in defining the data of the topography and initial condition of the water, and writing it to files that will be read-able by GeoClaw. \n", "\n", "The topography consists of a horizontal channel of 200 meter width, that contains a dam behind a wall of 15m height. The water height is 10m in the dam and 5m in the channel. More concretelly, our computational domain will consist of the sets of points \n", "\n", "$$(x,y)\\in[-100,100]\\times[-100,100]$$ \n", "\n", "and the wall by \n", "\n", "$$(x,y): |x-2.0|<2.5, y\\in[-100,-70]\\cup[5,100]$$\n", "\n", "One way of defining the topography is by creating a function that receives two **numpy.ndarrays** $x,y$ and returns an array $z$ with the respective values for the floor elevation." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def topofunction(x,y):\n", " \"\"\"\n", " The topography: flat floor everywhere\n", " except for the reservoir walls\n", " \"\"\"\n", " z = np.zeros(x.shape)\n", " z = np.where( (np.abs(x-2.)<2.5)*(y<-70.), 15., z)\n", " z = np.where( (np.abs(x-2.)<2.5)*(y>5.), 15.,z)\n", " return z+1e-10 #+1e-10 to avoid a bug in the plotting functions later" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that we made use of the numpy **where** function. You can see its *docstring* by executing the following cell." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.where?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will sample this function using $100$ points in each horizontal direction, and for this, we will use the *topotools.topo2writer* predefined GeoClaw function, that will write this data in **GeoClaw number 2 topography format**. You can see an accurate description of this data format [here](http://www.clawpack.org/topo.html?highlight=topography)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from clawpack.geoclaw import topotools\n", "def maketopo():\n", " \"\"\"\n", " topo2 format for topography\n", " \"\"\" \n", " xupper = 100.\n", " yupper = 100.\n", " xlower = -100.\n", " ylower = -100.\n", " nxpoints= 100\n", " nypoints= 100\n", " outfile= \"channel.topotype2\"\n", " topotools.topo2writer(outfile,topofunction,xlower,xupper,ylower,yupper,nxpoints,nypoints)\n", "maketopo(); " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And to be sure that everything worked well, we will ask GeoClaw to plot the data we just wrote." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/jose/anaconda2/lib/python2.7/site-packages/matplotlib/axes/_base.py:1215: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal\n", " if aspect == 'normal':\n", "/home/jose/anaconda2/lib/python2.7/site-packages/matplotlib/axes/_base.py:1220: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal\n", " elif aspect in ('equal', 'auto'):\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "topo = topotools.Topography('channel.topotype2',topo_type=2)\n", "topo.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we do the same with the initial condition by setting only the free surface elevation. \n", "\n", "You can see [here](http://www.clawpack.org/setrun_geoclaw.html#setrun-qinit) that what will actually be defining is a perturbation on the default value of the free surface, which is 0. Also you will notice that later in the **setrun.py** we will pass this data to geoclaw, indicating what kind of initial condition this is (if depth, free surface, xmomentum or ymomentum perturbation)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def qinitfunction(x,y):\n", " \"\"\"\n", " Dry above the walls. 10 m height in the left side\n", " 5m in the right side.\n", " \"\"\"\n", " z = np.zeros(x.shape)\n", " z = np.where( (np.abs(x-2.)<2.5)*(y<-70.), 15., z)\n", " z = np.where( (np.abs(x-2.)<2.5)*(y>5.), 15.,z)\n", " h = np.zeros_like(z)\n", " h = np.where( x<=-0,10.,5.)\n", " h = np.where( z>0.,0.,h)\n", " return h\n", "def makeqinit():\n", " \"\"\"\n", " topo1 format for qinit\n", " \"\"\" \n", " xupper = 100.\n", " yupper = 100.\n", " xlower = -100.\n", " ylower = -100.\n", " nxpoints= 100\n", " nypoints= 100\n", " outfile= \"qinit.topotype1\"\n", " topotools.topo1writer(outfile,qinitfunction,xlower,xupper,ylower,yupper,nxpoints,nypoints)\n", "makeqinit()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from clawpack.visclaw import colormaps\n", "qinit = topotools.Topography('qinit.topotype1',topo_type=1)\n", "qinit.plot(cmap=colormaps.blue_white_red)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting a simulation run: the setrun.py file\n", "\n", "To run a simulation we need to define a python script called *setrun.py* file. Also it is mandatory to have in the same folder a file called **Makefile** which you won't need to edit, but only to make sure it is there: this is the one responsible for gathering and translating all the code into a machine executable file. On the other side, through the *setrun.py* we will define all the parameters such as simulation final time, and link the topography and initial condition data files we created before.\n", "\n", "You will see the *setrun.py* is quite long, but there is only a few sections we are commonly interested on editing." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A comment on adaptive refinement with GeoClaw\n", "\n", "GeoClaw asks you to define refinement regions that define the extent in space and time, over which you want to allow it to use finer grids. What you have to define beforehand is:\n", "\n", "1. A list of **refinement ratios** (integer numbers), say $r_x =[r_2,...,r_l]$, with $l$ the number of **refinement levels** in the simulation, such that $$\\dfrac{\\Delta x_{1}}{\\Delta x_{2}} = r_1, \\dfrac{\\Delta x_{2}}{\\Delta x_{3}} = r_2$$, and so on. Notice that $\\Delta x_1$ is the cell size of the coarsest level, which covers the full domain.\n", "\n", "2. (optional) A list of **refinement regions** with min and max level of refinement level allowed in a rectangle inside the domain, for a given time interval of the simulation.\n", "\n", "Given the restrictions in 2., GeoClaw will try to refine up to the highest level defined in 1, when a specific criteria is satisfied. If you don't define 2., GeoClaw will assume you allow the maximum level of refinement everywhere. The criteria of refinement is when the amplitude of the wave, with respect to the default sea-level is greater than a defined tolerance (of course, the tolerance is also defined in the setrun.py).\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The setrun.py file\n", "\n", "This is the most important file, and all of its fields are well explained in detail [here](http://www.clawpack.org/setrun.html). Those which are of most interest to us can be found in the following sections:\n", "\n", "\n", "* Extent of the computational domain, and resolution of the coarser level.\n", "\n", " # ---------------\n", " # Spatial domain:\n", " # ---------------\n", "\n", " ...\n", "\n", "* Simulation instants when you want to save the whole simulation state to a file. Be careful with this, since it can grow large very easily.\n", "\n", " # -------------\n", " # Output times:\n", " #--------------\n", "\n", " ...\n", "\n", "* Time step configuration of the simulation. Normally you will only edit the \"CFL_...\" parameters, when the computation misteriously \"blows up\".\n", "\n", " # --------------\n", " # Time stepping:\n", " # --------------\n", "\n", " ...\n", "\n", "* Boundary conditions: There is only \"closed\" (reflective) and \"open\" (extrapolation) boundaries. More complex boundary conditions must be programed in fortran by the user.\n", "\n", " # --------------------\n", " # Boundary conditions:\n", " # --------------------\n", "\n", " ...\n", "\n", "\n", "* Adaptive Refinement parameters and **output virtual gauges location**.\n", "\n", " # ---------------\n", " # AMR parameters:\n", " # --------------- \n", "\n", " ...\n", " \n", "* Other geophysical related parameters such as the **wave_tolerance** for adaptive refinement, bottom friction, coordinate sistem (lat-lon or cartesian), amongst others.\n", "\n", " #-------------------\n", " def setgeo(rundata):\n", " #------------------- \n", " ... " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I suggest you to read the setrun.py carefully once, but then just \"ctrl+f\" the section enclosed in \"#-----\" that is of your interest" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### (finally) Editing the setrun.py file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use the ipython %%writefile magic function, this will allow us to write all the content in a cell (except for the first line) in the specified file.\n", "\n", "If you are wondering, I just copy-pasted an existing setrun.py file from the geoclaw examples directory, and then modified its content to fulfill this requirements of this example.\n", "\n", "You can execute\n", "\n", " %%writefile?\n", "\n", "to see its docstring. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will configure this file with the domain extent we already defined at the begining, and set it carefully to use the topography and initial condition files we created before. We will also set the following \n", "\n", "1. We will use a total of 3 refinement levels and regions. We want 1 that covers the whole domain that ensures the coarsest level is used outside the region of interest, and other 2 downstream. The refinement ratios are $r_2 = 4$ and $r_3 = 4$ (which means the coarsest grid will have 16 times the width of the finest). The regions will be: \n", "\n", " * $R_1 = \\{x\\in[-100,100]\\times[-100,100]\\}$ fixed at level 1.\n", " * $R_2 = \\{x\\in[-10,10]\\times[-100,100]$ fixed at level 2.\n", " * $R_3 = \\{x\\in[50,100]\\times[-80,-25]$ can use any level.\n", "\n", "2. We will produce 'snapshot' output files every 1 second in the simulation up to 30 seconds.\n", "\n", "3. We want to store virtual gauges at the following locations\n", "\n", " 0: [-50.,0.]\n", " \n", " 1: [0.,0.]\n", " \n", " 2: [40.,0]\n", " \n", " 3: [75.,0.]\n", " \n", " 4: [75.,-30.]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Overwriting setrun.py\n" ] } ], "source": [ "%%writefile setrun.py\n", "# %load setrun.py\n", "\n", "\"\"\"\n", "Module to set up run time parameters for Clawpack.\n", "\n", "The values set in the function setrun are then written out to data files\n", "that will be read in by the Fortran code.\n", "\n", "\"\"\"\n", "\n", "import os\n", "import numpy as np\n", "\n", "\n", "#------------------------------\n", "def setrun(claw_pkg='geoclaw'):\n", "#------------------------------\n", "\n", " \"\"\"\n", " Define the parameters used for running Clawpack.\n", "\n", " INPUT:\n", " claw_pkg expected to be \"geoclaw\" for this setrun.\n", "\n", " OUTPUT:\n", " rundata - object of class ClawRunData\n", "\n", " \"\"\"\n", "\n", " from clawpack.clawutil import data\n", "\n", " assert claw_pkg.lower() == 'geoclaw', \"Expected claw_pkg = 'geoclaw'\"\n", "\n", " num_dim = 2\n", " rundata = data.ClawRunData(claw_pkg, num_dim)\n", "\n", " #------------------------------------------------------------------\n", " # GeoClaw specific parameters:\n", " #------------------------------------------------------------------\n", " rundata = setgeo(rundata)\n", "\n", " #------------------------------------------------------------------\n", " # Standard Clawpack parameters to be written to claw.data:\n", " # (or to amr2ez.data for AMR)\n", " #------------------------------------------------------------------\n", " clawdata = rundata.clawdata # initialized when rundata instantiated\n", "\n", "\n", " # Set single grid parameters first.\n", " # See below for AMR parameters.\n", "\n", "\n", " # ---------------\n", " # Spatial domain:\n", " # ---------------\n", "\n", " # Number of space dimensions:\n", " clawdata.num_dim = num_dim\n", "\n", " # Lower and upper edge of computational domain:\n", " clawdata.lower[0] = -100.0\n", " clawdata.upper[0] = 100.0\n", "\n", " clawdata.lower[1] = -100.0\n", " clawdata.upper[1] = 100.0\n", "\n", "\n", "\n", " # Number of grid cells: Coarsest grid\n", " clawdata.num_cells[0] = 20\n", " clawdata.num_cells[1] = 20\n", "\n", "\n", " # ---------------\n", " # Size of system:\n", " # ---------------\n", "\n", " # Number of equations in the system:\n", " clawdata.num_eqn = 3\n", "\n", " # Number of auxiliary variables in the aux array (initialized in setaux)\n", " clawdata.num_aux = 1\n", "\n", " # Index of aux array corresponding to capacity function, if there is one:\n", " clawdata.capa_index = 0\n", "\n", " \n", " \n", " # -------------\n", " # Initial time:\n", " # -------------\n", "\n", " clawdata.t0 = 0.0\n", "\n", "\n", " # Restart from checkpoint file of a previous run?\n", " # Note: If restarting, you must also change the Makefile to set:\n", " # RESTART = True\n", " # If restarting, t0 above should be from original run, and the\n", " # restart_file 'fort.chkNNNNN' specified below should be in \n", " # the OUTDIR indicated in Makefile.\n", "\n", " clawdata.restart = False # True to restart from prior results\n", " clawdata.restart_file = 'fort.chk00006' # File to use for restart data\n", "\n", " # -------------\n", " # Output times:\n", " #--------------\n", "\n", " # Specify at what times the results should be written to fort.q files.\n", " # Note that the time integration stops after the final output time.\n", " # The solution at initial time t0 is always written in addition.\n", "\n", " clawdata.output_style = 1\n", "\n", " if clawdata.output_style == 1:\n", " # Output nout frames at equally spaced times up to tfinal:\n", " clawdata.num_output_times = 30\n", " clawdata.tfinal = 30.\n", " clawdata.output_t0 = True # output at initial (or restart) time?\n", "\n", " elif clawdata.output_style == 2:\n", " # Specify a list of output times.\n", " clawdata.output_times = [0.5, 1.0]\n", "\n", " elif clawdata.output_style == 3:\n", " # Output every iout timesteps with a total of ntot time steps:\n", " clawdata.output_step_interval = 1\n", " clawdata.total_steps = 1\n", " clawdata.output_t0 = True\n", " \n", "\n", " clawdata.output_format = 'ascii' # 'ascii' or 'netcdf' \n", "\n", " clawdata.output_q_components = 'all' # could be list such as [True,True]\n", " clawdata.output_aux_components = 'none' # could be list\n", " clawdata.output_aux_onlyonce = True # output aux arrays only at t0\n", "\n", "\n", "\n", " # ---------------------------------------------------\n", " # Verbosity of messages to screen during integration:\n", " # ---------------------------------------------------\n", "\n", " # The current t, dt, and cfl will be printed every time step\n", " # at AMR levels <= verbosity. Set verbosity = 0 for no printing.\n", " # (E.g. verbosity == 2 means print only on levels 1 and 2.)\n", " clawdata.verbosity = 0\n", "\n", "\n", "\n", " # --------------\n", " # Time stepping:\n", " # --------------\n", "\n", " # if dt_variable==1: variable time steps used based on cfl_desired,\n", " # if dt_variable==0: fixed time steps dt = dt_initial will always be used.\n", " clawdata.dt_variable = True\n", "\n", " # Initial time step for variable dt.\n", " # If dt_variable==0 then dt=dt_initial for all steps:\n", " clawdata.dt_initial = 0.0001\n", "\n", " # Max time step to be allowed if variable dt used:\n", " clawdata.dt_max = 1e+99\n", "\n", " # Desired Courant number if variable dt used, and max to allow without\n", " # retaking step with a smaller dt:\n", " clawdata.cfl_desired = 0.75\n", " clawdata.cfl_max = 0.85\n", "\n", " # Maximum number of time steps to allow between output times:\n", " clawdata.steps_max = 5000\n", "\n", "\n", "\n", "\n", " # ------------------\n", " # Method to be used:\n", " # ------------------\n", "\n", " # Order of accuracy: 1 => Godunov, 2 => Lax-Wendroff plus limiters\n", " clawdata.order = 2\n", " \n", " # Use dimensional splitting? (not yet available for AMR)\n", " clawdata.dimensional_split = 'unsplit'\n", " \n", " # For unsplit method, transverse_waves can be \n", " # 0 or 'none' ==> donor cell (only normal solver used)\n", " # 1 or 'increment' ==> corner transport of waves\n", " # 2 or 'all' ==> corner transport of 2nd order corrections too\n", " clawdata.transverse_waves = 2\n", "\n", " # Number of waves in the Riemann solution:\n", " clawdata.num_waves = 3\n", " \n", " # List of limiters to use for each wave family: \n", " # Required: len(limiter) == num_waves\n", " # Some options:\n", " # 0 or 'none' ==> no limiter (Lax-Wendroff)\n", " # 1 or 'minmod' ==> minmod\n", " # 2 or 'superbee' ==> superbee\n", " # 3 or 'mc' ==> MC limiter\n", " # 4 or 'vanleer' ==> van Leer\n", " clawdata.limiter = ['mc', 'mc', 'mc']\n", "\n", " clawdata.use_fwaves = True # True ==> use f-wave version of algorithms\n", " \n", " # Source terms splitting:\n", " # src_split == 0 or 'none' ==> no source term (src routine never called)\n", " # src_split == 1 or 'godunov' ==> Godunov (1st order) splitting used, \n", " # src_split == 2 or 'strang' ==> Strang (2nd order) splitting used, not recommended.\n", " clawdata.source_split = 'godunov'\n", "\n", "\n", " # --------------------\n", " # Boundary conditions:\n", " # --------------------\n", "\n", " # Number of ghost cells (usually 2)\n", " clawdata.num_ghost = 2\n", "\n", " # Choice of BCs at xlower and xupper:\n", " # 0 => user specified (must modify bcN.f to use this option)\n", " # 1 => extrapolation (non-reflecting outflow)\n", " # 2 => periodic (must specify this at both boundaries)\n", " # 3 => solid wall for systems where q(2) is normal velocity\n", "\n", " clawdata.bc_lower[0] = 3\n", " clawdata.bc_upper[0] = 1\n", "\n", " clawdata.bc_lower[1] = 3\n", " clawdata.bc_upper[1] = 3\n", "\n", " # Specify when checkpoint files should be created that can be\n", " # used to restart a computation.\n", "\n", " clawdata.checkpt_style = 0\n", "\n", " if clawdata.checkpt_style == 0:\n", " # Do not checkpoint at all\n", " pass\n", "\n", " elif clawdata.checkpt_style == 1:\n", " # Checkpoint only at tfinal.\n", " pass\n", "\n", " elif clawdata.checkpt_style == 2:\n", " # Specify a list of checkpoint times. \n", " clawdata.checkpt_times = [0.1,0.15]\n", "\n", " elif clawdata.checkpt_style == 3:\n", " # Checkpoint every checkpt_interval timesteps (on Level 1)\n", " # and at the final time.\n", " clawdata.checkpt_interval = 5\n", "\n", "\n", " # ---------------\n", " # AMR parameters:\n", " # ---------------\n", " amrdata = rundata.amrdata\n", "\n", " # max number of refinement levels:\n", " amrdata.amr_levels_max = 2\n", "\n", " # List of refinement ratios at each level (length at least mxnest-1)\n", " amrdata.refinement_ratios_x = [4,4]\n", " amrdata.refinement_ratios_y = [4,4]\n", " amrdata.refinement_ratios_t = [2,6]\n", "\n", "\n", " # Specify type of each aux variable in amrdata.auxtype.\n", " # This must be a list of length maux, each element of which is one of:\n", " # 'center', 'capacity', 'xleft', or 'yleft' (see documentation).\n", "\n", " amrdata.aux_type = ['center']\n", "\n", "\n", " # Flag using refinement routine flag2refine rather than richardson error\n", " amrdata.flag_richardson = False # use Richardson?\n", " amrdata.flag2refine = True\n", "\n", " # steps to take on each level L between regriddings of level L+1:\n", " amrdata.regrid_interval = 3\n", "\n", " # width of buffer zone around flagged points:\n", " # (typically the same as regrid_interval so waves don't escape):\n", " amrdata.regrid_buffer_width = 3\n", "\n", " # clustering alg. cutoff for (# flagged pts) / (total # of cells refined)\n", " # (closer to 1.0 => more small grids may be needed to cover flagged cells)\n", " amrdata.clustering_cutoff = 0.700000\n", "\n", " # print info about each regridding up to this level:\n", " amrdata.verbosity_regrid = 0 \n", "\n", "\n", " # ----- For developers ----- \n", " # Toggle debugging print statements:\n", " amrdata.dprint = False # print domain flags\n", " amrdata.eprint = False # print err est flags\n", " amrdata.edebug = False # even more err est flags\n", " amrdata.gprint = False # grid bisection/clustering\n", " amrdata.nprint = False # proper nesting output\n", " amrdata.pprint = False # proj. of tagged points\n", " amrdata.rprint = False # print regridding summary\n", " amrdata.sprint = False # space/memory output\n", " amrdata.tprint = False # time step reporting each level\n", " amrdata.uprint = False # update/upbnd reporting\n", " \n", " # More AMR parameters can be set -- see the defaults in pyclaw/data.py\n", "\n", " # == setregions.data values ==\n", " regions = rundata.regiondata.regions\n", " # to specify regions of refinement append lines of the form\n", " regions.append([1,1,0.,1e10,-100.,100.,-100.,100.])\n", " regions.append([2,2,0.,1e10,-10.,10.,-100.,100.])\n", " regions.append([1,10,0.,1e10,50,100.,-80.,-25])\n", "# regions.append([0,10,0.,1e10,-10.,100.,-30.,30.])\n", " # [minlevel,maxlevel,t1,t2,x1,x2,y1,y2]\n", "\n", " # == setgauges.data values ==\n", " # for gauges append lines of the form [gaugeno, x, y, t1, t2]\n", " rundata.gaugedata.gauges.append([0,-50.,0.,0,1e10])\n", " rundata.gaugedata.gauges.append([1,0.,0.,0,1e10])\n", " rundata.gaugedata.gauges.append([2,40.,0.,0,1e10])\n", " rundata.gaugedata.gauges.append([3,75.,0.,0,1e10])\n", " rundata.gaugedata.gauges.append([4,75.,-30.,0,1e10])\n", "\n", " return rundata\n", " # end of function setrun\n", " # ---------------------- amrdata.refinement_ratios_x = [4,4]\n", " amrdata.refinement_ratios_y = [4,4]\n", " amrdata.refinement_ratios_t = [2,6]\n", "\n", "\n", "#-------------------\n", "def setgeo(rundata):\n", "#-------------------\n", " \"\"\"\n", " Set GeoClaw specific runtime parameters.\n", " For documentation see ....\n", " \"\"\"\n", "\n", " try:\n", " geo_data = rundata.geo_data\n", " except:\n", " print \"*** Error, this rundata has no geo_data attribute\"\n", " raise AttributeError(\"Missing geo_data attribute\")\n", "\n", " \n", " # == Physics ==\n", " geo_data.gravity = 9.81\n", " geo_data.coordinate_system = 1\n", " geo_data.earth_radius = 6367.5e3\n", "\n", " # == Forcing Options\n", " geo_data.coriolis_forcing = False\n", "\n", " # == Algorithm and Initial Conditions ==\n", " geo_data.sea_level = 0.\n", " geo_data.dry_tolerance = 1.e-2\n", " geo_data.friction_forcing = False\n", " geo_data.manning_coefficient = 0.0\n", " geo_data.friction_depth = 1.e6\n", "\n", " # Refinement data\n", " refinement_data = rundata.refinement_data\n", " refinement_data.wave_tolerance = 5.\n", " refinement_data.deep_depth = 1e2\n", " refinement_data.max_level_deep = 3\n", " refinement_data.variable_dt_refinement_ratios = False\n", "\n", " # == settopo.data values ==\n", " topo_data = rundata.topo_data\n", " # for topography, append lines of the form\n", " # [topotype, minlevel, maxlevel, t1, t2, fname]\n", " topo_data.topofiles.append([2, 0, 10,0.,1e10, 'channel.topotype2'])\n", "\n", " # == setdtopo.data values ==\n", " dtopo_data = rundata.dtopo_data\n", " # for moving topography, append lines of the form : (<= 1 allowed for now!)\n", " # [topotype, minlevel,maxlevel,fname]\n", "\n", " # == setqinit.data values ==\n", " rundata.qinit_data.qinit_type = 4\n", " rundata.qinit_data.qinitfiles = []\n", " # for qinit perturbations, append lines of the form: (<= 1 allowed for now!)\n", " # [minlev, maxlev, fname]\n", " rundata.qinit_data.qinitfiles.append([0,10,'qinit.topotype1'])\n", " \n", "\n", " # == setfixedgrids.data values ==\n", " fixedgrids = rundata.fixed_grid_data\n", " # for fixed grids append lines of the form\n", " # [t1,t2,noutput,x1,x2,y1,y2,xpoints,ypoints,\\\n", " # ioutarrivaltimes,ioutsurfacemax]\n", "\n", " #fixedgrids.fixedgrids.append([0.,60.,60,-100.,100.,-100.,100.0,100,100,\\\n", " # 0,0])\n", " \n", " # == fgmax.data values ==\n", " fgmax_files = rundata.fgmax_data.fgmax_files\n", " # for fixed grids append to this list names of any fgmax input files \n", " \n", " return rundata\n", " # end of function setgeo\n", " # ----------------------\n", "\n", "\n", "\n", "if __name__ == '__main__':\n", " # Set up run-time parameters and write all data files.\n", " import sys\n", " rundata = setrun(*sys.argv[1:])\n", " rundata.write()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Running the simulation\n", "\n", "Once the setrun.py is ready we will use some commands defined in the **Makefile**, that should be in the same folder as this notebook. The Makefile will compile the Fortran source code and create an executable that will also be called from the Makefile command.\n", "\n", "You can see which commands are defined in the Makefile by executing from a terminal\n", "\n", " make help\n", "\n", "or simply put a \"!\" before in an ipython cell, to run as if it was from the terminal" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Makefile:186: warning: overriding commands for target `all'\r\n", "/home/jose/Downloads/clawpack-5.3.1//clawutil/src/Makefile.common:259: warning: ignoring old commands for target `all'\r\n", " \"make .objs\" to compile object files\r\n", " \"make .exe\" to create executable\r\n", " \"make .data\" to create data files using setrun.py\r\n", " \"make .output\" to run code\r\n", " \"make output\" to run code with no dependency checking\r\n", " \"make .plots\" to produce plots\r\n", " \"make plots\" to produce plots with no dependency checking\r\n", " \"make .htmls\" to produce html versions of files\r\n", " \"make .program\" to produce single program file\r\n", " \"make new\" to remove all objs and then make .exe\r\n", " \"make clean\" to clean up compilation and html files\r\n", " \"make clobber\" to also clean up output and plot files\r\n", " \"make help\" to print this message\r\n" ] } ], "source": [ "!make help" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following cell will delete any precompiled files with the\n", "\n", " make clean\n", "\n", "command, and compile the code again and execute it with\n", "\n", " make .output\n", "\n", "You can write the magic\n", " \n", " %%capture out\n", " \n", "if you find the screen output too annoying, and save it in the \"out\" variable.\n", "\n", "Now sit back, and wait for those results." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Makefile:186: warning: overriding commands for target `all'\n", "/home/jose/Downloads/clawpack-5.3.1//clawutil/src/Makefile.common:259: warning: ignoring old commands for target `all'\n", "rm -f xgeoclaw setplot.py.html setrun.py.html amr.data.html claw.data.html dtopo.data.html fgmax.data.html fixed_grids.data.html friction.data.html gauges.data.html geoclaw.data.html qinit.data.html refinement.data.html regions.data.html surge.data.html topo.data.html Makefile.html\n", "rm -f .data .output .plots .htmls \n", "Makefile:186: warning: overriding commands for target `all'\n", "/home/jose/Downloads/clawpack-5.3.1//clawutil/src/Makefile.common:259: warning: ignoring old commands for target `all'\n", "gfortran /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/utility_module.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/amr_module.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/regions_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/geoclaw_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/gauges_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/topo_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/qinit_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/refinement_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/fixedgrids_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/fgmax_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/surge/holland_storm_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/surge/stommel_storm_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/surge/constant_storm_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/surge/storm_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/friction_module.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/qinit.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/setprob.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/topo_update.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/cellgridintegrate2.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/topointegral.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/bilinearintegral.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/stepgrid.o /home/jose/Downloads/clawpack-5.3.1//riemann/src/rpn2_geoclaw.o /home/jose/Downloads/clawpack-5.3.1//riemann/src/rpt2_geoclaw.o /home/jose/Downloads/clawpack-5.3.1//riemann/src/geoclaw_riemann_utils.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/src2.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/src1d.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/step2.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/flux2fw.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/qad.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/valout.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/filval.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/filpatch.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/prefilp.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/trimbd.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/bound.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/intfil.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/bc2amr.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/update.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/setaux.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/flag2refine2.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/allowflag.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/flagregions2.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/b4step2.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/upbnd.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/tick.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/setgrd.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/gfixup.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/ginit.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/getmaxspeed.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/advanc.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/amr2.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/fgmax_read.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/fgmax_frompatch.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/fgmax_interpolate.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/fgmax_values.o /home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/fgmax_finalize.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/quick_sort1.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/estdt.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/check4nans.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/spest2.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/init_iflags.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/igetsp.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/reclam.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/birect.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/cleanup.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/colate2.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/errest.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/prepregstep.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/prepbigstep.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/bufnst2.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/flagger.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/flagregions.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/errf1.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/fixcapaq.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/flglvl2.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/fluxad.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/fluxsv.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/grdfit2.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/moment.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/nestck2.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/prepc.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/prepf.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/projec2.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/signs.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/findcut.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/smartbis.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/putnod.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/putsp.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/regrid.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/setuse.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/stst1.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/nodget.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/basic.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/outval.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/copysol.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/outvar.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/outmsh.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/outtre.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/domain.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/cellave.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/fdisc.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/fss.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/zeroin.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/setflags.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/shiftset2.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/conck.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/domshrink.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/domprep.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/domup.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/domcopy.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/setdomflags.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/setIndices.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/coarseGridFlagSet.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/addflags.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/baseCheck.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/drivesort.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/flagcheck.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/domgrid.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/setPhysBndryFlags.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/griddomup.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/griddomcopy.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/griddomshrink.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/coarsen.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/auxcoarsen.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/intcopy.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/preintcopy.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/icall.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/preicall.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/inlinelimiter.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/cstore.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/saveqc.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/check.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/restrt.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/opendatafile.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/init_alloc.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/restrt_alloc.o /home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/resize_alloc.o -I/home/jose/Downloads/clawpack-5.3.1//amrclaw/src/2d/ -I/home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/ -I/home/jose/Downloads/clawpack-5.3.1//geoclaw/src/2d/shallow/surge/ -L/home/jose/github/tsunami_workshop/en/dambreak/ -o xgeoclaw \n", "make data -f Makefile /home/jose/Downloads/clawpack-5.3.1//clawutil/src/Makefile.common\n", "make[1]: Entering directory `/home/jose/github/tsunami_workshop/en/dambreak'\n", "Makefile:186: warning: overriding commands for target `all'\n", "/home/jose/Downloads/clawpack-5.3.1//clawutil/src/Makefile.common:259: warning: ignoring old commands for target `all'\n", "rm -f .data\n", "python setrun.py geoclaw \n", "touch .data\n", "make[1]: Nothing to be done for `/home/jose/Downloads/clawpack-5.3.1//clawutil/src/Makefile.common'.\n", "make[1]: Leaving directory `/home/jose/github/tsunami_workshop/en/dambreak'\n", "make output -f Makefile /home/jose/Downloads/clawpack-5.3.1//clawutil/src/Makefile.common\n", "make[1]: Entering directory `/home/jose/github/tsunami_workshop/en/dambreak'\n", "Makefile:186: warning: overriding commands for target `all'\n", "/home/jose/Downloads/clawpack-5.3.1//clawutil/src/Makefile.common:259: warning: ignoring old commands for target `all'\n", "rm -f .output\n", "python /home/jose/Downloads/clawpack-5.3.1//clawutil/src/python/clawutil/runclaw.py xgeoclaw _output \\\n", "\tTrue False . False False None\n", "==> runclaw: Will take data from /home/jose/github/tsunami_workshop/en/dambreak\n", "==> runclaw: Will write output to /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "==> runclaw: Removing all old fort files in /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "\n", "==> Running with command:\n", " /home/jose/github/tsunami_workshop/en/dambreak/xgeoclaw\n", "Reading data file: claw.data\n", " first 5 lines are comments and will be skipped\n", "Reading data file: amr.data\n", " first 5 lines are comments and will be skipped\n", "Reading data file: regions.data\n", " first 5 lines are comments and will be skipped\n", "Reading data file: gauges.data\n", " first 5 lines are comments and will be skipped\n", "Reading data file: fgmax.data\n", " first 5 lines are comments and will be skipped\n", " \n", " Running amrclaw ... \n", " \n", "Reading data file: geoclaw.data\n", " first 5 lines are comments and will be skipped\n", "Reading data file: refinement.data\n", " first 5 lines are comments and will be skipped\n", "Reading data file: dtopo.data\n", " first 5 lines are comments and will be skipped\n", "Reading data file: topo.data\n", " first 5 lines are comments and will be skipped\n", " \n", " Reading topography file /home/jose/github/tsunami_workshop/en/dambreak/channel.topotype2 \n", "Reading data file: qinit.data\n", " first 5 lines are comments and will be skipped\n", " \n", " Reading qinit data from file /home/jose/github/tsunami_workshop/en/dambreak/qinit.topotype1 \n", " \n", "Reading data file: fixed_grids.data\n", " first 5 lines are comments and will be skipped\n", "Reading data file: surge.data\n", " first 5 lines are comments and will be skipped\n", "Reading data file: friction.data\n", " first 5 lines are comments and will be skipped\n", " Storage allocated...\n", "there are 1 grids with 400 cells at level 1\n", " max threads set to 1\n", " \n", " Done reading data, starting computation ... \n", " \n", " Total mass at initial time: 292856.74594794645 \n", "AMRCLAW: Frame 0 output files done at time t = 0.000000D+00\n", "\n", "*** WARNING *** Courant number = 0.1853D+01 is larger than input cfl_max = 0.8500D+00 on grid 4 level 2\n", " ***adjusting timestep for level 2 at t = 0.825498D+00\n", " old ntogo dt 1 8.7250750629402796E-002\n", " new ntogo dt 2 4.3625375314701398E-002\n", "AMRCLAW: Frame 1 output files done at time t = 0.100000D+01\n", "\n", "AMRCLAW: Frame 2 output files done at time t = 0.200000D+01\n", "\n", "AMRCLAW: Frame 3 output files done at time t = 0.300000D+01\n", "\n", "AMRCLAW: Frame 4 output files done at time t = 0.400000D+01\n", "\n", "AMRCLAW: Frame 5 output files done at time t = 0.500000D+01\n", "\n", "AMRCLAW: Frame 6 output files done at time t = 0.600000D+01\n", "\n", "AMRCLAW: Frame 7 output files done at time t = 0.700000D+01\n", "\n", "AMRCLAW: Frame 8 output files done at time t = 0.800000D+01\n", "\n", "AMRCLAW: Frame 9 output files done at time t = 0.900000D+01\n", "\n", "AMRCLAW: Frame 10 output files done at time t = 0.100000D+02\n", "\n", "AMRCLAW: Frame 11 output files done at time t = 0.110000D+02\n", "\n", "AMRCLAW: Frame 12 output files done at time t = 0.120000D+02\n", "\n", "AMRCLAW: Frame 13 output files done at time t = 0.130000D+02\n", "\n", "AMRCLAW: Frame 14 output files done at time t = 0.140000D+02\n", "\n", "AMRCLAW: Frame 15 output files done at time t = 0.150000D+02\n", "\n", "AMRCLAW: Frame 16 output files done at time t = 0.160000D+02\n", "\n", "AMRCLAW: Frame 17 output files done at time t = 0.170000D+02\n", "\n", "AMRCLAW: Frame 18 output files done at time t = 0.180000D+02\n", "\n", "AMRCLAW: Frame 19 output files done at time t = 0.190000D+02\n", "\n", "AMRCLAW: Frame 20 output files done at time t = 0.200000D+02\n", "\n", "AMRCLAW: Frame 21 output files done at time t = 0.210000D+02\n", "\n", "AMRCLAW: Frame 22 output files done at time t = 0.220000D+02\n", "\n", "AMRCLAW: Frame 23 output files done at time t = 0.230000D+02\n", "\n", "AMRCLAW: Frame 24 output files done at time t = 0.240000D+02\n", "\n", "AMRCLAW: Frame 25 output files done at time t = 0.250000D+02\n", "\n", "AMRCLAW: Frame 26 output files done at time t = 0.260000D+02\n", "\n", "AMRCLAW: Frame 27 output files done at time t = 0.270000D+02\n", "\n", "AMRCLAW: Frame 28 output files done at time t = 0.280000D+02\n", "\n", "AMRCLAW: Frame 29 output files done at time t = 0.290000D+02\n", "\n", "AMRCLAW: Frame 30 output files done at time t = 0.300000D+02\n", "\n", " Done integrating to time 30.000000000000000 \n", "\n", "============================== Timing Data ==============================\n", "\n", "Integration Time (stepgrid + BC + overhead)\n", "Level Wall Time (seconds) CPU Time (seconds) Total Cell Updates\n", " 1 0.339 0.140 0.524E+05\n", " 2 6.150 6.392 0.114E+07\n", "total 6.489 6.532 0.119E+07\n", "\n", "All levels:\n", "stepgrid 6.364 6.488 \n", "BC/ghost cells 0.120 0.044\n", "Regridding 0.027 0.012 \n", "Output (valout) 0.819 0.000 \n", "\n", "Total time: 7.361 7.348 \n", "Using 1 thread(s)\n", "\n", "Note: The CPU times are summed over all threads.\n", " Total time includes more than the subroutines listed above\n", "\n", "=========================================================================\n", "\n", "\n", "==> runclaw: Finished executing\n", "\n", "==> runclaw: Done executing /home/jose/github/tsunami_workshop/en/dambreak/xgeoclaw via clawutil.runclaw.py\n", "==> runclaw: Output is in /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "make[1]: Nothing to be done for `/home/jose/Downloads/clawpack-5.3.1//clawutil/src/Makefile.common'.\n", "make[1]: Leaving directory `/home/jose/github/tsunami_workshop/en/dambreak'\n" ] } ], "source": [ "!make clean\n", "!make .output" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In case you wandered, all the results were saved in the folder\n", "\n", " _output\n", " \n", "inside this directory. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Processing the results: GeoClaw predefined plotting functions\n", "\n", "\n", "To easily generate some nice figures we have to configure the *setplot.py* file. Then, all figures will be generated in the folder\n", "\n", " ./_plots\n", "\n", "\n", "We shall proceed just as with the setrun.py file." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Overwriting setplot.py\n" ] } ], "source": [ "%%writefile setplot.py\n", "\"\"\" \n", "Set up the plot figures, axes, and items to be done for each frame.\n", "\n", "This module is imported by the plotting routines and then the\n", "function setplot is called to set the plot parameters.\n", " \n", "\"\"\" \n", "\n", "#--------------------------\n", "def setplot(plotdata):\n", "#--------------------------\n", " \n", " \"\"\" \n", " Specify what is to be plotted at each frame.\n", " Input: plotdata, an instance of pyclaw.plotters.data.ClawPlotData.\n", " Output: a modified version of plotdata.\n", " \n", " \"\"\" \n", "\n", "\n", " from clawpack.visclaw import colormaps, geoplot\n", "\n", " plotdata.clearfigures() # clear any old figures,axes,items data\n", " \n", " \n", " def addgauges(current_data):\n", " from clawpack.visclaw import gaugetools\n", " gaugetools.plot_gauge_locations(current_data.plotdata, \\\n", " gaugenos='all', format_string='ko', add_labels=True)\n", " \n", " def set_drytol(current_data):\n", " # The drytol parameter is used in masking land and water and\n", " # affects what color map is used for cells with small water depth h.\n", " # The cell will be plotted as dry if h < drytol.\n", " # The best value to use often depends on the application and can\n", " # be set here (measured in meters):\n", " current_data.user[\"drytol\"] = 1.e-3\n", " \n", "\n", " plotdata.beforeframe = set_drytol\n", "\n", " #-----------------------------------------\n", " # Figure for pcolor plot\n", " #-----------------------------------------\n", " plotfigure = plotdata.new_plotfigure(name='pcolor', figno=0)\n", "\n", " # Set up for axes in this figure:F\n", " plotaxes = plotfigure.new_plotaxes('pcolor')\n", " plotaxes.title = 'Surface'\n", " plotaxes.scaled = True\n", "\n", " # Water\n", " plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor')\n", " plotitem.plot_var = geoplot.surface\n", " plotitem.pcolor_cmap = geoplot.tsunami_colormap\n", " plotitem.pcolor_cmin = 0.\n", " plotitem.pcolor_cmax = 10.\n", " plotitem.add_colorbar = True\n", " plotitem.amr_celledges_show = [1,0,0]\n", " plotitem.patchedges_show = [1,1,1]\n", "\n", " # Land\n", " plotitem = plotaxes.new_plotitem(plot_type='2d_pcolor')\n", " plotitem.plot_var = geoplot.land\n", " plotitem.pcolor_cmap = geoplot.land_colors\n", " plotitem.pcolor_cmin = 0.0\n", " plotitem.pcolor_cmax = 20.\n", " plotitem.add_colorbar = False\n", " plotitem.amr_celledges_show = [1,0,0]\n", " plotitem.patchedges_show = [1,0,0]\n", " plotaxes.xlimits = [-100,100]\n", " plotaxes.ylimits = [-100,100]\n", " \n", " plotaxes.afteraxes = addgauges\n", " \n", " #-----------------------------------------\n", " # Figures for gauges\n", " #-----------------------------------------\n", " plotfigure = plotdata.new_plotfigure(name='Surface at gauges', figno=200, \\\n", " type='each_gauge')\n", " plotfigure.clf_each_gauge = True\n", "\n", " # Set up for axes in this figure:\n", " plotaxes = plotfigure.new_plotaxes()\n", " plotaxes.xlimits = 'auto'\n", " plotaxes.ylimits = [0,12]\n", " plotaxes.title = 'Surface'\n", "\n", " # Plot surface as blue curve:\n", " plotitem = plotaxes.new_plotitem(plot_type='1d_plot')\n", " plotitem.plot_var = 3\n", " plotitem.plotstyle = 'b-'\n", "\n", " # Plot topo as green curve:\n", " plotitem = plotaxes.new_plotitem(plot_type='1d_plot')\n", " plotitem.show = False\n", "\n", " def gaugetopo(current_data):\n", " q = current_data.q\n", " h = q[0,:]\n", " eta = q[3,:]\n", " topo = eta - h\n", " return topo\n", " \n", " plotitem.plot_var = gaugetopo\n", " plotitem.plotstyle = 'g-'\n", "\n", " #-----------------------------------------\n", " \n", " # Parameters used only when creating html and/or latex hardcopy\n", " # e.g., via pyclaw.plotters.frametools.printframes:\n", "\n", " plotdata.printfigs = True # print figures\n", " plotdata.print_format = 'png' # file format\n", " plotdata.print_framenos = 'all' # list of frames to print\n", " plotdata.print_gaugenos = 'all' # list of gauges to print\n", " plotdata.print_fignos = 'all' # list of figures to print\n", " plotdata.html = True # create html files of plots?\n", " plotdata.html_homelink = '../README.html' # pointer for top of index\n", " plotdata.latex = True # create latex file of plots?\n", " plotdata.latex_figsperline = 2 # layout of plots\n", " plotdata.latex_framesperline = 1 # layout of plots\n", " plotdata.latex_makepdf = False # also run pdflatex?\n", "\n", " return plotdata\n", "\n", " \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And again, we will use the **make plots** command from the **Makefile** to generate the figures defined in the **setplot.py** file." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Makefile:186: warning: overriding commands for target `all'\n", "/home/jose/Downloads/clawpack-5.3.1//clawutil/src/Makefile.common:259: warning: ignoring old commands for target `all'\n", "rm -f .plots\n", "python /home/jose/Downloads/clawpack-5.3.1//visclaw/src/python/visclaw/plotclaw.py _output _plots setplot.py \n", "Importing setplot.setplot from /home/jose/github/tsunami_workshop/en/dambreak.\n", "Executed setplot successfully\n", "Will plot 31 frames numbered: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]\n", "Will make 1 figure(s) for each frame, numbered: [0]\n", "\n", "-----------------------------------\n", "\n", "\n", "Creating html pages for figures...\n", "\n", "Directory '/home/jose/github/tsunami_workshop/en/dambreak/_plots' \n", " already exists, files may be overwritten \n", "Now making png files for all figures...\n", " Reading Frame 0 at t = 0 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 0 at time t = 0.0\n", " Reading Frame 1 at t = 1 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 1 at time t = 1.0\n", " Reading Frame 2 at t = 2 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 2 at time t = 2.0\n", " Reading Frame 3 at t = 3 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 3 at time t = 3.0\n", " Reading Frame 4 at t = 4 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 4 at time t = 4.0\n", " Reading Frame 5 at t = 5 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 5 at time t = 5.0\n", " Reading Frame 6 at t = 6 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 6 at time t = 6.0\n", " Reading Frame 7 at t = 7 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 7 at time t = 7.0\n", " Reading Frame 8 at t = 8 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 8 at time t = 8.0\n", " Reading Frame 9 at t = 9 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 9 at time t = 9.0\n", " Reading Frame 10 at t = 10 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 10 at time t = 10.0\n", " Reading Frame 11 at t = 11 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 11 at time t = 11.0\n", " Reading Frame 12 at t = 12 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 12 at time t = 12.0\n", " Reading Frame 13 at t = 13 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 13 at time t = 13.0\n", " Reading Frame 14 at t = 14 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 14 at time t = 14.0\n", " Reading Frame 15 at t = 15 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 15 at time t = 15.0\n", " Reading Frame 16 at t = 16 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 16 at time t = 16.0\n", " Reading Frame 17 at t = 17 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 17 at time t = 17.0\n", " Reading Frame 18 at t = 18 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 18 at time t = 18.0\n", " Reading Frame 19 at t = 19 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 19 at time t = 19.0\n", " Reading Frame 20 at t = 20 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 20 at time t = 20.0\n", " Reading Frame 21 at t = 21 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 21 at time t = 21.0\n", " Reading Frame 22 at t = 22 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 22 at time t = 22.0\n", " Reading Frame 23 at t = 23 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 23 at time t = 23.0\n", " Reading Frame 24 at t = 24 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 24 at time t = 24.0\n", " Reading Frame 25 at t = 25 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 25 at time t = 25.0\n", " Reading Frame 26 at t = 26 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 26 at time t = 26.0\n", " Reading Frame 27 at t = 27 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 27 at time t = 27.0\n", " Reading Frame 28 at t = 28 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 28 at time t = 28.0\n", " Reading Frame 29 at t = 29 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 29 at time t = 29.0\n", " Reading Frame 30 at t = 30 from outdir = /home/jose/github/tsunami_workshop/en/dambreak/_output\n", "Frame 30 at time t = 30.0\n", "Reading gauge data from /home/jose/github/tsunami_workshop/en/dambreak/_output/fort.gauge\n", "In fort.gauge file, found gauge numbers [0, 1, 2, 3, 4]\n", "Read in gauges [0 1 2 3 4]\n", "Found data for Gauge 0 \n", "Found data for Gauge 1 \n", "Found data for Gauge 2 \n", "Found data for Gauge 3 \n", "Found data for Gauge 4 \n", "\n", "-----------------------------------\n", "\n", "Creating latex file...\n", "Directory '/home/jose/github/tsunami_workshop/en/dambreak/_plots' \n", " already exists, files may be overwritten \n", "\n", "Latex file created: \n", " /home/jose/github/tsunami_workshop/en/dambreak/_plots/plots.tex\n", "\n", "Use pdflatex to create pdf file\n", "Created JSAnimation for figure 0\n", "\n", "--------------------------------------------------------\n", "\n", "Point your browser to:\n", " file:///home/jose/github/tsunami_workshop/en/dambreak/_plots/_PlotIndex.html\n" ] } ], "source": [ "!make plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can call the web browser to see a list of all generated plots" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Created new window in existing browser session.\r\n" ] } ], "source": [ "!google-chrome _plots/_PlotIndex.html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But we can try to append some of them here.\n", "\n", "For example an animation" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import IFrame\n", "IFrame(\"_plots/movieframe_allframesfig0.html\", width=700, height=600)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or some screenshots" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nrbeqqKhIa9as0dSpUzV8+HA1btxYkrRp0yZ16dJFmzZtUufOnXXxxRfrwIEDmjdvnnr27KkXX3xR\n119/fbn2c9SoUfL7/erYsaMaNmyojIwMLViwQHfeeaeWLVumGTNmlCw7btw4zZ49WytXrtSdd95Z\nsr9H7ncgQ4cOVc2aNfWf//xHl19+udq0aVNyjIvXPdr3KD09Xeecc46SkpJ09dVXa+/evXr99dfV\ns2dPLVy4UDfddJPS09N16aWXKj8/X6+//rquvPJKLVy4UB06dCgVa9iwYZo+fboaNWqkAQMGKDk5\nWYsXL9aYMWO0YMECffzxx/L5jj5VrqLHIRLs2LFDkpSWlhbw87S0NK1cuVILFizQddddd9RYBw8e\n1KJFixQfH69zzz23zOcXX3yxXnnllVKxFi9erJycHPXo0UMJCQmllrcsSz169NBLL72kzz77TEOH\nDpUkLViwoOSzP2rWrJmaN2+uX3/9VevXr1ezZs0kSZ999pkkBVzn4osvLokbifsCAG4gAYGn9evX\nT5MnT9bzzz+vzMxM9e3bV23bti25OHeSMUbLly/XihUrysTv06ePpk2bJsuyNGbMmDLr/vTTTyUX\nAMUKCgrUs2dPPfHEE7rllluUmppa8tnVV1+tzZs36/HHH9fIkSNLrbd3714lJiaW/Hvw4MHavHmz\n3njjDQ0cOLCkPTMzU126dNEdd9yhPn36qE6dOsfcx/fff79MP6VDk6xfeeUVjRgxQu3bt5ckPfLI\nI1q/fr1Wrlypu+66q9zHfPDgwTLGlCQggwcPLtd6xX744Qfdcsst+tvf/lbSdsEFF2jw4ME6//zz\n1blzZ3355ZeKjo6WJF177bU677zzNHnyZL377rsl60yfPl3Tp09X//79NXPmzJLlJenRRx/V+PHj\n9be//U233377UftT0eMgSRkZGSWJa3n17dtXrVq1Kvfybqpdu7Ykaf369QE/X7dunSTpl19+OWas\ntWvXqrCwUGlpaQGTvpNPPlmSSt1sKI7bvHnzgDFPPvnkMjcoyrPOr7/+qjVr1pT8LBxtnfr16ysh\nIUFbtmxRbm6uYmNjI2pfAMANJCDwtDZt2mjmzJm68847NXPmTL366quSpJSUFJ133nkaNmyYevfu\n7ci2LMvSAw88UKHkJtBFfbVq1XTbbbfps88+06effqprr71WkvT9999r8eLFOvPMM8skH9KhfSu2\n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\nJPPAAw+YiRMnmueee+6Y29q3b59JSEgwycnJZsSIEWbixIlm4sSJJjMz0xhjzLhx4wK+xM3upWvG\n2B9/Yw69/NDn85VpHzFihPH5fKZWrVrm6quvNg8++KC56aabzIUXXmhiYmLM8OHDj7kvxlT8OESC\n5557zjRr1swMHTrUjB492tx8882mQYMGxufzmXvuuSfgOl26dLF9GejAgQONz+czLVu2NCNHjjTD\nhg0ziYmJJioqysydO7fM8nv27Ck5/7t3725GjRplLrvsspLfC+vWrSuzzrfffmsSExNNdHR0yfe9\nffv2xufzmfPOO8/k5eWVWefZZ581Pp/P1K5d29x2223m7rvvNo0aNTI+n8+MHDky4H5G0r4AgJNI\nQI4hKyvLPPLII6Znz54mJSXFWJZlZsyYEXDZVatWmR49epjExESTkpJiBg0aZH7//feAy/7jH/8w\nLVu2NLGxsebkk082zz77rJu7EbG2bNli/v73v5t+/fqZFi1amBo1apiYmBjToEED06tXL/Paa68F\nXC8jI8PcdNNNpl69eiY2Ntb86U9/Mv/4xz/Mhg0bjM/nM8OGDSu1/JAhQ4zf7z9mApKWlhbws0WL\nFpnu3bublJQUk5SUZDp37mzmzJljPv/8c+Pz+cyjjz5aZp3it5u3aNHCxMXFmZo1a5ozzjjDjBkz\nxuTk5JRaNisryzz++OOmXbt2pnr16iY+Pt6kpaWZ3r17m3/84x9l3pxuZ9WqVeayyy4z9erVM4mJ\niaZdu3bmX//6l+1xMcaYp556ypx66qkmNjbW+Hy+cr8BfP78+aZTp06mevXqxufzlUrw7BIQn89n\nunXrFjDe0Y5/165djd/vD/jZe++9Zy699FJTr149ExMTY1JTU81ZZ51lHnnkEfPLL7+Ua1+Mqfhx\n8LrFixebXr16mQYNGpiYmBhTp04d07t3bzN//nzbdYq/H4ESkMLCQjN16lTTqlUrEx8fb1JSUkzv\n3r3N4sWLbePt27fP3HXXXaZp06YlP/833HCD2bp1q+06q1atMldccYWpU6eOiY2NNaeccooZP368\nyc3NtV1n3rx5pmvXriYpKckkJiaaDh06mFdeecV2+UjaF8COW9dJiGyWMQGeXUGJjRs3qlmzZmrS\npInS0tL0+eefa9q0aWUeg9i6davatGmjmjVr6s4779T+/fv117/+VU2aNNGSJUtUrdr/ptu88MIL\n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\nA5eX2l07cJmqFW3aBGxfusam2pVdsZ9TbdqLJBVP64mRVFyky+7bZVcdq3Hg5vrbdgRsT8zKChw+\nNzdge7DVrpyqghWsYOIYY/TdM89o1/LlSk5L09mjRinK75eq4KONdsfN7jyxq6JWpsrcoEGHEpA5\nc0hAPOTcc89Vv379wt0NeAS3QsPgnXfeUbVq1XTjjTeWtMXExOj666/XokWLtHXr1jD2Dl7UKD5e\nUT6f0vPztTtAqcs1NhcEAIKz4h//0Javv1b1hg3VacwYRdmUaMZxKE7sD1cXQ/kYl94BYoK4EZWV\nlaXCQl57i2MjAQmDFStWqHnz5kr8Q2nUDh06lHyOqmu9zV3Co4nx+XRmjRqSpM937y7z+WcB2hBa\n2evXS9/9R9r6c7i7UiVlbt6sbUuWKHPz5grH+On117Xuo48UX7euzhk7VjFJSQ720FsyN2/W9m+/\nPa7jaevzzw/998QTnY8N1wwdOlRJSUmKjY1Vt27d9N1334W7S6jEeAQrDLZv367UAG+mTk1NlTFG\n2w6/MA5VQ3p+vkauWlXy7zv/+1+lxsZq8qmnKrn4hVzl8OeGDfXtvn2asXmzOtasqRPi4iRJP2Zm\nas7OnY73G+WTn56un0eO1MHt26X9B6T4ZKlOM+m+eVJ1uzcNwikHMzO1aNIkZe/cqbwDBxSdkKD4\nevV09ujRQSUQv86dq9WzZim2Zk2dM3as4gK88LMqOJiZqW8nTtSBnTuVf+CAohISlFCvns56+OFy\nH8+iPXt08IMPFNu/v6zDv6eKmY8/lh58ULIsaehQN3YhYhVZlivvATlWFazo6GgNGDBAl1xyiWrX\nrq2ff/5ZU6ZM0XnnnaeFCxeqdevWjvcJ3kcCEgY5OTmKCfC+htjDz5nn5OSEuksIo5GrVumnIx6R\n2pefr335+Xrg55/1QhC/uNslJ2tggwZ6Z9s2DVu+XO2Sk5VvjJalp7vRbZTTzyNHKuvnI0Y9Mncd\n+prSWxq/uPyBdu6Qrrz80IVZvqS1qyVjpIeHS4mHL/zO6yUNf9jR/nvdokmTtG/NmpJ/H8zI0MGM\nDC2aNEldn3iiXDHSN2zQyldekSxLCXXq6Je33w64XNMLL1StCH8XyLcTJ5Y6nnkZGcrLyNC3Eyfq\nvL/8pVwxTHa2su69V1kPP6yo1q1lmjWTDhyQ1qyRVq8+dI7ffbesyy93azfgoLPPPltnn312yb97\n9+6t/v37q1WrVho1apTef//9MPYOlRUJSBjExcXpYIDJwrmHJ3LG/eGO0B+NKyrSuADP+Tul1t69\nrsWWpBPXrXM1/hkuP8J2zsKFrsYv9vP+/epcwYIEOUVF+srm+/jepk36ad++csUxQW7X7k5ZMM8Q\nHzWOzfJFR7xosRSbOAV2k9xt4uTbTHLPsXn+f9u33x7aTmamDqxdG7hvm1ZKz14pJabYPwz78RH/\nv3+/tCxAScvf/jd6pox0aVeAEVSbw6PqgZv3HjgQsD3bZrJ5dH5+wHZ/kJPK/TbtlrH5ztu1H5aX\nlaWM9esDfpaxYYO+ffJJRScm2sc/LGfv3pJJ5nt++UV7fvkl4HLZv/+uxIYNjxqrUqjgex3ysrKU\nsWFDwM8yNmzQ0ilTFJ2YqIM2xRwyD48amYIC+du1k9mxQ/n//a+0dOmhBeLjpZNOOlQNKztb5rbb\nKtRPVxT3sRJz603owf7+lqQTTzxRl112mWbPni1jjCzeJYI/IAEJg9TU1ICPWW3fvl2S1KBBg1B3\nCVXIjxkZ+jEjI9zdQH6O9O2bzsZct/rQ13GyG4ONpLHZorw8bfvmG0dj7v7xR+3+8UdHY3pFUV6e\nth1vBcfMzENfv/7qTKeqHEtGx3mh//rr0huvl25Lr9jfi0aNGikvL08HDhwoM+cVIAEJgzZt2ujz\nzz9XVlZWqR/KxYsXy7IstbEp4VlsrN+vB4OYG1BecYfvbu6sW9fx2JJUb9cuSdIqlx5RaLn60IXX\noo4dXYl/9uJDj8t8fMEFjsXcmJWl+777TukB7iAnR0XpL+3bq4lDv7h7fPSRJOn05ORyx3RqRCPo\n+DbLBzvSYVcY1S6OXTlfu/K8OTblebMTEg6tl5WlLd99p6IA318rJkY1O3dWtaQk25GC/dUDD1Ec\nsPn+2ZartalKE2Mzkhpt0x5VyUY6jjVykZeVpe1LlwY8/r6oKKW2b1+uEZDy8soboyvaz7ysLO1Y\nsiTw8YyOVv3Dx9Pu5yi9Zs2A7Vl2v48q0/F8/31p48Zw98J9V1116OtI338vtWsbdKi1a9cqNjaW\n5AMBkYCEwYABAzRlyhS9+OKLuufwC6zy8vI0ffp0dezYUQ29MIQPRzRJTFT9uLiACUj9+HjHko8j\nXdKokc4v5znm1Hs6nIof7Ps+gk0o7N73kWkzudbuPSDbjhjF/OiRR7Tnt9/KLBN/8sk6eeJESfbv\n0djUOPCLOg6ecELAdrvEwe79Gsk284Ps2oN9D0iw/Qn2fR/leX/HglGjtC/AHfXkpk3V8fDvX6fe\nJ25XDjoAACAASURBVBLs+R8ux9PPzx98sNQckGI1mjbVWffeK8n+5+jnUwO/2CbH5nx2+3gGNVpw\nxcDKn4AUyf6uy/HGPYrdu3er9h9+F/7www+aO3euevXq5UKHEAlIQMKgQ4cOGjhwoEaNGqWdO3eW\nvAl948aNmjZtWri7hxCb2KaNHl6xQqszMyUdGvmoHx+vR884I8w9gxO63HefvpgyRVm7dikvJ0f+\nxETFNGyoU6ZMCXfXqoRzRo3SN48/fqgKVna2ouPjlVCvnjqNGhXurnnS2aNH21YVQ9X05z//WXFx\ncerUqZPq1q2rn376SS+99JISExP1+OOPh7t7qKRIQMLklVde0ZgxY/Tqq69q3759atWqld577z2d\nc8454e4aQqxGdLSe7dBBF37yiSQ5+tgVwi8mKUkXPfqoMrZs0W+SYho1UnyzZuHuVpURk5Skbo8/\nrszNm5W1Y4cS69dXUqNG4e6WZ8UkJanrE08oc/NmHdi+XQmpqRzPysLInRGQYzyh2LdvX82cOVNP\nPfWUMjMzVadOHQ0YMECPPPKI0tLSXOgQIgEJSJhER0dr8uTJmjx5cri7gkqG5CMy1TjhBNXkj3HY\nJDVqxIWygzieKDZixAiNGDEi3N2Ax5CAAFVMkc9X5tlqt+duhKvdTrBzCuzmMiQdfmyuvHHs5krs\nTUkJ2G63X3bbtVs+2P2y66ddu92cjmDbg52L4dTcDadUtv6Ei915ZTeHyO64eWVOTaURpjkgQEXw\n0w0AAAAgZBgBAQAA8DpGQOAhjIAAAAAACBlGQAAAALwuTFWwgIpgBAQAAABAyDACAlQxgapgHW1Z\nJ9qDFWyVKqf6Y1e9x+39tasKFZ+dHbA9y6ZUs90bqO0Ee5ydqmrl9WpXOLpgz2e75QuquXuJYtnc\n2g/qDemVCXNA4CGMgAAAAAAIGUZAAAAAvI4REHgICQgAAIDXMQkdHsIjWAAAAABChhEQAAAAr+MR\nLHgICQhQBblVBcuOU9WQ7DjVT7vl7ar0OFU1K9jt2rXnRUcHbHeqmpDb1asqW7Urp6qcVTZuH2e7\n+MFWwQIQuUhAAAAAvI45IPCQyLy9AwAAAKBSYgQEAADA65gDAg9hBAQAAABAyDAC4kHjCws1vrDQ\ntfj1du1yLbYktVy92tX4Zy9e7Gr8Cz/5xNX4PT76yNX4AIAIxAgIPIQEBIDrVa3crrpj13+3qz8F\n2+5UNS07dlWw7NqdqhJmx+tVrSpb/73OrgqW3fkfLlaAWdfMwwacRQLiQWP9fj0YFeV43LjcXEnS\n9vr1HY8tSak7dkiSfmjVypX4rVeulCR92q2bK/G7L1ggSfpPnz6uxL9szpyQxAcARCCqYMFDmAMC\nAAAAIGQYAQEAAPA65oDAQxgBAQAAABAyjIAAAAB4HXNA4CEkIEAVU+TzlakGFGy1H7tqTm5XDXKq\nqpVTnKqO5VQVrGC3axc/2HY7wS4fLLerWrnd/8rG7Z9fu/O8slXB8iwewYKHVK3frgAAAADCqnLd\nTgQAAEDwGAGBhzACAgAAACBkGAEBAADwOiahw0MYAQEAAAAQMoyAALCtfhNstSunqgw5VW0pXFWM\ngj2edtW97JZ3an/ttutUdaxgq2/ZCTZ+sJyK75WqWcHul1PHmSpYLmMOCDzEG78tAQAAAEQERkAA\nAAC8jjkg8BBGQAAAAACEDAkIAACA1xW5+BWExx57TD6fT61atTrePUIEIwEBAADAcdu6dasef/xx\nJSYmhrsrqOSYAwJUMb6iojLVleyqLQVbBctOZatq5VScYKuBBVsdy6lqVMGyi2NXNauyCfY4OFWt\ny+2qXMFyqj9Oxbc7z+2qYDn1fakyKkEVrHvvvVdnn322CgoKtGfPHhc6g0jBTzEAAACOy5dffqlZ\ns2Zp6tSp4e4KPMAbt7MAAABgL4xVsIqKinTHHXfoxhtv1GmnneZCJxBpSEAAAAC8LoyPYD3//PPa\ntGmTFixY4EIHEIl4BAsAAAAVsnfvXo0dO1aPPPKIUlJSwt0deAQjIB40vrBQ4wsLXYufumOHa7El\nqfXKla7G7+7yHZjL5szxdHwAQAQK0yNYDz30kGrVqqURI0a4sHFEKhIQoIqpVlBw3FWw7DhVtamy\nVc1yu5pQsNt1u92O3fngVHUsu+9XsNWQ3K5q5XYVJrerzDnF7SpYCIMPX5fmv166LSvDdvHffvtN\nL730kp5++mlt3bpVkmSMUW5urvLz87Vx40YlJSWpZs2abvYaHkQC4kFj/X49GBXleNy43FxJ0tYG\nDRyPLUkNt22TJH135pmuxG/7/feSpPcuucSV+L3ef1+S9PaAAa7EH/jOO5Kk//Tp40p8RlYAIII5\nMQfkoqsOfR1p9ffS4LYBF9+6dauMMbrjjjt0++23l/k8LS1Nd955p/7f//t/x9kxRBoSEAAAAATt\n9NNP1+zZs8u0P/TQQ8rKytIzzzyjtLS0MPQMlR0JCID/3969h1dV3fkf/5xDEnIXuRpSLlKNlkEM\nFxWNE0GjXLTQCgnYkTiOA5YZCl4eRenTWuvlUUFota2XlhEZWhkrgqjUX40DIqJiAvEKIloQQgBB\nI7kSkuzfH0iGY/aGbNj77LOS9+t58jyyzso665x9djzfs/b6HACA6QJIwerSpYvG2qzaz58/X6FQ\nSD/84Q99mBDaAlKwAAAA4KlQKBT0FBDDWAEBAAAwXYBfRPhdq1at8n4eaFMoQIB2JtzU1CKNxqvU\nHa/Sq0zndxpVUClYfqdUBXW/pqRjOfEqpc3v1ycpWACOoAABAAAwXYDfhA64RQECAAAC9+lPf6qq\nd9+VJA145ZWAZwPATxQgAAAgUPtXrDhcfITDknUCmw7ACgiM0jYvwAYAAEZo+Pprlf3mN0q78EIl\n9OgR9HQARAEFCAAACMzOuXNl1dWp1513Bj0Vsx1JwfL6hwUp+IBLsIB2JmRZLVJqvErR8Sody+34\npou1dCy347tleuoUvLPzgw/09SuvKHPaNKX06NF8+VWHhgaOu1tcggWDcBYDAICoazh4UG/9938r\n6fTTlXHttUFPB0AUsQICAACibsOyZarev19n3X+/QnG8HTlpMfRFhMDxsAICAACiat/27fr4tdd0\nRk6O0rKzg54OgCjjIwcAABA1VlOT3nzqKXVMSdF5Eyfq06An1FawBwQGYQUEAABEzUd//7u+3rFD\nQydMUMeUlKCnAyAArIAA7UzYJgXLid+pVqYLKkXKq7QrtylDfqcSeTV+rD2u9uZ4r/Od770nSdq6\ndq0+e/NNVR9VhBzav1+S9NmsWWp46CGFb79d4csv92+ybQkrIDAIBQgAAIi6PZ8evvjKCoVa3Fb1\n8ceH/6OwMJpTAhAlFCAAAMCVirIyVe7erVO6d1enzExXvzvmttsi/v1x//7N/71h/Hgd3LNHQ5Yv\n1/ujRnky13aDFCwYhAIEAAC0Sl1lpV6bP1+VX36pQzU1SkhOVlq3bsqbOVOJaWne3ZHFu16gLeMC\nVwAA0CqvzZ+vfZ9/roOVlWpqbFRdZaW+/PxzFf32t0FPDU0+/gAeYwXEQHc3Nuruxkbfxs/ctcu3\nsSVpyIYNvo5/5cqVvo6f/9xzvo4/bsUKX8cHgBNRUVamyi+/tL2t8ssvVVFW5vpyLFs2e0IAtC0U\nIEA7E2pqapFSQ9pPbPIqNctvXs2T12FsO7Bnjw7V1NjeVl9bq8o9e9Q5I8P1uEe/fob+9a8nPL92\njz0gMAgFiIHu6tBBd8THez5uUl2dJKmsZ0/Px5b+b2Xl3aFDfRn/vOJiSdILY8f6Mv6RlYlnJk3y\nZfxrliyRJL141VW+jP/Dl17yZVwA7UN6jx6KT07WwcrKFrclJCUpvXv3AGYFwEQUIAAA4Lg6ZWYq\nrVs32wIkrVs3nerTh1doJb4HBAZhvRsAALTKZTffrK79+ikxPV3huDglpqWpW79+uuJnPwt6amAT\nOgzCCggAAGiVxLQ0XfnLX6qirEzV5eVK796dlQ8ArlGAAAAAVzplZqprjx5BTwNHYxM6DEIBAgAn\niNQmAADcowABAAAwHZvQYRA+vgMAAAAQNayAAAAAmI49IDAIKyAAAAAAooYVEAAAANOxBwQGoQAB\nYIxwk/3/CU1Jo3I7T9MflynzN4XT8+l0XpiC1wnQ/lCAAAAAmI4VEBiEjx0AAAAARA0rIAAAAKYj\nBQsGYQUEAAAAJ+Tjjz9WQUGBvv/97yslJUXdunXTJZdcopdeeinoqSGGsQICAABguoD2gGzfvl1V\nVVX613/9V/Xs2VM1NTVaunSpxo4dqyeffFL//u//7sOkYDoKEKCdscLhFqkzQaXomJJ+43d6lVf9\nvWp3e79umXLcg+LVcfH7vPb7dQuXAroEa/To0Ro9enRE2/Tp0zV48GDNmzePAgS2OOsBAADgmVAo\npF69eqmioiLoqSBGsQICAABguoBjeGtqalRbW6tvvvlGL7zwgv72t7/pmmuu8WFCaAsoQAAAAHBS\nbr31Vj3xxBOSpHA4rPHjx+vRRx8NeFaIVRQgAAAApgt4BeTmm29Wfn6+du3apWeffVaNjY06ePCg\nDxNCW0ABYqC7Gxt1d2Ojb+Nn7trl29iSdF5xsa/jj1uxwtfxr1myxNfxf0h0IQDAMFlZWcrKypIk\nXXvttRo5cqTGjh2rt99+O+CZIRZRgADtTFMo1OrUGbcpOm7TbJzG9zsVx+9UKK/aG+Ls/0T7fb9B\npRIFlbJl+uM1hdvXOVzyIgXr3WcO/xyt9psTGmrChAn66U9/qk8//VRnnnnmSU4MbQ1nvYHu6tBB\nd8THez5uUl2dJKmsZ0/Px5b+b2VlY3a2L+MPKi2VJP2/K67wZfyRf/+7JGnp1Vf7Mv7455+PyvgA\nANg675rDP0f7YoN0/xDXQ9XW1kqSvvnmxAoYtG3t6+MXAACAtqjJx59j+PLLL1u0NTQ06Omnn1ZS\nUpL69+9/0g8NbQ8rIAAAADghN954ow4cOKDc3FxlZmZq9+7d+vOf/6xPPvlE8+bNU3JyctBTRAyi\nAAEAADBdQN+EPmnSJC1YsECPP/649u/fr7S0NA0ZMkRz5szRlVde6cOE0BZQgAAAAOCEFBQUqKCg\nIOhpwDAUIEA709ihg+oTEiLaEurrPRnb79Qsv9Oc/E6jchrH7fhejRNr7U5iLS0q1uYTa/xOe4OD\ngL8HBHCDsxsAAABA1LACAgAAYDpWQGAQChAAAADTBbQJHTgRXIIFAAAAIGpYAQEAADAdl2DBIBQg\nQDvTEBfXInXGKb0qrqHBtt1t2pXf/E7d8SqNyu+0K6/GDyq9yvT+fo8TFL+fh++m8gFo+yhAAAAA\nTMcKCAxi9scyAAAAAIzCCggAAIDpSMGCQVgB8cjTTz+tcDjc4qdDhw7au3dvi/7r1q3TxRdfrJSU\nFGVkZGjmzJmqrq4OYOYAAABA9LAC4qFQKKR77rlHffv2jWjv1KlTxL9LS0uVl5en/v37a/78+dq5\nc6fmzJmjrVu36uWXX47ijAEAQJvAHhAYhALEY6NGjdLgwYOP2Wf27Nnq3LmzXn/9daWkpEiS+vTp\no6lTp6qoqEh5eXnRmCraqaZw2DH9yK6vHacULKd2t6lKQbV7lTrltt0pBcjv+w0q7cqrcUip8pbb\n893t8+b29Q+g7eKvrg+qqqrU5PAHu7KyUkVFRZo8eXJz8SFJhYWFSklJ0bPPPhutaQIAgLbiyB4Q\nr3/YAwIfUIB4yLIsDR8+XOnp6UpOTta4ceO0devWiD4ffPCBGhoaNGTIkIj2+Ph4ZWdna+PGjdGc\nMgAAABBVXILlkeTkZF1//fUaMWKE0tPTVVJSoocfflg5OTnasGGDMjMzJUnl5eUKhULKyMhoMUZG\nRobWrl0b7akDAADTsQcEBqEAsWFZlurr61vVt2PHjpKk/Px85efnN7ePHTtWV1xxhXJzc3Xffffp\nD3/4gySptrY24veOlpiY2Hw7AAAA0BZRgNhYs2aNRowYcdx+oVBImzZtUlZWlu3tOTk5uuCCC1RU\nVNTclpSUJEk6ePBgi/51dXXNtx/L3Y2Nurux8bj9TlTmrl2+jS1Jg0pLfR1/5N//7uv4459/3ujx\nAQBtECsgMAgFiI2zzz5bCxcubFVfu0upjtarVy9t2bIlor9lWSovL2/Rt7y8XD179nQ1V8AtKxRq\nkV7jNoXJbQqWE6/Sq/weP6iULafj4vZ4+f08e8Xv+zV9fLfczsertCsnbl/PQT2f1jPPSEuWRDYW\nFwcyF1f4IkIYhALERo8ePVRYWOjJWJ9//rm6devW/O8BAwYoLi5OxcXFmjBhQnP7oUOHVFpaqokT\nJx53zLs6dNAd8fGezO9oSXV1kqTy007zfGxJyti9W5L0wYABvox/zocfSpJez831ZfxL1qyRJL08\nZowv41+5cqUkaenVV/syPisrAHB8oWuuka65JqLNKiiQnnsuoBkBbU9sfVxjsH379rVoW7lypUpK\nSjR69OjmtvT0dOXl5Wnx4sUR33y+aNEiVVdXq6CgICrzBQAAbYgfEbx+XdaFdo8VEI9cdNFFGjRo\nkIYOHapTTjlFJSUleuqpp9SnTx/deeedEX3vu+8+5eTkKDc3V1OnTtWOHTs0b948jRw5UpdffnlA\njwAAAADwHwWIRyZNmqSXX35Zr776qmpqapSRkaEbb7xRv/zlLyMuwZKkQYMGqaioSLNmzdItt9yi\ntLQ0TZkyRffff39AswcAAEZjDwgMQgHikV//+tf69a9/3er+F110kd544w0fZwQAAADEHgoQoJ2x\nS8HyO23G73Qst+lPbsVa2pXfKVg4rL09P34/XrevZ7hEDC8M0r7+ugIAAAAIFCsgAAAApmMFBAZh\nBQQAAABA1LACAgAAYDpSsGAQVkAAAAAARA0rIEA70xQOtzoFy6t2v3mVRuV2/n6nYNUlJrrq73ca\nmBOnlDO36Wdux3erraZamfK4SMHyGXtAYBAz/moBAAAAaBNYAQEAADAde0BgEAoQAAAA03EJFgzC\nJVgAAAA4IcXFxZo+fboGDBig1NRU9enTRxMnTtSnn34a9NQQw1gBAQAAMF1AKyAPPvig1q1bp/z8\nfA0cOFC7d+/Wo48+qsGDB+udd95R//79fZgUTEcBAsCR27Qrv9Ol3PZ32+42pcdtu1OqVU1ysqt2\np/HdPl636VV+t+Mwv8+XoLhNdYMZbr31Vj3zzDOKO+rvf0FBgc455xw98MADWrRoUYCzQ6yiAAEA\nADBdQJvQhw0b1qLtjDPO0D/90z9p06ZNPkwIbYEZH5sAAADAGHv27FHXrl2DngZiFAUIAACA6Zp8\n/HFp8eLFKisr06RJk07mEaENowABAACAJzZv3qzp06crJydHhYWFQU8HMYo9IAa6u7FRdzc2+jZ+\nxu7dvo0tSed8+KGv41+yZo2v41+5cqWv449//nlfxwcAtEEx8EWEe/bs0ZVXXqlTTz1Vf/3rXxUK\nhXyYENoCChAAgXGbmuVVu9P9OrW7Ta+qSk21ba/o1MlVu9P9+p12lVBfb9se19Dgqt1pfKf+fnOb\nvhVUupRX9xtr83c6L5zOOwRg6zOHf45W/02rfvXAgQMaNWqUDhw4oLVr1+q0007zYYJoKzjrDfSr\ncFh3+vAHu+O3bzq+9GnTWLd9+yRJn2Rl+TL+WVu2SJLeOf98X8a/YP16SdKreXm+jH95UZEkadmP\nfuTL+D9evtyXcQEAMcCL7wHpd83hn6Pt2yAtH3LMXzt48KCuuuoqbd26Va+99prOOuusk5wI2joK\nEAAAAJyQpqYmFRQU6J133tGKFSt0vk8fAqJtoQABAAAwXUDfhH7LLbfoxRdf1NixY7Vv3z79+c9/\njrj9X/7lX3yYFExHAQIAAIAT8t577ykUCunFF1/Uiy++2OJ2ChDYoQABAAAwXUApWKtWrfLhTtHW\nUYAAMIbfaVf1CQmu2p1SsA6kp9u2f9G7t237zu99z7bd79SpxLo6V+1O6VhuU7OcuE2pcjuOKelS\npszTidP55XS+kILlkYAuwQJOBF9ECAAAACBq+NgBAADAdKyAwCCsgAAAAACIGlZAAAAATBfQJnTg\nRLACAgAAACBqWAEBEBi3aUVe9XfLbarP7tNOs21f7/ANwYe+irdtT0mtbsXs/o/T43VKtUqtqrJt\n71RRYdueXFPjaj5uuU3NcuLV68GUtKtYu9+6xETb9qrUVNv2oJ6HNoc9IDAIZz0AAACAqGEFBAAA\nwHTsAYFBWAEBAAAAEDWsgAAAAJiOPSAwCCsgAAAAAKKGFRAAnvEqZcjtOG77O6UtOc3HKUXKKRXK\nKe3n0Gr7tCsNtG92StmyakL2v+DwNFSmprka30lQaUVevR5iLW2pvaVguX29BcWSw/kV61gBgUFi\n668xAAAAgDaNFRAAAADTkYIFg1CAAAAAmI5LsGAQLsECAAAAEDWsgBjoV01N+lV9vW/jd9u3z7ex\nJemsLVt8Hf+C9et9Hf/yoiJfx//x8uW+jg8AaIO4BAsGoQAB4MjvNCG36UZOnFKtGuLs/8Q59Xfi\nNE+n9rM3b7ZtX3H7WNv2X849ZNu+aEKZbXttXJJtuyOHzyuqU1Ns2w+kp9u2Oz1vCQ4fiDj19yrV\nypS0q1jj1fPjNI7T68cpHSsoxqZdAW0ABYiBfhUO606HN1Yno+O3byK+7tTJ87El6dSKCknSP/r2\n9WX807dtkyRtzM72ZfxBpaWSpFXDh/sy/ojVqyVJy370I1/GZ2UFANow9oDAIHxMBAAAACBqWAEB\nAAAwHSsgMAgrIAAAAACihhUQAAAA05GCBYNQgABwzav0Kr85pTA5pfe4TVtyaj9t927b9htmp9q2\ndzpYY9ten5Bg2646+2antCvHv/Qu18CdnjentDHT06j8nr/b88jv9Cq3nF6fTilYjq9nn5F2BcQe\nChAAAADTsQcEBjH74ykAAAAARmEFBAAAwHTsAYFBWAEBAAAAEDWsgAAAAJiOPSAwCAUIAGP4nb7l\nNu3KKWWrU0WF/R2c5m4+yTX26Vh1iYm27YcS423bO6jRtr3r3n227d337rVtd3pcTvNMqLeP5XJq\n9+r4uk3l8jvtyu39+p2O5dXjdXodVqXap735/Ty3+7QrChAYhEuwAAAAAEQNKyAAAACmYxM6DMIK\nCAAAAICooQABAAAwXZOPP8dQXV2tu+66S6NHj1aXLl0UDoe1aNEirx8d2hgKEAAAAJyQffv26Z57\n7tHmzZuVnZ2tUKidhwGgVdgDAsB3fqdXueU0n6BSiZykHzhg255aVWXbXp+QYNvulDrV+auvXLW7\nTcFySglzavfqeXbb7vS8ObU7pWw5tbvl1ThOvErNOpCebtvulILlVrtPtXIroD0gPXv21O7du9W9\ne3eVlJTovPPO82ESaGtYAQEAAMAJiY+PV/fu3YOeBgzDCggAAIDp+B4QGIQVEAAAAABRwwoIAACA\n6VgBgUEoQAz0q6Ym/cphU6kXTnXYaOqV07dt83X8QaWlvo4/YvVqX8f/8fLlvo4PAAAQJAoQAJ5x\nmy7l1ThepWx5NX+n1Cm3nFKwnMZ3Sk9ySp1yStPyKtXK7xQsr1KzEuvqbNvdpmPVJSa6aneb1uWW\nV+M4Pd6KTp1c9YfPvEjB+uoZ6etnItsavznJQYGWKEAMdHcopNkdOng+bvy3bwq+cYhWPFmnfPtm\nasf3vufL+L127pQkvTdwoC/jn/v++5KkVcOH+zL+kZWVZT/6kS/js7ICADimztcc/jlazQZp85Bg\n5oM2iwIEAADAdOwBgUEoQAAAAEwXYAHy+9//XhUVFSorK5MkrVixQjt27JAkzZgxQ2lpaT5MDCaj\nAAEAAMAJmzt3rr744gtJUigU0rJly7Rs2TJJ0uTJkylA0AIFCAAAgOm82ITuNO5x/OMf//DhjtGW\nUYAA8CxFKqi0K7/Tsdzy6n7dpmA5PQ9O/Z3Sn5zancZxerx+p5O57e/29eOU1uX0PLhN/apJTrZt\nd0qRCio1qyo11bb9gENgidv5WAq56u+3kM077la8BwfgAgUIAACA6diEDoN487EJAAAAALQCKyAA\nAACmC3APCOAWKyAAAAAAooYVEAAAANOxBwQGoQAB2plwU1OLNCCvUnSOdZ92Yi3tyqvxvZpPck2N\nbbtTCpMTt6lNbvu7TZ3yKjUrqJQtp+fB6Xi5fd6c0qXqEhNt2706fxvi7N8SVHTqZNvulOLlxIS0\nKwDRQQECAABgOlZAYBD2gAAAAACIGlZAAAAATEcKFgzCCggAAACAqGEFBAAAwHTsAYFBKEAABMbv\ntCu36UBBpSo5Sayrs213m4LllMLktt3vtCuvnje/BfV4nV7PTulYTqlWTqpSU23bnVKwnMYn7Sog\nXIIFg3AJFgAAAICoYQUEAADAdFyCBYOwAgIAAAAgalgBAQAAMB0rIDAIBYiB7rIs3eWwSdQLpxw4\n4NvYktRr505fxz/3/fd9HX/E6tW+jv/j5ct9HR8AACBIFCAAPOM21cpvXqUqBZWm5TalyqtxTEmv\n8vt+vXrdOs3TKc0starKtt0pdcptu1NqllPalVM6VlD8TrWKtRSvViMFCwahADHQ3aGQZnfo4Pm4\n8d++Gan06X82ad/+T7WsZ09fxs/ctUuS9N7Agb6Mf2RlZdXw4b6Mf2Rl5YWxY30Zf9yKFb6MCwAA\n4AYFCAAAgOnYAwKDkIIFAAAAIGpYAQEAADAde0BgEFZAAAAAAEQNKyAAYo7paVpezdPvlCpT0q6C\n4vdxd5uOle4Qke427cop1eqrzp1djW9sWtS3TJ9/C+wBgUFYAQEAAAAQNayAAAAAmI4VEBiEAgQA\nAMB0bEKHQbgECwAAAEDUsAICAABguibJl331XIIFH1CAAECMCiq9yqv+pGYd5lUqWmJdnW27UzqW\nU6qVU3tNcrJte1BpUSGPrv1pc2lXQBtAAQIAAGA69oDAIOwBAQAAABA1rIAAAACYzq8rHtvXf3AM\n6AAAEM1JREFUlZSIElZAjmH37t264447dOmllyo9PV3hcFhr1qxx7L9u3TpdfPHFSklJUUZGhmbO\nnKnq6uoW/SzL0kMPPaR+/fopKSlJ5557rpYsWeLnQwEAAPBFfX29Zs2apczMTCUnJ2vYsGEqKioK\nelqIYRQgx/DJJ59ozpw52rVrlwYOHKhQyHkjW2lpqfLy8lRXV6f58+drypQpevLJJ1VQUNCi7+zZ\ns3XHHXdo5MiR+t3vfqc+ffroJz/5iZ599lk/Hw4AAGirmnz8OY7rrrtOv/nNbzR58mQ98sgjiouL\n05gxY7Ru3TovHyHaEC7BOoahQ4dq//796tSpk5YuXaq33nrLse/s2bPVuXNnvf7660pJSZEk9enT\nR1OnTlVRUZHy8vIkSbt27dK8efP0s5/9TL/97W8lSTfccIMuueQS3XbbbcrPzz9moQPEAr/Tfkzn\n9PyUlVQpc0jqSY/T3lKqTJnnlpISZQ0ZctLjuH28yTU1rvpXpdq/BoM6f92mXZFqFVvWr1+v//mf\n/9HDDz+sm2++WZI0efJkDRgwQLfffrvWrl0b8AwRi3i3cAwpKSnq1KnTcftVVlaqqKhIkydPbi4+\nJKmwsFApKSkRKxvLly9XQ0ODpk2bFjHGtGnTtHPnzmMWOQDMtmtDVdBTgI+2lJQEPQW0Z0dSsLz+\nOU59+NxzzykuLk5TpkxpbuvYsaNuuOEGvfXWWyorK/PsIaLtoADxwAcffKCGhgYN+c4nX/Hx8crO\nztbGjRub20pLS5WSkqKzzz47ou/5558vy7Ii+gIAAMSy0tJSZWVlKfU7K2vnn39+8+3Ad1GAeKC8\nvFyhUEgZGRktbsvIyNCuXbsi+vbo0cO2n6SIvgAAAK0S0B6Q8vJyx/c/lmXxvga22s0eEMuyVF9f\n36q+HTt2dDV2bW2t4+8lJiY2336kr1O/o8cCAACIdbyvwYloNwXImjVrNGLEiOP2C4VC2rRpk7Ky\nslo9dlJSkiTp4MGDLW6rq6trvv1IX6d+R49l58hJfJdl6a6GhlbPz620Kn+vU8/0+dOQc99/39fx\nR6xe7ev441as8HX8lZ9+qvXfuSbX8mjzqdOlwl59ka5X8/SdQ5BExVd1Kv6v8hbtcXH2HzFa8Q/b\nD2+5e0ad+oc9GkcOm6bdbhV2PLou5xmUPV98oZX/9V8tb/A5WKTRob0yPd22/WCXLrbtQZ1fRhzd\nb9OcYvrNtLXJpydz0zFvPZn3NWi/2k0BcvbZZ2vhwoWt6mu3lHi8/pZlqby85RuL8vJy9ezZM6Lv\naps3sEd+9+i+37Vt2zZX8wLsbK2o0NaKiqCn0W7tft/NG5h3fJsH/PEZ17u3adu2bVNOTk7Q04jQ\ntWtXJScnq6bmWt/uIyEhQV27drW97buXmh/Rmvc1aL/aTQHSo0cPFRYW+jL2gAEDFBcXp+LiYk2Y\nMKG5/dChQyotLdXEiROb27Kzs7VgwQJt3rw5YiP622+/rVAopOzsbMf7GTlypBYvXqy+ffvyiQIA\nAFFSW1urbdu2aeTIkUFPpYXevXtr06ZN2rdvn2/30bVrV/Xu3dv2tuzsbK1evVpVVVURG9Fb874G\n7VfIsgxZ2w7Y0qVLVVBQoFWrVik3N7fF7WPGjNH777+vTz75pDmKd8GCBZo6dapeeeUVXX755ZKk\nsrIy9evXTzfeeKMeeeSR5t/Pzc3Vtm3btH37dr4HBAAAGGH9+vUaNmyY5s6dq1tuuUXS4W9GHzBg\ngLp166Y333wz4BkiFrWbFZATde+99yoUCumjjz6SZVlatGiR3njjDUnSz3/+8+Z+9913n3JycpSb\nm6upU6dqx44dmjdvnkaOHNlcfEhSZmambrrpJs2dO1f19fU677zztGzZMr355pv6y1/+QvEBAACM\ncf755ys/P1933nmn9uzZozPOOEMLFy7U9u3b9dRTTwU9PcQoVkCOIxwO2xYFoVBIDd/ZCL5u3TrN\nmjVLGzZsUFpamiZOnKj7778/4ssJj3jwwQf1xBNPqLy8XGeeeaZmz56tSZMm+fY4AAAA/FBfX69f\n/OIXWrx4sb7++msNHDhQ9957r/Ly8oKeGmIUBQgAAACAqDEk0xIAAABAW0ABEmN2796tO+64Q5de\neqnS09MVDoe1Zs0ax/7r1q3TxRdfrJSUFGVkZGjmzJmqrq5u0c+yLD300EPq16+fkpKSdO6552rJ\nkiV+PhS00tNPP61wONzip0OHDtq7d2+L/q095ogN9fX1mjVrljIzM5WcnKxhw4apqKgo6GnBpddf\nf93xPF2/fn1E382bN2vUqFFKS0tTly5dVFhY6GtCEdyprq7WXXfdpdGjR6tLly4Kh8NatGiRbV83\nx3LBggXq37+/kpKSlJWVpd/97nd+PgzAaGxCjzGffPKJ5syZozPPPFMDBw7UW2+95di3tLRUeXl5\n6t+/v+bPn6+dO3dqzpw52rp1q15++eWIvrNnz9aDDz6oG2+8UUOHDtULL7ygn/zkJwqHwyooKPD7\nYeE4QqGQ7rnnHvXt2zeivVOnThH/dnPMERuuu+46Pf/887r55pubN2eOGTNGq1ev1kUXXRT09ODS\nTTfdpKFDh0a0nXHGGc3/XVZWpn/+53/WqaeeqgceeECVlZWaM2eOPvzwQ61fv15xcfxvN2j79u3T\nPffcoz59+jRHyNpxcyyfeOIJTZs2Tfn5+br11lv1xhtvaMaMGaqtrdVtt90WpUcGGMRCTKmqqrK+\n/vpry7Is67nnnrPC4bD1+uuv2/YdPXq0lZmZaVVVVTW3/elPf7LC4bD16quvNreVlZVZCQkJ1owZ\nMyJ+Pzc31+rdu7fV1NTkwyNBay1cuNAKh8NWSUnJcfu29pgjNrzzzjtWKBSy5s2b19xWV1dnnXHG\nGVZOTk6AM4Nbq1evtkKhkLV06dJj9ps2bZqVkpJi7dy5s7mtqKjICoVC1h//+Ee/p4lWqK+vt/bs\n2WNZlmUVFxdboVDIevrpp1v0a+2xrK2ttbp27WqNHTs24vevvfZaKy0tzaqoqPDpkQDm4hKsGJOS\nktLiU287lZWVKioq0uTJkyNStgoLC5WSkqJnn322uW358uVqaGjQtGnTIsaYNm2adu7cecxVFkRX\nVVWVmpqabG9zc8wRG5577jnFxcVpypQpzW0dO3bUDTfcoLfeektlZWUBzg4nqqqqSo2Njba3Pf/8\n87rqqquUmZnZ3HbZZZcpKyuLczRGxMfHq3v37sft19pjuWrVKn311Vf6j//4j4jf/8///E9VVVWx\nOg3YoAAx1AcffKCGhgYNGTIkoj0+Pl7Z2dnauHFjc1tpaalSUlIivnldOpzdbVlWRF8Ew7IsDR8+\nXOnp6UpOTta4ceO0devWiD5ujjliQ2lpqbKysiK+HVg6fO4duR1muf7665Wenq7ExERdeumlKikp\nab5t165d2rt3b4tLtKTDx5xz1BxujuWR//7u3+YhQ4YoHA5z3AEbXIxqqPLycoVCIWVkZLS4LSMj\nQ2vXro3o26NHD9t+0uE/tAhOcnKyrr/+eo0YMULp6ekqKSnRww8/rJycHG3YsKH50zc3xxyxoby8\n3PF4WZbFuWeQhIQETZgwQWPGjFHXrl318ccfa+7cucrNzdW6det07rnnqry8XJIcj/lXX32lQ4cO\nKT4+PtrTh0tujmV5ebk6dOigrl27RvSLj49Xly5dOM8BGxQgPrIsS/X19a3q27FjR1dj19bWOv5e\nYmJi8+1H+jr1O3osnLwTOeb5+fnKz89vbh87dqyuuOIK5ebm6r777tMf/vAHSe6OOWID517bceGF\nF+rCCy9s/vdVV12l8ePHa+DAgbrzzju1cuXK456j0uFjTgES+9wcy9raWiUkJNiOw99mwB6XYPlo\nzZo1SkpKOu5PcnKytmzZ4mrspKQkSdLBgwdb3FZXV9d8+5G+Tv2OHgsnz6tjnpOTowsuuCAirtXN\nMUds4Nxr277//e9r3LhxWrVqlSzLOu45KnHMTeHmWCYlJTl+8MTfZsAeKyA+Ovvss7Vw4cJW9bVb\n5j1ef8uympeJj1ZeXq6ePXtG9LWLGTzyu0f3xcnx8pj36tUrokhxc8wRGzIyMmwvv+Dcazt69eql\n+vp6VVdXN5/TTudo586dWf0whJtjmZGRocbGRu3bty/iMqxDhw5p//79nOeADQoQH/Xo0UOFhYW+\njD1gwADFxcWpuLhYEyZMaG4/dOiQSktLNXHixOa27OxsLViwQJs3b47YiP72228rFAopOzvblzm2\nR14e888//1zdunVr/rebY47YcOQ7BqqqqiI2onPutR2fffaZEhMTlZqaqtTUVHXr1k3FxcUt+q1f\nv57jbZCePXu2+lhmZ2fLsiwVFxdr1KhRze3vvvuumpqaOO6ADS7BMlR6erry8vK0ePHiiG/BXrRo\nkaqrqyO+XHDcuHGKi4tr3ktwxOOPP67MzEy+DC1gdt+qu3LlSpWUlGj06NHNbW6OOWLDhAkT1NDQ\noCeffLK5rb6+XgsXLtSwYcMi4j0R2+zO0/fee08vvviiRo4c2dw2fvx4vfTSSxERy6+99pq2bNnC\nOWqY1h7LSy+9VJ07d9Zjjz0W8fuPPfaYUlJSdOWVV0ZtzoApQpZlWUFPApHuvfdehUIhffTRR1qy\nZIn+7d/+Taeffrok6ec//3lzv40bNyonJ0c/+MEPNHXqVO3YsUPz5s3T8OHDtXLlyogxZ82apblz\n52rKlCk677zztGzZMv3tb3/TX/7yFz45D1hWVpYGDRqkoUOH6pRTTlFJSYmeeuopZWZmav369RGr\nIG6OOWLDxIkTtXz5ct10003N34ReXFys//3f/1VOTk7Q00MrXXbZZUpKStJFF12k7t2766OPPtIf\n//hHdezYUevWrdNZZ50lSdq5c6cGDx6sU045RTNnzlRlZaXmzp2r3r17a/369VyCFSN+//vfq6Ki\nQmVlZXr88cd19dVXa9CgQZKkGTNmKC0tzdWxfOyxxzR9+nSNHz9eI0eO1Jo1a7R48WLdf//9mjVr\nVlAPE4hdAX0BIo4hFApZ4XC4xU+HDh1a9H3zzTetiy++2EpOTrZ69OhhzZgxI+Jbso/2wAMPWKef\nfrqVmJhonXPOOdYzzzzj90NBK/ziF7+wBg8ebJ166qlWx44drb59+1rTp0+39u7da9vfzTFH8A4e\nPGjdfvvtVs+ePa2kpCTrggsu4FvrDfToo49aw4YNs7p27WolJCRYmZmZ1nXXXWd99tlnLfp+/PHH\n1qhRo6zU1FSrc+fOVmFhoeP5jGD07dvX9v+z4XDY2r59e3M/N8fyT3/6k/WDH/zASkxMtM4880zr\nkUceidbDAYzDCggAAACAqGEPCAAAAICooQABAAAAEDUUIAAAAACihgIEAAAAQNRQgAAAAACIGgoQ\nAAAAAFFDAQIAAAAgaihAAAAAAEQNBQgAAACAqKEAAQAAABA1FCAAAAAAooYCBAAAAEDUUIAAAAAA\niBoKEAAAAABRQwECAAAAIGooQAAAAABEDQUIAAAAgKihAAEAAAAQNRQgAAAAAKKGAgQAAABA1FCA\nAAAAAIgaChAAAAAAUUMBAgAAACBqKEAAAAAARA0FCAAAAICooQABAAAAEDUUIAAAAACihgIEAAAA\nQNRQgAAAAACIGgoQAAAAAFFDAQIAAAAgaihAAAAAAEQNBQgAAACAqKEAAQAAABA1FCAAAAAAooYC\nBAAAAEDUUIAAAAAAiBoKEAAAAABRQwECAAAAIGr+P7frVS0gVlsUAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "execution_count": 16, "metadata": { "image/png": { "width": 400 } }, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image('_plots/frame0009fig0.png',width=400)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And gauge time series." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nV05FihRRhw4dtHjx4gx7LI/Ho6effvpSy8P1SK8vf65cufTII48oKSlJK1asuLQ/NjZW69evV61a\ntfTUU0+lOa9w4cLKkyePJGnLli1as2aNOnbsqHvvvTfV7QoUKKAXXnhB58+f17x58/52nZI0YMAA\nOY6jpUuXXtP9XM20adPk5+enkSNHptpfqlQpPfbYY+mOLSlRooRy586dZn/z5s1166233nBtiYmJ\nmjNnjoKDgzVkyJBUx2rUqKHu3bunOSejn38AyMroggUgx+jUqZPuueceffHFF1q7dq3i4uK0du1a\nffLJJ/r444/Vo0cPTZkyJUMeq06dOn/rvP3792vUqFFauXKl9u3bl2oMh8fjSTWGYf369ZKkli1b\nXvV+161bJ0mKj49P041Lko4ePSrHcbRt27ZrqvPEiRN69dVX9d///le7du3SuXPnrljn33XmzBnt\n2rVLZcuWTTfMNWzY8Irnzpw5U9OmTdN3332nkydP6uLFi5eO5c2b94bq2r59uxISElSnTh3lz58/\n3bomT56cal9GP/8AkJURQADkKH5+fmrevLmaN28uyczONG/ePPXq1UvTp0/XPffco/bt29/w4xQv\nXvy6z9m9e7fq1Kmj+Ph4RUZGqlWrVgoODpafn5/27NmjadOm6cKFC5duf+rUKXk8HpUqVeqq9338\n+HFJ0rJly6444Nnj8aQKElcSHx+v2rVra+/evapbt6569OihwoULK1euXDp16pTeeOONVHX+XadP\nn5YkFStWLN3jV9o/aNAgjR07ViVLllTr1q1VqlQpBQQESJKmTJlyw2uRxMfHX3ddGfn8A0BWRwAB\nkKN5PB516tRJW7Zs0YsvvqiVK1deCiBer+mlmpSUlOa8U6dOXfV+r9frr7+ukydPaurUqerWrVuq\nY3PmzNHUqVNT7StYsKAcx7mm1obg4GBJ0tixY9W/f//rru2PJk2apD179uiFF17Qc889l+rY+vXr\n9cYbb9zQ/acoUKCAJOnIkSPpHk9v/6+//qpx48apZs2a+vrrr5UvX75Ux2fPnp3mHK/XK8dx0n2d\nU8LGjdaVkc8/AGR1jAEBAElBQUGSUq9XUahQIUmmW9Sfffvttxlew88//yxJ6tChQ5pjq1atShNq\n6tevL0nXNKYh5bZffvnljZapn3/+WR6P54p1pidlzZM/doW6mqCgIFWoUEEHDx5Mt9Uivd9l165d\nSk5OVosWLdKEjwMHDmjXrl1pzrne17lKlSoKCAjQli1b0m2xSG92rox8/gEgqyOAAMgR5syZo+XL\nl6c7aPnw4cOaOHGiPB6PGjVqdGl/3bp15TiOpkyZkurCef/+/RoxYkSGr8FQrlw5SWkv4pcuXar3\n3nsvze3Dw8N1++23a/PmzRo1alSa4ydOnLjUFSoiIkKRkZGaP3/+Fce5bN26Vb/++us11ek4Tpo6\n4+LiNGrUqHSfl5CQEEm67u5P3bt318WLFzV48OBU+/fv36+xY8emeayU53Dt2rVKTk6+tP/s2bPq\n27dvuq0ctWvXltfr1ezZs1ONuTlx4oSefvrpNI+RO3du3XfffTp16pRefPHFVMe+++47zZgxI81j\nZOTzDwBZHV2wAOQIGzZs0NixY1W8eHE1bNjw0ixOu3fv1pIlS3T+/Hndfffd6tix46Vz6tatq0aN\nGunLL79U3bp11bRpUx05ckSLFi1S69atNXfu3AytsV+/fpoyZYo6deqkTp06qWTJktq6dauWLl2q\nzp07a86cOWnOmTlzppo0aaIhQ4Zo3rx5aty48aX1TpYvX64ff/zx0gDu2bNnq1mzZurTp4/efPNN\n1atXTwULFtSBAwe0ZcsWff/991q3bp2KFi36l3V2795dr732mgYOHKiVK1eqUqVK2rlzpxYvXqyO\nHTumW2ezZs302muvqU+fPurYsaOCgoJUsGBBPfLII3/5WE899ZQ+/vhjzZkzRz/++KNatmypU6dO\n6cMPP1RUVJQWLFhwqaucZMZfdOnSRXPnzlVYWJhatmyp+Ph4LVu2TAEBAQoLC9N3332X6jGKFy+u\nrl27aubMmQoLC1ObNm10+vRpffrpp4qKilJcXFyaulImCnj11Ve1fv163X777Tp06JA+/PBDtWnT\nRh9//HGqujLy+Zekr776SpMmTZLH49HZs2clSTt27FCvXr0u3SajJlQAgAznzuy/WdPZs2ed559/\n3mndurVTuHBhx+PxpJk3Pjk52ZkyZYrTvn17p0yZMk7+/Pmd6tWrOy+++KJz/vx5lyoHcODAAeft\nt992OnTo4FSpUsUJDg528ubN65QsWdJp06aNM3v27HTPi4+Pdx544AGnWLFijr+/v1OjRg1n8uTJ\nzp49exyv1+v07t071e179uzp+Pn5/eV6F+XKlXMqVKiQ7rF169Y5zZo1cwoXLuwUKFDAiYyMdBYu\n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\nKCYmJtW++Ph4l6rJPjyO4zhuF5HdrF69Wk2bNpVkgsefeTweDRw4UP/5z39S7Y+NjVVERIQ2bdqk\n8PBwK7UCAADg2nG9duNoAckE1atX14IFC9LsHzJkiM6ePas333xTFSpUcKEyAAAAwF0EkEwQEhKi\n9u3bp9k/ZswYeTwetWvXzoWqAAAAAPcxCN0yj8fjdgkAAACAa2gBseiLL75wuwQAAADAVbSAAAAA\nALCGAAIAAADAGgIIAAAAAGsIIAAAAACsIYAAAAAAsIYAAgAAAMAaAggAAAAAawggAAAAAKwhgAAA\nAACwhgACAAAAwBoCCAAAAABrCCAAAAAArCGAAAAAALCGAAIAAADAGgIIAAAAAGsIIAAAAACsIYAA\nAAAAsIYAAgAAAMAaAggAAAAAawggAAAAAKwhgAAAAACwhgACAAAAwBoCCAAAAABrCCAAAAAArCGA\nAAAAALCGAAIAAADAGgIIAAAAAGsIIAAAAACsIYAAAAAAsIYAAgAAAMAaAggAAAAAawggAAAAAKwh\ngAAAAACwhgACAAAAwBoCCAAAAABrCCAAAAAArCGAAAAAALCGAAIAAADAGgIIAAAAAGsIIAAAAACs\nIYAAAAAAsIYAAgAAAMAaAggAAAAAawggAAAAAKwhgAAAAACwhgACAAAAwBoCCAAAAABrCCAAAAAA\nrCGAAAAAALCGAAIAAADAGgIIAAAAAGsIIAAAAACsIYAAAAAAsIYAAgAAAMAaAggAAAAAawggAAAA\nAKwhgAAAAACwhgACAAAAwBoCCAAAAABrCCAAAAAArCGAAAAAALCGAAIAAADAGgIIAAAAAGsIIAAA\nAACsIYAAAAAAsIYAAgAAAMAaAkgm2Lhxo/r376/q1asrMDBQN910k+677z7t3LnT7dIAAAAAV+Vy\nu4Ds6JVXXtHXX3+te++9VzVr1tThw4c1btw4hYeHa8OGDapWrZrbJQIAAACuIIBkgn/961+KiYlR\nrlyXn97OnTurRo0aGjVqlKZPn+5idQAAAIB7CCCZoH79+mn2VaxYUbfeequ2bdvmQkUAAACAb2AM\niEVHjhxRkSJF3C4DAAAAcA0BxJKZM2fq4MGD6tKli9ulAAAAAK4hgFjw448/qn///rrjjjvUvXt3\nt8sBAAAAXEMAyWRHjhxRmzZtVKhQIX344YfyeDxulwQAAAC4hkHomej06dNq3bq1Tp8+rbVr16p4\n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\n", "text/plain": [ "" ] }, "execution_count": 17, "metadata": { "image/png": { "width": 400 } }, "output_type": "execute_result" } ], "source": [ "Image('_plots/gauge0001fig200.png',width=400)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xd4VGX+/vF7JgkJkAKJhCYQFKRIbytVEOlNKcGIIGBZ\nFVRA3V1dleL6FYFddNVVVBBY3OCCixQJIE2adFAQEEQgiLQASeiE5Pz+eH4BQyYhk0zmTML7dV1z\njZxz5swn5wSce57msCzLEgAAAAB4gdPuAgAAAADcOgggAAAAALyGAAIAAADAawggAAAAALyGAAIA\nAADAawggAAAAALyGAAIAAADAawggAAAAALyGAAIAAADAawggAAAAALyGAAIAAADAawggAAAAALyG\nAAIAAADAawggAAAAALyGAAIAAADAawggAAAAALyGAAIAAADAawggAAAAALyGAAIAAADAawggAAAA\nALyGAAIAAADAawggAAAAALyGAAIAAADAawggAAAAALyGAAIAAADAawggAAAAALyGAAIAAADAawgg\nAAAAALyGAAIAAADAawggAAAAALyGAAIAAADAawggAAAAALyGAAIAAADAawggAAAAALyGAAIAAADA\nawggAAAAALyGAAIAAADAawggAAqN1q1by+nM+z9rUVFRuuOOOzxQkeeMGjVKTqdTq1atsrWOqVOn\nyul0avr06fly/m+//VZOp1NjxozJl/MDAOxHAAGQpZ9++knPPvusateurRIlSigwMFDly5dX165d\nNWXKFF25csXuEjNwOBxyOBweOY+vyepnczqduu+++2yv41bm7XtQmP3666965plndM8996hs2bIK\nCgpS+fLl1apVK02dOlVXr161u0QAHuBvdwEAfNOYMWM0ZswYWZalpk2bqm3btgoJCdHx48e1atUq\nPfHEE/roo4+0ceNGu0u9JTz77LOKiYlRxYoVba2jZ8+eatq0qcqWLWtrHSic9u/fr9jYWP3hD39Q\ngwYNFB4erlOnTikuLk6DBw/WjBkztGTJEo+0dAKwDwEEQCb/93//p1GjRqlSpUqaNWuWGjVqlOmY\nJUuWaNy4cTZUd2sKDw9XeHi43WUoJCREISEhdpeBQqp58+Y6c+ZMpu2pqalq166dVqxYof/973/q\n3bu3DdUB8BS+QgCQwaFDhzR69GgVKVJECxcudBk+JKl9+/aKi4vLsG3q1Knq3bu37rzzThUrVkxh\n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\nDqdPn9a4ceMUFxenX375JcOHek/9HXM4HC7rKl68uOrVq6dvv/02w/b0sTErV650GQ5PnDih1NRU\n7d27V/Xr189RHdWqVVNaWposy9KRI0c0Z84cvfbaa1q9erUWLlzoMggBKDgIIAAyKFu2rPbs2eP2\nB5kDBw6ocePGSkpKUsuWLdWhQweFhYXJz89PBw8e1LRp03T58uU81ZaUlCRJKl26tMv9ZcqUyRRA\n1q9fr7Zt2yo1NVVt27ZVjx49FBoaKqfTqe3bt2vu3Ll5riu3svoQ5e/vr9TU1DyfPy/3JKtr7Er6\nfclqat707YmJiTk+Z35fm6zMmTNHffr0UdGiRdWuXTvdeeedKl68uJxOp1asWKFVq1Z55PclKSlJ\nDocjy+vsantSUpIaNWqkQ4cOqUmTJnr00UcVHh4uf39/JSYm6p133sn3v2Outp86dUqSNGHChCzP\n63A4dO7cObfrcTgcuv322/Xss88qMjJSMTExev311/XPf/7T7XMB8B0EEAAZtGjRQsuXL9eyZcs0\naNCgHL/u73//u86cOaOpU6dm6jozc+ZMTZ06NdNrnE6nUlJSXJ7P1YfV9EHmx48fdzlA3tVsS3/7\n29906dIlrVy5Ui1btsywb+zYsZo7d26WP1NOpHf7ymqBNHc+dHtabu5JbqTfl6xmu0rv1udqkgBP\nyO4euHv9X3vtNQUGBmrLli2ZukH99ttvHluJPjQ0VJZl6fjx4y73u9r+ySef6ODBgxo9erRee+21\nDPvWr1+vd955J9Nr0q9NWlpapi6Krq5NaGholu+f1fb0+5qcnKzixYu7fJ0ndOrUSZJpaQFQsDEG\nBEAGgwYNUkBAgL788kvt2bMn22N/3zVl//79ksxCdTdauXKly5lzSpYsqePHj7v8RtvVuIwGDRrI\nsqxMXUAk823/4cOHM23fv3+/wsPDM4WP9LryKn2chKv3Pnv2rPbu3Zvn98iO0+nMskUgN/ckN+rX\nry/Lslxez9TUVK1evVqSuX/5Ibt7sGnTJrd+zv3796tmzZqZwodlWdd+jhtldw+ykt4Vac2aNZn2\nWZaldevWuazN4XBkeT9dudm1cVWXZVku6zp//ry2b9+eafs999wjSR4LZ1lJH3uT1VS9AAoOAgiA\nDCpVqqRRo0bp8uXL6ty5s7Zs2eLyuLi4OHXs2PHan6OioiRl/iC0ePFiTZ482eU5mjRpoqtXr2Ya\nWDp16lSXH8D69eungIAAvffeezp06NC17ZZl6cUXX1RaWlqm10RFRen06dPauXNnhu2TJ0/WkiVL\nXNbljuDgYFWvXl1r167NENjS0tI0fPjwDGMu8kNERITLD5dS7u5JbjzwwAMKDw9XbGysNmzYkGHf\nxIkTdeDAAbVr1y7P4yay0qRJE1mWpU8++STD9h07drjdVScqKkr79u3L1JozcuRI7d692+VrsrsH\nWWnevLnuvPNOrVixItN6NJMmTXIZXKOiolwGvW3btmns2LEug1ZW12bZsmWaOXNmpuN79OihsLAw\nff755/rhhx8y7HvjjTdctpoMHTpU/v7+Gj58uMtxKykpKS4DjSvbtm1z+ff43Llzev755+VwONS1\na9ccnQuA7+JrBACZvPzyy0pNTdXo0aPVuHFjNWvWTI0aNVJwcLCOHz+uVatWad++fWrSpMm11zzz\nzDP67LPP1Lt3b/Xu3VvlypXTzp07tXjxYkVHR7v8sPPss8/qs88+01NPPaWlS5eqQoUK2r59u9av\nX69u3bppwYIFGY6vVKmSxo4dqxdffFH169dX3759r60DkpSUpDp16mjHjh0ZXjNs2LBri6pFR0cr\nLCxMmzdv1tq1a9WnTx/NmjUrz9frpZde0uOPP65mzZqpT58+CgoK0ooVK3T16lXVrVs30wc5T2rb\ntq2++OILde/eXQ0aNFBAQIBatWqlli1b5uqe5IR1w4J3xYsX15QpUxQdHa17771Xffr0UcWKFbVl\nyxYtWbJE5cqV00cffeSJH9elHj16qGrVqoqNjdXhw4f1hz/8QfHx8Zo7d64eeOABffHFFzk+1/Dh\nw/X000+rXr166tWrlwICArR27Vrt3r372mxON8ruHmTF4XDo008/VadOndS9e3f16tVLd955p374\n4QctXbpUnTt3VlxcXIZuUwMGDND48eP1/PPPa/ny5apatar27dunBQsWqFevXi7v56BBgzR+/Hi9\n9dZb2r59u2rWrKm9e/dq0aJF6tmzp2bPnp3h+JCQEH3wwQcaMGCAmjVrpujoaJUtW1br1q3TDz/8\noNatW19b3DFdtWrVNGXKFD322GO6++671bFjR911111KSUlRfHy8Vq9ercjISO3ateum13/MmDFa\nu3atmjVrpooVK6pYsWI6fPiw4uLilJSUpObNm+svf/nLTc8DwMfZMvlvAbRp0yZryJAh1t13320V\n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\nrkJggg==\n", "text/plain": [ "" ] }, "execution_count": 18, "metadata": { "image/png": { "width": 400 } }, "output_type": "execute_result" } ], "source": [ "Image('_plots/gauge0003fig300.png',width=400)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### CONTINUE IN PART 2" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" } }, "nbformat": 4, "nbformat_minor": 0 }