{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Analytical advection\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "While [Lagrangian Ocean Analysis](https://www.sciencedirect.com/science/article/pii/S1463500317301853) has been around since at least the 1980s, the [Blanke and Raynaud (1997)](https://journals.ametsoc.org/doi/full/10.1175/1520-0485%281997%29027%3C1038%3AKOTPEU%3E2.0.CO%3B2) paper has really spurred the use of Lagrangian particles for large-scale simulations. In their 1997 paper, Blanke and Raynaud introduce the so-called _Analytical Advection_ scheme for pathway integration. This scheme has been the base for the [Ariane](https://ariane-code.cnrs.fr/whatsariane.html) and [TRACMASS](http://www.tracmass.org/) tools. We have also implemented it in Parcels, particularly to facilitate comparison with for example the Runge-Kutta integration scheme.\n", "\n", "In this tutorial, we will briefly explain what the scheme is and how it can be used in Parcels. For more information, see for example [Döös et al (2017)](https://www.geosci-model-dev.net/10/1733/2017/).\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Note that the Analytical scheme works with a few limitations:\n", "\n", "1. The velocity field should be defined on a C-grid (see also the [Parcels NEMO tutorial](https://docs.oceanparcels.org/en/latest/examples/tutorial_nemo_3D.html)).\n", "\n", "And specifically for the implementation in Parcels \n", "\n", "2. The `AdvectionAnalytical` kernel only works for `Scipy Particles`. \n", "3. Since Analytical Advection does not use timestepping, the `dt` parameter in `pset.execute()` should be set to `np.inf`. For backward-in-time simulations, it should be set to `-np.inf`. \n", "4. For time-varying fields, only the 'intermediate timesteps' scheme ([section 2.3 of Döös et al 2017](https://www.geosci-model-dev.net/10/1733/2017/gmd-10-1733-2017.pdf)) is implemented. While there is also a way to also analytically solve the time-evolving fields ([section 2.4 of Döös et al 2017](https://www.geosci-model-dev.net/10/1733/2017/gmd-10-1733-2017.pdf)), this is not yet implemented in Parcels.\n", "\n", "We welcome contributions to the further development of this algorithm and in particular the analytical time-varying case. See [here](https://github.com/OceanParcels/parcels/blob/master/parcels/application_kernels/advection.py) for the code of the `AdvectionAnalytical` kernel.\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Below, we will show how this `AdvectionAnalytical` kernel performs on one idealised time-constant flow and two idealised time-varying flows: a radial rotation, the time-varying double-gyre as implemented in e.g. [Froyland and Padberg (2009)](https://www.sciencedirect.com/science/article/abs/pii/S0167278909000803) and the Bickley Jet as implemented in e.g. [Hadjighasem et al (2017)](https://aip.scitation.org/doi/10.1063/1.4982720).\n", "\n", "First import the relevant modules.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from datetime import timedelta as delta\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import xarray as xr\n", "from IPython.display import HTML\n", "from matplotlib.animation import FuncAnimation\n", "\n", "from parcels import (\n", " AdvectionAnalytical,\n", " AdvectionRK4,\n", " FieldSet,\n", " JITParticle,\n", " ParticleSet,\n", " ScipyParticle,\n", " Variable,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Radial rotation example\n", "\n", "As in [Figure 4a of Lange and Van Sebille (2017)](https://doi.org/10.5194/gmd-10-4175-2017), we define a circular flow with period 24 hours, on a C-grid\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def radialrotation_fieldset(xdim=201, ydim=201):\n", " # Coordinates of the test fieldset (on C-grid in m)\n", " a = b = 20000 # domain size\n", " lon = np.linspace(-a / 2, a / 2, xdim, dtype=np.float32)\n", " lat = np.linspace(-b / 2, b / 2, ydim, dtype=np.float32)\n", " dx, dy = lon[2] - lon[1], lat[2] - lat[1]\n", "\n", " # Define arrays R (radius), U (zonal velocity) and V (meridional velocity)\n", " U = np.zeros((lat.size, lon.size), dtype=np.float32)\n", " V = np.zeros((lat.size, lon.size), dtype=np.float32)\n", " R = np.zeros((lat.size, lon.size), dtype=np.float32)\n", "\n", " def calc_r_phi(ln, lt):\n", " return np.sqrt(ln**2 + lt**2), np.arctan2(ln, lt)\n", "\n", " omega = 2 * np.pi / delta(days=1).total_seconds()\n", " for i in range(lon.size):\n", " for j in range(lat.size):\n", " r, phi = calc_r_phi(lon[i], lat[j])\n", " R[j, i] = r\n", " r, phi = calc_r_phi(lon[i] - dx / 2, lat[j])\n", " V[j, i] = -omega * r * np.sin(phi)\n", " r, phi = calc_r_phi(lon[i], lat[j] - dy / 2)\n", " U[j, i] = omega * r * np.cos(phi)\n", "\n", " data = {\"U\": U, \"V\": V, \"R\": R}\n", " dimensions = {\"lon\": lon, \"lat\": lat}\n", " fieldset = FieldSet.from_data(data, dimensions, mesh=\"flat\")\n", " fieldset.U.interp_method = \"cgrid_velocity\"\n", " fieldset.V.interp_method = \"cgrid_velocity\"\n", " return fieldset\n", "\n", "\n", "fieldsetRR = radialrotation_fieldset()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Now simulate a set of particles on this fieldset, using the `AdvectionAnalytical` kernel. Keep track of how the radius of the Particle trajectory changes during the run.\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INFO: Output files are stored in radialAnalytical.zarr.\n", "100%|██████████| 90000.0/90000.0 [00:00<00:00, 137242.58it/s]\n" ] } ], "source": [ "def UpdateR(particle, fieldset, time):\n", " if time == 0:\n", " particle.radius_start = fieldset.R[\n", " time, particle.depth, particle.lat, particle.lon\n", " ]\n", " particle.radius = fieldset.R[time, particle.depth, particle.lat, particle.lon]\n", "\n", "\n", "MyParticle = ScipyParticle.add_variables(\n", " [\n", " Variable(\"radius\", dtype=np.float32, initial=0.0),\n", " Variable(\"radius_start\", dtype=np.float32, initial=0.0),\n", " ]\n", ")\n", "\n", "\n", "pset = ParticleSet(fieldsetRR, pclass=MyParticle, lon=0, lat=4e3, time=0)\n", "\n", "output = pset.ParticleFile(name=\"radialAnalytical.zarr\", outputdt=delta(hours=1))\n", "\n", "pset.execute(\n", " pset.Kernel(UpdateR) + AdvectionAnalytical,\n", " runtime=delta(hours=25),\n", " dt=delta(hours=1), # needs to be the same as outputdt for Analytical Advection\n", " output_file=output,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Now plot the trajectory and calculate how much the radius has changed during the run.\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Particle radius at start of run 4000.0\n", "Particle radius at end of run 4002.281494140625\n", "Change in Particle radius 2.281494140625\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAGdCAYAAAAWp6lMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABulElEQVR4nO3de1zUVf4/8NfMwAz3ERiYAUVBRQTRLnjDLt7R0tx+tZtlWVZrmpqZVoa721pbauXa7lrZZSvbatP9rnZxvQSmYiYo3lEQbyAod4XhPjPMnN8fA6MjeCGBz8zwej4e89CZOTDvI+C8OJ9zkQkhBIiIiIhcmFzqAoiIiIjaGwMPERERuTwGHiIiInJ5DDxERETk8hh4iIiIyOUx8BAREZHLY+AhIiIil8fAQ0RERC7PTeoCHIXFYkFBQQF8fX0hk8mkLoeIiIhugBACVVVVCA0NhVx+9XEcBp5GBQUFCAsLk7oMIiIi+hXy8/PRrVu3qz7PwNPI19cXgPUfzM/PT+JqiIiI6EZUVlYiLCzM9j5+NQw8jZouY/n5+THwEBEROZnrTUfhpGUiIiJyeQw8RERE5PIYeIiIiMjlMfAQERGRy2PgISIiIpfHwENEREQuj4GHiIiIXB4DDxEREbk8Bh4iIiJyeR0WeJYuXQqZTIZ58+bZHhNCYPHixQgNDYWnpydGjBiBY8eO2X2cwWDAc889B41GA29vb0yaNAnnzp2za1NeXo6pU6dCrVZDrVZj6tSpqKio6IBeERERkTPokMCTnp6Ojz/+GAMGDLB7/O2338aKFSvw3nvvIT09HTqdDmPHjkVVVZWtzbx58/Dtt99izZo12LVrF6qrqzFx4kSYzWZbmylTpuDQoUPYsmULtmzZgkOHDmHq1Kkd0TUicnCF+jrsPl2GQn2d1KUQkZREO6uqqhKRkZEiOTlZDB8+XDz//PNCCCEsFovQ6XRi2bJltrb19fVCrVaLDz/8UAghREVFhXB3dxdr1qyxtTl//ryQy+Viy5YtQgghMjMzBQCRlpZma5OamioAiOPHj99wnXq9XgAQer3+ZrpLRA5kzd6zIuKV/4keC/8nIl75n1iz96zUJRFRG7vR9+92H+GZPXs2JkyYgDFjxtg9npOTg6KiIiQkJNgeU6lUGD58OHbv3g0A2L9/P0wmk12b0NBQxMbG2tqkpqZCrVZjyJAhtjZDhw6FWq22tSGizqHa0IDTpdXYfboMq3/JwSvrMmAR1ucsAkhcn4Ftx4tRqK+DscEibbFE1KHa9bT0NWvW4MCBA0hPT2/2XFFREQBAq9XaPa7VanH27FlbG6VSCX9//2Ztmj6+qKgIwcHBzT5/cHCwrU1LDAYDDAaD7X5lZeUN9oqIOpqhwYySSgOKK+tR3PRnVT2K9Y33q+pRUmlAtaHhmp/HIoCnVu+z3ff3cofGR4Ug38bb5X+/7DF/LyXk8mufxExEjq3dAk9+fj6ef/55JCUlwcPD46rtrjzOXQhx3SPer2zTUvvrfZ6lS5fitddeu+brEFH7MlsEyqovBZmiynqUVNbbB5vKepTXmm74c/qq3BDsp0IXL3fsP1vR7PlgXxUu1hjRYBEorzWhvNaEkyXV1/ycCrkMGh9l81Dko0KQr4ddQPJWKq77fxgRdbx2Czz79+9HSUkJ4uLibI+ZzWbs3LkT7733HrKzswFYR2hCQkJsbUpKSmyjPjqdDkajEeXl5XajPCUlJRg2bJitTXFxcbPXLy0tbTZ6dLnExETMnz/fdr+yshJhYWG/srdEdDkhBCpqTSiuqkeRvv7S6ExVPYr0BpRUWYNMaZXBdsnpepRucuj8PKD1UyHYzwNaXw/o1Cpo/TwQ7Gt9XOvnAW/Vpf/W1qbnYdH6ozALAYVMhiUPxGLyoO6wWAT0dSaUVhtQWnXZ7bL7ZY1/v1BjhNkiGgOY4RoVWnm6K6DxVV4RjDyajRxpfJRQuSl+7T8xEbVSuwWe0aNHIyMjw+6xJ598En379sXChQvRs2dP6HQ6JCcn47bbbgMAGI1GpKSk4K233gIAxMXFwd3dHcnJyXjooYcAAIWFhTh69CjefvttAEB8fDz0ej327t2LwYMHAwD27NkDvV5vC0UtUalUUKlUbd5vImdQqK9DTlkNIjTeCFF7tupjqw0NtpGXksZRmaa/F1fWN47SGGA039gcGYVchiAflS2waC8LNbrL7qs93Vs9cjJ5UHfc3ScIuWW1CNd42foql8vg762Ev7cSfbS+1/wcJrMFF2uMVw1Gl9+vNjSgzmRG/sU65F+8/qowtad7y5fSrrjv76WE4jqX1Ar1ddh/thxCCAwMD2j115XI1bVb4PH19UVsbKzdY97e3ggMDLQ9Pm/ePCxZsgSRkZGIjIzEkiVL4OXlhSlTpgAA1Go1nn76aSxYsACBgYEICAjAiy++iP79+9smQUdHR2P8+PGYPn06PvroIwDAM888g4kTJyIqKqq9ukfktNam5yFxvXUyr1wGLH2gPyYP6t5m82QuF+ittI7G+Kmg9fWAVn3Z3/08oFWrEOituu6b+c0IUXve1Ju/u0JuC2LXU2tsQFmVEaXV9dcNSCazdZRJX2fCqRu4pBborWwcGWoejDLO6/HJzjNoGiyTAVj2oPXrSkRW7Tpp+Xpefvll1NXVYdasWSgvL8eQIUOQlJQEX99Lv3G9++67cHNzw0MPPYS6ujqMHj0aq1evhkJxaSj466+/xty5c22ruSZNmoT33nuvw/tD5OgK9XW2sANYJ/EuXJeBJRuzoK+/8SDTNE9Gp7ZeWmoKNTq/S38P8lV1uks2Xko3dA90Q/dAr2u2E6LxktqVgeiKYFRWfemSWkmVASVV17+kBgACwCvrMnB3nyCO9BA1kgkhbvAKumurrKyEWq2GXq+Hn5+f1OUQtanzFXVIOlaE/9t3DpmFV1+ReOU8maa/N82T0ak9EOyrspsnQ+2rofGSWslVRopOl1TjeFFVix8brfPFg3HdMDZGix6B3h1cOVHHuNH3bwaeRgw85EqEEMgurkLSsWIkZRbh6Pmrhxy5DPjXU0MQ29XvV82TIWkV6utwx7Jt15383Ufrg7ExWoyJ1uKWbl24zJ5cBgNPKzHwkLMzWwQO5JXjx6NFSMosRt7FWttzchkwMDwACTFaGBss+GvSiWYrl8h5rU3PwyvrM9D0v7kMwMvjo+DhrkByZjH25FyE+bJEFOyrwuhoLcbGBGNYLw083DvXpUdyLQw8rcTAQ86o3mTGL6fKkHSsGFuzinGhxmh7Tukmx92RGiTE6DA6OhiBPpdWJRbq65qtXCLnVqivw4Gz5RACiAv3t/u66mtN2HGiBEmZxUjJLrWbeO6lVODuyCCMidFiVN9gBHgrpSif6Fdj4GklBh5yFvpaE7Znl+DHY0VIOVGKWuOlg3T9PNwwJlqLhH5a3BUZxLk21IyhwYy0MxexNdMakgv19bbnmkYCx0ZrMTZGi3AN5/2Q42PgaSUGHnJkhfo6JGcWI+lYMdLOXEDDZZcnQtQeSIjRIqGfDoMjAuCuaPcj8shFCCFw9HwlkrOKkZxZjKwrJrRHBvtgTIw1/NzKeT/koBh4WomBhxyJEAKnSqqRlFmMH48V4cg5vd3zUVpfJPTTIiFGh9iufpxoTG0i/2IttmZZR372nLloF6yDfFUYEx2MMdFa3NGb837IcTDwtBIDD0nNYhE4mF/euLKqGDllNbbnZDIgrrs/EvppMTZGhwheaqB21jTvJ7lx3k/VZfN+PN0VuLuPBmOitRgdreW8H5IUA08rMfCQFAwNZuw+fQFJx4qQnFmCsupLG8spFXLcGalBQoz1TSXIl0ehkDSMDRaknbmArY2XvprN++kRYF3yHqNlGKcOx8DTSgw81FEq603Yfty6YmbH8RLUXDbp2NfDDaP6BiMhRofhUUHw4aRjcjBCCBwrqERypjX8XLmRZe/gS/v93BbGeT/U/hh4WomBh9pTcWU9khvn46SduQCT+dKPndZPhYQYHRL6aTEkIhBKN046JudxrrwWP2VZL31dOaFe43Np3s+dkZz3Q+2DgaeVGHiorVknHRch6VgxDuVX2D3XO9jHtrJqQFc1fwsml6CvMyHlRCmSG0cvr5z3c1ekBmNitBjd135fKKKbwcDTSgw8dLMsFoHD5ypsK6vOlNbYPX9b9y4Y10+HsTFa9ArykahKoo5hbLBgb85FJGcWITmzGAVXzPuJ6+GPMY37/fTkzwPdBAaeVmLgoV/D2GBB6pmmScfFdqdZuytkGNZLY11ZFa1FsJ+HhJUSSUcIgczCS/N+jhXYz/vpFeSNMTFaJMRocWuYPxQc8aRWYOBpJQYeakmhvg45ZTWI0HjbtuqvqrcO2ycdK8b2K4btfVRuGBEVhHH9dBgRFQRfD3epSidyWAUVdbYVX1fOadP4KDGqbzDGxuhwZ28NPJWKFn8OiZow8LQSAw9daW16HhLXZ8AirEPw99/aFRdrjdh96gKMZoutXZCvCmMbfzuN7xUIlRsnZhLdqMp6E1KyrfN+tmeXoKr+0i8QHu5yRGh8cLywEgLWn8OlD/TnYbdkh4GnlRh46HKF+jrcsWwbLFf56YjQeCOhnxbj+um45T5RGzGZm+b9WEd/zlfUNWsjlwG/vDKKIz1kc6Pv39zkg6gFG48Uthh2Jg8Kw/S7ItAryIfHORC1MXeFHHf01uCO3hr8+b4YrNmbj8RvM+zaWATwwfbT+NPEGG7hQK3CwEN0mfyLtViyKQubjxY1e04hk2HemEj+ZknUAWQyGUb0DYJchma/fHyZdha/nCrDHydGY2RUMH/5oBvCeEwEoMbQgOU/ZmP0ihRsPloEuQwY2jMATVeqFDIZljwQy7BD1IFC1J5Y+kB/KBoDjVwGPHh7V2h8lDhTVoOnVu/D45/txYniKokrJWfAOTyNOIenc7JYBL4/fB7LNh9HcaV1SfmwXoF49b4Y9NX5oVBfh9yyWoRrvBh2iCRy5c9hVb0J728/jc925cBotkAuAx4d0gMvjO3Dg0w7IU5abiUGns7nUH4FXttwDAfzKgAAYQGe+OOEGCTEaDlETuQE8i7UYunmS5egfT3c8PzoSDweH875PZ0IA08rMfB0HiWV9XhrSzbWHTgHAPBSKjBnVG88dUcEz/ohckKppy/gL//LtB1kGqHxxh/ujcboaM7v6QwYeFqJgcf11ZvM+OyXHLy/7ZTthPIHb++Gl8dHQctdkImcmtki8N/9+XjnxxMoq7Zenr6jdyD+NNF6eZpcFwNPKzHwuC4hBJIyi/HmxizkXawFANwa1gWLJ/XDrWFdpC2OiNpUVb0JH+w4jU9/vjS/5+HB3TF/bB9oeGCpS2LgaSUGHteUXVSF1/93DL+cugAA0Pqp8Mo9ffGbW7pys0AiF5Z/0Tq/Z1NG4/welRvmjo7EE8M4v8fVMPC0EgOPaymvMeLdrSfwVdpZWASgdJPjmbt64tkRveCt4vZTRJ3FnjMX8JeNmTh63jq/JzzQC4vujcZYLk5wGQw8rcTA4xpMZgu+TjuLd7eehL7OBAC4J1aHRfdGIyzAS+LqiEgKFovAfw+cwzs/ZqO06tL2E3+aGIPoEP5/7+wYeFqJgcf5/XyyFK9vyMTJkmoAQF+dL169LwbDemkkroyIHEG1oQGrdpzCJz/nwNhgnd8zeVB3LEjg/B5nxsDTSgw8ziu3rAZvbMzC1qxiAIC/lzsWJETh4UFhcFPwWj0R2cu/WItlW45j45FCAICPyg3PjeqNaXeEQ+XGrSmcDQNPKzHwOJ+qehPe234Kn+3Kgcks4CaX4fH4cDw/OhJqL3epyyMiB5eeexGvb8hExnk9AKB7gHV+z7h+nN/jTBh4WomBx3k0XY9/e0u2bb+Nu/sE4dWJ0egd7CtxdUTkTCwWgfUHz+PtLcdR0ji/Z2jPAPxpYgz6haolro5uxI2+f7freP+qVaswYMAA+Pn5wc/PD/Hx8di8ebPteSEEFi9ejNDQUHh6emLEiBE4duyY3ecwGAx47rnnoNFo4O3tjUmTJuHcuXN2bcrLyzF16lSo1Wqo1WpMnToVFRUV7dk1ksj+sxfxm/d/wcv/PYKyagMiNN74bNpAfPHkIIYdImo1uVyG38Z1w/YXR+C5Ub2hcpMj7cxFTFy5C6+sO2Kb5EzOr11HeDZs2ACFQoHevXsDAL744gu88847OHjwIPr164e33noLb775JlavXo0+ffrgjTfewM6dO5GdnQ1fX+ub17PPPosNGzZg9erVCAwMxIIFC3Dx4kXs378fCoX1Wus999yDc+fO4eOPPwYAPPPMMwgPD8eGDRtuuFaO8Di2Qn0dlm0+ju8PFQDgnhpE1D7OldfirS3Z2HDY+n+Nj8oNs0f2xpN3hPPoGQflsJe0AgIC8M477+Cpp55CaGgo5s2bh4ULFwKwjuZotVq89dZbmDFjBvR6PYKCgvDll19i8uTJAICCggKEhYVh06ZNGDduHLKyshATE4O0tDQMGTIEAJCWlob4+HgcP34cUVFRN1QXA49jqjeZ8fHOM1i14zTqTGbIZMDkgWFYkBCFIF+uqiCi9rEv9yL+8r9MHD5nnd8TFuCJRfdEY3ysjvN7HIxDXNK6nNlsxpo1a1BTU4P4+Hjk5OSgqKgICQkJtjYqlQrDhw/H7t27AQD79++HyWSyaxMaGorY2Fhbm9TUVKjValvYAYChQ4dCrVbb2pDzEUJg45FCjP5rClYkn0CdyYxB4f7YMOdOLHtwAMMOEbWrgeEB+HbWHVjx0C3Q+qmQf7EOz359AJM/TsPRxknO5FzafcvZjIwMxMfHo76+Hj4+Pvj2228RExNjCyNardauvVarxdmzZwEARUVFUCqV8Pf3b9amqKjI1iY4OLjZ6wYHB9vatMRgMMBguHRttrKy8td1kNrc0fN6vL4hE3tzLwIAQtUeSLw3GhMHhPA3KyLqMHK5DA/c3g3jY3X4MOUMPko5jb05F3Hfe7vwu7hueDEhCsE8eNhptHvgiYqKwqFDh1BRUYF169bhiSeeQEpKiu35K9/AhBDXfVO7sk1L7a/3eZYuXYrXXnvtRrtBHaCs2oC/JmVjTXo+hAA83OWYObwXZtzdC55KXjsnIml4Kd0wf2wfTB4Uhre3WOcS/mffOWw8UohZI3vj6TsjOL/HCbT7JS2lUonevXtj4MCBWLp0KW655Rb8/e9/h06nA4BmozAlJSW2UR+dTgej0Yjy8vJrtikuLm72uqWlpc1Gjy6XmJgIvV5vu+Xn599UP+nXMzZY8M+fz2DkOzvwzV5r2LnvllD8tGAE5o3pw7BDRA6haxdP/P3h27Du2WG4JawLaoxmvPNjNkb/NQUbjxSCu7w4tg5f3iKEgMFgQEREBHQ6HZKTk23PGY1GpKSkYNiwYQCAuLg4uLu727UpLCzE0aNHbW3i4+Oh1+uxd+9eW5s9e/ZAr9fb2rREpVLZlss33ajjbT9egvF/24k3NmahytCA2K5++L+Z8Vj5yG3o2sVT6vKIiJqJ6+GPb58dhr9NvhU6Pw+cr6jD7H8fwEMfpSLjHOf3OKp2XaW1aNEi3HPPPQgLC0NVVRXWrFmDZcuWYcuWLRg7dizeeustLF26FJ9//jkiIyOxZMkS7Nixo9my9P/9739YvXo1AgIC8OKLL+LChQvNlqUXFBTgo48+AmBdlt6jRw8uS3dgp0qq8cbGTOzILgUAaHyUeHlcXzwY1w0KOefpEJFzqDU24OOdZ/BhymnUmyyQyYAHb++Gl8ZFQcv5PR3iRt+/23UOT3FxMaZOnYrCwkKo1WoMGDDAFnYA4OWXX0ZdXR1mzZqF8vJyDBkyBElJSbawAwDvvvsu3Nzc8NBDD6Gurg6jR4/G6tWrbWEHAL7++mvMnTvXtppr0qRJeO+999qza9RKhfo65JTVQOOjwtr0fHyxOxcNFgF3hQxP3RGBOaN6w9eDx0EQkXPxUrph3hjr/J63Nh/Hd4cK8N/957ApoxCzRvTCxAGhKNDXIULjjRA1R62lxKMlGnGEp/2sTc9D4voMWK74ThsTHYw/TIhBhMZbmsKIiNrYgbxyvL4hE4fyK+wel8uApQ/0x+RB3aUpzIU53D481DkV6utaDDt/m3wr/vnEIIYdInIpt3f3x7ezhuG1STF2j1sEsGj9URTq6ySqjBh4qF3tOlnWLOwA4LVtInJZMpkMkdrmZ/uZhUBuWa0EFRHAwEPt6HhRJd7cmNXscYVMhnCNlwQVERF1jAiNN1paf7HlKJevS4WBh9rFsQI9Hvk4DRV1JoR28bD94CtkMix5IJaT94jIpYWoPbH0gf5QNG6A25R9vkg9izc3ZjH0SKDdd1qmzifjnB6PfboH+joTbummxr+eGoJaUwNyy2oRrvFi2CGiTmHyoO64u0+Q7f++5MxivPr9MfxzVw4MDRa8Nqkf5NyGo8Mw8FCbOpRfgamf7kFVfQNu694FXzw1GH4e7lDDnUGHiDqdELWn7f++x+PDoVTIkfhtBr5MOwtjgwVLHujPvcc6CC9pUZvZf7YcU/9pDTsDe/jjX41hh4iIrB4e3B1//d0tkMuAtfvy8eL/HUaD2SJ1WZ0CAw+1ifTci3j80z2oMjRgSEQAvnhqMDcSJCJqwQO3d8M/HrkNbnIZvj14Hs+vOQQTQ0+7Y+Chm5Z25gKe+GwvaoxmDOsViM+fHARvFa+WEhFdzcQBofjg0dvhrpBhY0Yhnv3qAAwNZqnLcmkMPHRTfjlVhmmf70Wt0Yy7IjX49IlB8FIy7BARXU9CPx0+fnwglG5ybM0qxjP/2o96E0NPe2HgoV8t5UQpnlqdjnqTBSOigvDJ4wPhqVRc/wOJiAgAMDIqGJ9PGwRPdwVSTpTiyc/TUWtskLosl8TAQ7/K9uMlmP6vfTA0WDAmOhgfTY2DhzvDDhFRa93RW4MvnhoMb6UCqY1TBKrqTVKX5XIYeKjVtmYWY8aX+2FssGBcPy0+eDQOKjeGHSKiX2twRAC+/P0Q+Hq4IT23HI99uhf6WoaetsTAQ62y5WgRZn61H0azBff21+G9KbdD6cZvIyKim3V7d398M30ouni543B+Bab8Mw0Xa4xSl+Uy+E5FN2zjkULM/vcBNFgE7rslFP94+Da4K/gtRETUVmK7qrHmmaHQ+ChxrKASj3ychtIqg9RluQS+W9EN+f7QecxdcxBmi8D/u60r3n3oFrgx7BARtbm+Oj+seSYewb4qZBdXYfLHqSjS10tdltPjOxZd1/oD5/DC2kMwWwR+G9cNy3/HsENE1J56B/vgPzPiEar2wJnSGjz0USrOlddKXZZT47sWXdN/9uVjwf8dhkUAjwwOw9sPDuC5L0REHSBc4421M+LRPcALeRdrMfmjNJy9UCN1WU6LgYeu6pu9eXj5v0cgBPDY0O548/7+PNmXiKgDhQV4Ye2Moeip8cb5ijo89FEqTpdWS12WU2LgoRZ9mZqLxPUZAIBpw8Lxl9/EMuwQEUkgRO2JNTOGoo/WB8WVBkz+KA3ZRVVSl+V0GHiomc9/ycGfvj8GAPj9nRH4830xkMkYdoiIpBLs64E1z8QjJsQPZdUGPPxxKo6e10tdllNh4CE7n+w8g9c2ZAIAZg7vhT9MiGbYISJyAAHeSvx7+hDc0k2N8loTpnyShkP5FVKX5TQYeMhm1Y7TeHNTFgDguVG9sXB8FMMOEZED6eKlxJe/H4K4Hv6orG/AY//cg/Tci1KX5RQYeAgAsPKnk3hry3EAwAtj+mBBAsMOEZEj8vNwx7+eGoyhPQNQbWjA45/uxe5TZVKX5fAYeDo5IQTeTT6BvyafAAC8mNAHz4+JlLgqIiK6Fm+VGz6fNhh3RWpQZzLjydXp2JFdInVZDo2BpxMTQmB5Ujb+/tNJAMAr9/TFnFEMO0REzsBTqcAnjw/EmOhgGBoseOZf+5GcWSx1WQ6LgaeTEkJg2ebjeH/7aQDAHydEY+bwXhJXRUREreHhrsAHj8bhnlgdjGYLnv1qPzZlFEpdlkNi4OmEhBB4Y2MWPtp5BgCw+L4Y/P6unhJXRUREv4bSTY6Vj9yG39waigaLwJx/H8B3B89LXZbDYeDpZIQQeG1DJj7dlQMAeOP+WEy7I0LiqoiI6Ga4KeRY8dCt+F1cN1gE8MJ/DuE/6flSl+VQGHg6EYtF4I/fHcXq3bmQyYBlD/THY0N7SF0WERG1AYVchrceHIDHhnaHEMDL647gy9RcqctyGAw8nYTFIrDo2wx8vScPMhnw9oMD8PDg7lKXRUREbUgul+Evv4nFU40j93/6/hj++fMZiatyDO0aeJYuXYpBgwbB19cXwcHBuP/++5GdnW3XRgiBxYsXIzQ0FJ6enhgxYgSOHTtm18ZgMOC5556DRqOBt7c3Jk2ahHPnztm1KS8vx9SpU6FWq6FWqzF16lRUVFS0Z/echtki8NJ/j2BNej7kMmDFQ7fgdwPDpC6LiIjagUwmw58mRmPWCOtClDc2ZuH97ackrkp67Rp4UlJSMHv2bKSlpSE5ORkNDQ1ISEhATc2l4+3ffvttrFixAu+99x7S09Oh0+kwduxYVFVdOhht3rx5+Pbbb7FmzRrs2rUL1dXVmDhxIsxms63NlClTcOjQIWzZsgVbtmzBoUOHMHXq1PbsnlNoMFuw4D+HsO7AOSjkMvzt4dvw/27rJnVZRETUjmQyGV4aF4UXxvQBALzzYzZWJJ9AQUUtdp8uQ6G+TuIKO55MCCE66sVKS0sRHByMlJQU3H333RBCIDQ0FPPmzcPChQsBWEdztFot3nrrLcyYMQN6vR5BQUH48ssvMXnyZABAQUEBwsLCsGnTJowbNw5ZWVmIiYlBWloahgwZAgBIS0tDfHw8jh8/jqioqOvWVllZCbVaDb1eDz8/v/b7R+gghfo6nCqpxhe7z2JrVjHc5DL845HbcG//EKlLIyKiDvRhymks22zdSV8GQACQy4ClD/TH5EHOP7XhRt+/O3QOj15vPdk1ICAAAJCTk4OioiIkJCTY2qhUKgwfPhy7d+8GAOzfvx8mk8muTWhoKGJjY21tUlNToVarbWEHAIYOHQq1Wm1r05msTc/DHcu2Yeqne7E1qxgKGfD+o7cz7BARdUIzh/fCC4076DeNcFgEsGj90U410uPWUS8khMD8+fNx5513IjY2FgBQVFQEANBqtXZttVotzp49a2ujVCrh7+/frE3TxxcVFSE4OLjZawYHB9vaXMlgMMBgMNjuV1ZW/sqeOZZCfR0S12fActm4nQAwoJtaspqIiEhagyICmj1mFgK5ZbUIUXtKUFHH67ARnjlz5uDIkSP45ptvmj135SGVQojrHlx5ZZuW2l/r8yxdutQ2wVmtViMszDUm8eaU1diFHcCa5HPLaqUpiIiIJBeh8Yb8irdDhQwI13hJU5AEOiTwPPfcc/jhhx+wfft2dOt2acKsTqcDgGajMCUlJbZRH51OB6PRiPLy8mu2KS5ufn5IaWlps9GjJomJidDr9bZbfr5rbNAU5t88qStksk71TU1ERPZC1J5Y+kB/u9Dzu4FhnWZ0B2jnwCOEwJw5c7B+/Xps27YNERH2O/pGRERAp9MhOTnZ9pjRaERKSgqGDRsGAIiLi4O7u7tdm8LCQhw9etTWJj4+Hnq9Hnv37rW12bNnD/R6va3NlVQqFfz8/OxuriDlRJndfYVMhiUPxHaqb2oiImpu8qDu+OWVUXhooHXg4eeTZag3ma/zUa6jXefwzJ49G//+97/x/fffw9fX1zaSo1ar4enpCZlMhnnz5mHJkiWIjIxEZGQklixZAi8vL0yZMsXW9umnn8aCBQsQGBiIgIAAvPjii+jfvz/GjBkDAIiOjsb48eMxffp0fPTRRwCAZ555BhMnTryhFVquotrQgL9tPQEAeGFMJAZHBCJc48WwQ0REAKwjPa9NisXPJ8twvqIOn/+Si2dHdI6Do9s18KxatQoAMGLECLvHP//8c0ybNg0A8PLLL6Ourg6zZs1CeXk5hgwZgqSkJPj6+trav/vuu3Bzc8NDDz2Euro6jB49GqtXr4ZCobC1+frrrzF37lzbaq5Jkybhvffea8/uOZxPdp5BWbUR4YFeeHZEbyjduJE2ERHZ81Qq8GJCFBb832F8sP0UHhrYDYE+KqnLancdug+PI3P2fXhKKusxYvkO1BrN+IBL0ImI6BosFoFJ7+/C0fOVeDy+B17/TazUJf1qDrkPD7Wfv/10ErVGM24N64J7YnVSl0NERA5MLpdh0b3RAICv9+ThVEm1xBW1PwYeF3CqpApr062rzBbdG33dJf1ERETDemkwJjoYZouw7cTsyhh4XMCyzdkwWwTGxmgxuIXNpYiIiFryyj3RUMhl2JpVjNTTF6Qup10x8Di5PWcuWI+PkMuwcHxfqcshIiIn0jvYB48OsZ6n9eamTFiu3LnWhTDwODEhBJY0DkM+PCgMvYN9JK6IiIiczfOjI+GrcsPR85X47tB5qctpNww8TmxTRhEO51fAS6nA840HwxEREbVGoI8Ks0b2BgC882M26oyuuRkhA4+TMjZY8PaP1tGdZ+7uiWBfD4krIiIiZ/XkHeHo2sUThfp6fLrrjNTltAsGHif17z1ncfZCLTQ+Kky/q6fU5RARkRPzcFfg5fHWkwlW7TiNkqp6iStqeww8Tqiy3oS//3QSAPDC2Eh4q9p1w2wiIuoE7hsQilu6qVFjNONvW09KXU6bY+BxQh/uOI3yWhN6BXlj8sAwqcshIiIXIJfL8MeJMQCANXvzcKK4SuKK2hYDj5Mp1Nfh0105AKz7J7gp+CUkIqK2MSg8AOP76WARwJJNWVKX06b4bulkViSdgKHBgsHhARgTHSx1OURE5GIW3tMXbnIZdmSX4ueTpVKX02YYeJzI8aJK/PfAOQBA4r19eYQEERG1uQiNN6bG9wAAvLkxC2YX2YyQgceJLN10HEIAE/qH4Lbu/lKXQ0RELmruqEj4ebjheFEV1u0/J3U5bYKBx0nsOlmGlBOlcFfIbEsHiYiI2oO/txLPjbJuaLs8KRu1xgaJK7p5DDxOwGIRWLrZOnns0SE90CPQW+KKiIjI1T0+rAe6B3ihpMqAj3c6/2aEDDxO4IfDBThWUAlflRueG9Vb6nKIiKgTULkpbIdSf5RyBsWVzr0ZIQOPg6s3mfHOj9kAgJkjeiHQRyVxRURE1Fnc21+H27t3QZ3JjL8mZUtdzk1h4HFwX6aexfmKOuj8PPDUHRFSl0NERJ2ITCbDHyZYNyP8v/3nkFVYKXFFvx4DjwOrqDVi5Tbr9t4LEvrAU6mQuCIiIups4nr4Y8KAEIjGzQiFcM5l6gw8Duz97adQWd+AvjpfPHB7N6nLISKiTmrhuL5QKuT4+WQZdpxwzs0IGXgcVP7FWnyx+ywA4JV7+kIh5yaDREQkje6BXnhimHUzwiUbs9BgtkhcUesx8DiovyZlw2i24I7egRjeJ0jqcoiIqJObMzISXbzccbKkGv/Z53ybETLwOKCj5/X47lABACDxnmgeIUFERJJTe7ljbuNmhCuSs1FtcK7NCBl4HIwQwnZC7f+7rStiu6olroiIiMjqsaE9EB7ohbJqIz5KOS11Oa3CwONgdpwoxe7TF6BUyLEgoY/U5RAREdko3eR45Z5oAMAnP59Bob5O4opuHAOPAzFbBJZtOg4AmHZHOLr5e0lcERERkb1x/bQYHB6AepPFtjGuM2DgcSDrDpxDdnEV1J7umD2CR0gQEZHjsW5GaB3lWX/gPI6e10tc0Y1h4HEQdUYzViSdAAA8N6o31F7uEldERETUslvCuuA3t4YCAN7YmOkUmxEy8DiIz37JQVFlPbr5e2JqfA+pyyEiIrqml8ZFQekmR9qZi/gpq0Tqcq6LgccBXKg2YNUO62z3l8ZFQeXGIySIiMixdfP3sp3xuGRzFkwOvhlhuwaenTt34r777kNoaChkMhm+++47u+eFEFi8eDFCQ0Ph6emJESNG4NixY3ZtDAYDnnvuOWg0Gnh7e2PSpEk4d85+w6Py8nJMnToVarUaarUaU6dORUVFRXt2rU2t3HYK1YYGxHb1w30DQqUuh4iI6IbMGtkLAd5KnCmtwUcpp7H7dJnDrtxq18BTU1ODW265Be+9916Lz7/99ttYsWIF3nvvPaSnp0On02Hs2LGoqqqytZk3bx6+/fZbrFmzBrt27UJ1dTUmTpwIs9lsazNlyhQcOnQIW7ZswZYtW3Do0CFMnTq1PbvWZvbmXMC/UnMBAIvuiYacR0gQEZGT8PNwx7wx1s0IlyedwJRP9uCOZduwNj1P4sqak4kOmmkkk8nw7bff4v777wdgHd0JDQ3FvHnzsHDhQgDW0RytVou33noLM2bMgF6vR1BQEL788ktMnjwZAFBQUICwsDBs2rQJ48aNQ1ZWFmJiYpCWloYhQ4YAANLS0hAfH4/jx48jKirqhuqrrKyEWq2GXq+Hn59f2/8DtGBteh4Wrsuw3X/rwf6YPKh7h7w2ERFRW8i7WIO7395h95hCJsOuV0YiRO3Z7q9/o+/fks3hycnJQVFRERISEmyPqVQqDB8+HLt37wYA7N+/HyaTya5NaGgoYmNjbW1SU1OhVqttYQcAhg4dCrVabWvTEoPBgMrKSrtbRyrU1yFxfYbdY4vWH3XYoUAiIqKWnCtv/r5lFgK5ZbUSVHN1kgWeoqIiAIBWq7V7XKvV2p4rKiqCUqmEv7//NdsEBwc3+/zBwcG2Ni1ZunSpbc6PWq1GWFjYTfWntXLKamC5YmzNEb9BiIiIriVC440rj3xUyGQI1zjW5rmSr9K68mBMIcR1D8u8sk1L7a/3eRITE6HX6223/Pz8VlZ+cyI03riyOkf8BiEiIrqWELUn/nxfjO2+XAYseSC2Qy5ntYZkgUen0wFAs1GYkpIS26iPTqeD0WhEeXn5NdsUFxc3+/ylpaXNRo8up1Kp4OfnZ3frSCFqT/QK9rHdV8hkDvkNQkREdD3ThkVA5+cBAFj5yG0OOR9VssATEREBnU6H5ORk22NGoxEpKSkYNmwYACAuLg7u7u52bQoLC3H06FFbm/j4eOj1euzdu9fWZs+ePdDr9bY2jqqyzgQA+Mtv+mHXKyMd8huEiIjoRsR2tQ4clFYZJK6kZW7t+cmrq6tx6tQp2/2cnBwcOnQIAQEB6N69O+bNm4clS5YgMjISkZGRWLJkCby8vDBlyhQAgFqtxtNPP40FCxYgMDAQAQEBePHFF9G/f3+MGTMGABAdHY3x48dj+vTp+OijjwAAzzzzDCZOnHjDK7SkUFFrREnjN8X/u70bfFTt+qUgIiJqV311ftiaVYLjRVXXbyyBdn2X3bdvH0aOHGm7P3/+fADAE088gdWrV+Pll19GXV0dZs2ahfLycgwZMgRJSUnw9fW1fcy7774LNzc3PPTQQ6irq8Po0aOxevVqKBSXdiP++uuvMXfuXNtqrkmTJl117x9HcaK4GgDQtYsnww4RETm9viHW9+4sBw08HbYPj6Pr6H14vkw7iz99dxSj+gbjs2mD2v31iIiI2tOpkmqMWZECT3cFjr42DooO2kjX4ffh6exOFlsTcKTW5zotiYiIHF94oBdUbnLUmczIu+h4W6ww8Egku3HIL0rre52WREREjs9NIUefxve044Udu5nvjWDgkYAQAicaR3j6MPAQEZGL6Ktz3Hk8DDwSKKs2orzWBJkM6B3MS1pEROQa+oZY59BwhIcAwDa60yPACx7uiuu0JiIicg7RjSM8jrg0nYFHArycRUREriiqMfDkXaxFtaFB4mrsMfBIoCnwNH1jEBERuYJAHxWCfVUALi3OcRQMPBJo2nQwkiM8RETkYqKb5vEUOdY8HgaeDiaEwAkuSSciIhfVtOPy8UKO8HRqRZX1qDI0wE0uQ4TGW+pyiIiI2lS0jiM8hEvXNCM03lC68Z+fiIhcy+UjPI50ehXfcTvYycb5O1yhRURErqinxgfuChmqDA04X1EndTk2DDwdLJtL0omIyIUp3eToFWTdVNeR5vEw8HSwk7bAwx2WiYjINTniSi0Gng5ksQjbkvQ+3IOHiIhclCOeqcXA04HOV9ShzmSGUiFHjwAvqcshIiJqF454phYDTwdqWqHVK9gHbgr+0xMRkWtqOlMrp6wG9SazxNVY8V23A50o4fwdIiJyfUG+KgR4K2ERl1YnS42BpwM17bDMFVpEROTKZDLZZfN4HOOyFgNPBzrBPXiIiKiT6Nu047KDLE1n4OkgZovAqVJr4OEZWkRE5OpsOy5zhKdzOXuhBsYGCzzdFejm7yl1OURERO2q6UytrMJKhzhigoGng5xo3HAwUusDuVwmcTVERETtK1LrA7kMKK81obTKIHU5DDwdpWn+TmQwL2cREZHr83BXIELjDcAxNiBk4OkgTWdoRem4JJ2IiDoHR9qAkIGng5y0XdLiCA8REXUOTRsQHucIT+dgbLDgTGkNAK7QIiKizqPvZROXpcbA0wFyL9SgwSLgq3JDiNpD6nKIiIg6RNPS9NOl1TA2WCSthYGnAzSdoRWp9YFMxhVaRETUOXTt4glflRtMZoEzZdIeMcHA0wGa5u9wh2UiIupMZDLZpQ0IJd5xmYGnA2Qz8BARUSdlm8cj8Y7LLhV4PvjgA0RERMDDwwNxcXH4+eefpS4JwKWTYhl4iIios+EITxtbu3Yt5s2bhz/84Q84ePAg7rrrLtxzzz3Iy8uTtK56kxm5F6wrtPpwDx4iIupkmkZ4jpyrQKG+TrI6XCbwrFixAk8//TR+//vfIzo6Gn/7298QFhaGVatWSVrXnjMXYBGAn4cbgnxUktZCRETU0Y6e1wOwHjFxx7JtWJsuzUCESwQeo9GI/fv3IyEhwe7xhIQE7N69u8WPMRgMqKystLu1tbXpeZj2eToAoLK+Af/Zl9/mr0FEROSoCvV1eG3DMdt9iwAWrT8qyUiPSwSesrIymM1maLVau8e1Wi2Kiopa/JilS5dCrVbbbmFhYW1aU6G+DonrM3D5+bBSfZGJiIikkFNWA8sVB6WbhUBuWW2H1+ISgafJlXvcCCGuuu9NYmIi9Hq97Zaf37ajL470RSYiIpJChMYb8ivehhUyGcI1Xh1ei0sEHo1GA4VC0Ww0p6SkpNmoTxOVSgU/Pz+7W1typC8yERGRFELUnpg3JtJ2XyEDljwQixC1Z4fX4hKBR6lUIi4uDsnJyXaPJycnY9iwYZLUFKL2xNIH+tuFHqm+yERERFLpGWRdodw72Bu7XhmFyYO6S1KHmySv2g7mz5+PqVOnYuDAgYiPj8fHH3+MvLw8zJw5U7KaJg/qjtiuakz4xy4AwH23hEpWCxERkRRONO5FF9c9QNJf+l0m8EyePBkXLlzA66+/jsLCQsTGxmLTpk3o0aOHpHX1C1UjyFeF0ioDjhdV4fbu/pLWQ0RE1JFONJ4n2Ucn7ea7LnFJq8msWbOQm5sLg8GA/fv34+6775a6JABAdEjjttqF0m6rTURE1NFOlDQdryTt5rsuFXgcVXTjttoMPERE1JnUm8zILbOeNhAl8fFKDDwdIMY2wiPtOSJEREQd6UypdYsWtac7gnylPW2AgacDNF3SOl5YCcuVm/MQERG5qBPF1l/0o7S+V90Xr6Mw8HSAnhpvKN3kqDGakV/OjQeJiKhzaAo8kRLP3wEYeDqEm0Jum6yVWcB5PERE1DnYRngkXqEFMPB0mGgdV2oREVHn0rQHT2QwA0+n0TSPJ5MTl4mIqBOoNTYg76J1GofUS9IBBp4Ow714iIioMzlVYh3d0fgoEegj7QotgIGnwzQtTT9fUQd9nUniaoiIiNpXdtMOyxLvv9OEgaeDqL3cEar2AGBdnk5EROTKTjaO8DDwdEK8rEVERJ0FR3g6sWjuuExERJ3EyWLHOEOrCQNPB7IFniKO8BARkeuqrDehQF8PAIjkCE/n03SIaHZRFRrMFomrISIiah8nG/ff0fl5QO3pLnE1Vgw8HahHoDc83RUwNFiQe6FG6nKIiIjaRdMOy30cYIflJgw8HUghl9m21+YGhERE5KpsgSfYMebvAAw8HY4rtYiIyNVxhIcQ0ziPh4GHiIhcVdMZWo6yJB1g4OlwHOEhIiJXVl5jRGmVAQAQyUtanVffxsBTXGnAxRqjxNUQERG1rabLWd38PeGtcpO4mksYeDqYj8oN3QO8AHCUh4iIXE9T4IlyoMtZAAOPJKI5j4eIiFxU0/wdR9lwsAkDjwSa5vFkMvAQEZGLyW4a4dE5zvwdgIFHEjxTi4iIXJEQwnaGVmQwR3g6vZjGwHOqpArGBh4xQURErqG02oDyWhPkMqC3A63QAhh4JNHN3xO+KjeYzAKnS6ulLoeIiKhNNJ2h1SPQGx7uComrscfAIwGZTIa+nLhMREQuJruocYdlrWON7gAMPJLhBoRERORqTpY0BR7Hmr8DMPBIhhOXiYjI1Vwa4WHgoUaXj/AIISSuhoiI6OZYV2g53hlaTRh4JBKl9YVcBly47MwRIiIiZ1Wor0eVoQFuchkiNN5Sl9NMuwaeN998E8OGDYOXlxe6dOnSYpu8vDzcd9998Pb2hkajwdy5c2E02p8xlZGRgeHDh8PT0xNdu3bF66+/3mxUJCUlBXFxcfDw8EDPnj3x4Ycftle32oSnUoHwxm8IbkBIRETOrulIiQiNN5Rujjee0q4VGY1G/O53v8Ozzz7b4vNmsxkTJkxATU0Ndu3ahTVr1mDdunVYsGCBrU1lZSXGjh2L0NBQpKenY+XKlVi+fDlWrFhha5OTk4N7770Xd911Fw4ePIhFixZh7ty5WLduXXt276ZxHg8REbmKpsDTR+d4l7MAoF2PMX3ttdcAAKtXr27x+aSkJGRmZiI/Px+hoaEAgL/+9a+YNm0a3nzzTfj5+eHrr79GfX09Vq9eDZVKhdjYWJw4cQIrVqzA/PnzIZPJ8OGHH6J79+7429/+BgCIjo7Gvn37sHz5cjz44IPt2cWbEhPih41HCrlSi4iInN6h/AoAQIifh7SFXIWkY06pqamIjY21hR0AGDduHAwGA/bv329rM3z4cKhUKrs2BQUFyM3NtbVJSEiw+9zjxo3Dvn37YDKZWnxtg8GAyspKu1tH4yGiRETkCtam52FTRhEA4NNdOVibnidxRc1JGniKioqg1WrtHvP394dSqURRUdFV2zTdv16bhoYGlJWVtfjaS5cuhVqttt3CwsLapE+t0XRJ63RpNXLLajr89YmIiG5Wob4OieszbPcFgEXrj6JQXyddUS1odeBZvHgxZDLZNW/79u274c8nk8maPSaEsHv8yjZNE5Zb2+ZyiYmJ0Ov1tlt+fv4N19xWUrJLAQAWAYz86w6HTMRERETXklNWA8sVu6uYhUBuWa00BV1Fq+fwzJkzBw8//PA124SHh9/Q59LpdNizZ4/dY+Xl5TCZTLYRG51OZxvJaVJSUgIA123j5uaGwMDAFl9bpVLZXSbraIX6Oiz69rJELKyJ+O4+QQhRe0pWFxERUWt082/+nqWQyRCu8ZKgmqtrdeDRaDTQaDRt8uLx8fF48803UVhYiJCQEADWicwqlQpxcXG2NosWLYLRaIRSqbS1CQ0NtQWr+Ph4bNiwwe5zJyUlYeDAgXB3d2+TWtvatRIxAw8RETmLpqsVTRQyGZY8EOtw72XtOocnLy8Phw4dQl5eHsxmMw4dOoRDhw6hutq6E2NCQgJiYmIwdepUHDx4ED/99BNefPFFTJ8+HX5+1vktU6ZMgUqlwrRp03D06FF8++23WLJkiW2FFgDMnDkTZ8+exfz585GVlYXPPvsMn376KV588cX27N5NidB4Q37F1TYZ4HCJmIiI6Gqq6k3429aTAIAXE/rgm+lDseuVkZg8qLvElTXXrsvSX331VXzxxRe2+7fddhsAYPv27RgxYgQUCgU2btyIWbNm4Y477oCnpyemTJmC5cuX2z5GrVYjOTkZs2fPxsCBA+Hv74/58+dj/vz5tjYRERHYtGkTXnjhBbz//vsIDQ3FP/7xD4dekh6i9sTSB/pj0fqjMDdtoigDagwN0hZGRER0gz5KOYMLNUb01HhjxvBecFc43oaDTWSCBzkBsG5wqFarodfrbaNLHaFQX4fcslp8sOMUfj5ZhlF9g/HZtEEd9vpERES/RpG+HiOWb0e9yYKPpsZhXD+dJHXc6Pu340axTiJE7Yn4XoF4bVI/uMll2Ha8BD+fLL3+BxIREUnor0nZqDdZMLCHPxJitNf/AIkx8DiInkE+mBrfAwDw5sYsmK+c0UxEROQgsgor8d8D5wAAiyZEX3ULGEfCwONAnh8dCbWnO44XVeE/+zp+XyAiIqIbsXTzcQgBTOgfgtu7+0tdzg1h4HEgXbyUmDs6EoB1qLCaE5iJiMjB/HyyFDtPlMJdIcPL46OkLueGMfA4mKlDeyA80Atl1Uas2nFK6nKIiIhsLBaBJZuOAwAeG9oDPQK9Ja7oxjHwOBilmxyJ90YDAD75OQfnyh1ra24iIuq8vj14HlmFlfD1cMPcUZFSl9MqDDwOKCFGiyERATA2WPDOj9lSl0NERIR6kxl/TbK+J80e2Rv+3kqJK2odBh4HJJPJ8KeJMZDJgO8PFeBgXrnUJRERUSf32S85KNDXI1TtgWnDwqUup9UYeBxUbFc1HritGwDgjY1Z4P6QREQklQvVBqzafhoA8OK4KHi4KySuqPUYeBzYS+Oi4OmuwP6z5diUUXT9DyAiImoHK7edQpWhAf1C/XD/rV2lLudXYeBxYDq1B2YM7wkAWLYlC/Ums8QVERFRZ5NTVoOv0s4CABbdGw35lSdfOwkGHgf3zN09ofVTIf9iHb7YnSt1OURE1Mm8veU4GiwCI6KCcEdvjdTl/GoMPA7OS+mGl8b1BQC8t+0ULlQbJK6IiIg6i/1nL2Lz0SLIZUDiPdFSl3NTGHicwAO3dUVsVz9UGRrwt60npS6HiIg6ASEubTL4u7gwROl8Ja7o5jDwOAG5XIY/3BsDAPj33jycLK6SuCIiInJ1Px4rwv6z5fBwl+OFsX2kLuemMfA4ifhegUiI0cJsEXhzU5bU5RARkQszmS14a4t1k8Hpd/WETu0hcUU3j4HHiSTeGw03uQw7skuRcqJU6nKIiMhF/XtPHnLKaqDxUWLG8F5Sl9MmGHicSITGG4/HhwMA3tyYiQazRdqCiIjI5VTWm/D3n6zzRZ8f0wc+KjeJK2obDDxOZu7o3lB7uuNEcTX+s++c1OUQEZGL+XDHaVysMaJnkDceHhQmdTlthoHHyXTxUuL50dYTalckZ6Oq3iRxRURE5CoKKurw6a4cAMAr4/vCXeE6McF1etKJPDa0ByI03iirNmLVjtNSl0NERC7ir0knYGiwYFC4P8bGaKUup00x8DghpZscifdYNyP8564cnCuvlbgiIiJydpkFlVh/0DpVYtG90ZDJnPMIiath4HFSY2O0GNozAMYGC95uXDpIRET0ay3dnAUhgAkDQnBbd3+py2lzDDxOSiaT4Y8TYiCTAT8cLsCBvHKpSyIiIie180Qpfj5ZBneFDAsbjzNyNQw8Tiy2qxq/vb0bAOCN/2VCCCFxRURE5GzMFoEljRvaTh0aju6BXhJX1D4YeJzci+Oi4OmuwIG8CmzMKJS6HCIicjLrD5zD8aIq+Hq44blRvaUup90w8Dg5rZ8HZjbugrls83HUm8wSV0RERM6izmjGX5NOAADmjOwNf2+lxBW1HwYeFzD97gjo/DxwrrwOq3fnSl0OERE5ic9+yUFRZT26dvHEE8PCpS6nXTHwuAAvpRteGhcFAHhv2ymUVRskroiIiBxdWbXBtpfbi+P6wMNdIXFF7YuBx0X8v9u6IrarH6oNDXg3+YTU5RARkYNb+dNJVBsaENvVD7+5pavU5bQ7Bh4XIZdbl6kDwDd783CiuEriioiIyFGdKa3G13vyAACL7omGXO5amwy2pN0CT25uLp5++mlERETA09MTvXr1wp///GcYjUa7dnl5ebjvvvvg7e0NjUaDuXPnNmuTkZGB4cOHw9PTE127dsXrr7/ebAl2SkoK4uLi4OHhgZ49e+LDDz9sr645rKE9AzGunxYWAby5MUvqcoiIyEG9vSUbDRaBkVFBGNZbI3U5HaLdznw/fvw4LBYLPvroI/Tu3RtHjx7F9OnTUVNTg+XLlwMAzGYzJkyYgKCgIOzatQsXLlzAE088ASEEVq5cCQCorKzE2LFjMXLkSKSnp+PEiROYNm0avL29sWDBAgBATk4O7r33XkyfPh1fffUVfvnlF8yaNQtBQUF48MEH26uLDumVe6Kx7XgJUk6UYkd2CUZEBUtdEhEROZAfjxZiy7EiyAAk3hstdTkdRiY6cLe6d955B6tWrcKZM2cAAJs3b8bEiRORn5+P0NBQAMCaNWswbdo0lJSUwM/PD6tWrUJiYiKKi4uhUqkAAMuWLcPKlStx7tw5yGQyLFy4ED/88AOysi6NasycOROHDx9GamrqDdVWWVkJtVoNvV4PPz+/Nu55x/rL/zLx6a4cRGi88PpvYtE72Achak+pyyIiIomt2ZuHV9Zn2O6/9WB/TB7UXcKKbt6Nvn936BwevV6PgIAA2/3U1FTExsbawg4AjBs3DgaDAfv377e1GT58uC3sNLUpKChAbm6urU1CQoLda40bNw779u2DyWRqsRaDwYDKykq7m6uYOyoSnkoFcspqMfXTvbhj2TasTc+TuiwiIpJQob4OiZeFHQBYtP4oCvV1ElXUsTos8Jw+fRorV67EzJkzbY8VFRVBq7U/ft7f3x9KpRJFRUVXbdN0/3ptGhoaUFZW1mI9S5cuhVqttt3CwsJuroMOpNbUgHrjpQ0ILaJzfVMTEVFz7287hSsv6ZiFQG5ZrST1dLRWB57FixdDJpNd87Zv3z67jykoKMD48ePxu9/9Dr///e/tnmvp+HkhhN3jV7ZpugrX2jaXS0xMhF6vt93y8/Ov13WnkVNW06m/qYmIyN6qHafx1Z7mI/0KmQzhGtc8O+tKrZ60PGfOHDz88MPXbBMeHm77e0FBAUaOHIn4+Hh8/PHHdu10Oh327Nlj91h5eTlMJpNtxEan09lGcpqUlJQAwHXbuLm5ITAwsMUaVSqV3WUyVxKh8YZcZh3ZuRwPFyUi6nz+8dNJrGjcn210dDB2HC+BWVjDzpIHYjvNHM9WBx6NRgON5saWsJ0/fx4jR45EXFwcPv/8c8jl9gNK8fHxePPNN1FYWIiQkBAAQFJSElQqFeLi4mxtFi1aBKPRCKVSaWsTGhpqC1bx8fHYsGGD3edOSkrCwIED4e7u3touOr0QtSeWPtAfi9YfhfmykDPnm4P48unB6BeqlrA6IiLqCEIIrEg+gZXbTgEAXkzogzmjIlGor0NuWS3CNV6dJuwA7bhKq6CgAMOHD0f37t3xr3/9CwrFpS2rdTodAOuy9FtvvRVarRbvvPMOLl68iGnTpuH++++3LUvX6/WIiorCqFGjsGjRIpw8eRLTpk3Dq6++arcsPTY2FjNmzMD06dORmpqKmTNn4ptvvrnhZemutEqrSdM3tb+XO1767xFknNfDz8MN/3p6CG4N6yJ1eURE1E6EEHhrSzY+TLEeHZF4T1/MaDxo2tXc6Pt3uwWe1atX48knn2zxuctfMi8vD7NmzcK2bdvg6emJKVOmYPny5XaXmzIyMjB79mzs3bsX/v7+mDlzJl599VW7+TkpKSl44YUXcOzYMYSGhmLhwoV2E6SvxxUDz+Uq60148vN07D9bDh+VGz6bNgiDIwKu/4FERORUhBB4c2MW/rkrBwDwp4kxePrOCImraj+SBx5n4+qBBwBqDA14+ot0pJ25CE93BT55fCDujOwcO2wSEXUGQggs/uEYvkg9CwB4/Tf98Hh8uLRFtTOH3IeHpOWtcsPqJwdjeJ8g1JnMeOqLdGw7Xix1WURE1AYsFoE/fHcUX6SehUwGLH2gv8uHndZg4OlkPNwV+PjxOCTEaGFssGDGl/uxOaNQ6rKIiOgmmC0Cr6w/gn/vyYNMBrz94AA8Mti5d1Buaww8nZDKTYH3H70d990SCpNZYM43B/HdwfNSl0VERL+C2SLw0v8dxn/2nYNcBrz70K343UDX2Uy3rTDwdFLuCjn+NvlW/DauG8wWgRf+c4jHTxAROZkGswXz1h7C+oPnoZDL8PeHb8P9t3WVuiyHxMDTiSnkMrz94AA8NrQ7hAAWrsvA6l9ypC6LiIhugMlswXPfHMSGwwVwk8vw/pTbcN8todf/wE6KgaeTk8tl+MtvYvH7xiWLizdk2vZtICIix2RoMGPW1wew+WgRlAo5PnwsDuNjQ6Quy6Ex8BBkMhn+MCEaz43qDQBYtvk43k0+waMoiIgcUL3JjGe/OoDkzGIo3eT46PE4jInRXv8DOzkGHgJgDT0LEqLw0rgoAMDffzqJZVuOM/QQETmQepMZ0/+1D9uOl0DlJsenTwzEyKhgqctyCgw8ZGf2yN7408QYAMBHKWew+IdjsFx5CikREXW4WmMDnlqdjp9PlsHTXYHPnxyEuyKDpC7LaTDwUDNP3xmBJf+vP2Qy4IvUs1j0bQbMDD1ERJKpNjRg2mfp2H36AryVCnzx1GAM68Wd8luDgYdaNGVIdyz/7S2Qy4A16flY8J9DaDBbpC6LiKjTqao34YnP9mJv7kX4qqwHQPMsxNZj4KGrejCuG1Y+cjvc5DJ8d6gAz31zEMYGhh4ioo6irzPhsU/3Yv/Zcvh5uOGr3w9BXA9/qctySgw8dE0TBoRg1WNxUCrk2Hy0CDO+3Id6k1nqsoiIXF5FrRGP/jMNh/Mr0MXLHf+ePhS3hHWRuiynxcBD1zU2Rot/PjEQHu5ybM8uxdNfpKPW2CB1WURELutCtQGPfLIHR89XIsBbiW+mD0VsV7XUZTk1Bh66IXf3CcLqJwfDS6nAL6cu4InP9qKq3iR1WURELqe0yoBHPklDVmElND4qrHlmKKJD/KQuy+kx8NANG9ozEF8+PQS+Hm5Izy3HY//cg4pao9RlERG5jJLKejz8cSpOFFdD66fC2hlD0UfrK3VZLoGBh1olroc/vpk+FP5e7jh8To9HPtmDC9UGqcsiInJ6hfo6TP44DadLaxCi9sDaZ+LRK8hH6rJcBgMPtVpsVzXWPBMPjY8KWYWVmPxxGkoq66Uui4jIaZ0rr8Xkj9KQU1aDrl088Z8Z8QjXeEtdlkth4KFfJUrni//MGIoQtQdOlVTjoY9Scb6iTuqyiIicTt4Fa9jJu1iL7gFeWDtjKMICvKQuy+Uw8NCv1jPIB/+ZEY9u/p7IvVCLhz5MxdkLNVKXRUTkNHLLajD5Y+svjBEab6ydMRTd/Bl22gMDD92UsAAv/N/MePTUeON8RR1+92EqTpVUSV0WEZHDaxodL9TXo1eQN9Y+MxQhak+py3JZDDx000LUnlgzYyj6aH1QUmXA5I/SkFlQKXVZREQO60RxFR7+OA0lVQZEaX2x5pl4BPt5SF2WS2PgoTYR7OuBNc/Eo1+oHy7UGPHIJ2k4cq5C6rKIiBxOVmElHv44DWXVBkSH+OHf04cgyFcldVkuj4GH2kyAtxL/nj4Ut3XvAn2dCY9+sgf7ci9KXRYRkcM4el6PRz5Jw8UaI/p3VeOb6UMQ6MOw0xEYeKhNqT3d8WXjSb5VhgZM/XQvdp8qk7osIiLJHc6vwJRP0lBRa8KtYV3w1e+HoIuXUuqyOg0GHmpzPio3fPHkYNwVqUGdyYxpq9Ox/XiJ1GUREUmiUF+H1btzMeWTNFTWNyCuhz++fHow1J7uUpfWqciEEELqIhxBZWUl1Go19Ho9/Px4ZklbMDSYMfvrg9iaVQx3hQyvT4pFD40XIjTeXIlARJ3C2vQ8vLI+A03vtBEab/zvuTvhrXKTtjAXcqPv3xzhoXajclNg1WO3Y0L/EJjMAonfZmDKJ3twx7JtWJueJ3V5RETt6mRxFV5ZdynsAMDZCzWo5MHLkmDgoXblrpDjlXui7B6zCCBxfQYK9dyZmYhcj9kisDY9Dw+u2o0rL6FYBJBbVitJXZ0dAw+1u/zy5sHGIoBlm46j2tAgQUVERO1jb85FTHpvFxauy0BlffP/3xQyGcI13ElZCryISO0uQuMNucwaci73/eEC/HL6Al4a1we/jQuDQi6TpkAiopt0rrwWSzcfx8YjhQAAXw83PD86Ep7uCrz6/TGYhYBCJsOSB2I5h1Ei7TrCM2nSJHTv3h0eHh4ICQnB1KlTUVBQYNcmLy8P9913H7y9vaHRaDB37lwYjUa7NhkZGRg+fDg8PT3RtWtXvP7667hyrnVKSgri4uLg4eGBnj174sMPP2zPrlErhKg9sfSB/lDIrIFGIQOmDu2B8EAvlFUbsHBdBu5buQu7T3P5OhE5l1pjA1YkZWP0X1Ow8Ugh5DJgypDu2PHiCPz+rp54dGgP7HplJL6ZPhS7XhmJyYO6S11yp9WuIzwjR47EokWLEBISgvPnz+PFF1/Eb3/7W+zevRsAYDabMWHCBAQFBWHXrl24cOECnnjiCQghsHLlSgDW2ddjx47FyJEjkZ6ejhMnTmDatGnw9vbGggULAAA5OTm49957MX36dHz11Vf45ZdfMGvWLAQFBeHBBx9szy7SDZo8qDvu7hOE3LJahGu8EKL2hLHBgn+l5uLvP51EZmElpnyyB2NjtFh0bzQiNN5Sl0xEdFVCCHx/qADLNh9HUWU9AGBozwC8OrEfYkLtVwqFqD05quMAOnRZ+g8//ID7778fBoMB7u7u2Lx5MyZOnIj8/HyEhoYCANasWYNp06ahpKQEfn5+WLVqFRITE1FcXAyVyrob5bJly7By5UqcO3cOMpkMCxcuxA8//ICsrCzba82cOROHDx9GamrqDdXGZenSuVhjxN+2nsDXe/Jgtgi4K2R4PD4cc0dFQu3FfSqIyLEcyq/AaxuO4WBeBQCgm78n/jghGuP66SCT8dJ8R3O4ZekXL17E119/jWHDhsHd3fomlpqaitjYWFvYAYBx48bBYDBg//79tjbDhw+3hZ2mNgUFBcjNzbW1SUhIsHu9cePGYd++fTCZWl7+ZzAYUFlZaXcjaQR4K/H6b2Kx5fm7MCIqCCazwKe7cjBi+XZ8sTsXJrNF6hKJiFBcWY/5/zmE+9//BQfzKuClVOClcVHYOn84xseGMOw4uHYPPAsXLoS3tzcCAwORl5eH77//3vZcUVERtFqtXXt/f38olUoUFRVdtU3T/eu1aWhoQFlZy/NCli5dCrVabbuFhYXdXEfppkVqfbH6ycH44qnBiAz2QXmtCX/+4RjG/20nth8vaTZvi4ioI9SbzHh/+ymMXL4D6w+cBwA8eHs3bH9xBGaP7A0Pd4XEFdKNaHXgWbx4MWQy2TVv+/bts7V/6aWXcPDgQSQlJUGhUODxxx+3e+NqKRELIewev7JN08e3ts3lEhMTodfrbbf8/Pwb/Segdja8TxA2P38X/nJ/LAK8lThdWoMnV6fj8c/2IruoSuryiKiTEEJgc0YhxqxIwTs/ZqPWaMbt3bvgu9l34K8P3QKtn4fUJVIrtHrS8pw5c/Dwww9fs014eLjt7xqNBhqNBn369EF0dDTCwsKQlpaG+Ph46HQ67Nmzx+5jy8vLYTKZbCM2Op3ONpLTpKTEei7T9dq4ubkhMDCwxRpVKpXdZTJyLG4KOaYO7YFJt4Ti/e2n8PkvOfj5ZBnu+ftOPDK4O+aP7cMThomo3Rwr0OP1DZnYk3MRAKDz80DivX0x6ZZQXrpyUq0OPE0B5tdoGnUxGAwAgPj4eLz55psoLCxESEgIACApKQkqlQpxcXG2NosWLYLRaIRSqbS1CQ0NtQWr+Ph4bNiwwe61kpKSMHDgQNt8IXJOak93LLo3Go8O6Y6lm45jy7EifL0nDz8cKsCcUb0x7Y5wqNw4nExEbeNCtQHLk05gTXoehABUbnLMGN4LM4f3hJeSW9c5s3ZbpbV3717s3bsXd955J/z9/XHmzBm8+uqrKCwsxLFjx6BSqWA2m3HrrbdCq9XinXfewcWLFzFt2jTcf//9tmXper0eUVFRGDVqFBYtWoSTJ09i2rRpePXVV+2WpcfGxmLGjBmYPn06UlNTMXPmTHzzzTc3vCydq7ScQ9qZC/jL/zJxrMA6ybx7gBcS7+mL8bFcHUFEv97l22RUNe6QPHFACF65py+6+XNnZEd2o+/f7RZ4MjIy8Pzzz+Pw4cOoqalBSEgIxo8fjz/+8Y/o2rWrrV1eXh5mzZqFbdu2wdPTE1OmTMHy5cvtLjdlZGRg9uzZ2Lt3L/z9/TFz5ky8+uqrdm9wKSkpeOGFF3Ds2DGEhoZi4cKFmDlz5g3Xy8DjPCwWgXUHzuGdH7NRUmUdLRwcEYA/TYhB/25qiasjImcihMD27BK88b8snCmrAQDEdvXDqxP7YXBEgMTV0Y2QPPA4GwYe51NjaMBHKafx0c4zMDRYIJMBD9zWDS+Pj+JkQiK6rlMlVXj9f1nYeaIUAKDxUeLlcX3xYFw3HnXjRBh4WomBx3kVVNTh7S3H8d0h67Elnu4KzBzeC8/c3ROeSs7vISJ7+loT3t16Al+mnbVtdvrUnRGYM7I3fD0479PZMPC0EgOP8zuYV46//C8TBxp3Pw1Re+Dl8VH4zS1dIedva0SdXoPZgm/25mFF8gmU11o3pR0bo8Uf7o1GOI+zcVoMPK3EwOMahBD435FCLNt8HOcr6gAAt3RT408TYzAwnNfjiTqrX06V4fUNmcgutu7l1Ufrg1cn9sOdkb9u1TE5DgaeVmLgcS31JjM+3ZWDD7afQo3RDACYMCAEr4zvi7AArrgg6ixyy2rw5qYsJGcWAwC6eLljwdg+eGRwd7gpOux0JWpHDDytxMDjmkqq6rEi6QTW7suHEIDSTY6n74zArBG9eK2eyIVV1Zvw3vZT+HxXLoxmCxRyGaYO7YF5YyLRxUspdXnUhhh4WomBx7VlFlTijY2Z2H36AgDraowFCVF4aGAYV2MQuRCLReC/+8/h7R+zUVZt3bbirkgNXp0Yg0itr8TVUXtg4GklBh7XJ4TA1qwSLNmUhZzG/Tb66nzxp4kxuKM3r+MTObv03It4bcMxHD1v3Zg0QuONP06Ixqi+wdyY1IUx8LQSA0/nYWyw4Mu0s/j71hOobNxRdUx0MBbdG42eQT4SV0dErXW+og7LNh/HhsPWrSl8VW54fkwkHo8Ph9KN83RcHQNPKzHwdD7lNUb8/aeTtr043OQyTI3vgedH8xo/kTOoNTbgw5Qz+HjnadSbrJuPPjyoOxYk9IGGhwt3Ggw8rcTA03mdKqnGkk1Z2Ha8BIB1FcfzoyPx2NAecOcqDiKHI4TAD4cLsGzzcRTq6wEAQyIC8Op9MegXyuNlOhsGnlZi4KGdJ0rxxsZMnCiuBgD0DPLGH+61Xv8vqqxHTlkNIjTeCFF7SlwpUedTqK9DTlkN6oxmfLDjNPafLQcAdPP3xKJ7o3EPDxDutBh4WomBhwDrTqxr0vPxbvIJXKgxAgB6B/vgdGk1hADkMmDpA/0xeVB3iSsl6jzW7M3Dom8zYLns3cpLqcCsEb3w+7t6wsOdR8h0Zgw8rcTAQ5errDfh/W2n8NmuHJgs9j8ichnwyyujONJD1I7MFoFD+eVYf+A8vt6TZ/ecDMD3s+/AgLAuktRGjuVG37/dOrAmIqfh5+GOxHujER3ih3lrD9k9ZxHA7K8P4KGBYRgVHYxgX57MTtQW6k1m7D5dhqRjxdiaVYyyamOL7QRg20Gd6EYx8BBdw5CeAZDLgCsGeXAgr8J2SOmtYV0wNkaLMdFa9NH6cB4BUSvoa03Yll2MpGPFSDlRitrLgoyvhxuG9QxEUmYxLv8RVMhkCNfwiBhqHV7SasRLWnQ1a9PzsGj9UZiFgEIGPDcqEgq5DFuzinH4nN6ubViAJ8ZEazE2WotBEQFc5UXUgoKKOiRnFiMpswhpZy7CfNlvFDo/DyT00yIhRochPa0/Q/Y/gzIseSCW8+jIhnN4WomBh66lUF+H3LJahGu87ObuFFfW46esEmzNKsauU2UwNlhsz/l6uGFkVDBGRwdjRFQw1J48u4s6JyEEsourkHTMGnKadkJuEqX1tYWc2K5+LY6SXu1nkIiBp5UYeOhm1Rob8PPJMmzNLMa24yW2VV4A4CaXYXBEgHX0J0bLE9vJ5TWYLdh/thxJjSM5+RfrbM/JZcDAHgFI6Gf9eegR6C1hpeTsGHhaiYGH2lLTCpPkTOvoz6mSarvn++p8MSZaizExWgzoqoacB5iSC6gzmvHzyVIkZRbjp6xilNeabM+p3OS4KzIICf20GN03GIHcCZnaCANPKzHwUHvKLavB1qxiJGcWY9/Zcrs5C0G+KozuG4wx0Vrc0VsDTyX3FCHncbHGiJ+yipGUWYyfT5ai3nTpsm4XL3eM7msdxbm7jwZeSq6TobbHwNNKDDzUUSpqjdiRXYrkrGKkZJei2tBge87DXY47ewdhbEwwRvXVIsiXvwWT48m/WGu9VHWsCOm5F+1WMXbt4mmbjzMo3B9unLhP7YyBp5UYeEgKxgYL9uRcwNbMYmzNKsH5ikvzHGQy65L3pnk/kcFc8k7SEELgWEGlLeQcL6qyez4mxM8WcqJDfPl9Sh2KgaeVGHhIakIIZBVWYWuWddO1I1csee8e4NU47ycYg8K55J3al8lsQXrORSRlWi/FXh7GFXIZBodbJx2PieYkfJIWA08rMfCQoynS1+On48XYmlmMX05fsFvy7ufhhpGN836GRwXBz4NL3unm1RgasPPEpUnHlfWXLrd6uiswvE8QxsZoMapvMPy9lRJWSnQJA08rMfCQI6sxNC55z7Iueb94xZL3oT0DMSY6GKP52za1UmmVAT81Tqj/+Yq9pAK9lRgdHYyEGB3ujNTwkE5ySAw8rcTAQ87CbBE4mFeO5Czr6M/p0hq75/vqfG1HXfTnkndqQU5ZDZIzi5B0rBj788px+btAj0AvJMRokdBPh9u7+0PB7x9ycAw8rcTAQ87qTGk1fsoqQXJWMfZdsWIm2FeF0dFajI0JxrBe/A29s7JYBI6c19tCzskr9oUa0E1tCzmcHE/OhoGnlRh4yBWU1xixPdu62WFKdqndidKe7grcFanBmMY5GJrGjd8K9XXIKatBhMabW/a7gKavZ7cunsi9UIukzCIkZxajuNJga+MmlyG+VyASYqybX/LrTs6MgaeVGHjI1RgazEg7c7FxyXsxCvX1tudkMuD27v4I8lUh6VgRLMK63f/SB/rzUEYn02C2oKzaiOLKeqzbfw5fpp1FS/+peysVGNE3GAkxWp7tRi6FgaeVGHjIlTXto9J00GnGef1V2w4M74JuXbwQ7OeBIB8VgnxVCPa1/hnkq4La052XPDqA2SJwocaAkkoDiivrUdz4Z0mV9e9Nf5ZVG3Ct/8V/c2so7r+tK4b1CoTKjZc0yfUw8LQSAw91JoX6Onyy8ww++yW31R+rVMgR5KuC5vIg5KNCsJ/qUkDy84DGR8k32BZYLALltUZrgKmqR4ldmDHY7pdWG+yOILkWhVwGtacbLtaYmj33zfShiO8V2NbdIHIYN/r+3SEHmxgMBgwZMgSHDx/GwYMHceutt9qey8vLw+zZs7Ft2zZ4enpiypQpWL58OZTKS3s8ZGRkYM6cOdi7dy8CAgIwY8YM/OlPf7L7LTMlJQXz58/HsWPHEBoaipdffhkzZ87siO4ROZ0QtSem390Tq3fn2k1ylsuAP06IhsksUFplQEmVAaVV1jffksp6VNY3wGi24HxFnd1GdFej9nS3HyFqCka+KgT5eNhCUhcv5x81EkJAX2eyhZcrA4w13FhHZkzmGwsychmgafw30/p6INjPA1o/FbSNfwb7ekDr54EAbyVKqupxx7Jtdl9PhUyGcA23KSACOijwvPzyywgNDcXhw4ftHjebzZgwYQKCgoKwa9cuXLhwAU888QSEEFi5ciUAa3IbO3YsRo4cifT0dJw4cQLTpk2Dt7c3FixYAADIycnBvffei+nTp+Orr77CL7/8glmzZiEoKAgPPvhgR3SRyOmEqD2x9IH+WLT+KMxCQCGTYckDsdecw1NvMqOs+rIgVGX/99KqeltAMpmtAUBfZ2p2WvyV3BUy2+iQ9eZh+/vlYSnIV/WrV5r92snZQghUGRpswaXpUlJxZf2ly02Nj12+h831BHorLwUY38YA4+dhCzNaPw8Eeitv+Cyqq309OSGZyKrdL2lt3rwZ8+fPx7p169CvXz+7EZ7Nmzdj4sSJyM/PR2hoKABgzZo1mDZtGkpKSuDn54dVq1YhMTERxcXFUKmsq0qWLVuGlStX4ty5c5DJZFi4cCF++OEHZGVl2V535syZOHz4MFJTU2+oTl7Sos6qUF+H3LJahGu82uzNUQiBiloTSqubQlH9ZaHIfuSoorb5ZZhr8fNwawxCLYQi230PdPF0t+1BtDY9D4nrM5pNzq4xNNhGYuwDTNN9a5CpM5mvU9UlXbzcG0djVHbhJfiyUBPko4LSrX2OBmmPryeRI3OIS1rFxcWYPn06vvvuO3h5NR9WTU1NRWxsrC3sAMC4ceNgMBiwf/9+jBw5EqmpqRg+fLgt7DS1SUxMRG5uLiIiIpCamoqEhAS7zz1u3Dh8+umnMJlMcHdvvhrBYDDAYLi0TLOysrItukzkdELUnm3+xiiTyeDvrYS/txJ9tL7XbGtoMKOs2mgNQpX1l4Ukg11IKq0ywGi2oLK+AZX1Dc02XLySm1wGTePlsssPu7QIYOG6DLy2IRO1xhsPMr4ebpcCzGWXl5qCjNbP46ZGoNpKe3w9iVxBuwUeIQSmTZuGmTNnYuDAgcjNzW3WpqioCFqt1u4xf39/KJVKFBUV2dqEh4fbtWn6mKKiIkRERLT4ebRaLRoaGlBWVoaQkJBmr7106VK89tprN9FDImoLKjcFunbxRNcu136TFkKgsq7h0mhRtXUFU1NAunwkqbzWhAaLQFFlPYoq61v8fE1hx0upgM7POiJzeXgJ9vOA1rfp7yp4KTtkBgARtZNW/wQvXrz4ukEhPT0du3fvRmVlJRITE6/ZtqWJikIIu8evbNN0Fa61bS6XmJiI+fPn2+5XVlYiLCzsmrUSkXRkMhnUXu5Qe7kj8jqjRsYGC8oag1B2URUWrjtitzeNXAb8e/pQxHZVw0fFIEPUGbT6J33OnDl4+OGHr9kmPDwcb7zxBtLS0uwuRQHAwIED8eijj+KLL76ATqfDnj177J4vLy+HyWSyjdjodDrbaE+TkpISALhuGzc3NwQGtrwcU6VSNauNiFyD0k2O0C6eCO3iiVvCukBANJvMO7Qnl2oTdSatDjwajQYajea67f7xj3/gjTfesN0vKCjAuHHjsHbtWgwZMgQAEB8fjzfffBOFhYW2y05JSUlQqVSIi4uztVm0aBGMRqNtqXpSUhJCQ0Ntl7ri4+OxYcMGu9dPSkrCwIEDW5y/Q0Sdy+RB3XF3nyBO5iXqxDps48GmCcaXr9Iym8249dZbodVq8c477+DixYuYNm0a7r//ftuydL1ej6ioKIwaNQqLFi3CyZMnMW3aNLz66qt2y9JjY2MxY8YMTJ8+HampqZg5cya++eabG16WzlVaREREzudG37/bZ13kDVIoFNi4cSM8PDxwxx134KGHHsL999+P5cuX29qo1WokJyfj3LlzGDhwIGbNmoX58+fbzb+JiIjApk2bsGPHDtx66634y1/+gn/84x/cg4eIiIgA8GgJG47wEBEROR+nGOEhIiIi6ggMPEREROTyGHiIiIjI5THwEBERkctj4CEiIiKXx8BDRERELo+Bh4iIiFweAw8RERG5PAYeIiIicnmtPjzUVTVtOF1ZWSlxJURERHSjmt63r3dwBANPo6qqKgBAWFiYxJUQERFRa1VVVUGtVl/1eZ6l1chisaCgoAC+vr6QyWRt+rkrKysRFhaG/Px8lzyni/1zfq7eR/bP+bl6H9m/X08IgaqqKoSGhkIuv/pMHY7wNJLL5ejWrVu7voafn59LfiM3Yf+cn6v3kf1zfq7eR/bv17nWyE4TTlomIiIil8fAQ0RERC6PgacDqFQq/PnPf4ZKpZK6lHbB/jk/V+8j++f8XL2P7F/746RlIiIicnkc4SEiIiKXx8BDRERELo+Bh4iIiFweAw8RERG5PAaem2QwGHDrrbdCJpPh0KFDds/l5eXhvvvug7e3NzQaDebOnQuj0WjXJiMjA8OHD4enpye6du2K119/vdl5ICkpKYiLi4OHhwd69uyJDz/8sL27BQCYNGkSunfvDg8PD4SEhGDq1KkoKCiwa+OsfczNzcXTTz+NiIgIeHp6olevXvjzn//crHZn7V+TN998E8OGDYOXlxe6dOnSYhtn7+P1fPDBB4iIiICHhwfi4uLw888/S11Si3bu3In77rsPoaGhkMlk+O677+yeF0Jg8eLFCA0NhaenJ0aMGIFjx47ZtTEYDHjuueeg0Wjg7e2NSZMm4dy5c3ZtysvLMXXqVKjVaqjVakydOhUVFRXt3Dtg6dKlGDRoEHx9fREcHIz7778f2dnZdm2cuY+rVq3CgAEDbBvrxcfHY/PmzS7Rt5YsXboUMpkM8+bNsz3m8H0UdFPmzp0r7rnnHgFAHDx40PZ4Q0ODiI2NFSNHjhQHDhwQycnJIjQ0VMyZM8fWRq/XC61WKx5++GGRkZEh1q1bJ3x9fcXy5cttbc6cOSO8vLzE888/LzIzM8Unn3wi3N3dxX//+99279uKFStEamqqyM3NFb/88ouIj48X8fHxLtHHzZs3i2nTpokff/xRnD59Wnz//fciODhYLFiwwCX61+TVV18VK1asEPPnzxdqtbrZ867Qx2tZs2aNcHd3F5988onIzMwUzz//vPD29hZnz56VtK6WbNq0SfzhD38Q69atEwDEt99+a/f8smXLhK+vr1i3bp3IyMgQkydPFiEhIaKystLWZubMmaJr164iOTlZHDhwQIwcOVLccsstoqGhwdZm/PjxIjY2VuzevVvs3r1bxMbGiokTJ7Z7/8aNGyc+//xzcfToUXHo0CExYcIE0b17d1FdXe0Sffzhhx/Exo0bRXZ2tsjOzhaLFi0S7u7u4ujRo07ftyvt3btXhIeHiwEDBojnn3/e9rij95GB5yZs2rRJ9O3bVxw7dqxZ4Nm0aZOQy+Xi/Pnztse++eYboVKphF6vF0II8cEHHwi1Wi3q6+ttbZYuXSpCQ0OFxWIRQgjx8ssvi759+9q97owZM8TQoUPbsWct+/7774VMJhNGo1EI4Xp9fPvtt0VERITtviv17/PPP28x8LhSH1syePBgMXPmTLvH+vbtK1555RWJKroxVwYei8UidDqdWLZsme2x+vp6oVarxYcffiiEEKKiokK4u7uLNWvW2NqcP39eyOVysWXLFiGEEJmZmQKASEtLs7VJTU0VAMTx48fbuVf2SkpKBACRkpIihHDNPvr7+4t//vOfLtW3qqoqERkZKZKTk8Xw4cNtgccZ+shLWr9ScXExpk+fji+//BJeXl7Nnk9NTUVsbCxCQ0Ntj40bNw4GgwH79++3tRk+fLjdRkzjxo1DQUEBcnNzbW0SEhLsPve4ceOwb98+mEymduhZyy5evIivv/4aw4YNg7u7u602V+qjXq9HQECA7b6r9a8lrtxHo9GI/fv3N6srISEBu3fvlqSmXysnJwdFRUV2fVGpVBg+fLitL/v374fJZLJrExoaitjYWFub1NRUqNVqDBkyxNZm6NChUKvVHf5votfrAcD2M+dKfTSbzVizZg1qamoQHx/vUn2bPXs2JkyYgDFjxtg97gx9ZOD5FYQQmDZtGmbOnImBAwe22KaoqAhardbuMX9/fyiVShQVFV21TdP967VpaGhAWVlZm/TnWhYuXAhvb28EBgYiLy8P33//ve05V+kjAJw+fRorV67EzJkzbY+5Uv+uxpX7WFZWBrPZ3GJdTXU7i6Z6r9WXoqIiKJVK+Pv7X7NNcHBws88fHBzcof8mQgjMnz8fd955J2JjY221NdV7OWfqY0ZGBnx8fKBSqTBz5kx8++23iImJcYm+AcCaNWtw4MABLF26tNlzztBHBp7LLF68GDKZ7Jq3ffv2YeXKlaisrERiYuI1P59MJmv2mBDC7vEr24jGiaCtbXOjbrSPTV566SUcPHgQSUlJUCgUePzxx+0mqzpaH1vbPwAoKCjA+PHj8bvf/Q6///3v7Z5ztP792j5eiyP2sS21VJfUNf1av6Yv1/ta3ujnaUtz5szBkSNH8M033zR7zpn7GBUVhUOHDiEtLQ3PPvssnnjiCWRmZl61LmfqW35+Pp5//nl89dVX8PDwuGo7R+6j2019tIuZM2cOHn744Wu2CQ8PxxtvvIG0tLRmZ4IMHDgQjz76KL744gvodDrs2bPH7vny8nKYTCZbAtbpdM0Sa0lJCQBct42bmxsCAwPbrY9NNBoNNBoN+vTpg+joaISFhSEtLQ3x8fEO2cfW9q+goAAjR45EfHw8Pv74Y7t2jtg/oPV9vBZH7WNb0Gg0UCgULdZ15W+hjk6n0wGw/vYbEhJie/zyvuh0OhiNRpSXl9v9Bl1SUoJhw4bZ2hQXFzf7/KWlpR32b/Lcc8/hhx9+wM6dO9GtWzfb467QR6VSid69ewOwvh+kp6fj73//OxYuXAjAufu2f/9+lJSUIC4uzvaY2WzGzp078d5779lW3Dl0H29qBlAndfbsWZGRkWG7/fjjjwKA+O9//yvy8/OFEJcmgxYUFNg+bs2aNc0mg3bp0kUYDAZbm2XLljWbDBodHW33+jNnzpRkMmheXp4AILZv3y6EcP4+njt3TkRGRoqHH37YboVAE2fv3+WuN2nZFfrYksGDB4tnn33W7rHo6GinnbT81ltv2R4zGAwtTghdu3atrU1BQUGLE0L37Nlja5OWltYhk14tFouYPXu2CA0NFSdOnGjxeWfv45VGjRolnnjiCZfoW2Vlpd37XkZGhhg4cKB47LHHREZGhlP0kYGnDeTk5Fx1Wfro0aPFgQMHxNatW0W3bt3slvtWVFQIrVYrHnnkEZGRkSHWr18v/Pz8Wlzu+8ILL4jMzEzx6aefdshy3z179oiVK1eKgwcPitzcXLFt2zZx5513il69etlW6zhzH8+fPy969+4tRo0aJc6dOycKCwtttybO3L8mZ8+eFQcPHhSvvfaa8PHxEQcPHhQHDx4UVVVVLtPHa2lalv7pp5+KzMxMMW/ePOHt7S1yc3MlraslVVVVtq8PALFixQpx8OBB2xL6ZcuWCbVaLdavXy8yMjLEI4880uKS327duomtW7eKAwcOiFGjRrW45HfAgAEiNTVVpKamiv79+3fIsuZnn31WqNVqsWPHDruft9raWlsbZ+5jYmKi2Llzp8jJyRFHjhwRixYtEnK5XCQlJTl9367m8lVaQjh+Hxl42kBLgUcI65vNhAkThKenpwgICBBz5syxW9orhBBHjhwRd911l1CpVEKn04nFixfbfmtusmPHDnHbbbcJpVIpwsPDxapVq9q7S+LIkSNi5MiRIiAgQKhUKhEeHi5mzpwpzp075xJ9/PzzzwWAFm+u0L8mTzzxRIt9bBqlE8L5+3g977//vujRo4dQKpXi9ttvty2DdjTbt29v8Wv1xBNPCCGsIyB//vOfhU6nEyqVStx9990iIyPD7nPU1dWJOXPmiICAAOHp6SkmTpwo8vLy7NpcuHBBPProo8LX11f4+vqKRx99VJSXl7d7/6728/b555/b2jhzH5966inb91lQUJAYPXq0Lew4e9+u5srA4+h9lAlxxXapRERERC6Gq7SIiIjI5THwEBERkctj4CEiIiKXx8BDRERELo+Bh4iIiFweAw8RERG5PAYeIiIicnkMPEREROTyGHiIiIjI5THwEBERkctj4CEiIiKXx8BDRERELu//A22UYqkGtp4vAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ds = xr.open_zarr(\"radialAnalytical.zarr\")\n", "plt.plot(ds.lon.T, ds.lat.T, \".-\")\n", "\n", "print(f\"Particle radius at start of run {pset.radius_start[0]}\")\n", "print(f\"Particle radius at end of run {pset.radius[0]}\")\n", "print(f\"Change in Particle radius {pset.radius[0] - pset.radius_start[0]}\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Double-gyre example\n", "\n", "Define a double gyre fieldset that varies in time\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def doublegyre_fieldset(times, xdim=51, ydim=51):\n", " \"\"\"Implemented following Froyland and Padberg (2009)\n", " 10.1016/j.physd.2009.03.002\"\"\"\n", " A = 0.25\n", " delta = 0.25\n", " omega = 2 * np.pi\n", "\n", " a, b = 2, 1 # domain size\n", " lon = np.linspace(0, a, xdim, dtype=np.float32)\n", " lat = np.linspace(0, b, ydim, dtype=np.float32)\n", " dx, dy = lon[2] - lon[1], lat[2] - lat[1]\n", "\n", " U = np.zeros((times.size, lat.size, lon.size), dtype=np.float32)\n", " V = np.zeros((times.size, lat.size, lon.size), dtype=np.float32)\n", "\n", " for i in range(lon.size):\n", " for j in range(lat.size):\n", " x1 = lon[i] - dx / 2\n", " x2 = lat[j] - dy / 2\n", " for t in range(len(times)):\n", " time = times[t]\n", " f = (\n", " delta * np.sin(omega * time) * x1**2\n", " + (1 - 2 * delta * np.sin(omega * time)) * x1\n", " )\n", " U[t, j, i] = -np.pi * A * np.sin(np.pi * f) * np.cos(np.pi * x2)\n", " V[t, j, i] = (\n", " np.pi\n", " * A\n", " * np.cos(np.pi * f)\n", " * np.sin(np.pi * x2)\n", " * (\n", " 2 * delta * np.sin(omega * time) * x1\n", " + 1\n", " - 2 * delta * np.sin(omega * time)\n", " )\n", " )\n", "\n", " data = {\"U\": U, \"V\": V}\n", " dimensions = {\"lon\": lon, \"lat\": lat, \"time\": times}\n", " allow_time_extrapolation = True if len(times) == 1 else False\n", " fieldset = FieldSet.from_data(\n", " data, dimensions, mesh=\"flat\", allow_time_extrapolation=allow_time_extrapolation\n", " )\n", " fieldset.U.interp_method = \"cgrid_velocity\"\n", " fieldset.V.interp_method = \"cgrid_velocity\"\n", " return fieldset\n", "\n", "\n", "fieldsetDG = doublegyre_fieldset(times=np.arange(0, 3.1, 0.1))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Now simulate a set of particles on this fieldset, using the `AdvectionAnalytical` kernel\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INFO: Output files are stored in doublegyreAA.zarr.\n", "100%|██████████| 3.0/3.0 [00:01<00:00, 1.51it/s] \n" ] } ], "source": [ "X, Y = np.meshgrid(np.arange(0.15, 1.85, 0.1), np.arange(0.15, 0.85, 0.1))\n", "\n", "psetAA = ParticleSet(fieldsetDG, pclass=ScipyParticle, lon=X, lat=Y)\n", "\n", "output = psetAA.ParticleFile(name=\"doublegyreAA.zarr\", outputdt=0.1)\n", "\n", "psetAA.execute(\n", " AdvectionAnalytical,\n", " dt=0.1, # needs to be the same as outputdt for Analytical Advection\n", " runtime=3,\n", " output_file=output,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "And then show the particle trajectories in an animation\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "%%capture\n", "\n", "ds = xr.open_zarr(\"doublegyreAA.zarr\")\n", "\n", "fig = plt.figure(figsize=(7, 5), constrained_layout=True)\n", "ax = fig.add_subplot()\n", "\n", "ax.set_ylabel(\"Meridional distance [m]\")\n", "ax.set_xlabel(\"Zonal distance [m]\")\n", "ax.set_xlim(0, 2)\n", "ax.set_ylim(0, 1)\n", "\n", "timerange = np.unique(ds[\"time\"].values[np.isfinite(ds[\"time\"])])\n", "\n", "# Indices of the data where time = 0\n", "time_id = np.where(ds[\"time\"] == timerange[0])\n", "\n", "sc = ax.scatter(ds[\"lon\"].values[time_id], ds[\"lat\"].values[time_id], c=\"b\")\n", "\n", "t = str(timerange[0].astype(\"timedelta64[ms]\"))\n", "title = ax.set_title(f\"Particles at t = {t}\")\n", "\n", "\n", "def animate(i):\n", " t = str(timerange[i].astype(\"timedelta64[ms]\"))\n", " title.set_text(f\"Particles at t = {t}\")\n", "\n", " time_id = np.where(ds[\"time\"] == timerange[i])\n", " sc.set_offsets(np.c_[ds[\"lon\"].values[time_id], ds[\"lat\"].values[time_id]])\n", "\n", "\n", "anim = FuncAnimation(fig, animate, frames=len(timerange), interval=100)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "HTML(anim.to_jshtml())" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can also compute these trajectories with the `AdvectionRK4` kernel\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100%|██████████| 3.0/3.0 [00:00<00:00, 168.91it/s]\n" ] } ], "source": [ "psetRK4 = ParticleSet(fieldsetDG, pclass=JITParticle, lon=X, lat=Y)\n", "psetRK4.execute(AdvectionRK4, dt=0.01, runtime=3)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "And we can then compare the final locations of the particles from the `AdvectionRK4` and `AdvectionAnalytical` simulations\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTpUlEQVR4nO3de3wU9b0//tfOhouKREEIgSELslu89SaCJJhjGpTUC+fY0wqlvyKpiwkeqyKKQj3fWjnnUaTgrRcxi8OlraVA1dZTOVpqV4wENXKCvWjpRtnAYCKoGC5WMDuf3x+z2WSym7C72d2Z2Xk9H488NJPZzWfIzsx7Pp/35/1xCSEEiIiIiEwimd0AIiIicjYGI0RERGQqBiNERERkKgYjREREZCoGI0RERGQqBiNERERkKgYjREREZCoGI0RERGSqArMbkAxN0/Dee+/hzDPPhMvlMrs5RERElAQhBI4ePYrRo0dDknrv/7BFMPLee+9h7NixZjeDiIiI0rB//37Istzrz20RjJx55pkA9IMZOnSoya0hIiKiZBw5cgRjx46N3cd7Y4tgpHNoZujQoQxGiIiIbOZUKRZMYCUiIiJTMRghIiIiUzEYISIiIlMxGCEiIiJTMRghIiIiUzEYISIiIlMxGCEiIiJTMRghIiIiUzEYISIiIlMxGCEiIiJTMRghIiJbUFUgGNT/S/mFwQgREVmeogAeD1BZqf9XUcDoJI8wGCEiIktTVaCmBtA0/XtNA2prNKglZT2iE7IrBiNERGRpoVBXINIpokloFufq32gaUFvLHhIbYzBCRESW5vMBUo+7lRsd8KK5a0MkAjQ3g+yJwQgREVmaLAOBAOB269+73QJ1rpsh40DXTm434PWa00DqNwYjRERkeX4/EA7r+arhsAv+NVO7RydAXZ0etZAtuYQQwuxGnMqRI0dQWFiI9vZ2DB061OzmEBGRFaiqPjTj9TIQsahk798FOWwTERFR5sgyg5A8wWGafMC59kREZGMMRmwqFn+s3JigEhAREZF9MBixIUMlwrtnQdGq9R9wrj0REdkQgxGbiatECDdqUQcVY/QNnGtPlN84LEt5iMGIzSSsRIgCNCM6v55z7YnylrpyI4Il86BWzuWwLOUVBiM202clQs61J8pbyqqP4Ll7FirFi/CgRR+e5bAs5QkGIzYTX4kQqFt5BHLwl3pFIL/f1PYRUeapKlBzz9nQoJ/4seHZyCgOy1JeYJ0RG/L7gaqq7rV+hgGoyOrvVFV9iMjnA2R0/4a9METZpg/PugzbIihAszQRModlKQ8wGLGpXNb6UZSupFnJpSGA++EXT+jjRYEAe2PIMVQVCDUcgg8hyGUlOTsJO4dnu+eLudEB7wPz+UBAeYHDNNSnuNk7QkKtWK3P3uFUYnIQRQE8JRoqZ4+AZ/alUEruz1kCadzwrCT04dnFc3Ly+4myjcEI9emUs3c4lZgcQA/KBTShXzI1uPWgvGZZzoJxw0JxLS747xqWk99LlAscpqE+9do9jGgAwqnE5AC95mxo4yE3N+dsqIRLsVC+Ys8I9Sm+e1hDnetmyDjAqcTkGHpQblzg3I0OeKW9DMaJMoA9I9S76BQaf5UPVWE5OntHgoz7gOb/j8t2k2PoQbkLtTUaIpoENzr0oDzwfZ4DRBngEkKIU+9mriNHjqCwsBDt7e0YOnSo2c1xhugUGlUrRsg1Eb4V85ksR46nqkDzzkPwohly6VgGIkSnkOz9m8EIxVNVwOOBolWjBgFocENCBIGV7UyaIyKipCV7/2bOCMULhaBqxbFABIjOHrjnbM7iJSKijGMwQvF8PoRcE2OBSKeI5uIsXiIiyjgGIxRPluFbMR8SIobNnMVLRHlJVYFgEGpjK4JB1nE0A4MRSkhePAeBle1wR6czchYvEeUlRdFz5Cp/Cc+UkaisBDyenBXXpSgmsFKfVLX7gnxmt4aIKIOiyfqqVgwPWgxD0263XvGW173+Sfb+zToj1CdWfCQiK1IzsXh4dL2LEHzxOXLRlS54/csNDtMQEZGtREdWokMqAsqqj9J7o+h6Fz6EmCNnMgYjRERkG3EriWsu1C4eCnXlxtTfLLrehexuQwA1cKMDQJZy5KJJssyOTYzBiI3ws5wb/Hcmsq5eVxJf8kR6J210OWR/cC7Crx/SV0UO65szxtiVw+zYBBiM2IGqQln8d3g8gp/lLIvr/l38d0YlRBbS66KF2h6kXQhJloGKCsiTi1FRkYUekW5dOapWjGDNRqiNrRn8JfbHYMTqFAVqSRlqVvliS5hrGlBby3tkpiXs/l3lhVpSxuiPUqY2tiL4UBNvOhkmy0BgxeGuIRV0oA61kN1t1kzy6NaVo+BGeNCCSu2P8EwdxctKNwxGrCx6dwyJCb1melPm9Nr9K85l9EcpUarr9ZoVd34ZnikjoVTXm92kvOK/axjCP9qCoDQdYYyD373BuoWQokmyKsYYl9jQXLysdMNgxMqid0dmeudG9Jph4EYHvGhm9EdJUxtbUbOhzLiu04ZS9pBkmLx4DipaNkAO/jILSR4ZFE2SDUnn8aGyDwxGrCx6d5RxoEemt7DsQ4CdRa8ZcLujVWc7u39xgNEfJS1U3xZ/00EBmne8b1KL8lg018PyF0O/H75XfxGf68LLSgyDESvrujvCj7UISxMQvOs5hMMuyz4E2J2eWO/S/52lCfBjLWvhU0p85aPiezLRAe+0IpNaRFYgTy5GIOCCOxqn8rJixHLwdpCrmuyqCrVhH0LwwVc2gicJa+FTmpTqetRuKEUEBXoP27yd8K8vN7tZZAFOu6wke/9mMEI6RYFy06uoEY9DgxuSS0NgjcQeGKI0qY2taN7xPrzTiiBPLja7OUSmYDBCyVNVqCVl8Ii9PRaKEgiHXY6I3okof2Rk3RrKiGTv38wZISAU6mX6sIuZ3kRkKxlbt4ZyisEIAT4ffK53EkwfFsz0JiLbyOi6NZRTDEYIkGXIa+5DwLWga/qwpKGujkM0RGQfGV+3hnKmwOwGkEX4/fBXVaFqZyOa4YW3lLNpiMheOtet6Vw6A+ixbk2+XNTyMCmGPSPURZYhX1+KiusZiBCR/dhu3Zp05OkKwJxNQ0REeUVduRHNS56AV9ujByJ1ddYtF58KVdUDEE2DijF6TSjpXcgtOyzbQ5Ls/ZvDNERElBqLDxPIi+dAnlOef9XFokkxCm6MLbonaREEHg3Bv9LsxvUPe0aIiCh5itI1ZUWS9CUr8qHXwQ5sWBOKdUaIiCgjVBUIBvWqsj3mzgK1tZypkiuyjNCdj+dlTSgGI0RE1CtDvuTUUVC0auMOkQhsfye0Ed/tV+fl6r8MRoiIKKGERcRQBxVjunbKhzuhjeiLueff6r9pBSOPPfYYxo8fj8GDB2PSpEmor6/vc/8nn3wSX/ziF3H66aejuLgY3/nOd/Dhhx+m1WAiIquLDWvYfPSi1yJi0kT9m3y5E9qM3w+Ew/pnLBzOj5SdlIORTZs2YeHChbj33nvR1NSE8vJyXHXVVdi3b1/C/V955RXccMMN8Pv9+Nvf/oYtW7agsbER8+fP73fjiYisRln1ETwekRdlIPQiYsZtbjfgffWX+XUntCFZBioq8icOTDkYeeihh+D3+zF//nycf/75eOSRRzB27FisXr064f6vvvoqxo0bh9tuuw3jx4/HZZddhtraWrzxxhv9bjwRkZWoKzeiZnFhrAKo3fM79SEBxA8JTC7OrzshmS6lYOTkyZPYtWsXZsyYYdg+Y8YMNDQ0JHxNWVkZVFXF1q1bIYTA+++/j9/85je45pprev09J06cwJEjRwxfRESWpqoI3fNEgpkO9s7vzMchAbKelIKRDz74AJFIBEVFRYbtRUVFaGtrS/iasrIyPPnkk5g9ezYGDhyIUaNG4ayzzsJPfvKTXn/P8uXLUVhYGPsaO3ZsKs3MS4Yx6HwZkM4W/vuQGUIh+MSe+NWvJfuvfp1vQwJkPWklsLpcLsP3Qoi4bZ3eeust3Hbbbfj+97+PXbt24fnnn8fevXuxYMGCXt9/6dKlaG9vj33t378/nWbmDcPUuhINSsn9ebcuQcZE/7HUyrkIlszj0uGUOz4fZKkVAdQY10ZZcZg3caJTSKkC68mTJ3H66adjy5Yt+NrXvhbbfvvtt2P37t3Yvn173Gvmzp2LTz/9FFu2bIlte+WVV1BeXo733nsPxcXFp/y9Tq7A2m0pghg3OhDGOMg4oA/ihsN8ZAFi/1iKVt1VKhkRBFa2w3/XMLNbR06gKEBtLdTIKDRLE+F9YD7kxXP6/bYWr75O1KusVGAdOHAgJk2ahG3bthm2b9u2DWVlZQlf88knn0DqkY7tjmZD2aASvel6nVqHaL+v3QekMykUgqoVxwIRANDgRu09Z3PEhnIjmmAhB3+JipYNGQlE8ml2DlFvUh6mWbRoEZ544gmsXbsWb7/9Nu644w7s27cvNuyydOlS3HDDDbH9Z86ciaeffhqrV6/Gu+++ix07duC2227DlClTMHr06MwdSZ5KOLUOHfAiGoCw4FAXnw8h18T4BELN/qWSyUYymGCRb7NziHqT8qq9s2fPxocffohly5ahtbUVF110EbZu3QqPxwMAaG1tNdQcqa6uxtGjR/HTn/4Ud955J8466yxUVlZixYoVmTuKPNY5ta62Vu8EcUsa6sTNkMUBFhzqSZbhWzEf0t2RHotIMV4ja0hpuCU2O8fYu9LZGcrTnvIJV+21CVXttho21PxbGjuDlFUfofaesxHRXLF4jdMRyWz6YrcCmuaCJAkEAq6+P5fBINTKufCgxRhcSwLhFmuu0ErUU7L3bwYjlD4LZ9WpjNfIQlRVnwmnia4xV7ekIdwi9f757JaQXYs6RFCgz85ZeYQJ2WQbWUlgJYoxzDe2XlYd6yKQlYQaDhkCEQCIaBKadx7q/UXRMVq/ewPCGIegNB3hH21hIEJ5KeWcEaIES3nqSS1VVbz7EyXgQwgShhmHW2KJ6CN6f6HfD1RVQW5uhpztbj5VhdqwDyH44CsbwVOZcoo9I5S6HvONVYxBMFIOdWd2itOpKhDcfAjq5gZOIyBbkstKEHAtMBZDc90MuTSJ6tK56OZTFCgl98Mz+1JUzh6hF1e0Vmcn5TkGI5S6bvONFdwID1pQiSA835ya8QuYouhj7ZWzR8Az+1K9+iyvkmQ3sgz/mqkISxMQRAXC0gT410y1Rk+iqkK96X7UiMe76vMICbW1grF/nrDDChlMYKX0KArUmmXwaO/GTaPNVEFYPX9PxGosANHqs9IEyC07rHEhJ0qFFTOrg0EEK5ehEsFEP0JFRe6bRJmT8iyuDGMCK2WX34/QxjeyukKpPhpkXPMoggI0a+NZdZbsyYqZ1T4ffK534hf4c9t/gT+nU1Wg5iatW9E8F2prNEv2kDAYobT5ykbEV4fNYIExfTTI2HHnRge80l5WMSPKFFmGvOY+Y06LpKGujrVM7C6tWVwmYTBCaeusDhtdaijjBWH193fBLenJsrGkv8D3rfVkSWR3fj/8++5DeHMjgpsPIdwisVBgHtBncfXo8eq+nIiFMGeE+i3bw+CqCjTvPAQvmvXZBwxEiIhOTVWhlNyPWrG6q2ie62b4992Xs+tosvdv1hmhfpPl7H6uZRmQrx+BPusxEJH5LFyV2ZGis7iqaiagWRsPr7TXsj3LDEaIMo0XZHIifdqGXoNIkvQxXI71mM/vhxwtnGepWVw9cJiGKJN4QSYniq6j070YYkbn+ZNtcWovUa71VibfivPo8pkdKjzlAcM/c4+qzAAyO8+f8h6DEaJMiV6QVYxBEBVQMYYX5Fyz+AKO+SLun3nXF5HVef6U9xiMEGWKzwfFNb+rPD5aoLjm84KcK+yZyomE/8xLhkF94JfZm+dPeY8JrEQZokJGDeqgRWN8DW7UuupQBQm8JOdAt56pEHzwIQQ5ckDvmeJNMWN6HZGZPAdyuNx65e7JFhiMEKWij2XWQyEkrnbIe2FuRHumOhd8kxBBwLUAfvZMZVTnOpk9c1W9XmR/nj/lLQ7TECXrFMusd1vMOIbD5rnT1TMVXXk22jOlsl8qo7JdeZmcicFIHlIbWxF8qAlqY6vZTckfSSyzzou0ufrqmaLM8vv1WbvBoP5fzl6n/uIwTZ5RqutRs6EMGor1bup59fCvLze7WfYXCiEkJiRYpdhlGIbx+4GqKg6bm6HP4QPKOI7IUCaxZ8QKMlQXQW1sjQYi3bqpN5SyhyQTUlhm3YqrxDsBe6YciDVl8gaDEbNlsC5CqL4t/skdBWje8X5/W0lcZt0WUho+4I3M3lhTJq+wHLyZMlxCWW1shWfKSENA4kYHwq8fgjy5OAMNJqgq1J370QwvvKUjGIjYFcv225uqQi0pQ0hM0Kdw4wDLz1sUy8HbgNqwD0HtX/RKnZ36UbFTnlyMwLyGrid3dKBu3k4GIpkky5CvL0XF9QxEbCtatUvVivVKuVoxi6PZjPLoMXjE3q7igriR1Y5tjsGISRQF8MwpNZ5MQL8z7vzryxF+/RCCD+9G+PVDTF4l6ikUgqJVGyvlRubxRmYTqgrUPDTRmBuHOqhSCbOVbYyzaUzQVU7ZBaDrZKqS/gi57vv97maUJxezN4SoF+qQ81CDQNzNrOqMQ6xIYgN6BViXYVsEBWhe9BhkdlfaFoMREyQsp4wCNP/6DcjXjzCnUTmgNrYiVN8GX/koBktkmtCxYvQ4/fTz73gxgxEbSDyFW8B7+zXmNYr6jcM0Jui1Umdp/gYiSnU9PFNGovLOL8MzZSSU6nqzm0QOxUq59pZ4CjdntdkdgxETOK0eAuufkJU47fzLR6wAm384TGMSJ1Xq1OufGIdlOuufcLgmnqrqQ3k+X35/LszkpPMvXzmtAmy+XxfYM2Iip1Tq9JWPiq9cig54pxWZ1CLrYh2n3HHK+Uf254TrAoMRyjrWP0lO1ywr/XtNY/kLIqdzynWBwzSUE/715ai6pRXNO96Hd1oR5Mmsf9JTwllW0TpOfHoncianXBcYjFDOsP5J33xDWiEhvpy/94xDAPjvRuRETrkucJiGyCLkY39HADXG4SzUQj6+x+SWEZFZnHJd4EJ5RFYRXThR1Yr1hfjQDNndxsW/iJzM5tcFLpRHZDfRAhiyuw0V2K5fcFgAg3qjqnqhjXzLZCQjh1wX2DNCZDWqygIY1DdF6ZpiIUl6FTdW/spvNr0uJHv/ZjBCRGQn0W77Houz2KbbnpyFwzQOxt5bojzW11xPIptiMJJnjJX6BJRVH5ndJCLKpAQr/alSCYIHL+QDCNkWg5E8El+pz4XaxUOhrtxobsPIstiLZkM9VvpTXPPhEXtROXtE3pYKp/zHYCSPJOy9RQGalzzBuw3F0XvRRFcvGm9i9hFdtlbd3IAaVwCa0C/l+VoqnPIfg5E8ovfeGvOR3eiAV9vj3PFkPvonpKpAzU0aNM0FINqLVqPxn8lOZBmhc0pjf8NOTB+hVFnhMslgJI/IMhBYcTi+Up+7TZ8O5jROWOoyTaGGQ7Gn6U4RTULzzkMmtYjSkSB9BG63M093So9VLpMMRvKM/65hCP9oC4LSdIQxDn73hrwskHNK0QQaVStGEBVQtWL2X3fjQwgSIoZtbnTACz5S20mP9BG43f043bP9eGyFx28ysNKKwAxG8pC8eA4qWjZADv5Srz2Qi2JIVrvQhEJQtGp40IJKBOFBC5TIPPZfR8llJQi4Fhh70Vw3Qy4da3LLKFXR9BEEg/043bP9eGyVx28ysNIscRY9o/6zYDVItbEVninxK12GXz/ElYM7KQrUmmVo1sbDK+2FHPi+6X83MkG2i6ixSJtl5eJPw6JnlBvd+vlUjEFQ+xeoNctM7yEJHSs2BCJAdGbRcQYiMX4/5JYdqAj+AHLLDgYiTpXtx+Po+6sYow+ZYgyzbC0io8N8/cRghPoneqFRcGPXkIj2LpRHj5naLCb2JUmWgYoKPqE6WbZPFp9Pr4XSfcjUNZ8no0VkZJgvAxiMnILVUiEsx+eD6hqLGgRiPREa3Kh9eKKp/2ZWiviJLC3LJ4sKGTWoM14fXHVQkeWTkRfvpFnhmYTBSB+Yc5UEWUbozsfjh0QiLtN7Ya0S8RNZXhZPllAIiaeRZ/P6wIu37TCBtRfMuUqe/m8lDMWX+G9FRIAJ19LoL1S1YoTggw8hvdYSL0imYAJrP1lpypPV6b28Lg6JEFGcnA+Zclp/6iwwpMWekV6oKuAp0Qzdi25JQ7hF4k22F6qqn+9eLwMRIrtTVf2hzOfL3AzfXFwfOK0/RVkuzcCekX6SoSKAWmNRKFELGUyG6o0VkqCyzgJPEETZlo2Ui1xdHzitPwUWKsHKYKQ3oRD84gmEMQ5BVOil1cUT7OpzMibFkQNY6P6UFk7rT4GF8hEYjPQm+omWcQAV2A4ZB/iJdjK7X6GJkmSh+1NaOK0/BRaK3BiM9IafaOrO7ldooiRZ6P6UNk7rT5KF7nNMYD0VZmUSwLne5CiKonf8RSJd9yfe0PNYFu9zyd6/GYwkK9Op5WQ/vEKTg/A5rG+8JSQnq7NpHnvsMYwfPx6DBw/GpEmTUF9f3+f+J06cwL333guPx4NBgwZhwoQJWLt2bTq/2hyKArWkDMHKZVBLypi46FTs+yUTmDWByxGz49LEXPbMSzkY2bRpExYuXIh7770XTU1NKC8vx1VXXYV9+/b1+ppZs2bhxRdfhKIo2LNnDzZu3IjzzjuvXw3PGVWFctOr8Ii9egEdsRfKTa8ycdGpeIWmHFJWfQSPR/CmZyHMZc+OlIdpLr30Ulx88cVYvXp1bNv555+P6667DsuXL4/b//nnn8c3v/lNvPvuuxg2bFhajTRzmEbd3ADP7EvjC+hsboR8fWlO20LWwO5ZygV15UZ47p5lvPYwTcl0waDeI5Joe0VFzptjeVkZpjl58iR27dqFGTNmGLbPmDEDDQ0NCV/z7LPP4pJLLsGPfvQjjBkzBp/73Odw11134Z///Gevv+fEiRM4cuSI4cssIfgSF9CBjVLLKWPYPUs5oaoI3fNEggUoOYHLbAlnG6ED3saN5jQoT6QUjHzwwQeIRCIoKioybC8qKkJbW1vC17z77rt45ZVX8Ne//hXPPPMMHnnkEfzmN7/BLbfc0uvvWb58OQoLC2NfY8eOTaWZGeUrGwHJZZzS6ZY0eEtHmNQiMgu7Z6mT2tiK4ENNUBtbs/MLQiH4xB5IiBg2uyVhqym2+UiWgcCKj4zVuVELeelcXgz6Ia0EVpfLZfheCBG3rZOmaXC5XHjyyScxZcoUXH311XjooYewfv36XntHli5divb29tjX/v3702lmRsgyEFgjwe3WR7PcboG6ANencSKWGiEAUKrr4ZkyEpV3fhmeKSOhVPedwJ8Wnw+y1IoAaow3vRWHee2xAP+kN43VubGWF4N+SikYOeecc+B2u+N6QQ4ePBjXW9KpuLgYY8aMQWFhYWzb+eefDyEE1F6iyEGDBmHo0KGGLzPpkyhc0UkULvtOolBVqJsbENx8iAF8GvKhGBT1j9rYipoNZbHhEw1u1G4ozXwPSbQYld+9Qb/pSdMR/tEW+O9KL++OMiwaLMaqcwO8GPRTSsHIwIEDMWnSJGzbts2wfdu2bSgrK0v4mmnTpuG9997DsWPHYtv+8Y9/QJIkyDYK8W0/iUJRoJTcD8/sS1E5ewQ8JRrzHVJkoWKFZJJQfVviHLId76f0PklN141OJZeDv0RFywbIi+ek0WLKCl4MMk+k6Ne//rUYMGCAUBRFvPXWW2LhwoXijDPOEOFwWAghxJIlS8TcuXNj+x89elTIsiy+8Y1viL/97W9i+/btwufzifnz5yf9O9vb2wUA0d7enmpzSQgh9u8X+11jhYQOAYjYl9utif37zW6c/ezfL0QwKPhv50D7X38v/jzCZ2L/6+8l/R5PPCGEJGkC0P/7xBNZbDBlFy8Gp5Ts/bsg1eBl9uzZ+PDDD7Fs2TK0trbioosuwtatW+HxeAAAra2thpojQ4YMwbZt23DrrbfikksuwfDhwzFr1iz893//d6biKTqVUAghMSFBZr4Lzc0M5lMly/w3s4UszMGWJxcjMK8etRtKEUGBnscxbyfkyeVJN6nmJg2a0DulNc2F2hoNVVXMQ7MlXgwyhuXgnUBVoZaUwSP29qhZIBAOu3guUf5RlNjUJ9U1FqE7H4fv9qsz9llXG1vRvON9eKcVQZ5cnPTrgpsPoXJ2/Ey84OZDqLieM/Qo/2S1HDzZjCxDXnMfAq4FXZn5koa6OgYilIe6zcFWcKNePXnV1fB4RMbypOTJxahY+KWUAhEA8CEUP10XHfCCszDI2RiMOIXfD/+++xDe3Ijg5kMIt0j2nRVE1JfoHGwVY1CDQNfMF81lel0YuazE+FCADtS5boZcal4tJSIrSDlnhGxMliFfLyOvO0NYq52ic7BDWoLqydFSEKZ9NGQZ/jVTUVUzAc3aeHilvZAD3+dnlRyPPSOUP6K12tXKuQiWzIO6kuWZHSk67dInvRs/JGKFUhB+P+SWHagI/gByyw6u/kxZY9aKz+lgMEL5IZonoGjV8KAFleJFeO6eBWXVR2a3jMwQveEH7gp1q55soVIQti9c1H8Zv1Ha6c6bA/qzWeeKz5nLl8oWzqah/BAMQq2cCw9ajDOGJIFwCxN1nUxV9aEZr9fR935L6TbZCZKk1w/rVwdRxt/Q3lQV8JR0TSEH9EkL4ZbcTyHnbBpyFp8PIdfE+BwBzcXlIhyOnRDWoja2oqZGZG7BSa5gGSfUcMgQiABARJPQvPOQSS06NQYjlB9kGb4V862ZI0BEOkVB6NJvQ9OMC6v2a405rmAZx45TyBmMUN6QF89BYGU73JIFcwSInC7ag+ETezL70NBtBUsVYxBEBVSpxNFPIXacQs5ghPKK/65hCLd0rrDs6GFjImuJ9mDIOIAAaroVYBT9e2iIzp5SXPP15HUE4RF7obzg4KeQ6BTysDQBQVQgLE2Af81USz+ZMYGVLIMlQojymKoCHk9sSEXFGDRLE+F99ZcpV7JN/NbCMPzjdusPJI6+llgge5sJrGQr0RIh0WlosPw0NCJKUbQHA249yVx2t6Ei8K1+ByJAZ6dLBvNQ8oWNsrfZM0Km41MNkYNk4Wm9R6cLAF5DrII9I2QboUe38qmGyGqyVUQsC0/rPTpdmLxuQwxGyFyqCt+DCxJk1wsnJ8MTmcuG46Z+v94TwuR1e2IwQuYKhSCL/cbsenSg7o49fKohMoONi4jZKEWCemAwQl3MWNshWiPAj7UIY1zXNLTbh+SuDUTUhUXEyAQMRkhnVrdst8FeGQdQ4X6FS6oTmalbEbEYljKmLONsGoqloqtaMULwwYcQZHdbblPRLTAfnoiiFEUfmolEurJBmYRBaUj2/l2QwzaRVYVCULRq1CAADW5IiCAQqYG/uTl3gYEsMwghsgq/H6iq4gMC5QyDEYI65LxYIAIAGtyoRR2qzjgEXoKIHIoPCJRDzBkhhI4VxwKRThEUoPl4/ysjEhERnQqDkVTlaMaJ2tiK4ENNUBtbs/p7AOarERGRuRiMpCJHM06U6np4poxE5Z1fhmfKSCjV9Vn5PZ1YvZCIiMzE2TTJytHiB2pjKzxTRhqGTdzoQPj1QxlZUKrP380JLbaiNrYiVN8GX/morH82iIjSwbVpMi1HhYBC9W2J8zd2vJ/R35MIqxfaR657z4gAc+oikjMwGElWjhIrfOWj4tdpQQe804oy+nvIvtTGVtRsKDPOftpQmpP8IrtJePPM9B3VIXdoGy5XQzbCYCRZOUqskCcXIzCvwbhOy7yd7IanGDN7z+xEv3mK6M1T6DdPRYFaUoZg5TKoJWX9v6Nm+v0sysbL1ZBNMBgBkn+yydGykP715Qi/fgjBh3cj/Poh+NeXZ+X3UG5kemYUe89OTVWBmps0aJoLAKBpLtTepGHl/D3wiL2oRBAesRfKTa+mf0dVVSg3vZq597MwLldD2cZgJNW+xxwlVsiTi1Gx8EvsEbG5bOR2sPfs1EINh6AJ4+UtIiTcg+XG4S2xGurO/Wn9DrVhH2rE4xl7Pyvj9H/KNmcHI+x7pCxKN7cjmY469p71zYdQXO+RhAhEouEtpHdHDcGXeLgszfezMk7/p2xzdjDS0MC+R8qadHI7lFUfdctz6Lujjr1nvZPLShBwLTD0Hq1wLYXkMp7vbkmDt3REWr/DVzYio+9ndTkapSaHcm4woijAN78Zv519j9RNfyZKpJrboa7ciJrFhd3yHNhRlzZZhn/NVISlCQiiAmFpAu5aMxGBNRLcbr20ktstUBeQ0n66l2Vk9P3sgNP/KVucWfQsUQEzgEtlk4GiADU1AprmgiQJBAKulD8aSnU9ajeUIoKCWG5HwiEVVUWwZB4qxYtxPwoG9RsApSFBJb9MF/djsUCi3iV7/3ZmMBIM6gmrPW3eDFx/ff/fn2xPVQFPiWZIgnRLGsItqT/5qo2taN7xPrzTinofUgkGoVbOhQctxuq7kkC4xcWbHBHZEiuw9qW31PDSUnPaQ5aTcDaGJqF556GU3yup3A6fD7LUigBqjLNkVhxmIEJEec+ZwQhTw1PikAKTBolmY7jRAS+ylNwc/Uz63RsQxjgEpekI/2gL/HcNy87vIyKyEGcO03RKYbBXVfXCPz6fs2IWPW9CT6+RJD2Gc0RKjapCKbkftWJ1V76H62b4992X3Q8AExCIrM+pN4Q0cJgmCSpkBEUFVPT9YXLqmgyOLsOSYDaGf83U7F94OF2BTODE3s+0OWQJgFxzbDCSbIDh5Buy40tA+/2QW3agIvgDyC07HNIlRE6TcA0fSsxBSwDkmiODkVQCDCffkFkCGuypoLyWcA2fGo331l44aQmAXHNkMJJKgOHYG7KqQg4FEVjxEfN8ifJUJmeNOYGTlgDINUcGI4kCDElKHGA4cuJNtzEs/z0jEF6+kSWgifJQzmeN2ZzTlgDIJUcGI50BhsvVtU0I4IUXEu/vqDUZEoxhyUvnosKrZjQAY8IckfkSreFT57oZculYk1tmTU5cAiBXHBmMAEBVVXww0ldiqmNSB3KQJGNMHhZQVn2UsfcmohSYNWssyo4PJfrDqSv6cJr6EhGUmGPrjPRWEd7x64AkWrfH7da7hDJwgUr49uhA+EdbIC+e0+/3J3Kifpe9MKG+TSbWfiLrY52RU3BsYuqpZDlJJmHHCwrQvOQJez0eEVmEsuqjblNz0yx7keOuX0vP4rFjd00ecGww4sjE1GRlMUlGDwKNnXFudMCr7XHGfGmiDFJXbkTN4sJuN3V71EHK+CyeTAUQTq1waQGODUYAhyWmpipLT0qyDARWHDYmzKEWsruN3VJEqVBVhO55In6qqQ3qIGV0Fk+mKqJGk/dVrRhBVEDViu0R2eUJRwcjgIMSUy3Ef9cwhH+0RV8MDuPgd29gtxRRqkIh+MSe+Ju6JCwf12dsFk8mK6KGQlC0anjQor8XWqBE5lk/sssTjg9GyBzy4jmoaNkAOfjL7HRLcdyX8p3PB1lqRQA1xpv6isPWj+szNIsnkxVR1SHnoQYB43uhDuoZE1N+L0pdgdkNIAeT5ez0hjh2qWFylGjim7+2FlWRF9AsTYT3gfmQ77LJrDS/H3JVFeR+zOLpqyJqqu8WOlaMHrn1+nsdL075vSh1jp3aS3kqy1OTiSzHhGm5VqGqgKdEMyTDuiUN4ZbUC5Hx0pEdnNpLztRH0TaO3FBecnDiWyYronKGpbnYM0L5pZfHG+WBg6i5ZxhHbojyUCY7hxzc0ZQVyd6/GYxQ/lEUfUpeJAK43VCX/wKeJXPY/UpElGMcpiHn6lFAJnTJnGwvt0NERP3A2TSUn7rN1PFBH5rp2TNi9VoMREROwZ4RyntMTCMisjb2jJAj+P1AVRUT04iIrIjBCDlGtmqs5Zt+L0dPRJQiDtMQUUxGlqMnIkpRWsHIY489hvHjx2Pw4MGYNGkS6uvrk3rdjh07UFBQgC996Uvp/FoiyiK7LkdPRPaXcjCyadMmLFy4EPfeey+amppQXl6Oq666Cvv27evzde3t7bjhhhswffr0tBtLRFli4+Xoicj+Ug5GHnroIfj9fsyfPx/nn38+HnnkEYwdOxarV6/u83W1tbX41re+hdLS0rQbS0RZYuPl6InI/lIKRk6ePIldu3ZhxowZhu0zZsxAQ0NDr69bt24d3nnnHdx3331J/Z4TJ07gyJEjhi8iyiI7L0dPZDFcByt1KQUjH3zwASKRCIqKigzbi4qK0NbWlvA1oVAIS5YswZNPPomCguQm7yxfvhyFhYWxr7Fjx6bSTCJKVedy9O4NCGMcgtJ0hH+0Bf67hpndMiJbURQ9+ZtJ4KlJK4HV5XIZvhdCxG0DgEgkgm9961u4//778bnPfS7p91+6dCna29tjX/v370+nmUSUimgZfTn4S1S0bIC8eI7ZLSKyFVUFamq6qj3rSeCCPSRJSKnOyDnnnAO32x3XC3Lw4MG43hIAOHr0KN544w00NTXhu9/9LgBA0zQIIVBQUIA//OEPqKysjHvdoEGDMGjQoFSaRkSZwGIsRGkLhZBgHSwXmh99DvLKa8xplE2k1DMycOBATJo0Cdu2bTNs37ZtG8rKyuL2Hzp0KP7yl79g9+7dsa8FCxZg4sSJ2L17Ny699NL+tZ6IyIm6JSUwP8E6fD5AkoRhmxsd8D70H/wDnULKFVgXLVqEuXPn4pJLLkFpaSkCgQD27duHBQsWANCHWA4cOICf//znkCQJF110keH1I0eOxODBg+O2U3rUxlaE6tvgKx8FeXKx2c0hs6kq1IZ9CMEHX9kIdnLkI0WJjQUorvmoQR00IUGS9DWY/H6zG+hcsgwEFu1B7SovIijQk8BRC1nbp8+R5wnZq5SDkdmzZ+PDDz/EsmXL0Nraiosuughbt26Fx+MBALS2tp6y5ghlhlJdj5oNZdBQDAkRBObVw7++3OxmkVkUBcpNr6JGPA4NbkguDYE1Em9O+aRbUoKKMdG/td7B3VmkrqqK9zwz+W8fgqoHz0WzOBdeNEPGAS4TngSXEEKcejdzHTlyBIWFhWhvb8fQoUPNbo4lqI2t8EwZaShS5UYHwq8fYg+JE6kq1JIyeMRe42fCLRAOu3hzyhfBoD5NA0AQFahEMOEuFRU5bhcZKYoeGUYiXcuEO/SpINn7N9emsalQfVt8tUwUoHnH+ya1KDUc586wUAghMSFBBVUXK6jmEz0pQf9fhOKL1PEB3BqiM9MQDOr/dWggkgoGIzblKx8VfyFCB7zT4mc1WQ3n4WeBzwef650ENydWUM0r0XowcLsh4wACrgVwS/r0jc4HcPaCWYQs611U/IMkhcGITcmTixGY12Csljlvp+WHaBLPw7dRD4lVu3RkGfKa+/SbU+dnQtJQV8chmrzT7anbv+8+hFskcx/ArXpOkK0wZ8Tm1MZWNO94H95pRZYPRADDkHfcdsuPc3ebxWDZqQuqCnXnfjTDC28pZ9NQltnhnCBTJXv/ZjBCOWXbxFtV1ceUulc0crv1x1He8cmJepwTKsYgJJ0H36u/sPa5TDnFBFayJPnY3+MXY0Mt5ON7TG7ZKSQurQhmh5JjdTsnFNwID1pQqf0RnqmjmAdGKWPPiB2oqn7i+3z2fwqPPk2pWrE+lIBmyO426/cwRKfOhsQE+BDqqh1g9XYTZUu3c9mDlh5TynlqkI49I/ki36aeRGcDyO42VGC7HojYYAqA8oIMD8KoRBAetEBxzbdFu4myJnouh6TzEkwpZ6chpYY9I1ZmwafxjHXSqKp+tfJ6M3csWepBSpwuwmJiREA0D2zqKGha18rt7BmhTuwZyQPKo8fgEXu7nsZxo6mPHBntpMnwHHx15UYES+ZBrZyb8R6kXlfi5JMfkV5mIOCCO9o5wnonlA72jFiU/jQujE8b6EBYmgC5ZUfOz3QrTyZRVn2EmsWF+nosiCCAGvjdGzLWOCsfO5FVZKOzk+yPPSM2pz+NuwzbIihA86LHTDnTrTqZRFWBmnvOjo1Za3CjFnVQI6My1rhuRS8B8MmPKBEWHKX+SHnVXsqNziUoeuYpeG+/xsT2iLhxYbNLjfcatEkTIWewcX6/vhoqn/yIiDKPPSMWlfhp3LyESfkFBQFR06PUuPk35W7rhsW40QHvA/Mz3jg++RHZDEvV2wZzRizOEuOw3ZImVIzR64NIe03JXUnEsFq3JFC34jD8dw0zu1lEZCaWqrcEloOnzLHBgjKWCNosKp9q5hElhVnnlsEEVorpd09lwrEQCySMdMMhlMSUVR/B4xF5UzOPKCnRjHsVYxBEBVSMsUbGPfWKwUiey0htEE4nyawcjWOrKzfqU56jCb6apg9ncfic8p7PB8U1X18vp3vVZAs9QJERh2nyWMZ7KjkW0n+5GsdWVQRL5qFSvBj3o+6jaxzCIcvI4IdRVQFPiQZNdD1vuyUN4RaJn/Mc4zAN9V4bZOeh9N6QYyH9o6pATQ1UrVjvOtaKs9dVEQrBJ/ZAQsSw2S2J2MOh3mvWOYQjOIRD5snwGlyhEAyBCABENImjNBbGYCSP9TrtdfYkJg+YIRSColUbu44j87Izju3zQZZaEUC36djoQN2Kw5DlaFx0k9ZtCMeF2hqNQziUe1kI0m2Q5kY9MBjJY12pHvpInBsdqEMtZLGfyQMmUIechxoE4qvFnjEx878s+sf3uzcgjHEIStMR/tGW2JTnUMOhxE+O6faaEaUrC0E609zshxVY85zfD1SduRPNs78HL5r1lX+Brsxynp05EzpWjB6jZnq12OPFyMpfIVo2Vm5u1qvRdvtb+xCChGGGpd/d6IAXzQBGZKM1RAn1FqRXnXGoX+cFqybbC4MRB5DLSiBL9fGZrOyzzKnEJf6z/GeQ5YRXYbmsBAHXAtSK1YigQO81c90MufS+LDaGKF42g/RePv5kQRymcQL2WVqCpf4Msgz/mqkISxMQRAXC0gT410zlZ4JyjvkdBHBqr84p8xs5NdcSLPVnsFRjKGcsds0zLOkQDdJZuT0/sBx8srh+ARE5hKoCoUe3wvfgAj2R3ULXPMbF+YnBSDK4fgEROYT+3CWgaS5IiCCAGvixltc8yioWPUtGr1XBWBmHiPJHtJRHV12ZzmnlXLOFLMLZwQgzp4jIARI+d6EAzfDymkeW4OxgxFLTG4iIsqPXaszSXl7zyBJYZ4SVcYj6T1WhNuxDCD74ykbwNLKYzueurhkrAnV3NEO+fQeveWQJDEYAqJAREjJ8QHYqYRLlM0WBctOrqBGPQ4MbkktDYI1khQka1I3xucsFWT7P7CYRxTh7Ng04s5eoX1QVakkZPGKvsbS8WyAcdvGhm8jhOJsmCV0Z5vr3msb144hSEgohJCYYAhEAiERcnKBBRElzdDDCmb1E/eTzwed6BxIihs1ut+AEDSJKmqODEc7sJeonWYa85j4EXAvgRgcAwC1pqKvjEA0RJY85I1wTgaj/VBXqzv1ohhfeUs6mISIdy8GngGsiUJ8stqgYEZFdMIE1BbIMVFTwPkMJKArUkjIEK5dBLSnTu9KIiCijGIwQ9UZVodz0KjxiLyoRhEfshXLTq5xuRbahqkBw8yGomxv4uSVLYzBC1Au1YV+skBcQXVxMrIa6c7/JLSM6NUUBPCUaKmePgGf2pVBK7mfPHlkWgxGiXoTgi6+f0bm4GJGF6TWUBDShX+JjgXTNMvaQkCUxGCHqha9sBCSXsRCNW9LgLR1hUouIkqPXUHIZtkVQgGZtPAspkSUxGCHqhSwDgTUS3G59wpnbLVAXkJjoTJan11AyTpSMrdJrdiElVQWCQfbQkAGDEXKWbhfCZK6Jfj8QDrsQDOr/ZQ0asgN9lV4X3JLes+dGB+pcN0MOfN/caYOKAng8QGWl/l/msFAU64yQc3RbFVFxzUcN6qAJiQskUt5SVaB55yF40Qy5dKy5gYiq6gFI9zU43G4gHGZdhTzGomdE3XW7EKoYAw9aeqwyy2siUVYFg3qPSKLtFRU5bw7lBoueEXXXbVXEhLNkuEAiUXZFFwNTMQZBVEDFGC4GRjEMRsgZuq2K6EMowSqzvCYSZZUsQ5n7Ejxo0YsIogXKt4PsjiQADEYoQyyfIK9n9AFuN2Qc0FeZ7Uzuiy6QyGsiUfaoKlDzi3JjEcFfllv3mkE5VWB2A8j+uuWFWjsZ1O8HqqqA5mb4vV5UQeICiUQ50m2kNKZzeJTnHzGBlfqFCfJElAxeK5yJCayUE3097RARdeo2UgqAw6NkxGCE+qVbXmiMGx3wNm40p0FEZFl6EUFEiwhadDiXTMFghPpFloHAio/gRgeAaKVH1EJeOtfC2axEZBZZ1suKsEeEumMCq02oja0I1bfBVz4K8uRis5tj4J/0JqowF83w6pUecQCIgJlpRESUFAYjNqBU16NmQxk0FENCBIF59fCvLze7WV18PshSK2TtQNc2Fu4gIqIkcZjG4tTG1mgg0m1u/oZSqI2tJresG4tkplm+1gkRESXEYMTiQvVt8aXLUYDmHe+b1KJemJyZxsVAiYjsi8GIxfnKR8WXLkcHvNOKTGpRH0zKTFPVrqJrgP7f2lr2kBAR2QWDEYuTJxcjMK/BOFtl3k7LJbGaqddaJ1uaGJEQEdlAWsHIY489hvHjx2Pw4MGYNGkS6uvre9336aefxpVXXokRI0Zg6NChKC0txQsvvJB2g53Iv74c4dcPIfjwboRfP2St5FUL6LXWyaKZHLMhIrKBlIORTZs2YeHChbj33nvR1NSE8vJyXHXVVdi3b1/C/V9++WVceeWV2Lp1K3bt2oWvfOUrmDlzJpqamvrdeCeRJxejYuGX2COSQFz+bGetExzgmA0RkQ2kvDbNpZdeiosvvhirV6+ObTv//PNx3XXXYfny5Um9x4UXXojZs2fj+9//flL7c20aSoaq6kMz3kUz9UCku2BQz2chIqKcycraNCdPnsSuXbswY8YMw/YZM2agoaEhqffQNA1Hjx7FsGHDet3nxIkTOHLkiOGL6FRkGai4fgRkqce0Z9Y8ISKytJSCkQ8++ACRSARFRcaZHEVFRWhra0vqPR588EEcP34cs2bN6nWf5cuXo7CwMPY1duzYVJpJTmaRmidERJS8tBJYXS6X4XshRNy2RDZu3Igf/OAH2LRpE0aOHNnrfkuXLkV7e3vsa//+/ek0k5yKq3EREdlKSuXgzznnHLjd7rhekIMHD8b1lvS0adMm+P1+bNmyBVdccUWf+w4aNAiDBg1KpWlERrLM3hAiIptIqWdk4MCBmDRpErZt22bYvm3bNpSVlfX6uo0bN6K6uhq/+tWvcM0116TXUiIiIspLKS+Ut2jRIsydOxeXXHIJSktLEQgEsG/fPixYsACAPsRy4MAB/PznPwegByI33HADHn30UUydOjXWq3LaaaehsLAwg4dCRETkbKqqF4L0+ezVOZxyzsjs2bPxyCOPYNmyZfjSl76El19+GVu3boXH4wEAtLa2GmqO1NXVoaOjA7fccguKi4tjX7fffnvmjoLIhtTGVgQfarLWoodEZFt2XqMr5TojZmCdEco3SnV9bDVmCREE5jWwsi4RpU1V9QCk+9IYbreew29mD0lW6owQUf+pja2xQAQANLhRu6GUPSRElLZe1+hqNqc9qWIwQpRjofq2WCDSKYICNO9436QWEZHdJVyjy0b1HhmMEOWYr3wUJEQM29zogHda39PjiYh6Y/d6jwxGiHJMnlyMwLwGuNEBILqw37ydmV0EUVX1om9cIJDIMexc75EJrEQmURtb0bzjfXinFWU0EFFXbkTonifgE3v0dXoCAXtdlYgobyR7/2YwQpRHlFUfoWZxYdcsHdTA795gfko9ETkSZ9OQ5XDkILtUFai552zjLB3UQY2Msk9KPRGlz8YXWQYjlBPGYjwCyuK/2/KEsTJ9ap9xwcoICtAsTbRPSj0RpcfOFc/AYIRyQFWBmpquOfCa5kLtKi/UkjLbnTBWlnBqHzrgfWA+h2iI8ln8RRaorbXVAx+DEcq6hMV4UIBmca7tThgri5vaJwnUrTwCefEccxtGRNll94pnSGOhPKJUdT6xG8oUowNeNHedMFl4cjcsGAWbrh6VIr8fqKrS/0m9XhdkeZjZTSKibEt4kbVRxTOwZ4QyTVWhbm5AcPOhWIdH1xO7PnHLjQ7UoRYyDmTthDEMn5ZoUErut+1YaqpkGaioyOuYi4i6s3vFM3BqL2WSokC56VXUiMf1qaUuDYE1UqzEhaoCzY8+B+9D/wFZ29d1wmS4BkbCBaPQgTDGdQVAnOpKRPlGVTu7RS1zfWOdEcotVYVaUgaP2GtYd8XtFgiHXcbzIssnTDCod4LEbUcFKrC9a6eKioz/biIi6pLs/Zs5I5QZoRBCYkL8AnARV3xKiCxnNWrvM0cFsN1YKhFRvmPOCGWGzwef6534BeDcIuf3/fhZJRrqXDd3DdHYbCyViCjfcZiGMieaM1IrViOCAj0ICEimLYtiGA2C9cZSiYjyHXNGyByqCnXnfjTDC2/pCN73iYgcjDkjZA5Zhny9DMYgmaFpGk6ePGl2MygDBgwYALfbfeodiRyIwQiRRZ08eRJ79+6F1rOyItnWWWedhVGjRsHlcp16ZyIHYTBC5lOdUR01FUIItLa2wu12Y+zYsZB6LjpDtiKEwCeffIKDBw8CAIqLi01uETmGTa6vDEbIVOrKjQjd8wR8Yg9kqVWfBmNWxquFdHR04JNPPsHo0aNx+umnm90cyoDTTjsNAHDw4EGMHDmSQzaUfYrStYCeJFn6+srHLTKNsuojeO6ehUrxIjxogaJVc+G8qEhEnyI9cOBAk1tCmdQZWH722Wcmt4Tyns1W8mUwQqZQVaDmnrNjRdI0uFGLOqiRUbZaaTLbmFuQX/j3pJyx2Uq+DEbIFPp5YrwwR1CAZmkiq6MSEfVXZynq7ixcfZrBCJki4XmCDngfmG/pJCsiIluw2Uq+DEbIFPEl2wXqVh6BvHiOuQ2jfqmurobL5YLL5UJBQQFKSkpw88034/Dhw7F9xo0bh0ceeST2vRACd955J84880z86U9/invP2tpauFwuw2uIKAl+v75CeTCo/9eiyasAZ9OQifx+oKqqs0q7C7I8zOwmUQZ89atfxbp169DR0YG33noLN954Iz7++GNs3Lgxbt9IJIKbbroJ//M//4M//elPmDx5suHnv/3tb/Haa69h9OjRuWo+UX7J8sKkmcJghExlk/PE3nJcZ2DQoEEYNWoUAECWZcyePRvr16+P2+/EiROYM2cOGhsb8fLLL+P88883/PzAgQP47ne/ixdeeAHXXHNN1ttNRObhMA1RPlMUwOMBKiv1/ypKTn/9u+++i+effx4DBgwwbD927BiuueYa/O1vf8OOHTviAhFN0zB37lwsXrwYF154YS6bTEQmYM8IUb7qrc5AVVVWe0h+//vfY8iQIYhEIvj0008BAA899JBhn//6r//CmWeeibfeegsjR46Me48VK1agoKAAt912W9baSUTWwZ4RonxlUp2Br3zlK9i9ezdee+013HrrraiqqsKtt95q2GfGjBk4fvw4fvjDH8a9fteuXXj00Uexfv161uUgcggGI0T5yqQ6A2eccQa8Xi++8IUv4Mc//jFOnDiB+++/37DP9OnT8eyzzyIQCMQFKvX19Th48CBKSkpQUFCAgoICtLS04M4778S4ceOy2nYiMgeDEaJ8ZZE6A/fddx9WrVqF9957z7D9yiuvxO9//3usXbsWt9xyC4QQAIC5c+fiz3/+M3bv3h37Gj16NBYvXowXXnghp20nsiNV1WfzWrTye0LMGSHKZ8b506ZMXaqoqMCFF16IH/7wh/jpT39q+FllZSWee+45XHvttRBC4Gc/+xmGDx+O4cOHG/YbMGAARo0ahYkTJ+ay6US2Y6O18QzYM0KU72QZqKgwdQ71okWLsGbNGuzfvz/uZxUVFdi6dSt+8Ytf4Oabb471kBBRamy2Np6BS9jgzD9y5AgKCwvR3t6OoUOHmt2cXqmNrQjVt8FXPgry5GKzm0M29umnn2Lv3r0YP348Bg8ebHZzKEP4d6VsCgb1WfyJtldU5Lw5AJK/f7NnJEOU6np4poxE5Z1fhmfKSCjV9WY3iYiIHMRma+MZMBjJALWxFTUbyqBBTxTU4EbthlKoja0mt4yIiJzCIjnraWEwkgGh+rZYINIpggI073jfpBYREZET2WhtPAPOpskAX/koSIgYAhI3OuCdVmRiq4iIyInsuOYXe0YyQJ5cjMC8BrjRAUAPROrm7WQSKxERURLYM5Ih/vXlqLqlFc073od3WhHkyeVmN4mIiMgWGIxkkDy5mL0hREREKeIwDREREZmKwQgRERGZisEIEdnOuHHj8Mgjj/TrPV566SW4XC58/PHHGWlTOByGy+XC7t27M/J+RE7CYISIMq6hoQFutxtf/epXzW4KAH39m4ULFxq2lZWVobW1FYWFheY0iohiGIwQUcatXbsWt956K1555RXs27fP7OYkNHDgQIwaNQoul8vsphA5HoORdKmqXuLODsshkqPl+qN6/PhxbN68GTfffDOuvfZarF+/PvazzqGRF198EZdccglOP/10lJWVYc+ePbF93nnnHfzbv/0bioqKMGTIEEyePBl//OMfe/19N954I6699lrDto6ODowaNQpr165FdXU1tm/fjkcffRQulwsulwvhcDjhMM2OHTtw+eWX4/TTT8fZZ5+NqqoqHD58GADw/PPP47LLLsNZZ52F4cOH49prr8U777yTmX80IodjMJIORQE8HqiV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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(psetRK4.lon, psetRK4.lat, \"r.\", label=\"RK4\")\n", "plt.plot(psetAA.lon, psetAA.lat, \"b.\", label=\"Analytical\")\n", "plt.legend()\n", "plt.show()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The final locations are similar, but not exactly the same. Because everything else is the same, the difference has to be due to the different kernels. Which one is more correct, however, can't be determined from this analysis alone.\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Bickley Jet example\n", "\n", "Let's as a second example, do a similar analysis for a Bickley Jet, as detailed in e.g. [Hadjighasem et al (2017)](https://aip.scitation.org/doi/10.1063/1.4982720).\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def bickleyjet_fieldset(times, xdim=51, ydim=51):\n", " \"\"\"Bickley Jet Field as implemented in Hadjighasem et al 2017,\n", " 10.1063/1.4982720\"\"\"\n", " U0 = 0.06266\n", " L = 1770.0\n", " r0 = 6371.0\n", " k1 = 2 * 1 / r0\n", " k2 = 2 * 2 / r0\n", " k3 = 2 * 3 / r0\n", " eps1 = 0.075\n", " eps2 = 0.4\n", " eps3 = 0.3\n", " c3 = 0.461 * U0\n", " c2 = 0.205 * U0\n", " c1 = c3 + ((np.sqrt(5) - 1) / 2.0) * (k2 / k1) * (c2 - c3)\n", "\n", " a, b = np.pi * r0, 7000.0 # domain size\n", " lon = np.linspace(0, a, xdim, dtype=np.float32)\n", " lat = np.linspace(-b / 2, b / 2, ydim, dtype=np.float32)\n", " dx, dy = lon[2] - lon[1], lat[2] - lat[1]\n", "\n", " U = np.zeros((times.size, lat.size, lon.size), dtype=np.float32)\n", " V = np.zeros((times.size, lat.size, lon.size), dtype=np.float32)\n", " P = np.zeros((times.size, lat.size, lon.size), dtype=np.float32)\n", "\n", " for i in range(lon.size):\n", " for j in range(lat.size):\n", " x1 = lon[i] - dx / 2\n", " x2 = lat[j] - dy / 2\n", " for t in range(len(times)):\n", " time = times[t]\n", "\n", " f1 = eps1 * np.exp(-1j * k1 * c1 * time)\n", " f2 = eps2 * np.exp(-1j * k2 * c2 * time)\n", " f3 = eps3 * np.exp(-1j * k3 * c3 * time)\n", " F1 = f1 * np.exp(1j * k1 * x1)\n", " F2 = f2 * np.exp(1j * k2 * x1)\n", " F3 = f3 * np.exp(1j * k3 * x1)\n", " G = np.real(np.sum([F1, F2, F3]))\n", " G_x = np.real(np.sum([1j * k1 * F1, 1j * k2 * F2, 1j * k3 * F3]))\n", " U[t, j, i] = (\n", " U0 / (np.cosh(x2 / L) ** 2)\n", " + 2 * U0 * np.sinh(x2 / L) / (np.cosh(x2 / L) ** 3) * G\n", " )\n", " V[t, j, i] = U0 * L * (1.0 / np.cosh(x2 / L)) ** 2 * G_x\n", "\n", " data = {\"U\": U, \"V\": V, \"P\": P}\n", " dimensions = {\"lon\": lon, \"lat\": lat, \"time\": times}\n", " allow_time_extrapolation = True if len(times) == 1 else False\n", " fieldset = FieldSet.from_data(\n", " data, dimensions, mesh=\"flat\", allow_time_extrapolation=allow_time_extrapolation\n", " )\n", " fieldset.U.interp_method = \"cgrid_velocity\"\n", " fieldset.V.interp_method = \"cgrid_velocity\"\n", " return fieldset\n", "\n", "\n", "fieldsetBJ = bickleyjet_fieldset(times=np.arange(0, 1.1, 0.1) * 86400)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Add a zonal halo for periodic boundary conditions in the zonal direction\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "fieldsetBJ.add_constant(\"halo_west\", fieldsetBJ.U.grid.lon[0])\n", "fieldsetBJ.add_constant(\"halo_east\", fieldsetBJ.U.grid.lon[-1])\n", "fieldsetBJ.add_periodic_halo(zonal=True)\n", "\n", "\n", "def ZonalBC(particle, fieldset, time):\n", " if particle.lon < fieldset.halo_west:\n", " particle_dlon += fieldset.halo_east - fieldset.halo_west\n", " elif particle.lon > fieldset.halo_east:\n", " particle_dlon -= fieldset.halo_east - fieldset.halo_west" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "And simulate a set of particles on this fieldset, using the `AdvectionAnalytical` kernel\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INFO: Output files are stored in bickleyjetAA.zarr.\n", "100%|██████████| 86400.0/86400.0 [00:02<00:00, 36291.48it/s]\n" ] } ], "source": [ "X, Y = np.meshgrid(np.arange(0, 19900, 100), np.arange(-100, 100, 100))\n", "\n", "psetAA = ParticleSet(fieldsetBJ, pclass=ScipyParticle, lon=X, lat=Y, time=0)\n", "\n", "output = psetAA.ParticleFile(name=\"bickleyjetAA.zarr\", outputdt=delta(hours=1))\n", "\n", "psetAA.execute(\n", " AdvectionAnalytical + psetAA.Kernel(ZonalBC),\n", " dt=delta(hours=1), # needs to be the same as outputdt for Analytical Advection\n", " runtime=delta(days=1),\n", " output_file=output,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "And then show the particle trajectories in an animation\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "%%capture\n", "\n", "ds = xr.open_zarr(\"bickleyjetAA.zarr\")\n", "\n", "fig = plt.figure(figsize=(7, 5), constrained_layout=True)\n", "ax = fig.add_subplot()\n", "\n", "ax.set_ylabel(\"Meridional distance [m]\")\n", "ax.set_xlabel(\"Zonal distance [m]\")\n", "ax.set_xlim(0, 2e4)\n", "ax.set_ylim(-2500, 2500)\n", "\n", "timerange = np.unique(ds[\"time\"].values[np.isfinite(ds[\"time\"])])\n", "\n", "# Indices of the data where time = 0\n", "time_id = np.where(ds[\"time\"] == timerange[0])\n", "\n", "sc = ax.scatter(ds[\"lon\"].values[time_id], ds[\"lat\"].values[time_id], c=\"b\")\n", "\n", "t = str(timerange[0].astype(\"timedelta64[h]\"))\n", "title = ax.set_title(f\"Particles at t = {t}\")\n", "\n", "\n", "def animate(i):\n", " t = str(timerange[i].astype(\"timedelta64[h]\"))\n", " title.set_text(f\"Particles at t = {t}\")\n", "\n", " time_id = np.where(ds[\"time\"] == timerange[i])\n", " sc.set_offsets(np.c_[ds[\"lon\"].values[time_id], ds[\"lat\"].values[time_id]])\n", "\n", "\n", "anim = FuncAnimation(fig, animate, frames=len(timerange), interval=100)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "HTML(anim.to_jshtml())" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Like with the double gyre above, we can also compute these trajectories with the `AdvectionRK4` kernel\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100%|██████████| 86400.0/86400.0 [00:00<00:00, 2998038.18it/s]\n" ] } ], "source": [ "psetRK4 = ParticleSet(fieldsetBJ, pclass=JITParticle, lon=X, lat=Y)\n", "\n", "psetRK4.execute([AdvectionRK4, ZonalBC], dt=delta(minutes=5), runtime=delta(days=1))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "And finally, we can again compare the end locations from the `AdvectionRK4` and `AdvectionAnalytical` simulations\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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sX379i55vLZIwCNOmnduXxoatehYwDDwrithMbeiEcDCwwKW4NsUMSqSBs0KTRP8G/djbtwMphndVLDQLs4KS4P1dIQQ2WHz5s14PB4uu+yyVO8KYK/XdfPNN0fdNnbsWPbs2UNeXl5qduokScAjTolTLGCWe1moLw3n+FhKb11QM5XNCoOBlm/FxxQWWJRN7E/hxNGsGLqGiumWLAAqhEi5e++9lxtvvJGXX36ZnTt3pnp3HHXv3p38/Hw0TUv1rnSKBDyiy9nFTdFvhEAAO3E52Kwwsmx93oxPEh9cRARaFfPysJT90g+NQIW+j9pfF6YdCSG6TrIHo48cOcLGjRu54YYbGD9+PPfff3/4vtA00nPPPccFF1zA6aefztixY3n33XfD27z33nt873vfY+DAgfTq1YtRo0bx7LPPtvn7rr/+esaPHx91W0tLC/n5+dx7771MnTqVF198kTVr1qBpGpqm0dDQ4Dil9corrzBu3DhOP/10zjzzTMrLyzlw4AAATz31FN/4xjc444wzOOussxg/fjzvvfde1/zROkECHtHlHIqb7N58qs6xWeGKqt4UFERMI3X1p0xEP506iuOqyCw8aLGJ1tJLUIis1u40d4I8/PDDnHvuuZx77rlce+213HfffSilorb52c9+xsqVK3nttdfIycnh+uuvD993+PBhLr/8cp599lneeOMNysvLufLKK9scKZo2bRpPPfUUe/bsCd/25JNPcvjwYa6++mrWrFlDSUkJ06dPZ8+ePezZs4ehQ+PzMbdv384ll1zCl770JWpqanj55Ze58sorCQTsz9UjR44we/Zsamtree6559B1nf/4j//Ailx1ORmUUEop1dzcrADV3Nyc6l3JCOvWKeXxKAX2v+vWKaWamtTzWpkC5fjl8SjVtOwhpXRdKVBN2lD1/NwnVFNTO7+oqUk1PfyKev7hfW1v9/zz4V/SxBCl0xL9ezmuljFPeTxW9P4KIVzl008/VW+//bb69NNPT+lxmprCH0PRn0/tfRZ1gbFjx6q77rpLKaXU8ePHVb9+/dQzzzyjlFLK7/crQD377LPh7Z944gkFtHu8X/ziF9Wvf/3r8PeFhYVq9erVUfcvXbo0/P33v/99NXXq1PD348aNU7NmzYp6zNC+HDhwQCml1OTJk9XXv/71Dh/nvn37FKDefPNNpZRSO3bsUIB6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fvh+pRS33347gwcPpmfPnpSWlvLPf/7TFccWMmzYsLhj1DSNn/70p4D7nr+//e1vXHnllQwePBhN0/jzn/8cdX8yn7OdO3dy5ZVXkpubS79+/bjppps4duxYwo7v+PHjLFiwgPPOO4/c3FwGDx7Mj3/8Y3bv3h31GKWlpXHP6aRJk9L++CC5r8dUHJ/Te1HTNJYvXx7eJl2fv46cD1z9/lMiYTZs2KC6deum1q5dq95++201a9YslZubqxobG1O9a2Hl5eXqvvvuU2+99Zbavn27uuKKK1RBQYE6fPhweJvrrrtOXXbZZWrPnj3hr48++ijqcWbMmKGGDBminnnmGfX666+riy++WH35y19WLS0t4W0uu+wyNWLECLV582a1efNmNWLECDV+/PiEHt9tt92mvvSlL0Xt+759+8L3L1myRPXu3Vs9+uij6s0331QTJ05UgwYNUocOHUr7YwvZt29f1PE988wzClB+v18p5b7n78knn1Q/+9nP1KOPPqoA9dhjj0Xdn6znrKWlRY0YMUJdfPHF6vXXX1fPPPOMGjx4sJo5c2bCju/gwYPqW9/6lnr44YfVO++8o2pqatTo0aPVyJEjox5j3Lhxavr06VHP6cGDB6O2ScfjUyp5r8dUHV/kce3Zs0fde++9StM09d5774W3SdfnryPnAze//yTgSaALL7xQzZgxI+q2z3/+82rhwoUp2qMT27dvnwLUiy++GL7tuuuuU9/73vfa/JmDBw+qbt26qQ0bNoRv27Vrl9J1XT311FNKKaXefvttBagtW7aEt6mpqVGAeuedd7r+QIJuu+029eUvf9nxPsuyVH5+vlqyZEn4ts8++0zl5eWpe+65RymV3sfWllmzZqlzzjlHWZallHL38xd7Qknmc/bkk08qXdfVrl27wtusX79e9ejRQzU3Nyfk+Jy8+uqrCoi6UBo3bpyaNWtWmz+TzseXrNdjujx/3/ve91RZWVnUbW55/mLPB25//8mUVoIcO3aMbdu2cemll0bdfumll7J58+YU7dWJNTc3A9C3b9+o21944QUGDBjA5z73OaZPn86+ffvC923bto3jx49HHevgwYMZMWJE+FhramrIy8tj9OjR4W3GjBlDXl5ewv8edXV1DB48mOHDhzNp0iTef/99AHbs2MHevXuj9rtHjx6MGzcuvE/pfmyxjh07xoMPPsj1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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(psetRK4.lon, psetRK4.lat, \"r.\", label=\"RK4\")\n", "plt.plot(psetAA.lon, psetAA.lat, \"b.\", label=\"Analytical\")\n", "plt.legend()\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.5" } }, "nbformat": 4, "nbformat_minor": 4 }