diff --git a/examples/PyMPDATA_examples/Olesik_et_al_2022/demo_analytical_solution.ipynb b/examples/PyMPDATA_examples/Olesik_et_al_2022/demo_analytical_solution.ipynb index ddfca006..9fab8b36 100644 --- a/examples/PyMPDATA_examples/Olesik_et_al_2022/demo_analytical_solution.ipynb +++ b/examples/PyMPDATA_examples/Olesik_et_al_2022/demo_analytical_solution.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -31,7 +31,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -44,7 +44,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -61,9 +61,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/user/devel/venv/lib/python3.9/site-packages/pint/facets/numpy/numpy_func.py:307: RuntimeWarning: invalid value encountered in sqrt\n", + " result_magnitude = func(*stripped_args, **stripped_kwargs)\n" + ] + } + ], "source": [ "rho_w = 1 * si.kg / si.dm ** 3\n", "rho_a = 1 * si.kg / si.m ** 3\n", @@ -120,7 +129,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -150,9 +159,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "T = 0.0 second\n", + "T = 745.1053759404627 second\n", + "T = 1749.7808983982873 second\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAIkCAYAAAAUKhpvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAACNB0lEQVR4nO3dd3hU1dYG8HdSSSCFUFKEhN5DEQSCgNQAkSJwP6VYQMQGShFQVEC8KsIVRLkqNkDuBdsVQRBpofcekCa9hdCTkMSEJDPfH4uTSUgCmclMTpn39zzznDN9hRwms87ae22TxWKxgIiIiIiIiIrMTe0AiIiIiIiI9IaJFBERERERkY2YSBEREREREdmIiRQREREREZGNmEgRERERERHZiIkUERERERGRjZhIERERERER2YiJFBERERERkY2YSBEREREREdmIiRQREREREZGNmEgREZGhWCwWlClTBq+//roh34+IiLSBiRQRERnKmTNnkJqaisjISADAypUrYTKZYDKZcPjw4XyP79GjBypVqpTnNrPZjAoVKmDatGk2vx8REbkGJlJERGQohw4dAoCcxCYuLg4A4ObmhmXLluV7fFxcHBo2bJjntp07d+LatWt49NFHbX4/IiJyDUykiIjIUA4dOgQPDw/UrVsXAHDgwAH4+/ujS5cuWLp0aZ7H3rx5E+fPn0ejRo3y3L58+XJERESgfv36Nr9fYdLT0238SYiISMuYSBERkW79+OOPaNy4MUqVKoWmTZti586dOHToEGrVqgUvLy8AUnGKjIxE9+7dsW3bNly/fj3n+Uq16u6K1O+//15gNaoo7wcAnTt3RqtWrbBp0yY88sgj8PHxwYgRI5zxT0BERCphIkVERLr08ccfo1+/fqhatSo+/fRTREVFoXv37ti+fXvOMLvbt2/j2LFjaNSoEbp3747s7GwsX7485zUOHDgAAHkqUgkJCdi3bx9iYmJsfr/cr3v9+nU89thjiIqKwsyZM/H4448765+CiIhU4KF2AERERLbav38/xo0bhzfffBPvv/9+zu1msxlffPEFnn76aQDA4cOHkZmZiYYNGyI8PByRkZFYunQpnnrqKQBSkfL29kbt2rVzXmP58uUoVaoUOnToYPP7AcCVK1dw5coVpKWlYdeuXahTp47T/h2IiEg9rEgREZHuvP/++wgICMBbb72V5/ZH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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "x = np.linspace(\n", " r_min.magnitude,\n", diff --git a/examples/PyMPDATA_examples/Williamson_and_Rasch_1989_as_in_Jaruga_et_al_2015_Fig_14/demo_over_the_pole.ipynb b/examples/PyMPDATA_examples/Williamson_and_Rasch_1989_as_in_Jaruga_et_al_2015_Fig_14/demo_over_the_pole.ipynb index 2f7cfd4f..469dbbd4 100644 --- a/examples/PyMPDATA_examples/Williamson_and_Rasch_1989_as_in_Jaruga_et_al_2015_Fig_14/demo_over_the_pole.ipynb +++ b/examples/PyMPDATA_examples/Williamson_and_Rasch_1989_as_in_Jaruga_et_al_2015_Fig_14/demo_over_the_pole.ipynb @@ -13,13 +13,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "spherical coordinate transformation example \n", - "by Michał Sadowski" + "spherical coordinate transformation example based on [Williamson and Rasch 1989](https://doi.org/10.1175/1520-0493(1989)117%3C0102:TDSLTW%3E2.0.CO;2) \n", + "as in [Jaruga et al 2015, Fig 14](https://doi.org/10.5194/gmd-8-1005-2015) \n", + "\n", + "example controbuted to PyMPDATA by Michał Sadowski" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -32,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -40,24 +42,27 @@ "import numpy as np\n", "import numba\n", "import matplotlib.pyplot as plt\n", + "from matplotlib import cm\n", "import matplotlib\n", "from IPython.display import Video\n", "from PyMPDATA import VectorField, ScalarField, Options, Solver, Stepper\n", - "from PyMPDATA.boundary_conditions import Periodic, Polar" + "from PyMPDATA.boundary_conditions import Periodic, Polar\n", + "from PyMPDATA_examples.utils import merge_images_into_gif\n", + "from open_atmos_jupyter_utils import show_plot" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "options = Options(n_iters=1) #" + "options = Options(n_iters=1) # TODO #120" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -78,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -87,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -109,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -122,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -132,7 +137,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -147,38 +152,1285 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-0.00036100034290834803 0.00036100034290834803\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-11-17T12:51:17.206990\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0815c3dba2994ca0b43637213be6f0bc", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(HTML(value=\"./tmp5p9l8t28.pdf
\"), HTML(value…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.imshow(advector_x)\n", "plt.colorbar()\n", "print(np.amin(advector_x), np.amax(advector_x))\n", - "np.testing.assert_array_almost_equal(advector_x[0,:], advector_x[-1,:])" + "np.testing.assert_array_almost_equal(advector_x[0,:], advector_x[-1,:])\n", + "show_plot()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-0.00036100034290834803 0.00036100034290834803\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-11-17T12:51:17.593956\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "585dcc24e996418bb6f9ea2461f0be5b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(HTML(value=\"./tmpjbn_17m8.pdf
\"), HTML(value…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.imshow(advector_y)\n", "plt.colorbar()\n", "print(np.amin(advector_y), np.amax(advector_y))\n", - "np.testing.assert_array_almost_equal(advector_y[:,0], - advector_y[:,-1])" + "np.testing.assert_array_almost_equal(advector_y[:,0], - advector_y[:,-1])\n", + "show_plot()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -191,9 +1443,39008 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-11-17T12:51:18.599122\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "01013bf72917424c8218c3f29456b8cb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(HTML(value=\"./tmp_wt3brl4.pdf
\"), HTML(value…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "dx = 1\n", "dy = 1\n", @@ -210,17 +40461,18 @@ " 0: (ny+1)*dy : dy\n", "]\n", "\n", - "fig = plt.figure(figsize=(15,10))\n", - "plt.xticks(ux[:,0])\n", - "plt.yticks(vy[0,:])\n", + "fig = plt.figure(figsize=(12,6))\n", + "plt.xticks(ux[::2,0])\n", + "plt.yticks(vy[0,::2])\n", "plt.grid()\n", "plt.quiver(ux, uy, advector.get_component(0), 0, pivot='mid', scale=.025)\n", - "plt.quiver(vx, vy, 0, advector.get_component(1), pivot='mid', scale=.025)" + "plt.quiver(vx, vy, 0, advector.get_component(1), pivot='mid', scale=.025)\n", + "show_plot()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -234,20 +40486,628 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.00047292825634092094\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-11-17T12:51:19.766084\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "aa68a5bb7a60441384d3e42b4afaf504", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(HTML(value=\"./tmpaog2rs_h.pdf
\"), HTML(value…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.imshow(g_factor_z)\n", "plt.colorbar()\n", - "print(np.amin(np.abs(g_factor_z)))" + "print(np.amin(np.abs(g_factor_z)))\n", + "show_plot()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.7633300359370179\n" + ] + } + ], "source": [ "Cx_max = np.amax(np.abs((advector_x[1:,:]+advector_x[:-1,:])/2/g_factor_z))\n", "print(Cx_max)\n", @@ -256,9 +41116,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.07481942725020725\n" + ] + } + ], "source": [ "Cy_max = np.amax(np.abs((advector_y[:,1:]+advector_y[:,:-1])/2/g_factor_z))\n", "print(Cy_max)\n", @@ -267,7 +41135,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -280,7 +41148,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -297,7 +41165,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -306,7 +41174,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -315,17 +41183,689 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-11-17T12:51:21.462494\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a111dbe546ab460b99698d7bfa8cee29", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(HTML(value=\"./tmpfe0_20r5.pdf
\"), HTML(value…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.imshow(solver.advectee.get())\n", - "plt.colorbar()" + "plt.colorbar()\n", + "show_plot()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -344,13 +41884,10 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ - "from matplotlib import cm\n", - "# import matplotlib.animation as animation\n", - "\n", "theta = np.linspace(0, 1, nlat+1, endpoint=True) * np.pi\n", "phi = np.linspace(0, 1, nlon+1, endpoint=True) * 2 * np.pi\n", "\n", @@ -358,8 +41895,8 @@ "Y = np.outer(np.sin(theta), np.sin(phi))\n", "Z = np.outer(np.cos(theta), np.ones(nlon+1))\n", "\n", - "def plot_state(state, save_path=None):\n", - " fig = plt.figure(figsize=(15,10))\n", + "def plot_state(state, save_path):\n", + " fig = plt.figure(figsize=(8,6))\n", " ax = fig.add_subplot(111, projection='3d')\n", " ax.set_axis_off()\n", " norm = matplotlib.colors.Normalize(vmin=h0, vmax=h0+.05)\n", @@ -368,14 +41905,13 @@ " m = cm.ScalarMappable(cmap=cm.copper_r, norm=norm)\n", " m.set_array([])\n", " plt.colorbar(m, shrink=.5, ax=ax)\n", - " if save_path:\n", - " plt.savefig(save_path)\n", - " return plt.show()" + " plt.savefig(save_path)\n", + " plt.close()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -383,40 +41919,41 @@ "!mkdir animation\n", "paths = []\n", "for i, state in enumerate(states_history):\n", - " path = f'animation/{i}.png'\n", + " path = f'animation/{i:03d}.png'\n", " paths.append(path)\n", - " plot_state(state, path)\n", - " print(np.amin(state), np.amax(state))" + " plot_state(state, path)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ - "if 'CI' not in os.environ:\n", - " os.system(\"ffmpeg -f image2 -r 10 -i ./animation/%01d.png -vcodec mpeg4 -y simulation.mp4\")" + "merge_images_into_gif(\"animation\", \"animation.gif\", .005)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, - "outputs": [], - "source": [ - "if 'CI' not in os.environ:\n", - " Video(\"simulation.mp4\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# for i in *.png; do convert $i -flatten -trim +repage -bordercolor white -border 5 _$i; done;\n", - "# convert _*.png anim.gif" + "%%HTML\n", + "" ] }, { diff --git a/examples/PyMPDATA_examples/utils/__init__.py b/examples/PyMPDATA_examples/utils/__init__.py index 8c49a4c8..f5f01006 100644 --- a/examples/PyMPDATA_examples/utils/__init__.py +++ b/examples/PyMPDATA_examples/utils/__init__.py @@ -3,5 +3,5 @@ """ from open_atmos_jupyter_utils import show_plot - +from .merge_images_into_gif import merge_images_into_gif from .nondivergent_vector_field_2d import nondivergent_vector_field_2d diff --git a/examples/PyMPDATA_examples/utils/merge_images_into_gif.py b/examples/PyMPDATA_examples/utils/merge_images_into_gif.py new file mode 100644 index 00000000..a7ab4b02 --- /dev/null +++ b/examples/PyMPDATA_examples/utils/merge_images_into_gif.py @@ -0,0 +1,11 @@ +""" animation utilities """ + +import os +import imageio + +def merge_images_into_gif(image_folder, gif_name, duration=0.01): + """ creates a GIF file from a series of animation frames """ + with imageio.get_writer(gif_name, mode='I', duration=duration, loop=0) as writer: + for filename in sorted(os.listdir(image_folder)): + image = imageio.v3.imread(os.path.join(image_folder, filename)) + writer.append_data(image)