diff --git a/dummy_test_file.txt b/dummy_test_file.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/python/psc_turb1.ipynb b/python/psc_turb1.ipynb new file mode 100644 index 0000000000..7259c98048 --- /dev/null +++ b/python/psc_turb1.ipynb @@ -0,0 +1,404 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'adios2'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;31m#sys.path.append('/Users/kai/src/psc/python')\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'~/Documents/New_psc/second_try_version/python'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 12\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mpsc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/Documents/New_psc/second_try_version/python/psc/__init__.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mpsc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madios2py\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mxarray\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mxr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Documents/New_psc/second_try_version/python/psc/adios2py/__init__.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0madios2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mlogging\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'adios2'" + ] + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import xarray as xr\n", + "import h5py\n", + "from collections import defaultdict\n", + "\n", + "%matplotlib inline \n", + "plt.rcParams['figure.figsize'] = [16, 10]\n", + "\n", + "import sys\n", + "#sys.path.append('/Users/kai/src/psc/python')\n", + "sys.path.append('~/Documents/New_psc/second_try_version/python')\n", + "import psc" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_fields(ds, fldnames, fld_kwargs=None):\n", + " fig, axs = plt.subplots(3, len(fldnames) // 3)\n", + " if len(fldnames) == 1: axs = [axs]\n", + " axs = axs.flatten()\n", + " for i, fldname in enumerate(fldnames):\n", + " fld = ds[fldname]\n", + " if fld_kwargs:\n", + " kwargs = fld_kwargs[i]\n", + " else:\n", + " kwargs = {}\n", + " fld[:,:,0].plot(ax=axs[i], **kwargs)\n", + " axs[i].set_aspect('equal')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "step = 10\n", + "node = 0\n", + "ds1 = xr.open_dataset(f\"/Users/kai/src/psc/build-mac/pfd.{step:06d}_p{node:06d}.h5\", engine='pschdf5')\n", + "ds2 = xr.open_dataset(f\"/Users/kai/src/psc/build-mac/pfd_moments.{step:06d}_p{node:06d}.h5\", engine='pschdf5')\n", + "ds = xr.merge([ds1, ds2])\n", + "#ds" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def make_plot(step):\n", + " node = 0\n", + " ds1 = xr.open_dataset(f\"/Users/kai/src/psc/build-mac/pfd.{step:06d}_p{node:06d}.h5\", engine='pschdf5')\n", + " ds2 = xr.open_dataset(f\"/Users/kai/src/psc/build-mac/pfd_moments.{step:06d}_p{node:06d}.h5\", engine='pschdf5')\n", + " ds = xr.merge([ds1, ds2])\n", + " plot_fields(ds, ['hx_fc', 'hy_fc', 'hz_fc', 'jx_ec', 'jy_ec', 'jz_ec', 'ex_ec', 'ey_ec', 'ez_ec'])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "make_plot(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4sAAAJcCAYAAABQXzFAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAACwGElEQVR4nOzdeZhcZZU/8O+prdd0Okln34EAsi9hUVCRRQMiuAsIMopmnNERHB1EmRlHZ3Rw+TmiohgRFUWREVBGQUQUBREMICAQlhADZE9n77W28/ujKljd5+3u2m7dqnq/n+eph9TpW3Xfqu76ct9b954rqgoiIiIiIiKiQpGwB0BERERERET1h5NFIiIiIiIiMjhZJCIiIiIiIoOTRSIiIiIiIjI4WSQiIiIiIiKDk0UiIiIiIiIyOFkkIiIiIiIig5PFJiMivxERFZHYOMucLCIPi8huEVkjIsuLfS4R+YGIbMw/9hkReW/Bz94pIn0Ft4H844/O//w/RCQ1apl9qvn6icgPzDoi8gGzjsLGyWITEZF3AhgzTPLLxAHcAuCbACYDeAeAL4nI4UU+138DWKSqXQDOAvBfe0NDVa9X1c69NwD/CGANgIcLHv/jwmVUdU1ZL5aIvMWsIyIfMOuoHnCyWGUi8o5Re1iGReTuGqx3MoBPArh0gkWnAugC8H3NWQlgFYCDinkuVX1CVYf33s3f9h1jXRcCuE5VtZTXQkT1j1k3ArOOqEkx60Zg1nmIk8UqU9WX9rAAmIPcHpgfuZYVka+LyM4xbo+VuOrPAvgGgE0TjG9zfjzvFpGoiLwcwEIA9xb7XPlxDwB4CsBGALc5llkI4FUArhv1ozeIyHYReUJE/qGoV0ZEdYdZ99IyzDqiJsase2kZZp2vVJW3AG7ITcR/DuAbNVjXUgCPIHd4wSLk9grFxln+DQA2A0jnb+8r9bkARAGcCOBfAcQdP/83AHePqh2EXNBGAbwCuUA6N+zfFW+88Vb+jVnHrOONNx9uzLrGzjoA1wLYAuDxKjzXa/Lv6d7bEIA3hv0ag7rxm8XgfAbAJAAfquaTjjrZ+HYRiQD4OoCLVTVdxOMPBPBjAO8CkABwMIBLReT1pTyXqmZU9V4A8wC49iS9C8D3Rj3mSVXdkH/sfQCuBPDWCV80EdUzZh2zjsgHzLrGzrrvAlhWjSdS1d+q6hGqegSAkwEMAPhVNZ67HnGyGAAROQfAuQDeqqqpcZa7etRx8IW3J1yP0ZEnG5+O3HHqSwH8WEQ2AViZX3SdiLzS8RSHAHhaVe9Q1ayqPg3gFwDKeS4gt6dqxLHtInICcnuafjLWa9/7cgDIBMsQUZ1i1jHriHzArGv8rFPV3wPYXlgTkX1F5Jci8pCI3JOfeJfqrQBuV9WBqgy0HoX91Waz3QAcCWArgCNqtD4BMKvgdgxyH9a5ABKO5fcF0IfcnhDJ318N4H0TPReAGQDOAdCJ3CEHrwPQD+DsUetYgdwJ0KPXfTaAKfn1HAtgPYALw/6d8cYbb6XfmHXMOt548+HGrGuerEPuMNzHC+7fBWBJ/t/HAfhNGc/5GwBnhv3aAn3fwh5As90A/Adyx4v3Fdxur+H6F2HU8egAbgfwiYL7bwfwOIA9ANYB+ByAyETPBWA6gN8B2AlgN4C/oOC4+Pwyrfmfn+J4vh8B2JZ/T54C8KGwf1+88cZbeTdmHbOON958uDHrmifrUDBZRG6CPIiR5x6uyv/szfn3c/TtjlHPNxu5HQnmHM9mukn+xRIRERERETUlEVkE4OeqeoiIdCF3+O7sCp7vYgAHq+ryao2xHvGcRSIiIiIi8oaq7gbwVxF5GwBIzuElPs25GOMyKs2Ek0UiIiIiImpaIvIjAH8EcICIrBORiwC8E8BFIvIogCeQOwez2OdbBGA+cofxNjUehkpEREREREQGv1kkIiIiIiIiIxb2AEoRaZ2ksY5pI2qxRNwsl2ixL6urzdY6E7bWGrXz50hq0NSyA3tMLdVvL7GS6kva2rC9LupQxn7Dm3Z865s1FfeMPyr2MjctEUetJWpq8Y6ErXW22fW2TzI1TbSbmuu19SczprZnyF66aGjYLpdK2uWyyWFbyzguheT6Jt3xXknU/m1k92zqVdXp9gnGNl/adMj5W8vpRfIOVa3KRWKpeUisVSXRGfYwyFM6uI1ZRzUxbVqPzl+4YETNtX3QFbV/Wxq123+uv8Co2mpq0zr7fDMXmNqOQbsd0d1qtw9iUbsdEc3abT3X9sbwC8/b8c1ZZGrJjH0dmazdpulJbjc16Zpmatvt5imm2s0/QOxWZkptLZGx28rI2jEP9251rMI+n6v2fNy+joVT7PbpQMr+DSUc2/dPPvYIs64IDTVZjHVMw4xl/zai1rPQNjFatM9UUzv14JmmduKCKaa2/9RWU2vd+LipDf35blPb/MdHTW3D/WtNbd0z20xtdZ8NpM2OSWXSEQwJxyRwasJOAvftsMG6cF/7Hsw5Zp6pzT7hMFNrO/o1dnzzjjC153bZD+0fX9xhar95aoupPf2sfa+2vmiDZs+G1aY2uGOzqWXTNh0jMZuOLZPs39Du3/63TfQJJJHFuZE5Y/78q9m1PaU+JzU/SXQidsBZYQ+DPJV65DvMOqqJ+QsX4De/u3dE7YH1dmf8aZN3m9rgZLutknLsnO7M9Jna5i9+3NTSl3zZ1H7yhN2OeMOBM0xtRrvjC4lhO2mDY0f06ovfZ2qb/v1aU1u/2+4U3z5ot2ne+8IPTS1xyvmm9sMX7XbiuQvt9qTrS4BNKbvdNH+H3VbWoX5TW/utb9nxTeowtWirXcc/zrrQ1K5+26Gm9uAG+ztf3G0nlYfMmcysK0JDTRaJGpFjhyMRUdNh1hGRD3zLOk4WiQIk4v7m9yX2S1cioobDrCMiH/iYdZwsEgVI4D5/lIiomTDriMgHPmYdJ4tEARLI+HugJnq8yLUAzgSwRVUPcfxcAFwJ4AwAAwD+TlUfLnuFRERlqDTryE9RKDow8ry7pbdfYRc86XWm9Jdh21vg6Gn2PLw9UdssbMvf/z9TW+xo+PfOe+xy0zIvN7XHl9hzzI9MbTI1TdomMD+54Ium9o6uFlOLOxq+nDfd9n/AlBNNaWPMnkZ39gGO9oh/ud2UBg893dSm/+ZrppZ59dtN7fJV9pzF5f9qz1n881a73DLbkgQ3bXzK1GTzI6b2uj7b72L9d2+yT1gGH7OOl84gCpAAiIuMeSvCdwGM11XrdABL8rflAL5R6ZiJiEpVhawjIqp7PmYdv1kkCpBIZSdCq+rvRWTROIucDeA6VVUA94tIt4jMVtWN5a+ViKg0lWYdEVEj8DHrOFkkCpBgghOhgR4RebDg/gpVXVHCKuYCeLHg/rp8jZNFIqqZIrKOiKjh+Zh1nCwSBaiIE6F7VXVphasYzV5oiogoQD42fSAi//iYdZwsEgVowhbLlVsHYH7B/XkANgS5QqqBSBSxVtuUgagWUmU8pgZZR00olRVsTY3cFJ15/ofNctJvL3B/dI/dhN2RsbWuhG3PMbXNNrPZ1J82tVkX2wY3u7J2f+whD9nmKXfOte0Gtg0mTe2yI00Jz1x8rqmtvPVZU8s+cp+pzelZZGrzfm+bytx94Hmm9prD7Zi39tlrQcw980Om9vWH7abHZ45pNbWuMy8ztV/96NOm9g93vGBqjz9j0+m+C6eY2vOLDjO1ea9eb2r4/HW2NgEfs46TRaIA5Q5XCHQVtwL4oIjcAOA4ALt4viIR1VoNso6IKHQ+Zh0ni0QBEkhFhyuIyI8AnITcuY3rAHwSQBwAVPVqALchd9mM1chdOuPdFQ6ZiKhklWYdEVEj8DHrQp8sikgUwIMA1qvqmWGPh6iaKj1cQVXtsSgjf64APlD2CqhmmHXUzHw8NIvcmHXUzHzMutAniwAuBrAKQFfYAyGqttyJ0GGPguoEs46aFrOOCjDrqGn5mHWhThZFZB6A1wP4DIB/DnMsREHwscUyWaVmXTQWR8eM+RMtRhSIwTIew6wjoPSs2zmUwk2rtoyo9Q3ZRjOXHjzJPvj+m02p4xXnmNpzO4dNbcNuW3tN792m9vQ+rzO1xZMTdizHvcmU/u7vvmdqP//S+ab2fxsHTO30s040tW90v9fUfjvFNpCZs+NJU0u+drmpnaxZU5OhXaY2f5JtIGMfCZy2b49d7nHb+GfbP88ztegMOx15xWF2LHj5DFNK9+xjams3DJnan2a/wT4f/tFRG5+PWRf2N4tfBnApAEcK5IjIcgDLASDaPrU2oyKqEhEgHvHsTGhy+TJKyLpIW3dNBkVULcw6yvsySsi6KTPn1GZURFXiY9aF9mpF5EwAW1T1ofGWU9UVqrpUVZdGWsfMHqI6JZDo2DdqfmVlXaKjRqMjqhZmne/KybrObn4JQI3Gv6wL85vFEwCcJSJnAGgF0CUiP1BV+x09UYMSAaIJez0n8gqzjpoes47ArCMP+Jh1oX2zqKofV9V5qroIwDkAfsNAoaYj8G4PFI3ErCMvMOu8x6wjL3iYdWGfs0jU3EQQjfu1B4oqF020onvefmEPgzzVW86DmHVUhqntcVxw2KwRtYza5e7vtW2Xjjv6dFNLZGzjmv0n2Q34/Tttk5pnu5Y5HmsHs37ANuDJOsb8tX9/s6kt6rbr3efnV5ja3FtaTO133z3Z1GZEbHOcnTMOMbXJa/5oarfiIFM7Y4FtmBPf/LSpYWiPKSWmHWFq25e+3dTW7U6a2lFbnzO1J6ccaWodcfsd17xHbje1znmnmtrBi22jnrJ4mHV1MVlU1bsB3B3yMIiqLne4gl8nQtPYmHXUrJh1VIhZR83Kx6yri8kiUdMSgUT9ChUi8hCzjoh84GHW+fVqiWpMBIjGI2PeiIiaQTWyTkSWicjTIrJaRC4bZ7ljRCQjIm+t2gsgIiqCj9t1/GaRKFCCiGd7oIjIR5VlnYhEAVwF4DQA6wCsFJFbVfVJx3KfA3BHBYMlIiqTf9t1nCwSBUgiQMSzY9upcrFEFDMXdIc9DPLU6jIeU4WsOxbAalVdAwAicgOAswE8OWq5fwJwE4BjKlkZ1YdoJoVJ/RtH1DJds8xyx01JmVps+wum9kzngabW4uhQOeexW0zthTmvM7V9Vv7Y1LYcbhu8Lo1vtet46memFh/Y39Sir7NfkP/hj58ytf033mtq0jPP1CY7Lhj/yOSjTe0svGifr9c2CMq028Ywkaht8LJ4YI19vrR9vqkz7Hvw49UzTO0dPfb3KwO20dELt/7C1KYP3WxqMy/+qKmVw8ftOk4WiYIk4t31eIjIQxNnXY+IPFhwf4Wqrii4PxcYsfW6DsBxI1chcwG8CcDJ4GSRiMLg4XYdJ4tEARIAkUhzXneHiGivIrKuV1WXTvAUo42+IMGXAXxMVTMizFUiqj0ft+s4WSQKksC7PVBE5KHKs24dgPkF9+cB2DBqmaUAbshPFHsAnCEiaVX9aSUrJiIqmofbdZwsEgVJBOI4X4KIqKlUnnUrASwRkcUA1gM4B8B5hQuo6uK/rU6+C+DnnCgSUU15uF3HySJRgMTDPVBUuY7WGI49cHrYwyBP/aGMx1SadaqaFpEPItflNArgWlV9QkTen//51WU/OdWtx17Yhfkf+PmI2pof/L1ZbuWOuKkdOP0QU5v3f180tcwb/8XUIpO6Te24uZNM7Ud9bzS1kzrsWDZHbaOZGSedY2rrPne5qS34wIdNrfVLPzS1b63eZmqvbplqakvELregLWFqD++0Y+7qdDSuefo2U9N9jzS1wWkLTK196zOmFt9ia2/Z9ayp7VnyJlNbvydtah+cfZGpDey2jXU+0jfH1Mrh43YdJ4tEARIRRON+hQoR+acaWaeqtwG4bVTNOUlU1b+raGVERGXwcbuOk0WiIAm8O1yBiDzErCMiH3iYdZwsEgVJBJE4P2ZE1OSYdUTkgwqzTkTmA7gOwCwAWeQuI3RllUYXCCY7UYBEgEjUr4u3EpF/mHVE5IMqZF0awEdU9WERmQTgIRG5U1WfrM4Iq4+TRaIgiSCS4MeMStPVGsPJ+7PBDYXjf8p5ELOOynDgwh7c/I33jKjFH/ulWe7YPTtMTWfbBjL9Z33U1oYzprZu3kmmFhu0zVPeNWfQ1LLxdlPL/M42pIkedKyp/fD0fzO1A/s6Ta19eMDUBlP2dezXYpfTpx42tcmmAnTv+1pTiznmQHrk6aa2dtAuuGB4l6lJ2jaagdjHbjr0bFP7w7PbTe3UfaaY2v8tP8bUnnrrmaZ2xHu/bsdSjgqzTlU3AtiY//ceEVkFYC4AThaJvCSCSNx2TiMiairMOiLywcRZ1yMiDxbcX6GqK9xPJYsAHAnggeoNsPo4WSQKkEAgPDSLiJocs46IfFBE1vWq6tIJn0ekE8BNAC5R1d3VGl8QOFkkCpIAUTZ9IKJmx6wjIh9UIetEJI7cRPF6Vb25KuMKEJOdKEjCve1E5AFmHRH5oMKsExEB8G0Aq1T1S1UbV4A4WSQKkLCdPJWhLRbFETM7wh4GUdGYdVSOZCaLDXtGNkGZdpBtvOLSrllT6xraZmqJDtssrKfN/q3G92wytd2T5pta57BtvJI+9X2mZtvRAG/vsk10/vmnj5vadZmfmdrR59nmOJG1fzC1Jxeeamp/3miPctynL2lqC7tbTO2hXjvmYzbfY2r9B9vf26SYfb7hB+80tTnz1pnaq395u6n1feCLpvajxzeb2vv/+XxT29w2z9TKUYWsOwHABQD+IiKP5GufUNXbKh1bUJjsREESIFphh0ARWQbgSgBRANeo6hWjfn4SgJ8B+Gu+dLOqfrqilRIRlaIKWUdEVPcqzDpVvTf3LI2DyU4UIBGBRCo6XCEK4CoApwFYB2CliNzquB7PPapqe0UTEdVApVlHRNQIfMw6ThaJglT5tceOBbBaVdfknk5uAHA26vh6PETkIV5nkYh84GHW+fVqiUIwwR6oia7HMxfAiwX31wE4zvE8LxeRRwFsAPBRVX2i3PESEZXDt73tROQn37IutMmiiMwHcB2AWQCyyG0kXxnWeIiCICKIJsa9eOtE1+NxHdeuo+4/DGChqvaJyBkAfgpgSUkDpcCUk3VxpDEzY5soENWrIrKOPFBq3nXGgJf3jKzFNv7ZLJeae5ipRfpsM5tMp21m0/qEbaiS3vyiqcmRJ5vaQMw20Wl/0PYhaTn+jaa2MdNuaotTtpHLD88/wtQiP7vL1LZd/m5T637Hm01tv/1tU5m5k6aZWnvcTniigztNbV7yOVNL7thiav96x2pT+8rhg6a26rt3mNoRX7VNeboWz7bju+trpvbOzb2m9v3jP2Rq59u3pSw+Zl2Y3yymAXxEVR8WkUkAHhKROx3nYhE1rsq7Zq0DUNiObR5y3x6+pPBirqp6m4h8XUR6VNUmKIWBWUfNj91QKYd5R83Nw6wL7dWq6kYAG/P/3iMiq5A75I6BQk1DBJVee2wlgCUishjAegDnADhv5DpkFoDNqqoiciyACAC7y5VCwawjH1Qh66gJMO+o2fmYdXUxNRaRRQCOBPCA42fLASwHgGj71NoOjKhSFe6BUtW0iHwQwB3IXTrjWlV9QkTen//51QDeCuAfRCQNYBDAOao6+lBVqgPFZt2CeXNrOzCiSnm4t53GN1bejci6+dW59h1RzXiYdaG/WhHpBHATgEsKD6fbK9/sYwUAJKYt4gYwNRYRSCRa0VPkL9R626ja1QX//hoAeyA/1ZVSsu7oIw5j1lFjqULWUfMYL+9GZN2RRzDrqLF4mHWhThZFJI5cmFyvqjeHORaiYAgQ8+tEaLJKzrqhfugz9wc+LqLqqTzrRGQZgCuRO4riGlW9YtTP3wngY/m7fQD+QVUfrWilVHWl5J1KBMPxjhG1X6b3NctFXhgwtaNn22Y2yUE793xh2gmmdswhtvlMNtlvajOH7an/R/zKNl55ZMp9pjb54Nea2mDbIlPb9qn3m9qCv/8nU1t8+Immdl/roabWutU2lUllbaOeY+O2SY0mOkwtOf8oU7tX9je1iye3mtrzjqM1f/J+2+8onrBH0xzw5g+b2rt+8rSpDbRmTO3DUx2/319cZQdTFv+268LshioAvg1glap+KaxxEAVKBBJPhD0KChGzjrxQYdaJSBTAVQBOQ66x10oRuXVUY5S/Ani1qu4QkdOR+3bKdSkhCgnzjpqeh9t1YZ6heQKACwCcLCKP5G9nhDgeouoTAJHo2DfyAbOOml/lWXcsgNWqukZVkwBuAHB24QKqep+q7sjfvR+57tBUX5h31Nw83K4LsxvqvXBfQ46oaYgIxLPDFWgkZh35oIis6xGRBwvur8ifu7bXXACFF79bh/G/NbwIwO0lD5QCxbyjZufjdl3oDW6Imps07Z4mIqK/mTDrelV16fhPYDibn4jIa5CbLNqTuIiIAuXfdh0ni0RB8nAPFFUu09+HXX/6Y9jDICpe5Vm3DsD8gvvzAGywq5HDAFwD4HRV5fVkG9yu4QxuX71jRO3NqT+b5XTugaa2OzrJ1Gb2/sXUZs0+2NQGvvspU2t/56WmtiXWY2orT7BNVl7xy8NM7Z4dPzC1Xy8829T2+fBXTe1Pw2lTy7bbfSf7OJrKtMbsfpfN/Y7na5liao/uaTG1mVHbQOaVs+xnPRW1U4q2NbbxT2frfFPbf4o9BzC+wf4uP7nM/h0kovb1Prppj6nJGz5kan/rl1UCD7frOFkkCpKHJ0ITkYcqz7qVAJaIyGIA6wGcA+C8kauQBQBuBnCBqj5TycqIiMri4XYdJ4tEgRIgEmYfKSKiWqgs61Q1LSIfBHAHcpfOuFZVnxCR9+d/fjWAfwcwDcDXc003kZ7g0FYioirzb7uOk0WiIIlAYn7tgSIiD1Uh61T1NgC3japdXfDv9wJ4b0UrISKqhIfbdZwsEgXNsz1QROQpZh0R+cCzrONkkShIEvFuDxRVLtk3hPX3PjnxgkT1gllHZehO78bZvb8eUUtuXW+Wi+1nr6IyeffzppaetsiuRLOm1PZ3nzS1k6+0TcX2mddlat85xTapuX391ab2ygdeZ2r/tsA2qUlm7PiObt1lal99xi736CbblfPCw2eZ2pIX7za19KGvNbX2oaSpfepXz5rauUfbS5wePtN+/lun2uX+ZcfDpiaP2f/fZecuMbX92uz4ousfN7XI7KNtLT1samXxMOs4WSQKkIhA4n51zSIi/zDriMgHPmYdJ4tEQRJ4dz0eIvIQs46IfOBh1nGySBQo/67HQ0Q+YtYRkQ/8yzpOFomCJOLdHigi8hCzjoh84GHWcbJIFCgBIvyYUWnSAylsemRL2MMgKgGzjsrQ2onIwa8cUXpOp5nFJmftxnnP0ytNbfRzAcBWTDK1P7+429R+/87ppvZkbIFdrt82WZn8pn8ztdtv+U+7XP+Qqclk28jlrFt2mNoNLb80tc4TbBOdp3ZNNbUl8w82tcSa++34ZtnLlv7Xsv1NbXr/C6YmuzaZmvbaZkUDqx4ztR8dttzU3j55hqm95Rr7Oz/3FYtN7c8HH2pq/7TBrrc8/mWdX6+WqNYEUM9ChYg8xKwjIh94mHV+vVqimpPcIQtERE2NWUdEPvAv6zhZJAqQAtAoP2ZE1NyYdUTkAx+zzq9XS1RrIoBEwh4FEVGwmHVE5AMPs46TRaJANeaJ0CLyWQCfV9Wd+ftTAHxEVf811IF5YiidxdNbB8IeBlEJmHVUuv5sFPf3d42oHTzd/h09t2PY1OJHv8XUkhk1temxlKkdMbPD1P73RdsY5rX72Esk7DelxdQGU1lTa9//AFOLdHSZ2vC9PzW1W87/R1PLxo4ytXvW95naKweeMbUb98w2tTfP3c/UUln7/tlXBqD3RVNK/vUJU0scfaqp3fvKi03tDY7fx7UPbzC1bzz2/0xtyUn2vYo89xNTu3O3bS5UnsbMukr4NTUmCoFGYmPe6tjpezeeAEBVdwA4I7zhEFG9Y9YRkQ/qLetE5E4R6S64P0VE7qjW89d1ghM1PGnYE6GjItKiqsMAICJtAOzuVCIigFlHRH6oz6zrGb3TS0TstUfKxMkiUcDqfK/6WH4A4C4R+Q5y53O/B8D3wh0SEdUzZh0R+aAOsy4rIgtU9QUAEJGFyOVZVdTdqyVqLgJEGudo77172FX18yLyGIBTAQiA/1TVqh3SQETNhllHRD6oy6y7HMC9IvK7/P1XAVherSfnZJEoSNJwJ0L/EcBRIvJ9Vb0AwC/DHpCPkqrYMGSbMhDVLWYdlUEBpLIjW6h0rbnXLLdk3xNN7fcv7Da1A3raTW1G1jaBicWnmFrEcWhhNGJrn7zzOVNbfsenTG3Tv15jau/6xh9N7aYP/ZOpzU7a17Y9ZT9fa3cOmtr8hbaxzls6t5latqXb1Basf8TUfhs90NQ2dC81tY7jjjO1B17caWrnPW+/uH+k7SJT+8i87aZ226XfMrXpd37e1Haf9x+mdlisShO8Oso6ETlBVf8A4LcAjgJwPHI7vT6sqr3VWk99vFqiJlaHhyuMJyEiFwJ4hYi8efQPVfXmEMZERA2AWUdEPqijrPsKgKMB/FFVjwLw8yBWEur3qCKyTESeFpHVInJZmGMhCsTe6/GMdSvqKcb/nEjOV/I/f0xEbH/t4r0fuT1T3QDeMOp2ZgXP6zVmHTU9Zh2BWUceqEHWlSCVP996bj4bR9wqeN4RQpsai0gUwFUATgOwDsBKEblVVZ8Ma0xE1SdAJFr+o4v7nJwOYEn+dhyAb+T/WzJVvRe5494fVNVvjzOu01T1znLW4RtmHfmBWec7Zh35oSZZV6wzkTvf+mQAD5U9qAlMOAUWkYMctZOqsO5jAaxW1TWqmgRwA4Czq/C8RHVFJTLmrQjFfE7OBnCd5twPoFtE7BV4SxnzOBtPeZ+r5PnrVUB5x6wjLzDrGgezjqh8Nci64sah2quqNwA4S1W/N/q2dzkR+Xg5z79XMd8s3igi3wfweQCt+f8uBfDySlYMYC6AFwvur4NjD6GILEe+o0+0fWqFqySqLRWBjr8HqkdEHiy4v0JVVxTcL+Zz4lpmLoCNpY+4aHV3kaEqCSLvSs66TkSxK5UdvQhR3WLWNZy6yLr50ybj2Ae+MeLnV+9zgXniN6XsVQBOW32jqe2aaxulDETttmPPnvWmdmCPvSzdql7bQOa5rbZhzn+faLfF2/6w1tRu2Gb3TczWg00NT9omP7Pn7mdq5+63yD728dtNacOBZ5jaLMmYWmb2y0ztyIhtGnTpL542tW++yi638InrTa3lNeYUYSydYn+/W2Dfl+McTYjegTea2i//+ltTS29+0dTKUaOsK21Mqo9OsMjbAPx3uc9fzGTxOOT2rN0HYBKA6wGcUO4KC7gC2Py15N/gFQCQmLaoatcMIaoJVWSy4/7Z9qqqbSv2N8V8Tor6LFVZs34Wg8i7krNuurQ06/tLzYpZ12jqIuuO2mdus76/1Kxqk3XVVtFOr2ImiykAgwDakNv79FdVrcYu73UA5hfcnwdgQxWel6iuVJgAxXxO+FmqniDyjr8f8gKzrqEw64jKVIOsq7aKhlzMwbUrkQuUYwCcCOBcEflJJSsteN4lIrJYRBIAzgFwaxWel6huKIBMVse8FaGYz8mtAN6V7xR4PIBdqhrkYVkAsDbg5w9LEHnHrKOmx6xrOMw6ojLUKOuqLfBvFi9S1b3H3m4CcLaI2APKS6SqaRH5IIA7AEQBXKuqT1T6vET1RAEUlx1jPH6Mz4mIvD//86sB3AbgDACrAQwAeHeFw4aI/CeAT6lqOn+/C8CVqvru/HrtSQfNoep5x6wjHzRw1j0I4DsAfqiqOxzjYtYViVlHPggq6yoZk4jMV9UXR9Vmqeqm/N3/reT5J5wsFoRJYe37lay04HluQy78iZqTApkKj1dwfU7yG057/60APlDZWowYgAdE5N0AZgH4av7W1ILKO2YdNb3GzbpzkJt0riyYOP4qv66mVS9Zl+qaiY2nfXhE7bihtFluRnKLqWVPOt/UHt3Yb2onzbabut9+IWFqZ+5vl5v1w383tR+fs9zUMqsfMbXdR73J1NYe801T6xu2X/psn32KqX3nvudN7Wtv6jC1K3YeYmpn7Bo2tbl77JUW+vd7palNSu0xtRVH2CY/mY75pvaJrrea2il9003trKFVprZt8uGmNpS2R0r/JP4LU4vMONfU4jH7Oy9LQFlXob+KyP8itxNoIF+7DcBR+fV9tpInD+06i0Q+UACZBtzmUNWPi8hdAB4AsAPAq1R1dcjDIqI61cBZtxrA5SLyb8hds+xaAFkRuRa5oym2hzpAIqordZp1fwFwD4B7ROTtqvocqtjJuagLghBR+VTHvtUrEXkVgK8A+DSA3wH4mojMCXdURFTPGjHrAEBEDgPwJQBfAHATgLcC2A3gN2GOi4jqUx1mnarq1wF8CMD/icgbUMUOq/xmkShAqij2hOd680UAb1HVVQAgIm9CbsPpwFBHRUR1qVGzTkQeArATwDUAPqaqe4/Xe0BEqnGZMCJqInWadQIAqvoHETkZwI2o4vYaJ4tEAWvQS6ufDOCs/CRxb078KsTxEFGda9CsuwDAkQAWA/iY5C/6raqfbuLmNkRUgTrMuteLyHkAFiG3zfZ75C6PUxWcLBIFaG+L5Qb0EwC7ADwEYO+edntGOwUiCqAzxrMEKCS2v8iEGjjrvoTcN4sP429ZRzWSSO7B4hd/P6ImMxaY5b734mRTO3/416b2yqPOMrVY77OmduGh+5ha+pb/Z2rb3/MZU/uXGYea2hdWfsPUhj7/T6aWfWCNqbVd/zNTe5Xahj6bDp5lau19m0ztQycsNLVdwxlTG5xlm9m0DWwztWz7FFOLdM0wtej2F0ztS6fa3yUySVO6dcN+pvb6tXfaseyw78vO8/7N1E79jm3e85e7HrFjKUOdZt21GLnN1o8qNtDhZJEoYJV2zQrJPFVdFvYgiKhxMOuIyAd1mHWB5hh3XRMFrA5PhC7GfSJid58SEY2BWUdEPqjDrAs0x/jNIlGAVLUeWyyPSUT+gtxRFjEA7xaRNcgd0iDIdds6LMzxEVF9YtYRkQ/qKetqlWOcLBIFrP4ObR/XmWEPgIgaE7OOiHxQR1lXkxzjZJEoQHV68dYxqerzYY+BgEREML8tHvYwyFd7Sn8Is47KEm+FzjtoRGlVdqpZ7JyDW0wtqW8wtYGkbeQi05fYWtYu1/YKu929cv1uU9v/3t+a2uABM01t0/LjTK37Q1FTm9tps17/YpvyvHnbRlMbfnKrqbX1D5la6q2fMLVfPbfD1M5cPMnUEhufMLX0lhdN7a4pJ5ra63ptQ5/UrJeZ2mn72OnId+debmoX/fFbpjZl5Y2m9vbjX2Nql37ZNhw6w1QmVk9ZV6sc42SRKEB12jWLiKiqmHVE5AMfs46TRaIgKZCpwwvyEBFVFbOOiHzgYdZxskgUIIUilfUsVYjIO8w6IvKBj1nHySJRgBRAtk6ObSciCgqzjoh84GPWcbJIFCBVIFWHV2+l+tYSi2D/qa1hD4N8VU6DG2YdlSETjWN3+8jmMAdkB8xyD2+xDWmOfO7nppY49q2m9vyupKn1J+03Q4fHbROds2alTS2yda2pPb3bNuU5OmWb1GSjtoHMnS/Yx762wy6HfY6yY0m0m1oia8fcufZeU3vVvq8ytSERU0vOtpfvy86ytddtto1w+h3Lte1Ya2pRtb+PC//3Y6aWmXWAqX3uxRn2+U4+zdT+/rHvmxqWvNzWJuBj1nGySBQgBZDy7ERoIvIPs46IfOBj1nGySBQk9a9rFhF5iFlHRD7wMOs4WSQKUO5EaL9ChYj8w6wjIh/4mHWcLBIFKHdsu19ds4jIP0FmnYhMBfBjAIsArAXwdlXdMWqZ+QCuAzALQBbAClW9MpABEZG3fNyu42SRKEA+ds2iysXbYph1xMyJFyQKwvOlPyTgrLsMwF2qeoWIXJa/P7r7RRrAR1T1YRGZBOAhEblTVZ8MalBUuXRW0Ts4siHLdthGM8cMPmJqaw55k6kl99jmLpNaIqYWdTRyeQ7z7fOl7d/0goXHmdo+v/uufb6l55vakGOS8cMHbSOca5Kdpvbp07tNbVLUvraeNrtp3+9oZrOpP2VqBw3/1dQ00WZq/7e9y9Rev2uNqd28w/5/7PyWDab2wqxjTe1Xk+x7sO9W+3t7yyGzTe1DV1xraifKfqZWDh+36zhZJAqQjydCE5F/As66swGclP/39wDcjVGTRVXdCGBj/t97RGQVgLkAOFkkoqrxcbuOk0WiIKki61moEJGHJs66HhF5sOD+ClVdUeSzz8xPBqGqG0XE9sovICKLABwJ4IEin5+IqDgebtdxskgUIB/3QBGRf4rIul5VXTrWD0Xk18idbzja5aWMQ0Q6AdwE4BJV3V3KY4mIJuLjdl0ok0UR+QKANwBIAngOwLtVdWcYYyEKko8nQtPfMOvIF5VmnaqeOtbPRGSziMzOf6s4G8CWMZaLIzdRvF5Vby57MFQW5h35wMfturC+WbwTwMdVNS0inwPwcdiT1YkangLI+LUDikYqK+vina2Y84oDAh8ckdPP7iz5IQFn3a0ALgRwRf6/Pxu9gIgIgG8DWKWqXwpsJDSekvOuNTOM/fpXj6htnLy/WS4zc4mp7bPxIfuEHVNM6fad9gvrg6e3m9qcVvsHvHbANlR5YXfS1P66yDbbeV2rbSAT77VNYD52+ydNrX/LgKntO882zPnO279gau/eYN+XKc/dY2qTFx1hal9bYxvXvP+wqfaxA/a1Yf7JpvT2337f1PSYZaY2L7vN1M46YLqpfeRWewryv77W/r/yjrf0mFry3m+ZWjl83K6zbZRqQFV/pap7W1bdD2BeGOMgClruejzZMW/U3Jh15IuAs+4KAKeJyLMATsvfh4jMEZHb8sucAOACACeLyCP52xmVrpiKx7wjH/i4XVcP5yy+B7nrJzmJyHIAywEg2m73bhDVNQUynh3bTmMqOuvmdduW4UR1LcCsU9VtAE5x1DcAOCP/73sB2K+BKCxj5l1h1i2Y4zpNlaiOebhdF9hkcbyT1VX1Z/llLkfu2kjXj/U8+W5pKwAgMW2RX78danhZBZLp8C5UnV9uLYA9ADIA0uM1maDSBZF1h8+bwayjhhJk1lH9qEbeFWbd0kMPYtZRQ/Ex6wKbLI53sjoAiMiFAM4EcIqqZ1e3JG8oNMhQKeZC1Xu9RlV7gxqIz5h1RIFnHdUJ5h35zsesC6sb6jLkNmpfrar2LF6iZhHs4QoTXqiawlVu1sU6OzHl5ScENzCicX2t9Id4eGgWjVRO3qVjrdg+7cARtSc29pnlnnC02Dh10jRT02jC1F690DZtadtuG83sSCw2tWTGNnKJOI52PmPKHlNL3/trWzv+bFNbsuIGUzvpyj+Z2g+POtbUlv/F1n673r71u2KHmdoZbd2m9g8H2/dZ+m3zmZMi5iAm6M64qa0/8b2mNrklamr/94xdx5Gz06b29aFbTK3tcdv8KNvWYWqZ4WFTK4uHWRfWOYtfA9AC4M5cAzPcr6rvD2ksRIEp4nCFWlyoWgH8SkQUwDdLeH6qHLOOvODjoVlkMO+o6fmYdaFMFlV1vzDWSxSGCfZA1eJC1Seo6ob8ZPJOEXlKVX9fwuOpTMw68olve9tpJOYd+cK3rKuHbqhETSuriuEK9kBV40LV+Y6BUNUtInILgGMBcLJIRFVTadYRETUCH7OOk0WiAGmwhysUc6HqDgARVd2T//drAXw6qAERkZ8CzjoiorrgY9ZxskgUsExwDeGuAHCjiFwE4AUAbwNyF6oGcI2qngFgJoBb8uePxAD8UFV/GdSAqEpaOiD7Hxf2KIhKEmDWUZMaymTx7PbBEbXTorb5zPCTtuGLzt/f1mbbZidtz95jane3H2lqr+waMrXtUbuZfM9a29xl45RuU7tp4BWm9tXBXaY2dPs1pvbRN9jGMPOytgmMbnnB1F6132xTA2zjn7Tj47oNtjHM1M4WU8t02bNjtjn6x8yNDJra9mybqZ1zgG1CBLHNdmKnn2tqaz77KVP70Zs/Y2qXnXmiXQfsY4vhW9ZxskgUoKwG12K5yAtVrwFweCADICLKCzLriIjqRZBZJyJfAPAGAEkAzwF4t6ruDGRlJbDTdiKqqkxWx7wRETULZh0R+SDArLsTwCGqehiAZwB8vOLBVgG/WSQKkKoimc6EPQwiokAx64jIB0Fmnar+quDu/QDeGsiKSsTJIlGAsgrvumYRkX+YdUTkgyKyrpLrZxd6D4Afl/G4quNkkShACv+ux0OVS0fi6G2ZEfYwiIrGrKNyZLKK7YPpEbXkwkPNctGefUwt3TLJ1Pak7N/g+p5pptbb229q277yX6Y2/J4rTO07v3nO1L79bnu55CUzO03tWy9G7fimvs3UPvHMD00ttd8HTW1of/v/iRd2J01tvym2Sc2uIfvt2JRWO74/rB8wtfW795jaCQsmm5ok7XJ3b7KdcE7bZ4qpTd6z3tSeb1tkagu+8G1Tm/qX7ab29pttM6ByFJF1ZV8/W1V/ll/mcgBpANdXMNSq4WSRKEDKpg9E5AFmHRH5oNKsG+/62QAgIhcCOBPAKar10XaVk0WigHFvOxH5gFlHRD4IKutEZBmAjwF4tarar3RDwskiUYBUgTT3thNRk2PWEZEPAs66rwFoAXBn/vrY96vq+4NaWbE4WSQKkKoik+EGFBE1N2YdEfkgyKxT1f0CeeIKcbJIFDDloVlUooFUBo9s6gt7GEQlYdZRqbqyg1g29OcRNVnbapbTlG3asm7uy02tLWYvH37ANPt8B6+729QiF/6jqc3AJlP7acv/mdq0Pe2mNvfow01t6+UXmVpmyL62+HveZWrXPrbZ1P7u4G5Te9mzvzA1idrGNTMOfIVdbqdtPvOqPbahT+qgk0xtMGUnUFvStgFPz3n2sX/+6W2m9sqZtjHR3Ihdx3t/+qypXXbK/qZ23NxuU/uZqRTHt6zjZJEoQKpAJu1XqBCRf4LMOhGZilwL+UUA1gJ4u6ruGGPZKIAHAaxX1TMDGRARecvH7Tq7C4aIqkpVx7wRETWLALPuMgB3qeoSAHfl74/lYgCrKl0hEdFYfNuu42SRKEiqyKSzY96IiJpCsFl3NoDv5f/9PQBvdC0kIvMAvB7ANZWukIjIycPtOh6GShQgVbDpAxE1vSKyrkdEHiy4v0JVVxT59DNVdWNuPbpRROyJUDlfBnApAHu1diKiKvBxu46TRaKA+XYiNFWubziD3z+3LexhEJVkgqzrVdWlY/1QRH4NYJbjR5cXs24RORPAFlV9SEROKuYxVAcSrdC5B44oZRO2WUx0xzpTm5SwTVumrvuTqWWnzje1gUNeZ2qtSJvan3tTpnZgR5upDc87wtTW7rDNYg760EdNTeMtppZ5yr6OC0+w+0j0nh+a2gP7nm1qi6fYJj+zIvYyfqtSk01tnwPmmdqX7nne1D70cvs+z0huMbXbv/MTUzv4799qarf8j31tb959j6l99wTbzAbbVpqSZjJ2uTL5tl3HySJRgDR/uAIRUTOrNOtU9dSxfiYim0Vkdv5bxdkA7BYocAKAs0TkDACtALpE5Aeqen7ZgyIiGsXH7Tqes0gUMN9OhCYiPwWYdbcCuDD/7wvh6Hivqh9X1XmqugjAOQB+w4kiEQXBt+06frNIFCAfWywTkX8CzrorANwoIhcBeAHA2wBAROYAuEZVzwhqxUREhXzcruNkkShICmQ9O1yBiDwUYNap6jYApzjqGwCYiaKq3g3g7kAGQ0R+83C7jpNFokApsk16WAIFp28whXuf3Bz2MIhKwKyj0ume7Uj99kcjapE3fMgsd2/GNk95RVxMTVo7TW3T1z5rarPe8AY7lv2PN7WZHR12LK+82NRaX9xjaou6bVOZXT0HmtpzjkY4R77MjmXQ8fH69Rz7pfqmrX2mdugM2zRo3bBt1DO70zYNcn2q/+WVC03tybfZ93TaQXNM7bRLrzK1b/3L1ab2+g+fZ8fy78tNTVKDprZhznGmNvnnXzS18viXdaGesygiHxURFZGeMMdBFBTN74Ea60Z+YNZRs2PW0V7MO2pmPmZdaN8sish8AKchd/4BUdPKetZimUZi1pEvmHXEvCMf+JZ1YX6z+D/IXTzXr3ecvKKqyGayY97IC8w6anrMOspj3lFT8zHrQvlmUUTOArBeVR8Vscecj1p2OYDlABBtn1qD0RFVVyZtL/RLfig361q6Z9ZgdETVxazzW7F5V5h183u6azM4oiryLesCmyyKyK8BzHL86HIAnwDw2mKeR1VXAFgBAIlpi7inihqLKjSbCXsUFKAgsq51xn665YVdVRsjUeCYdV6oRt4VZt1Bhx+pz5z4DyN+fujmp81j9pu6v6n9ZeuQqR3RMc3UZl38SVN7UaaYWiZlx7qpL2lqj26w2fzh3ptMLfa6i0zt6eV/Z2oHv/kkU2v/7FOmNnTTP5raMXNsw5zZuzaaWtb2gMHvtrQ4nm+SqXUP9ZqaPn2/qXV9+2ZTW7Bnlall1vzG1D612P4+PuloejM4z54G62oklLrsXab2o3d+3tSATzlqE/Aw6wKbLKrqqa66iBwKYDGAvXue5gF4WESOVdVNQY2HKAyqimzK/s+GmgezjohZ5wvmHfnOx6yr+WGoqvoXADP23heRtQCWqqrddUHU8PzbA0U5zDryC7POZ8w78od/WcfrLBIFSRXZtF97oIjIQ8w6IvKBh1kX6nUWAUBVF3HPEzUrzYfKWLdKiMjbROQJEcmKyNJxllsmIk+LyGoRuayilVLZmHXUzILMOmo8zDtqVj5mHb9ZJAqUIhvc4QqPA3gzgG+OtYCIRAFchdx1r9YBWCkit6rqk0ENiiqXSQ5h+wvPhj0MohIEmnXUpNpSfThk0x9G1J6a80qz3L5/+qGpJV7+TlOTfruxrmo3dTcN2eWe6u03tVcusI1X/iXxsF3vSeeY2uAtXzO1D5/wCVP75NEvM7U/3xY3tfTaO01t1i47H8/sY/cdR9c/bmqvn2ObBklqq6kNdNp+Ru37H2dq8x/+kamlX/5mU8vOOdTUNGnf+0OGh01tUsL+Lu9Yvc3Uzv/y9ab2T44GvZfaUhH8yzpOFokCpAEerqCqqwBggksyHAtgtaquyS97A4CzAXCySERVE2TWERHVCx+zjpNFoiCpQjPj7oHqEZEHC+6vyLcVr5a5AF4suL8OgN0lSERUiYmzjoio8XmYdZwsEgVp4j1Qvao63vmGY17TSlV/VsQIXF878nqlRFRdHu5tJyIPeZh1nCwSBUihyKYdV/ot9vFjXNOqBOsAzC+4Pw/Ahgqfk4hohEqzjoioEfiYdZwsEgVJQ78ez0oAS0RkMYD1AM4BcF6YA6KJZdMpDGzjnJ4aSPhZRw1Ik8NIrX9uRO2AWfuY5TYfZ5vZdMZsQ/9HMzNN7bAX7za14zommdrxU2xt6J4bTe07895mahdtetrUnl/2EVO7bfXtpvbpp6eZ2n8cZkrQ/Y6xtbWPmNqDO+wBRUfPczzhw3Ys0cWHmNpg6wxTa4vaBjyIRO34Inaasfsq25R9efe5pnbTKQlTe+CCS0ztfTd829S2p7Km1jpsm/eUxcOs42SRKEiqyAR0uIKIvAnAVwFMB/ALEXlEVV8nInMAXKOqZ6hqWkQ+COAOAFEA16rqE4EMiIj8FWDWERHVDQ+zjpNFogApENiJ0Kp6C4BbHPUNAM4ouH8bgNsCGQQREYLNOiKieuFj1nGySBQkzXp3IjQReYhZR0Q+8DDrOFkkCpKHXbOIyEPMOiLygYdZJ6qN00VfRLYCeL6Cp+gB0Ful4XD9/q1/oapOL+UBIvLL/HrH0quqyyoYEzUhZh3XH/L6mXVUE8w6rj/k9TPritBQk8VKiciD413Tjuvn+omaQdh/61y/3+snqpWw/9a5fr/X7wvbd5iIiIiIiIi8x8kiERERERERGb5NFldw/Vw/kQfC/lvn+v1eP1GthP23zvX7vX4veHXOIhERERERERXHt28WiYiIiIiIqAicLBIREREREZHh7WRRRD4qIioi410rJYj1fkFEnhKRx0TkFhHprsE6l4nI0yKyWkQuC3p9o9Y9X0R+KyKrROQJEbm4lusvGEdURP4sIj8PY/1EYWHW1U495B2zjnzlU9bl1+v1th2zrna8nCyKyHwApwF4IYTV3wngEFU9DMAzAD4e5MpEJArgKgCnAzgIwLkiclCQ6xwlDeAjqvoyAMcD+ECN17/XxQBWhbBeotAw62qeNfWQd8w68o5PWQfURd4x6zzi5WQRwP8AuBRAzbv7qOqvVDWdv3s/gHkBr/JYAKtVdY2qJgHcAODsgNf5ElXdqKoP5/+9B7kP9txarR8ARGQegNcDuKaW6yWqA8y6Ggo775h15DGfsg7wfNuOWVdb3k0WReQsAOtV9dGwxwLgPQBuD3gdcwG8WHB/HWo8WdtLRBYBOBLAAzVe9ZeR+59ItsbrJQoNsy68rANCy7svg1lHnvEw64A6yjtmXfOLhT2AIIjIrwHMcvzocgCfAPDasNavqj/LL3M5cl/jXx/kWACIo1bzPW8i0gngJgCXqOruGq73TABbVPUhETmpVuslqgVm3cjhOGqhXBsqjLxj1lEzY9bZITlqXmzbMetqrykni6p6qqsuIocCWAzgUREBcocKPCwix6rqpqDXXzCOCwGcCeAUDf5Cl+sAzC+4Pw/AhoDXOYKIxJELk+tV9eZarhvACQDOEpEzALQC6BKRH6jq+TUeB1HVMetGCD3rgFDzjllHTYtZZ4Sed8w6f0ht/qbrk4isBbBUVXtruM5lAL4E4NWqurUG64shd8L1KQDWA1gJ4DxVfSLodefXLwC+B2C7ql5Si3WOM5aTAHxUVc8McxxEtcasq416yTtmHfnKh6zLr5PbdmDW1Yp35yzWga8BmATgThF5RESuDnJl+ZOuPwjgDuROQL6xlhtPyO0BugDAyfnX+0h+bxARNTffsg5g3hH5qKZZB9RF3jHrPOL1N4tERERERETkxm8WiYiIiIiIyOBkscmIyG9ERPPHs4+1zMki8rCI7BaRNSKyvNjnEpEfiMjG/GOfEZH3FvzsnSLSV3AbyD/+6PzP/0NEUqOW2aear5+I/MCsIyIfMOsobJwsNhEReScm6HCb7151C4BvApgM4B0AviQihxf5XP8NYJGqdgE4C8B/7Q0NVb1eVTv33gD8I4A1AB4uePyPC5dR1TVlvVgi8hazjoh8wKyjesDJYpWJyDtG7WEZFpG7a7DeyQA+idxFSsczFUAXgO9rzkrkTo4+qJjnUtUnVHV47938bd8x1nUhgOtq1EaaiGqIWTcCs46oSTHrRmDWeYiTxSpT1Zf2sACYg9wemB+5lhWRr4vIzjFuj5W46s8C+AaAca8rpKqb8+N5t4hEReTlABYCuLfY58qPewDAUwA2ArjNscxCAK8CcN2oH71BRLaLyBMi8g9FvTIiqjvMupeWYdYRNTFm3UvLMOt8paq8BXBDbiL+cwDfqMG6lgJ4BLnDCxYht1coNs7ybwCwGUA6f3tfqc8FIArgRAD/CiDu+Pm/Abh7VO0g5II2CuAVyAXSuWH/rnjjjbfyb8w6Zh1vvPlwY9Yx63y98ZvF4HwGuevufKiaTzrqZOPbRSQC4OsALtbcdXcmevyBAH4M4F0AEgAOBnCpiLy+lOdS1Yyq3gtgHgDXnqR3IXfB1sLHPKmqG/KPvQ/AlQDeOuGLJqJ6xqxj1hH5gFnHrPPSuCfNUnlE5BwA5wI4RlVT4yx3NYDzx/jx86p68Oiiql4P4PqC5+hGbq/Rj0UEyO3dAYB1IvI2AK8F0KuqV+brnwGwXVXvyN9/WkR+AeB0AH8Y77lU9R7HOGMYdWy7iJyA3J6mn4zx2l56OQBkgmWIqE4x65h1RD5g1jHrvBb2V5vNdgNwJICtAI6o0foEwKyC2zHIfVjnIreHaRGAh/PLRgA8D6APwMn5x+4LYDWA9xXxXDMAnAOgE7nAeR2AfgBnjxrTCuROgB491rMBTMmv51gA6wFcGPbvjDfeeCv9xqxj1vHGmw83Zh2zzvcbv1msvr0fnHvze3EA4B5VPT2IlWnu0/rSCcsi0pr/52bNHXKwVkQWiMhXAfwCwEoANwL4CnInQO9Cbo/Wtyd6LhFR5A5NuBp/C6hLVPVnox7zdgBvcQz3HADXAmgBsA7A51T1e47liKj+MeuYdUQ+YNYx67wmub8jamYi8g7kTjyeBeB7qmq6XBERNTpmHRH5gFlHtcTJogdEJAHgLwDiAJaoaibkIRERVR2zjoh8wKyjWuJhqB5Q1aSI/BbATgYKETUrZh0R+YBZR7XEyaIH8q2TjwfwtrDHQkQUFGYdEfmAWUe1xOssNjkROQi5rlh3qeqzYY+HiCgIzLrGJyLLRORpEVktIpc5fv5OEXksf7tPRA4PY5xEYWLWUa011DmLU1pbdO6k9rCHQZ56ondnr6pOL+Ux86VNh5Ad8+e9SN6hqssqHhw1lZ6pU3Xh/Lkji4N7zHLp/gFTS/UP2dqAvSzYUMZmfypra8Ue3xRzXFkrEbHFlpjdRxlvj9taZ5upRTs67UpaOkwp9dKlxP6mP2VfyZ4he43qgWFbSzlqmdSwqWXTjsuvZYt7ByVqD/SJxBKmFk3YWjxhX++kNvuedrbYdbQ7fh+PPvLnmmediEQBPAPgNOS6Kq4EcK6qPlmwzCsArFLVHSJyOoD/UNXjShkn1Zeeqd26aO7sETWN2r9dVy3tyLC0I8OGM/bvMumoDaeKWy7jWK9zW9q1ee3ISXHUohFHTjpCtiVmP/sJx2e6JWofG3Otw/EVkmRt/knG1jSdtA92LeeoIWvfZ/f8xL4OidpBS8S+L4jZv6GHn3qO23VFaKjDUOdOasdNb3pN2MMgTx34rVueL/UxSWRxbmTOmD//anZtz0TPISLLAFyJ3DWQrlHVK0b9/EAA3wFwFIDLVfWLxT6W6tPC+XPxwC9vHlHLPHGvWW7b/X8ytY0PrLa1hzaZ2jN77GRng2Py1Jce+3+KhabG7f+c5zsmLPvMsDv85hw9y9ZOMNeuRtcxJ5iaLjnW1DZql6k9uGG3qf32mV5T+/OztrZp7Q5T27Xe7tAf6N1gaumhPlNzaZk01dQ6ps83te55i0xt1qJuU3v1QTNN7ZX7TDO1wxy/j5ndnWFk3bEAVqvqGgAQkRuQu2TBS5NFVb2vYPn7AcwrdZxUXxbNnY0//XTklRYyk2aY5dJdNiO2Ddi82txva2t32p1qz+8cNLU1W/pNbd0O+9hdfXZSlBq2O4UyjolmxLEDLd7i2NnTYXcKze62O9D2mW53li2aaj/TixyPndlh83l6u50WJAa2mVp0zxZTy/auM7XMjq12uV32+TKD9n3OphyTVMcEN9ZuX1tkUrepRafNNrXE8W8KZbuu0TTUZJGoETl26BUtv7f9KhTsbReRWwv3tgPYDuBDAN5YxmOJiKpigqzrEZEHC+6vUNUVBffnAnix4P46AON9a3gRgNtLHSMRUaUq2a5rRJwsEgVIxH0o3ksmPkKtmL3tWwBsEZHXl/pYIqJqKCLrelV16XhP4ag5z5MRkdcgN1k8sZQxEhFVqgrbdQ2Hk0WiAEUwQahUf297oUoeS0RUtCKybiLrABQedzsPgDmuV0QOA3ANgNNV1R7PRkQUoCpkXcNpqMliorMNc048LOxhkK++dUsZDxJEXWev/03V9rZX+bFERCWYMOsmshLAEhFZDGA9gHMAnDdiDSILANwM4AJVfaaSlVF90EgMmc6R/UVG3weAnUP265odjvME1++xDb7W7bY11/mJa7ba84t377Lndg/22VrSMZas43xvKfKcxeFBe75essjzx6OudThrrgY3drlpnfYUPFHH+ZiOsYijSVe2zZ5nGRm0vw+4GuY4GtdIq32+qOOcxUh3SX1sxlFx1jWchposEjUaARCvLFSK2tsewGOJiIpWadapalpEPgjgDuQacl2rqk+IyPvzP78awL8DmAbg65JbV3qCnW1ERFVVhe26hsPJIlGARCo+EXrCve0BPZaIqGhVyDqo6m0AbhtVu7rg3+8F8N7K1kJEVL5qZF2j4WSRKECCyo5tL2Zvu4jMAvAggC4AWRG5BMBBqrrb9diKXhARkUOlWUdE1Ah8zDpOFokCVI1QKWJv+yaMcb0x12OJiKrNxw0oIvKPj1nXUJPFSMcktC89KexhkLc+VfIjcocr+BUqROQfZh2VJRpDtmPqiFJ/xv4d7U7ahi+b+2wDlC2O5jPP99oLvj+/zTZU2bXTNsLpc9QG9th1pIbtWLKOBi0RR8OXWCLueD7bMEeztj+d64ryiahtNdOWsI1h2uO21hpzXPQ+asfS3THNrtjV9Ebs80VdDW76dzuezq5XXA1uHM+Hti5TyrRNtsuVwcesa6jJIlGjye2BCnsURETBYtYRkQ98zDpOFokCJB62WCYi/zDriMgHPmZd6JNFEYki15xjvaqeGfZ4iKpJxL9j28mNWUfNjFlHezHrqJn5mHWhTxYBXAxgFXKdHImaio8nQtOYmHXUtJh1VIBZR03Lx6wLdbIoIvMAvB7AZwD880TLa6Id6flHBD0soqoR+Hc9HrJKzTqiRsOsI6D0rMtCMCQjm77sHrLNbHYM2lrvgG0gs2GXbUizadegqe10LOdqZtO30z52eM9OU0sP9ZlaxtHgxtWgJd7a6XjsVFNziToa0mxstZv23e22ic6khF2u01FridkPdsLxOjrausca5giRqH1sJNFmF8za3zkcDXM01mIf2mLf02z7lKLGNxEfsy7sUzS/DOBSALaFUp6ILBeRB0Xkwa29vTUbGFE1iADxSGTMG3njyygh63q3ba/ZwIiqgVlHeV9GCVm3jdt11GCqkXUiskxEnhaR1SJymePn7xSRx/K3+0Tk8Kq/kBKEluAiciaALar60HjLqeoKVV2qqkun9/TUaHRE1SKQ6Ng3an7lZF3PtOL2KhPVD2ad78rJumncrqOGU1nW5c/pvQrA6QAOAnCuiBw0arG/Ani1qh4G4D8BrKjyiyhJmIehngDgLBE5A0ArgC4R+YGqnh/imIiqSgSIOq5vRF5h1lHTY9YRmHXkgSpk3bEAVqvqmtzzyQ0Azgbw5N4FVPW+guXvBzCvkhVWKrRvFlX146o6T1UXATgHwG8YKNR0IoJoIjLmjZofs468wKzzHrOOvDBx1vXsPcw6f1s+6hnmAnix4P66fG0sFwG4vbovojT10A21aMNZYO0g/6dDjUV4vg4ReYBZR6XKKjCQGnl640BKzXI7BlNF1bbsHi6qNthnm88M9duaq5nN0O6tppYetA1usmk7PleDm8ywbaKj2YypRWMzTS2+xz7fdkeDmy2d9j2Y2pkwtSltthHOZMfztToOt0y02kYzCVejGVMBJGrHUnyDm1Zba+mwT5dod6y5PBNkXa+qLh3v4Y6a/aMHICKvQW6yeGLxo6u+upgsqurdAO4OeRhEVZc7XIEbUJTDrKNmxayjQsw6alZVyLp1AOYX3J8HYINdjxwG4BoAp6vqtkpWWKm6mCwSNS0RSJQbUETU5Jh1ROSDyrNuJYAlIrIYwHrkDtk+b+QqZAGAmwFcoKrPVLKyauBkkShAIkA0zg0oImpuzDoi8kGlWaeqaRH5IIA7AEQBXKuqT4jI+/M/vxrAvwOYBuDrIgIA6QkObQ0UJ4tEQRJhh0Aian7MOiLyQRWyTlVvA3DbqNrVBf9+L4D3VrSSKmqoyWJ/MoP7X9wV9jCIiiYCXmOMiJoes47KkVVgKD2y5cno+wAwkLINX3Y5Gtz0DdumKClHbXjQVbNNYJIDdpsz1b/b1hwNblxNalwNblzLReK24UtywDaLSbbahjTJIfvadg3Y5j19juVc719f0tbaHd+sDWdsj5ZYvM3UIq7GNS7qaHojNmM07mhw41jvsOPvqhw+Zl1DTRaJGg73thORD5h1ROQDD7OOk0WiAAmASMSvPVBE5B9mHRH5wMes42SRKEgC7/ZAEZGHmHVE5AMPs46TRaIASUQQ8SxUiMg/zDoi8oGPWddQk8U9Q2n89umtYQ+DqCQRz06EJiI/MeuoHKP7ogxnbMMXV3OSpKM26GjGkk7Z5bKOx2aGB4uqZdO2WUwmaZcrtsGNRG2t2LFkMl225nhtrvdvMGnHl8raJjUpR+OajDqWczw2G3O9XkfjGrXjk4z9Xao4LlkRsVMZddRSKTu+cvmWdQ01WSRqNCKCaNyvPVBE5B9mHRH5wMes42SRKEgetlgmIg8x64jIBx5mHSeLREESQSTOjxkRNTlmHRH5wMOs8+vVEtWYiCCa4MeMiJobs46IfOBj1jXUqx0cSuOJZ3vDHgZR8QSQqOOEbCKiZsKsozI5eqUUJeNoqOKSdTVeKXelALKOxjWVUEdDH1dzHOdjHa/NVSv2vXI1rnHVKnj7AFeTGgd3Mxtbcy2n4jpMtEoNbjzMuoaaLBI1HBFE4vGwR0FEFCxmHRH5wMOs42SRKEAC8W4PFBH5h1lHRD7wMev8erVEtSZANB4b80ZE1BSqkHUiskxEnhaR1SJymePnB4rIH0VkWEQ+WvXXQEQ0EQ+365rzVRHVCalC1ywRWQbgSgBRANeo6hWjfi75n58BYADA36nqw/mfrQWwB0AGQFpVl1Y0GCIih0qzTkSiAK4CcBqAdQBWisitqvpkwWLbAXwIwBsrGCoRUdmqsV3XaBrq1aaTaWx5ng1uqIFIZYcrFLkBdTqAJfnbcQC+kf/vXq9RVX5wiCg4FWYdgGMBrFbVNbmnkxsAnA3gpaxT1S0AtojI6ytZEdWX0X82EUdzkkjE1hIx+/cWdSwXdfxdumqReKKoWjRma1lXLZ00NYnYi7lHXet1PJ+75ngdjlqx71Xc0UDGVYs6fkeuWsTRVEayaVNDNlvccupqemOXE0eDINf4ylJ51jWchposEjUcQaUtlifcgMrfv05VFcD9ItItIrNVdWMlKyYiKtrEWdcjIg8W3F+hqisK7s8F8GLB/XUYudOLiCh8lW/XNRy/Xi1RjYkIxLFXrkA1NqBcy8wFsBG5XtG/EhEF8M1Rz01EVBVFZF3vBIfBB9jrnoioOorIuqbDySJRkEQQGX8PVDU2oMZb5gRV3SAiMwDcKSJPqervxxsQEVHJJs66iawDML/g/jwAGyoaExFRtVWedQ3Hr1dLVGMigmhl1+MpZgNqzGVUde9/t4jILcgd1srJIhFVVRWybiWAJSKyGMB6AOcAOK8aYyMiqpYqZF3DCW2yKCLzAVwHYBaALHKH31053mMyqWHs2bC6FsMjqpoKT4QuZgPqVgAfzJ/PeByAXaq6UUQ6AERUdU/+368F8OlKBkOlKyfriBpRJVmnqmkR+SCAO5Dr/Hytqj4hIu/P//xqEZkF4EEAXQCyInIJgINUdXfFg6eqKDXvBEBiVKOV9rhtAtPp+Cans9VVsxvx8Rb7fM5aa6uj1mlqmeFBU3PJOBrcRBwNbmKtHXa9bXa9MUct0WLfg4TjtU1yvC+u9689bj/Drt9HIupoOOSoSXrY1JAaMqVIyvGeqm16AykuYyTieF9ibUU9tqjnZ4ObmkkD+IiqPiwikwA8JCJ3jurySNTYKmyxXMwGFIDbkLtsxmrkLp3x7vzDZwK4JXdlDcQA/FBVf1n2YKhczDpqflVoJ6+qtyGXZ4W1qwv+vQm5IyeofjHvqLnV5pJoBwL4DoCjAFyuql+saIUVCm2ymO/UuDH/7z0isgq5phwMFGoaIpXvgSpiA0oBfMDxuDUADq9o5VQxZh35oBpZR42PeUfNrtKsa8RrytbFOYsisgjAkQAecPxsOYDlABBpnVzbgRFVysOLt9LYis26BXPn1HZgRJVi1tEoY+VdYdbNnTffPpConlWedQ13TdnQdwOKSCeAmwBc4jrvQFVXqOpSVV0qCXtcN1FdE4HEEmPeyB+lZF3PtKm1HyBRJZh1VGC8vCvMuqnTesIZIFG5Js66HhF5sOC2fNQzjHW5s7oV6m5AEYkjFybXq+rNEy2fTacwuGNz8AMjqhoBPLseD1mlZh1R42HWUU4peReJAG2jmqq0Z+zlNSc7Grl0O5q2zJjUYmpbOu3OiqGBlKmlhjOmlk7aHXeatctF4nYd2ZSjwY1juVjCNl5JTLLrbe2wj21tt+9Bh2O5qY5aj6M22fGediTs57otZpvZtIhtSCPDfaYWSfbb5ZIVNLjJpu067FKIO5oLlWfCrGu6a8qG2Q1VAHwbwCpV/VJY4yAKlAjE8T8H8gezjrzArCMw78gDlWddw11TNszdgCcAuADAySLySP52RojjIao+ARCJjn0jHzDrqPkx6yiHeUfNrfKse+mSaCKSQO6SaLcGOeRKhdkN9V64v4olahoiAon5dfFWGolZRz5g1hHAvKPmV2nWNeI1Zdm6jChQ3IAiIh8w64jIB5VnXaNdU7axJouaRcZ1EixRvRLhIVhE1PyYdVSGKICOUc1SknF7hlR3m91cnTZszxvb2WUb3Mzutw1k+oZsU5Rs2jZU0aztOyKRWaYWG7SNXLJp2+BGHJ+RWFunqbV2tJpah+O1tbteb7d9vbO77fNNabMTnh5Hw5xOx++jM2FfR2Rwu60N7bK1YdvgRocHbM3RIEiijvW22islqKPpTdV4mHWNNVkkajRs+kBEPmDWEZEPPMw6ThaJAsV28kTkA2YdEfnAv6zjZJEoSPmLtxIRNTVmHRH5wMOs42SRKEjsEEhEPmDWEZEPPMy6xposijhPDiaqX/6dCE1EPmLWURmyaUT6t40oTe7oMYulHI1mZnbYb3cGUhlTG0zaWtLRzGatYx0ukZg9BDHlaBbjbo5jryoSi9vPTdsk+9pcDW5mT7XNbOZNsbVZk2yDm9mT7PN1tdixTHLUYkM7TS0ysMPUpM82vcns2mZq2UHb9AZZ+3tzZYy02NcWnTzNPjRrf+fl8S/rGmuySNRgRAQS92sPFBH5h1lHRD7wMes4WSQKksC7PVBE5CFmHRH5wMOs42SRKFD+HdtORD5i1hGRD/zLOk4WiYIkAkT9ChUi8hCzjoh84GHWNdRkUaIxtE6eHvYwyFPJsh4lgPh1PR4i8hGzjkon2QyioxrcIGo3TSe3TDa1tKOBzFDaNm0ZdjSzcTW4yTieb6OjmU28xY4vNZy2z5ex63A1uEk4nq+13U5G5jia2Syc1uGotZvaXEdznGmOdXQ7mtm0pW3zmdFNiQBAdm4ytcyOrbbmaHCjjgY3mrZbXa4ml9Jm3wPX80WnlbcVZ/mXdQ01WSRqOAJohB8zImpyzDoi8oGHWefXqyWqOckdskBE1NSYdUTkA/+yjpNFogApAHUcUkNE1EyYdUTkAx+zzq9XS1RrIoBnhysQkYeYdUTkAw+zrqFebTSWQOfMRWEPgzy1u6xHNc+J0CLyWQCfV9Wd+ftTAHxEVf811IERUR1ovKxjpoVP0yno9o0jatGI/Ttq67Kbq90ttpFLqtM2bUllbaOZrNpmNlFH85m2hG2osqV1yNT6hmyDm7SjiY6rwU1nq31t0zptQ5p5U2yDm/mO2txJraY2y/F8UxzNbDocrfwifbZJjauZTXrTC6aW2WaXS+7aY2qp/kFTy6bseyqOv414h30PEt12i02T9vdWnobMujsBvG1U1t2gqq8r5vGN9WqJGpBGYmPeGszpe4MGAFR1B4AzwhsOEdWTBsw6ZhoRlawBs67HkXUzin0wJ4tEQRIZ/9ZYoiLy0u5JEWkDYHdXEpF/GjPrmGlEVJrGzLqsiCzYe0dEFiJ3+mVR6nYKTNQs6nhPU6l+AOAuEfkOciHzHgDfC3dIRFQvGjDrmGlEVLIGzLrLAdwrIr/L338VgOXFPrjhXi1RQxFxXmC4Eanq50XkMQCnAhAA/6mqd4Q8LCKqBw2Ydcw0IipZY2bdL0XkKADHI5d1H1bV3mIf31CvNppIYOr8uWEPgzy1oaxHNd6J0BNYBSCtqr8WkXYRmaSq9mx1IvJMw2YdMy1MqWGkN/51RMm1YRpx/G11TLbbg5nWhKk5etk4RRyHECZidr3dbbaJzs7BlB1LtrgmOpNa7Cue2mlfx4xJ9ghpVzObeV22NqXVNrOZHLMNeKK7Npua7LBbP6kNa00tvXW9qQ1s3GZqQ9ts85nUgKPBTdI2uIkk7HsVbbXvS0t3p6l1DNnmPeVpvKwTEQGwDMA+qvppEVkgIseq6p+KeXxjvVqiBtSAJ0I7icj7APwEwDfzpbkAfhragIiorjRa1jHTiKgcjZZ1AL4O4OUAzs3f3wPgqmIfHOpkUUSWicjTIrJaRC4LcyxEgZD8HqixbkU9xfifE8n5Sv7nj+UPNSjqsSX6AIATkL+KiKo+ixK6afmMWUdNL+SsKxMzrcqYddT0GjPrjlPVDwAYAl7qhmq/vh5DaJNFEYkiN6s9HcBBAM4VkYPCGg9RMASIRMe+TfTo4j4npwNYkr8tB/CNEh5bimFVfek4DhGJoYRuWr5i1pEfwsu6CjDTqohZR35oyKxL5der+TFMB2CPQx7DhJNF1wddRE4qfnxjOhbAalVdkw/rGwCcXYXnJaorFR6uUMzn5GwA12nO/QC6RWR2kY8txe9E5BMA2kTkNAD/C+D/Kni+uhNQ3jHryAshZl25mj7TxsKsIypfA2bdVwDcAmCGiHwGwL0APlvsg4t5VTeKyPcBfB5Aa/6/S5E79rUScwG8WHB/HYDjRi8kIsuRb+/aOnUm5u8zpcLVEpXn8TIeoyLQ8a+70yMiDxbcX6GqKwruF/M5cS0zt8jHluIyABcB+AuAvwdwG4BrKni+ehRE3pWcdQvmzqlgdUS1F3LWbSx9xAD8yLSx1EXWzZ/aheGNoxqjOL6dicdtU5moY8O8a7LNzoyjuUtWi7ucZoujwU1Xqx1Lv6MZSzLtaCDjaHDT6WhwM9lRm9FpxzzT0Qin2/F6p7TY1xHZvcXUxFFLb3rB1FKbXjS1PS/Y5jgDmxwNbnb02+frdzQISmbs+KL2dSQ67e8jtduuI1OlBjeNmHWqer2IPATgFOS6ob5RVVft/bmITMkfmupUzGTxOACfA3AfgEkArkfuGP9Kud5pc/hH/g1eAQCTFx7Iw0Oosag6O6IV6FXVpeP8vJjPyVjLFPUZK5aqZgF8K38zROQmVX1Luc9fJ4LIu5Kz7ujDD2XWUWMJN+vK4kmmjaUusu7IRbOZddRYGjDrAEBVnwLw1Bg/vgvAmOdFFjNZTAEYBNCG3N6nv+YDtlLrAMwvuD8P5V6dgKhOKYBMZf8rLOZzMtYyiSIeW037BPjctRJE3jHrqOmFnHVBaYZMGwuzjqgMTZp1435VWkyDm5XIBcoxAE5E7kTMn1RhYCsBLBGRxSKSAHAOgFur8LxEdUVVx7wVoZjPya0A3pXvnnU8gF2qurHIx1ZTM+whDiLvmHXkhRCzLijNkGljYdYRlcm3rCvmm8WLVHXvsbebAJwtIhdUPCrVtIh8EMAdAKIArlXVJyp9XqJ6UukeqLE+JyLy/vzPr0buPJszAKwGMADg3eM9tvzReKHqecffA/kgzKyjsjDriMrgY9ZNOFksCJPC2versXJVvQ25N6QoXW1xnHrwzGqsmqhkt5fzIAXGP7S9iKdwfE7yYbL334rc9cKKemyAxj2MoREElXc1/j0Q1V7IWReQhs+0sdRL1mWSadMYRSL2oDeJ2SYmsZht7hKJOhq+dM1yjNM1GttAJu4YS3vcNpAZSNlmLOmMPao34mhw43o+V4Obqe32PZjS4mhm42hwE+2zjWuifVtNLeVqZrO5uGY2zgY3W/psrXfQ1JL9tvlMJul4/6L2/Yt32Pelbcqwfb6UbUJUFg+zLrTrLBL5ILcHSse8NRIRMRerFpEDCu5+rIbDIaI60ohZJyJniox7FW1mGhGN0KBZ920ROWJU7T8K7p4y3uM5WSQKWCY79q3B3CMib997R0Q+gtx1ewAAqvqrUEZFRHWhAbPuHADPisjnReRlo3/ITCMilwbMutcB+K6IvKugdtbef6jq9vEezMkiUYBUKz4Rup6cBOACEflfEfk9gP2Ru7gsEXmuEbNOVc8HcCSA5wB8R0T+KCLLRWRSyEMjojrViFkHYAuAVwF4m4hcJSIxlHCYPSeLRAHL6Ni3RpLvxPVL5C7avAjAdapqT0ggIi81Ytap6m4ANwG4AcBsAG8C8LCI/FOoAyOiutWAWSequltV3wCgF8DvAEwu9sHFdEOtG52JGF65cGrYwyAqmgLI1u+eppKIyJ0ANgI4BLlr/lwrIr9X1Y+GOzIiClsjZp2InIVcl8F9AXwfwLGqukVE2gGsAvDVMMfng2wqhb71IxutROJ20zTaahvXSFuHqcUSbaamUdsAZXJHjx2L48/X0Y/G2ZCmL2mbp7jOX4tKcQ1uOhK21pmw3+9MdjSziQ3vNrXIwA47vl572b7MNnt1hv71thGOq9a3cY+p7dlo9ycP9g6Y2tCQff+Sjl9IwvELSTjev1R/ytSylXalyWvErAPws73/UNVPisifAPxzsQ9uqMkiUSOq4z1Npfqaqu4NnJ0i8nIAHw9zQERUPxow694C4Euqek9hUVUHROQ9IY2JiOpco2SdiNyrqicC+IiIFE4OBYCKyF8BfEFVvz7e8/AwVKIAKcbumFWvXbNGE5F78//8gYjs3nsDsAPApSLyVxH5xxCHSEQha6SsK8i0twD4RWGu5W9/BXDAOE9BRJ5qpKzLTxShqpNUtavgNklVuwAsBXDxRM/DbxaJgqRjXc+pcRSGjevnIjINwH0Axt0zRURNrIGyriDTOl0/Z6YR0ZgaKOsmoqrbROSkiZbjZJEoQIq6bqVcFcWGDRE1r2bKOmYaEY2lmbIOeKl54bgaarLYGhPsP6017GEQlSSLJtkFNY5iwoaImlszZR0zrTayqSz6N/ePqMU7bDOWRFe7qUU6Ntlae5etOZrexOJ2W7IzYRvmuLia1LTG7FldrkMSHQ9FImqLbY7n63I0uElkhk3N1cwGe3rt+HZsMbXhLXa5gS07Ta1/S3HNbPo22NoORzOgvrR9r1wNbhxvFTpTduY2NR3sbK6Zsq4YDTVZJGo0uT1QfoUKEfmHWUdEPvAx6zhZJAqQKpBqlLZZRERlYtYRkQ98zDpOFokCVX/dsYiIqo9ZR0Q+8C/rOFkkCpCPe6CIyD/MOiLygY9Z11CTxWh6GJ29z4Q9DKKiKYCsZ3ugiMg/zDoqRzadxUDvwIhaS1fCLNfSvdtR225qka5tphaf1G1qGrcNc1o7W0wtE4uamusS5bGIbaiSUduNJeJqcOMotsXtOlod3V0iffZ9iQzZ5jPpXfZ9yTpqg9t2mdqQozbQO2iX2zFkaq5mNluHM6bW52hIk3Lkiau50KBj4ub65i/qGF85fMy6hposEjUaBZDy7ERoIvIPs46IfOBj1nGySBQgVUWqmS7IQ0TkwKwjIh/4mHWcLBIFzLND24nIU8w6IvKBb1nHySJRgHInQvu1B4qI/MOsIyIf+Jh1DTVZzA7sQfLR34U9DKKi+XgiNBH5h1lH5chmFMO7kyNqo+8DQHJ3v6ml+23DkviAbfiS7bc1aZ1kaynbtKW1pcvUMuqaKNiGNOr4PIijQUvC0bimxVFzjc9V06SjNmjfv1Rfce9psj9lasO7h01tsN/+3nal7Hu129HMxtXgxtmkxvH+uZZzNQ3qG7bNdsrhY9Y11GSRqNH4eCI0EfmHWUdEPvAx6zhZJApQ7kRov0KFiPzDrCMiH/iYdfZ7cyKqqqzqmDciombBrCMiHwSVdSIyVUTuFJFn8/+dMsZy14rIFhF5vKIVFimUyaKIfEFEnhKRx0TkFhHpDmMcREHbeyL0WDdqbsw68gWzjph35IOAs+4yAHep6hIAd+Xvu3wXwLJKV1assA5DvRPAx1U1LSKfA/BxAB+b6EHp/gFs/eOfAx8cUbUo/GuxTCOUlXVEjYZZRygn71SRSWVGlEbfB4BsyjYnSQ/ZJiuats1Y4KhJxtHsJG0btEQSdixxR/MU1xdKGXU0qbElOHrZIOpYh2Ts+JC1r0OHXU1vbOOabLK49zQ9aJfLJO2kaNARAK5a0nG+36BjkuXKk6i4mt7Y771czzeYqc73YwFn3dkATsr/+3sA7objM6SqvxeRRYGNYpRQJouq+quCu/cDeGsY4yAKmkKRynKvuq+YdeQLZh0x78gHRWRdj4g8WHB/haquKPLpZ6rqRgBQ1Y0iMqPccVZTPTS4eQ+AH4/1QxFZDmA5AMzt6qjVmIiqQhVIOlpCk5eKzroFc+fUakxEVcGso1HGzLvCrJsRi9dyTEQVKyLrelV16Vg/FJFfA5jl+NHllY4tKIFNFsd7M1T1Z/llLgeQBnD9WM+Tn42vAIDDZvfwIBdqKKpAxrMWy74JIuuOPvxQ/tFQQ2HW+aEaeVeYdfu3tvOPhhpKpVmnqqeO9TMR2Swis/PfKs4GsKXsFVVRYJPF8d4MABCRCwGcCeAUdV25lKgJKJR725scs46IWecL5h35LuCsuxXAhQCuyP/3Z0GtqBShHIYqIsuQO2Hz1ao6UOzjUv3DWP/AmuAGRlRtAe5tF5GpyB3mswjAWgBvV9UdjuWWAbgSQBTANap6Rb7+HwDeB2BrftFPqOptgQzWU+VmHVHD4TeL3isr7xTQUd1CRt/P1YrcOM/ahjTqqEkF81hxdamBfT7XYq4WK45eNkWPT9S+L8W+smzGvi8urvdeKzg/OVPlfQiuZjOBNtsKNuuuAHCjiFwE4AUAbwMAEZmD3PbbGfn7P0KuEU6PiKwD8ElV/XZQgwrrnMWvAWgBcGf+Q3e/qr4/pLEQBSYb7Hk8e1ssXyEil+Xvj+iaJSJRAFcBOA3AOgArReRWVX0yv8j/qOoXgxogMevID0FmXQk7xq5F7lutLap6SCCDofEw76jpBZl1qroNwCmO+gYAZxTcPzeQAYwhrG6o+4WxXqJaC/hwhWJaLB8LYLWqrgEAEbkh/7gnQYFj1pEvAs66CXeM5X0XuQnLdUENhMbGvCMf+HjIfXUuOkJETqpAOqtj3pBvsVxwW17C049osQzA1WJ5LoAXC+6vy9f2+mD+AsrXisiUEl8eERGAorKuEmcjt0MM+f++0T0G/T2A7ZWujIhoLAFnXV2qh0tnEDWtOmixPN7JFd8A8J/5+/8J4P8h1+6ciKgkRWRd0117jIj84+NlghpqspgcTGP9E71hD4OoJJWczF2FFsvrAMwvuD8PwIb8c28ueK5vAfh52QMlIu9NkHVNd+0xqoKIIJoYeZBbNG4Peosk7OaqRB0Hx8USdjlHDdGoo2bXoRG7XCZlJwquqYOrJ486dt+6mrFkHft5IxHX+Fzvi+O1OV5HNGGvcel6bDThqMVtLeHo1FNJLen4li7q6BpUyTrKVe0mPfWuoSaLRI0mq6G3WF4JYImILAawHsA5AM4DgL0TzfxybwLweFADJaLmVmnWNeK1x4jIPwFv19UlThaJAqQAkuni2lOXYcIWy6qaFpEPArgDuUtnXKuqT+Qf/3kROSI/zLUA/j6ogRJRcws46+ry2mNE5J+As64ucbJIFCTVwK7HU0KL5dsAmOsnquoFgQyMiPwTYNahTq89RkQeCjbr6hIni0QByiow7NnhCkTknyCzrl6vPUZE/vFxu66hJovDWcXqvmTYwyAqmgLe7YEiIv8w66gcEhHEO0Y2oIl32oY08fY2W+uwtUhru11HW4epaay1qFrS0X3G1XhlOG1rWUcTlIijQYtLVOxkJBprMTXXmCOt9vVGOrpMLdZhHxt31mwjHFetzdEIpzNlD9cczBR31b5iG9x0OBoddcaKq5XDx6xrqMkiUaNRD0+EJiL/MOuIyAc+Zh0ni0QB8vF6PETkH2YdEfnAx6zjZJEoYOrZ4QpE5CdmHRH5wLes42SRKECqiozryrxERE2EWUdEPvAx6xpqspjKKjYPp8MeBlFJfNsDRUR+YtZRqSJRQduUkU1VWrtt45qWKZ2mFu/uts83aYpdSeskU8q22CYwGUezmMGko0FLyk4Uhh2NcFwfh4jYYkZdTW9sM5Zowm6ytzheRzZlX2+ks9s+3yRba522y9a22VrblCFTS/WnTG2qo8GN461CIm3fA1eDm0TELtfmaHAzNWFrbd22QRA22VIxfMu6hposEjUaVSDj6JJGRNRMmHVE5AMfs46TRaIgKbw7XIGIPMSsIyIfeJh1nCwSBUq9O1yBiHzErCMiH/iXdZwsEgVIPdwDRUT+YdYRkQ98zLqGmixmAQy6zowlqmO+7YEiIj8x66hUkXgEHTPaR9TaZ9gmNW3TbS06eZqtTZluapm2yaaWbbW1Pkczm76knRQMOq6xN+RoepPK2lpEbIOW9njU1Iqdi8Rau0xNUrb5TLRrqq1NmWFqrXt2mlrb9D5TS/XbdWQc70HWsc0e3T5oan2O99TV4Cbq6AXUGbPNbNq7bDObjhm2GRCesqVi+JZ1DTVZJGo0qoqMZxdvJSL/MOuIyAc+Zh0ni0QBc+1ZIyJqNsw6IvKBb1lnv7sloqpRBbJZHfNGRNQMmHVE5IMgs05EporInSLybP6/5vhrEZkvIr8VkVUi8oSIXFzRSovAySJRkBTIprNj3oiImgKzjoh8EGzWXQbgLlVdAuCu/P3R0gA+oqovA3A8gA+IyEGVrng8DXUYqsB9citRTZS1w0iRVe5VJ6Jmx6yj0kXiMXTMHtl8pX2WbcYSnz7T1KLT55patsM+Nttum+PsSduNyd2OBje7hmxtx1DK1AZSdrmMq0FLxK63JWq/t5naFje1LGwjHEe/HHR32MY/yNgxR6cNmFpssN/UOoeSdiyptKlpkYdmRhP29bb02/G5nk8ck4B4q53KtPW0mVrnTEeDm7IEmnVnAzgp/+/vAbgbwMdGrF11I4CN+X/vEZFVAOYCeDKoQYX6zaKIfFREVER6whwHUVCUe9sJzDpqfsw62ot5R82siKzrEZEHC27LS3j6mfnJ4N5JoW1ZW0BEFgE4EsADZb6cooT2zaKIzAdwGoAXwhoDUS34dj0eGolZR75g1hHzjnwwQdb1qurSsX4oIr8GMMvxo8tLGYOIdAK4CcAlqrq7lMeWKszDUP8HwKUAfhbiGIgCpareXY+HDGYdNT1mHeUx76ipVZp1qnrqWD8Tkc0iMltVN4rIbABbxlgujtxE8XpVvbnswRQplMmiiJwFYL2qPiquA65HLrscwHIA6HQcr01U7zJpe2w/+aHcrFswd04NRkdUXcw6vxWbd4VZN2dStc4jI6qdALPuVgAXArgi/1+z00VyH65vA1ilql8KaiCFApssTvA16ycAvLaY51HVFQBWAMCcSKtOb2monjzUTIbKeIwqNGtPfKfmEUTWHX34ofyKhhoLs84L1ci7wqw7YsEsnbRg5GlZ7fPszrLYzPl2LN226U2mc7qp9SNharuG7d9q74BtsuKq7RgsrsFNKmsPVYw6JtHtcftFiOv5Zmbt63CJit1O7nI0vZGMbVwTG7YbOpq0tc6kq8GNfb2RhH1tiQ7bvCfpaHCTcTQccjW4SXTY96VtSquptc+2zY/KEmzWXQHgRhG5CLlDud8GACIyB8A1qnoGgBMAXADgLyLySP5xn1DV24IaVGAzr7G+ZhWRQwEsBrB3z9M8AA+LyLGquimo8RCFQVWRTdlApubBrCNi1vmCeUe+CzLrVHUbgFMc9Q0Azsj/+17kLhBRMzX/mk5V/4KC7j4ishbAUlXtrfVYiAKnWWTT3IDyEbOOvMKs8xrzjrzhYdbxmE6igPHQLCLyAbOOiHzgW9aFPllU1UVhj4EoKKrq3R4ocmPWUTNj1lEh5h01Kx+zLvTJYilaIoJF7fbEWKKaKKfBDRRZz/ZAEZGPmHVUukg8jva5s0fUojMX2OV65plaZpJtZjMYs91Vdw7aZiyuxjXrd9v/yW/pt5OC7Y5a35Bdx3DaNnyJReypZp2tdlN8aqdt2jLsaCDjutxfxHE6W7TNPl+noxlQ1DEJijlqrY7PukQj9vla7XrjHbtMLdVv3/tskQ1u4h22mU1L9yRTa59VpQY3HmZdQ00WiRqNj3ugiMg/zDoi8oGPWcfJIlGQ2CGQiHzArCMiH3iYdfY7YyKqnvz1eMa6VUJEporInSLybP6/U8ZY7loR2SIij5fzeCKiCQWYdUREdcPDrONkkShACkU2nRrzVqHLANylqksA3JW/7/JdAMsqeDwR0bgCzjoiorrgY9Y11GGoiUQECxd0hT0M8tX2Mh6T3wMVkLMBnJT/9/cA3A3gY3YI+nsRWVTu44mIJhRg1onIVAA/BrAIwFoAb1fVHaOWmQ/gOgCzAGQBrFDVKwMZEFWNJBKIzVk8ohabudAsl+nsMbVkqz0YZvuAbTSzpd9uwL+wyzZU2bjH1tZvH7TPt2fY1PYM2XUkHQ1uEjH7HU17ImpqU/taTG1wapupZbNqai4ittFMtN02A2rrmmmXU7sO5+QhYl9HJG6XTHS1m1py94Cpada+fxKx75+zwc0U2+AmMW2aqZUl2O26usRvFomCpIpMOjnmDUCPiDxYcFtewrPPVNWNudXoRhRcELlGjyciypk46ypRzFEQaQAfUdWXATgewAdE5KBKV0xENEKwWVeXGuqbRaJGoxOfCN2rqkvH+qGI/Bq5PeWjXV7p2IiIqqWIrKvEhEdB5Hd47d35tUdEVgGYC+DJoAZFRP4JOOvqEieLRIGq7HAFVT11rJ+JyGYRma2qG0VkNoAtJT59pY8nIsqbMOt6ROTBgvsrVHVFkU8+4igIERn3KIj8YfdHAnigyOcnIiqSf4ehcrJIFKRgr8dzK4ALAVyR/+/Pavx4IqKcibOuJkdRiEgngJsAXKKqu0t5LBHRhDy8zqKo48TVeiUiWwE8X8FT9ADordJwuH7/1r9QVaeX8gAR+WV+vWPpVVVXp9JinnsagBsBLADwAoC3qep2EZkD4BpVPSO/3I+QO4SrB8BmAJ9U1W+P9fhyxkLVxazj+kNef71l3dMATio4CuJuVT3AsVwcwM8B3KGqXypnXVRbzDquP+T111XW1auGmixWSkQeHG/PJtfP9RM1g7D/1rl+v9dfbSLyBQDbVPUKEbkMwFRVvXTUMoLc+YzbVfWSEIZJIQj7b53r93v9vmA3VCIiIqpnVwA4TUSeBXBa/j5EZI6I3JZf5gQAFwA4WUQeyd/OCGe4RETNg+csEhERUd1S1W0ATnHUNwA4I//vewFIjYdGRNT0fPtmsdjOa1w/10/UyML+W+f6/V4/Ua2E/bfO9fu9fi94dc4iERERERERFce3bxaJiIiIiIioCJwsEhERERERkeHtZFFEPioiKiLjXSsliPV+QUSeEpHHROQWEemuwTqXicjTIrI633a8ZkRkvoj8VkRWicgTInJxLddfMI6oiPxZRH4exvqJwsKsq516yDtmHfnKp6zLr9frbTtmXe14OVkUkfnItd9+IYTV3wngEFU9DMAzAD4e5MpEJArgKgCnAzgIwLkiclCQ6xwlDeAjqvoyAMcD+ECN17/XxQBWhbBeotAw62qeNfWQd8w68o5PWQfURd4x6zzi5WQRwP8AuBRAzbv7qOqvVDWdv3s/gHkBr/JYAKtVdY2qJgHcAODsgNf5ElXdqKoP5/+9B7kP9txarR8ARGQegNcDuKaW6yWqA8y6Ggo775h15DGfsg7wfNuOWVdb3k0WReQsAOtV9dGwxwLgPQBuD3gdcwG8WHB/HWo8WdtLRBYBOBLAAzVe9ZeR+59ItsbrJQoNsy68rANCy7svg1lHnvEw64A6yjtmXfOLhT2AIIjIrwHMcvzocgCfAPDasNavqj/LL3M5cl/jXx/kWOC+SHHN97yJSCeAmwBcoqq7a7jeMwFsUdWHROSkWq2XqBaYdSOH46iFcm2oMPKOWUfNjFlnh+SoebFtx6yrvaacLKrqqa66iBwKYDGAR0UEyB0q8LCIHKuqm4Jef8E4LgRwJoBTNPgLXa4DML/g/jwAGwJe5wgiEkcuTK5X1ZtruW4AJwA4S0TOANAKoEtEfqCq59d4HERVx6wbIfSsA0LNO2YdNS1mnRF63jHr/CG1+ZuuTyKyFsBSVe2t4TqXAfgSgFer6tYarC+G3AnXpwBYD2AlgPNU9Ymg151fvwD4HoDtqnpJLdY5zlhOAvBRVT0zzHEQ1RqzrjbqJe+YdeQrH7Iuv05u24FZVyvenbNYB74GYBKAO0XkERG5OsiV5U+6/iCAO5A7AfnGWm48IbcH6AIAJ+df7yP5vUFE1Nx8yzqAeUfko5pmHVAXeces84jX3ywSERERERGRG79ZJCIiIiIiIoOTxSYjIr8REc0fzz7WMieLyMMisltE1ojI8mKfS0R+ICIb8499RkTeW/Czd4pIX8FtIP/4o/M//w8RSY1aZp9qvn4i8gOzjoh8wKyjsHGy2ERE5J2YoMNtvnvVLQC+CWAygHcA+JKIHF7kc/03gEWq2gXgLAD/tTc0VPV6Ve3cewPwjwDWAHi44PE/LlxGVdeU9WKJyFvMOiLyAbOO6gEni1UmIu8YtYdlWETursF6JwP4JHIXKR3PVABdAL6vOSuROzn6oGKeS1WfUNXhvXfzt33HWNeFAK6rURtpIqohZt0IzDqiJsWsG4FZ5yFOFqtMVV/awwJgDnJ7YH7kWlZEvi4iO8e4PVbiqj8L4BsAxr2ukKpuzo/n3SISFZGXA1gI4N5inys/7gEATwHYCOA2xzILAbwKwHWjfvQGEdkuIk+IyD8U9cqIqO4w615ahllH1MSYdS8tw6zzlaryFsANuYn4zwF8owbrWgrgEeQOL1iE3F6h2DjLvwHAZgDp/O19pT4XgCiAEwH8K4C44+f/BuDuUbWDkAvaKIBXIBdI54b9u+KNN97KvzHrmHW88ebDjVnHrPP1xm8Wg/MZ5K6786FqPumok41vF5EIgK8DuFhz192Z6PEHAvgxgHcBSAA4GMClIvL6Up5LVTOqei+AeQBce5LehdwFWwsf86Sqbsg/9j4AVwJ464QvmojqGbOOWUfkA2Yds85L4540S+URkXMAnAvgGFVNjbPc1QDOH+PHz6vqwaOLqno9gOsLnqMbub1GPxYRILd3BwDWicjbALwWQK+qXpmvfwbAdlW9I3//aRH5BYDTAfxhvOdS1Xsc44xh1LHtInICcnuafjLGa3vp5QCQCZYhojrFrGPWEfmAWces81rYX2022w3AkQC2AjiiRusTALMKbscg92Gdi9wepkUAHs4vGwHwPIA+ACfnH7svgNUA3lfEc80AcA6ATuQC53UA+gGcPWpMK5A7AXr0WM8GMCW/nmMBrAdwYdi/M9544630G7OOWccbbz7cmHXMOt9v/Gax+vZ+cO7N78UBgHtU9fQgVqa5T+tLJyyLSGv+n5s1d8jBWhFZICJfBfALACsB3AjgK8idAL0LuT1a357ouUREkTs04Wr8LaAuUdWfjXrM2wG8xTHccwBcC6AFwDoAn1PV7zmWI6L6x6xj1hH5gFnHrPOa5P6OqJmJyDuQO/F4FoDvqarpckVE1OiYdUTkA2Yd1RInix4QkQSAvwCIA1iiqpmQh0REVHXMOiLyAbOOaomHoXpAVZMi8lsAOxkoRNSsmHVE5ANmHdUSJ4seyLdOPh7A28IeCxFRUJh1ROQDZh3VEq+z2ORE5CDkumLdparPhj0eIqIgMOuIyAfMOqq1hjpnMdHZrW3TZoU9DPLU7hee7lXV6aU8Zr606RCyY/68F8k7VHVZxYOjptLT1aELpk8dUUv1D5jlUn1JWxu2110eyticTzuy3/WX6tqjGPtbR8CXJCK21tISNbV4R8LWOtvsetsnmZom2k3N9dr6k/aorD1D9tJoQ8N2uVTSLpdNDttaxnGpNdf/Tx3vVSRqD+qJxFtMLZaIm1qixT62q83WOhO21hq1v81IatDUHnp8FbOOaqKne7IunDNzZDHruHZ81n5WNev4vKnjb7DY7VzHZ9V5yUBH1knEZh0cNYk6lhNbU+fzOdLY9Vi7lPOT6XpbnDXHY12Kvbii6212vKUQx4Li+Dtw/s4dy4ljuYcef4pZV4SGOgy1bdosHP+xb4c9DPLUrz5w4vOlPiaJLM6NzBnz51/Nru2paFDUlBZMn4p7P3/xiNrmPz5qlttw/1pTW/fMNlNb3WcnNpsdk8qkY+PLNQnsSdgNlMUddmKzcN8ppjbnmHmmNvuEw0yt7ejX2PHNO8LUnttlNwr++OIOU/vNU1tM7eln7Xu19cWtprZnw2pTG9yx2dSyaTt5j8Ts5Lh1sv3Yd85cbGo9C2eb2qJ9ppraqQfPNLUTF9j3fv+prabWuvFxU4vuewyzjmpi4ZyZeOD6r4yoZft2muWy/btNTZNDtjbsqDk+ly7OCV/M5pq0FLdzK9LRZWuTuu062uxy2mqfL+uoaaLD1JJiN+2Tjp1qrlrK8f+AjGtS7hBxTO6ijklgzFFsddRaYo6dW0m70zQyZP82JNnvWG6PHd+SlzPritBQk0WiRiNwb2y/ZOydU0REDYNZR0Q+8DHrOFkkCpK496wRETUVZh0R+cDDrONkkShAEUywB4qIqAkw64jIBz5mXUNNFpPDGWxYuzPsYRCVQBB1njRPRNRMKs86EVkG4EoAUQDXqOoVo35+NoD/RO5ArzSAS1T13opWSqHS4QEkn/nziFqqz55vltxta6l+e35iZsien5hJORrmOEQcDWQijkZR8Q577m+s3dYSXfZ8wljXZLuOrmm25ji3MTbZLqctnfaxjlpLwp5nqTE7ZsRczXaKmyq4Gsg4G81k7O9IBuy5iOJovhUZtn8HOrDL1DK77Pno6T077fjK4t92XUNNFokajQCIexYqROSfSrNORKIArgJwGoB1AFaKyK2q+mTBYncBuFVVVUQOA3AjgAPLHzURUWl83K7jZJEoQCL+Ha5ARP6pQtYdC2C1qq7JPZ/cAOBsAC9NFlW1r2D5DhTf1Z+IqCp83K7jZJEoQAL/ToQmIv8UkXU9IvJgwf0Vqrqi4P5cAC8W3F8H4DizHpE3AfhvADMAvL7c8RIRlcPH7TpOFokCNGGLZSKiJlBE1vWq6tIJnmI0882hqt4C4BYReRVy5y+eWso4iYgq4eN2XUNNFjPJJLY9/0LYwyAqmgi8OxGaiPxThaxbB2B+wf15ADaMtbCq/l5E9hWRHlXtrWTFFJ704DC2P7lmRG14p714enK3bYCS7E+ZWjZpG6pkHDUXidoGN9GErcVa7aZzS5dtIBN3NLhp6bbNZ1q7N9vlptpGOBlH05uIo+lNpL3L1KIdk0xN43bMiMXtckU2uIGjwY1kbHMhSQ/bhw7b32+2f7eppRxNarK7Hc1sdtumN0PbbK0cPm7XNdRkkajR5PZAhT0KIqJgVSHrVgJYIiKLAawHcA6A80asQ2Q/AM/lG9wcBSABwG4pEhEFxMftOk4WiQIkkIoPV5ionXzBcscAuB/AO1T1JxWtlIioBJVmnaqmReSDAO5ALuuuVdUnROT9+Z9fDeAtAN4lIikAg8hlHZvcEFHNVGO7rtGEPlnMt8t+EMB6VT0z7PEQVVOlhysU2U5+73KfQ25Di+oQs46aWTUOzVLV2wDcNqp2dcG/P4dczlEdY9ZRM+NhqOG4GMAqAPYga6IGV4UToSdsJ5/3TwBuAnBMJSujQDHrqGn52PSBxsSso6blY9aFOlkUkXnItb7+DIB/nmj5TGoYfZvXBj0soqqpRTt5EZkL4E0ATgYni3Wp1KwjajQ+tpMnq+TtuqEktq1aN6I2vNs2QBneZWspR4Ob1JBtqOJqeuNSbIObeEfC1BIdtjFMS1eLqbVNaTW11mm2+UxLt621TrNz75YpW00t6mqE026fT9psAx5J2PFJJGpqLpq173M2bX9HOjxkawO2mU223zY6Su22yw3vsMsNbXMs52icVA4fsy7sbxa/DOBSAPavOE9ElgNYDgDSwp1U1FhEgHhk3DOhq9FO/ssAPqaqGfHs0IgG8mWUkHXze7prMiiiaiki68gPX0YJWTe73U5OiOqZj1kX2qsVkTMBbFHVh8ZbTlVXqOpSVV0qrja/RPVMBNFEZMxbEYppJ78UwA0ishbAWwF8XUTeWIXRUxWUk3U9Xba9OlFdqzzrqMGVk3VTWuy3dER1zcOsC/ObxRMAnCUiZwBoBdAlIj9Q1fNDHBNRVQnch7aUYMJ28qq6+KX1iXwXwM9V9aeVrJSqillHTa8KWUeNj1lHTc/HrAvt1arqx1V1nqouQm4D+DcMFGo6kcr2QKlqGsDedvKrANy4t5383pbyVN+YdeSFCrOOGh+zjrxQhawTkWUi8rSIrBaRy8ZZ7hgRyYjIW6s2/jKEfc5iSTSbwfCe7WEPg6gkUuGx7RO1kx9V/7uKVkZEVKZKs478kx7OYMeanSNqzgY3e5Km1pfOmtpgxtaStuTkalri6nrZGbMNWtoStgmMq8HNkKPBTbvj9bZO6TO15J4Bu46ddrmWbtvIJdFlm9lE29pNTVoc55A6Gty4PuuatW+0Dg/aWtK+f+kBW3M1rhl2vF5X45rBbXa5wR12HeWqJOsa8ZJodTFZVNW7Adwd8jCIqk7E3U2N/MSso2bFrKNCzDpqVlXIuoa7JFpdTBaJmpWIIOrY40hE1EyYdUTkgyKyrukuicbJIlGQBBDPLt5KRB5i1hGRDybOuqa7JBoni0RB4t52IvIBs46IfFB51pVySTQA6AFwhoikw+p031iTRVVoNhP2KIiKJgKI66x5IqImwqyjcmRTGfRtGNmMZHfKbuftStnmKcU2uHH1t8no6C9ygKjjG5y4o9YZs+erdTrGPNVRyxRbSxZZG7LNcTJDthmQq4FMrL3f1tpsUx5XMxfXpSPU8d47x+IYc6rf0eCmyGY2QztsE52BXlsbqlKDmypkXcNdEq2xJotEjYZ724nIB8w6IvJBhVmnqmkR2XtJtCiAa/deEi3/c2e3+zBxskgUIBEgGucGFBE1N2YdEfmgGlnXaJdE42SRKGARHppFRB5g1hGRD3zLOl4UiShAEhFEEtExb0REzaAaWSciy0TkaRFZLSKXOX7+ThF5LH+7T0QOr/oLISIah4/bdY31zaJEEE20hT0K8lSqzMf5tgeKiPxUSdaJSBTAVQBOQ65b4EoRuVVVCy9U/VcAr1bVHSJyOoAVGHV9MmosGbUNbbY7Grm4Gtz0OxqqJLO2cY2r5uL68004LpGQcjTHyWiR373sts1dXIq9DE3E0WjGxdl8Jpm2NUdDmkiiuKmCax3ZlF2Hq5mNq5bcbRvwDDvev0FH45pilyuXb9t1jTVZJGowIsLzeIio6VUh644FsFpV1+Sf7wYAZwN4abKoqvcVLH8/ci3niYhqxsftOk4WiYIUQdMelkBE9JKJs65HRB4suL9CVVcU3J8L4MWC++sw/reGFwG4veRxEhFVwsPtOk4WiQIlzmsUERE1lwmzrldVl477BJbz+EEReQ1yk8UTix8fEVE1+Lddx8kiUYBEBNEij/cnImpUVci6dQDmF9yfB2CDYz2HAbgGwOmquq2SFRIRlcrH7bqGerWRWBxtU2aGPQzyVFmnRgsgRZ6ATkTUsCrPupUAlojIYgDrAZwD4LwRqxBZAOBmABeo6jOVrIzqg6ptQONqSONqKuNabtDVyKW4/jZFi0pxY0naoTiXa3U09Mk4Gvq4a47HuhrXOBrNRBy1TAWfYc0W10Qn66qlbAtBV3OcrOO9yjre6Iyrlnb8Qsrh4XZdQ00WiRqOCCLxeNijICIKVoVZp6ppEfkggDsARAFcq6pPiMj78z+/GsC/A5gG4OsiAgDpCQ5tJSKqLg+36zhZJApQrmsWP2ZE1NyqkXWqehuA20bVri7493sBvLeilRARVcDH7Tq/Xi1RCHw7XIGI/MSsIyIf+JZ1nCwSBUhEEPFsDxQR+YdZR0Q+8DHrGurVRhOt6Jp3QNjDIE/tKOdBIt7tgSIiDzHrqEzRURdNSUTsVVTiYmuu5TJqa66mMu5x2Me6aq71uh9b3Dpc1+yLOB4cjdvPl7jG4ujU6Tps0jXhiTg+w5V8rl2PjTjGJ0PFrVcc70sk4ViH6/2LVSmfPMy6hposEjUccQc3EVFTYdYRkQ88zDq/Xi1Rjfl4uAIR+YdZR0Q+8DHr/Hq1RLXm4eEKROQhZh0R+cDDrONkkShAuRbLfl2Ph4j8w6wjIh/4mHWhTRZFZD6A6wDMApAFsEJVrxzvMbF4FNPnT6nF8IiM58t8XKV7oERkGYArkbtQ9TWqesWon78TwMfyd/sA/IOqPlrRSqlqysk6okbk2952skrNu6gAk+O2wUsxXA1kXM1nim9wY2uuxjqdjkYprtpkR0Oajja72d3S1VJcbbJruTZTS0zqMLV4V7utdbSaWqzVrsPZaCZia5rNmlp6cNjUMhUcwqkZuw7N2N9vNmmXyzqWK5dvWRfmN4tpAB9R1YdFZBKAh0TkTlV9MsQxEVVXhce2i0gUwFUATgOwDsBKEbl11OfkrwBerao7ROR0ACsAHFfBqKm6mHXU/Dw8j4ecmHfU3DzMutBerapuBLAx/+89IrIKwFwADBRqGhIRZ5voEhwLYLWqrgEAEbkBwNko+Jyo6n0Fy98PYF4lK6TqYtaRD6qQddQEmHfU7HzMurr4HlVEFgE4EsADjp8tF5EHReTB9MCumo+NqFISiYx5A9Cz9+87f1s+6uFzAbxYcH9dvjaWiwDcXt1XQNVSbNb17u6r+diIKjVB1pFnxsq7wqzbnc2EMjaiSlSadSKyTESeFpHVInKZ4+fvFJHH8rf7ROTwqr+IEoQ+NRaRTgA3AbhEVXeP/rmqrkDusDp0zNm/egccE9WCCCSWGG+JXlVdOt4zOGrOz4GIvAa5yeKJxQ+QaqWUrDtq3/nMOmosE2cdeWS8vCvMuv3ibcw6aiwVZl0jnl4U6mRRROLIhcn1qnrzRMu3tcZw8JKe4AdG5PBgWY8SoLK96usAzC+4Pw/ABrMWkcMAXAPgdFXdVskKqfpKzTqixlNx1lGTKCXvovEIJs0a2ZAlvmPILNc2mDa1vrRtYuJqZlN8gxu7bzbh+JNuczQ36XI06WmZbCcUrd22qUzbFFtr77ENaVqm2MY1rVMnm1rC0cwm0WUfG2u365WEoxYvcmLk+JY4nkqZWmZwwC7XYRv1FNuAJxK3Rx1GEvb3EXH9Mss6OLrirGu404vC7IYqAL4NYJWqfimscRAFSqT4oHVbCWCJiCwGsB7AOQDOG7kKWQDgZgAXqOozlayMqo9ZR16oPOuoCTDvqOlNnHU9IlL4/cKK/Lfpe7lOLxrvW8PQTy8K85vFEwBcAOAvIvJIvvYJVb0tvCERVZeIQGLlX49HVdMi8kEAdyB36YxrVfUJEXl//udXA/h3ANMAfD33/2mkJzi0lWqLWUdNr9Kso6bBvKOmVkTWNd3pRWF2Q70X7jeMqHkIgEh515DaK/8/2dtG1a4u+Pd7Aby3opVQYJh15IUqZF0R15Q9EMB3ABwF4HJV/WJFK6SqY95R06s86xru9KLQG9wQNTfubSciH1SWdUU2fdgO4EMA3ljBQImIKlDxdl3DnV7UUJPFSa0xnHLgjLCHQZ76XjkPEql4bzsRUd2rPOuKafqwBcAWEXl9JSui+hFNRNG9cGSTliFHw5e23UlTm9xva2lHI5xM0jbCcZGo/UI06miUkuiwE4W4o9Yy2TZjcTWzaZvWaR/bPcnUWqd1FbVcrMsuF+mwNWm1TW+kxdHgxvW5djV4ydr3WZO2WVF0eNDUYgN7TC3Rb5qGIzHJjjnuauizzT62pcuuA7+1pQlVmHWNeHpRQ00WiRoOmz4QkQ9q3/SBiKj2qrBd12inF3GySBQkEYCHoRJRs5s466rW9IGIKDQebtdxskgUKHEfwkFE1FQqzrqimj4QEYXLv+06ThaJgsR28kTkg8qzbsKmD0REofNwu66hJosdiSiOnWdP0iWqWx4erkBEHqow64pp+iAiswA8CKALQFZELgFwkKrabhbUEGJtCUx72dwRteGdthHJ8G7bFCXVn7K1IdvgRjP2aOZsxjZjiURt05Zo3NbinfZ8NVfTm5bu4hrXtEyxy7VOm2xq0UndphbpdNRcy7ka3LTYxjAadZyLJ44jxItscCMZ+ztCetg+dLDf1vp2mlp0iq217LG1tmm25vq7KouH23UNNVkkajQCgUT9OlyBiPxTjawrounDJuQOTyUiCoWP23WcLBIFSQSIsRsqETU5Zh0R+cDDrONkkShg4jpcg4ioyTDriMgHvmUdJ4tEQRIBon4d205EHmLWEZEPPMy6hpostkSARW32BFqi+iXQSEN9zIiIysCso9LF2low9ZDFI2rDO2wjkuSeAVNL9w/Z2lDS1DSTsTVXMxbHt0Wx1hZTi7baQxDjHa2m1jLFNrOJd9lGM86GNJOn2fU6lkPHFFPSRJupZeO2pnE7ZneDG8e3aK6mN2obCUnWNhxCyv7exNH0JtrdZ2qxlG10lN21zT7WUWtxNMwpj39Z59erJao1gTtoiYiaCbOOiHzgYdZxskgUKAE865pFRD5i1hGRD/zLOk4WiQKkANSzPVBE5B9mHRH5wMes8+vVEtWaCBCJjX2rQyLyPRHpLrg/RUSuDXFIRFTvGjPr7nRk3R0hDomI6l1jZt1iEWktuN8mIouKfXx9vqoxyPAAYs8/FPYwiErQkCdCH6aqO/feUdUdInJkiOMhorrXkFnX48i6GSGOxzvS0oaW/Q4bUYv37zbLZQds0xsd7LfLJW3zlGzS0WTFNZao/f4kErd/05G2DvvYVluLdDia2XR221rXVFPLttjny7bYhjnZlk5bS7Sb2nDaNvRJZmxDmoyjh2Qma5dzEUfTm2jEdg2Nt9jxtbTbx8bV/t4kaX/n0jnd1GLT7N8Lhhy1sjRk1v0vgFcU3M/ka8cU82B+s0gUNImMfatPERF5qcWaiExFg+1YIqIQNF7WZUVkwd47IrIQuaPMiIjG1nhZF1PVl1oF5//taH07xoMDGRIR5YgAkYY7Efr/AbhPRH6C3IbT2wF8JtwhEVFda8ysuxzAvSLyu/z9VwFYHuJ4iKjeNWbWbRWRs1T1VgAQkbMB9Bb7YE4WiQLWaCdCq+p1IvIggJORaxL9ZlV9MuRhEVGda8Cs+6WIHAXgeOSy7sOqWvQGFBH5qdGyDsD7AVwvIlch9yXAOgDvKvbBnCwSBUkEiDbkx2wqgH5V/Y6ITBeRxar617AHRUR1qgGzTnInWS0DsI+qflpEFojIsar6p7DHRkR1qgGzTlWfA3C8iHQCEFUt6QTOhnq1mf496F/5u4kXJKobUrfdscYiIp8EsBTAAQC+AyAO4AcATghzXERUzxov6wB8HUAWuaMoPg1gD4CbUGTTB6qCRBtkwcEjSrFhRxMTR2OTrKPBjToa3CBru7ZoNmPX4Ti0UBKtttbiqtmmLa4mNZqwtbSjSU3GURtM2dcx4KgNDadMbThtT8UdcjS9Gc7Y98XV9Car9vkijgY38aittcft+5xwLNcWs9/etcVsk5+2rsn2+TqTpub6GypP42WdiMwE8FkAc1T1dBE5CMDLVfXbxTy+4b5HJWo0KpExb3XqTQDOAtAPAKq6AYBNaCKiAg2Ydcep6gcADAG5bqgooekDEfmpAbPuuwDuADAnf/8ZAJcU++BQX5WILBORp0VktYhcFuZYiAKx90TosW5FPcX4nxPJ+Ur+54/lz8GpRFJVFfmugCJid4VSSZh11PQaM+tSIhLF37JuOnLfNFKZmHXU9Boz63pU9Ubk801V08hdPqMooU0W8wF9FYDTARwE4Nz816JETUQqarFc5OfkdABL8rflAL5R4aBvFJFvAugWkfcB+DWAb1X4nN5i1pEfGjLrvgLgFgAzROQzAO5F7lAtKgOzjvzQkFnXLyLT8LcdY8cD2FXsgyd8Va4PuoicVPz4xnQsgNWquiZ/vY8bAJxdheclqisaiY15K0Ixn5OzAVynOfcjN8mbXfZ4Vb8I4CfInbtzAIB/V9Wvlvt8jSSgvGPWkRcaMOuuB3ApgP8GsBHAG1X1f/f+vPB6s82GWUdUvkbLOgD/DOBWAPuKyB8AXAfgn4p9cDGv6kYR+T6AzwNozf93KYCXlz7WEeYCeLHg/joAx41eSESWI3/dozkdbdjwh8cqXC1R7SgEWdgTtwv05C9TsdcKVV1RcL+Yz4lrmbnIbfyURVXvBHCn62ci8kdVrfTzX6+CyLuSs25+T3cFqyOqvQbOuqcAPDXGj+8CUOnhX/WqPrJu/nwMTZ434ufxrKM5SXrY1lKOZjYZ29xFsmlbs490fivk2vjPRuN2uYRtcKPxNlMbytjGMP0pWxvcY1+Hq5nNriH72nYN21pf0taGHQ1uXE1vUo4GQS5RV4ObiK21xOyhmp0JW5vUYt/7yY5ah+OxHY4mOu3xblMrRyNmnao+LCKvRu4LAAHwtKq+9EcmIqflt/ucipksHgfgcwDuQ67JxfWoTldE1zttPjH5N3gFABwyvdt+oojqmjq7hhXoVdWl4/y8mM9JUZ+lKrKt4JpHEHlXctYdte98Zt3/b+/+YyU76/uOf7739929612v1z8We8lCcAkWJLVFjCtHisPaqeM4GFVAQwXZEBQUibSggoKNK0VqlWppKkLaIJGVQ7Jp3AYrgIyQ08Y4WAS1ONjG/FwSE7qhxovN/rC9d/f+mplv/5hz8b37fOfuuTP3zMyZ5/2SRp557pl5njs79+PznHnO96BmRjLrNtwjrLnhyLrrriPrUDP1zLriPMVvdvjxh9ThCwKp3GRxRdKCpFm1dxL/r7tvxQngT0nat+bxVZKe3oLXBYaGSwoOJG5Gmb+Tfv8tjfL/3KvIO7IOI4+sqx2yDujCiGbdhgfGyhS4+bLagfLTkn5G7RMx/2ILBvZlSVeb2cvMbErSL6u9nhYYKe7e8VZCmb+Tz0j6laJ61g2Snnf3rpdlZa6KvCPrkAWyrlbIOqBLI5h1Gw68zDeL73T31bW3P5B0h5m9vedRuTfM7DfVvu7HuKSPu3unr0eBWur1CFSnvxMz+43i5x+T9ICk2yR9R9I5Se/ocdgXMspLs7Y878g65ICsqx2yDujCiGbdhi44WVwTJmvb/ttWdO7uD6j9hpSycnZFxx/jICJqxKVmq7f1CtHfSREmq/dd0rt76mQNM7vG3b91XttN7v5w8bDng0XDqqq822zWAbVTz6z7z5L+eIMJzYGt6mvYDEvWLbdc359fX8xlNiiAMjOeXu53anYuaRsPCqpEhVci0Xlo0aSgEXzOFxtp21JQVGYhKGZzJtju9EJa4CYqXBNuF7WdS9vOBMVxFlbSS+8tN8pdjm98LF2sODWRts0FRWp2zATFbLalhYR2zaZtF8+kbTuD19sdPLcrNcy6Eo5t9MOBXWcRyIGrfQXUTrchdZ+ZfaBY/jBrZv9V7dLykiR3/8YAxwZgCNU0674t6bCZPWJmv2FmO9f+0N1PDWhcAIZUHbPOzP5h9ZvLNW2fXb3v7v9io+czWQQq1mx1vg2p16l9YvX/Vntt/dPamgrIAEZY3bLO3e9x9xsl/Yqk/ZK+Zmb/3cx+brAjAzDM6pZ1ahe0+jkz++PiPEmpfSmOUpgsAhVy7/lE6EGoqgIygBFV06yTmY1L+onidkLSVyX9WzP784EODMBQqmnWnXP3fynpqKS/MbMf0yaqPZcpcAOgBz2WWB6EL0u6X+0LNO+R9Idm9iZ3f9NghwVgmNUt68zsw5J+SdJfS/qP7v63xY8+ZGZ/N7iRARhmdcs6FcW63P0/mdljahfX2V32ybWaLC4tN/Xdf3x+0MMASmtXzapdqvy6pFdK+qC7/3sz+9dqL9MCgFBNs+4bkp6QtN/d/9bMXirpimLSeP1AR5aJpUZL3z21sK5tbioogDKdFr2ZGk8Xx01GBW5KrqGLapZEn+nlYKawuJIuvokK1zwfFJU5vZgWn3kuKFLzwxeWkraTZ5fTtvl0u6jAzUpQMKcZFOppllxbORa892PjadvEZPpvORcVswnadm+fTtoumZtK2i7dkW63Myis042aZt1vm9nbJL282K/755IOln0yy1CBirW8821IvUPSDZLeWjw+I+mOwQ0HQB3UMOt+Wu1ztNdm3Uclyd05Mg0gVMOs+wVJ/0wvZt0Laq+qKKVW3ywCdePyOh6Bep27X2dmX5Ekdz9tZltUcxrAKBqhrEu/pgCAwghlXen9OiaLQJW8fTJ0zawURR9ckszsUm3iRGgAGRqdrKOYF4DORifrKHADDAPXUJdS7uS/SPq0pMvM7HckvUnSvxvskAAMM7IOQA5yzLpaTRaXW65jwUm6wDCr23IFd7+3qJZ1QO0KWm9096MDHhaAIUfWYbOWGi39/cmz69p2zaSr4+am0qIo24JCKdMTaSmOcUuLrESiz+9KUMxmKZgpzAfFYs4sN5O20+fSgjSn5tO2Z88ExWyCwjUvBNstLaRjWQoK5qwspeNrrKRtzUYPBW6Cf4+poNDMmaCA0anZ9HPwdFD0Zs9FaTGb3XNp22VB0Ztu5ZZ1tZosAnXjklo1CxVJcvdvS/r2oMcBoB7IOgA5yDHrmCwCFXKPj0wCwCgh6wDkIMesY7IIVKqWVbMAYJPIOgA5yC/rmCwCFcrxCBSA/JB1AHKQY9bVarLYcOlUcMIwMKxc0kqrfmWzAGAzyDp0Y3GlpSd/ML+u7ZK59FKXO4PCJtun0l3YmaCgylhQ4GY8qHkT7f8vNdJ9zsWowM1iWlQmKlxz8mzQFhSueS4oXLN4Ni1SsxD0ERWzidoaC/NJW3N5IWlrNdI+IjaWFqkZm0j/LSdm55K2yZmZpG06KHQ0sz1tiwr6nAzel+eD4kLdyDHr0r8qAFumfSJ05xsAjIIqs87MdpvZg2b2ZPHfizts93Eze9bMvtFbjwAQy3G/jskiUCF310qz1fEGAKOg4qy7U9JD7n61pIeKx5E/kXRrr50BQCc57tcxWQQq1vTONwAYFRVm3R2SjhT3j0h6Y7SRu39B0qmeewOADeS2X1ercxaBummfCD2aR5oAYFWJrNtjZo+ueXzY3Q+XfPnL3f14ux8/bmaXdTtOAOhFjvt1tZosukZ31o7R1D4Rmg8tgNFWIutOuPtrO/3QzD4n6YrgR3f3ODQMseVmS0+dPreubWElLSpzJiggs2Mm3YWdnUqLrIyPBQVugrZm8PldCIoqRm3R+E6dTYvURIVXzgVFb6LCNXGBm7SP5bNnkraVc8+nbSUL3HhQzMVb6XsQF7hJC9LEBW7StsaO3en4mmkhnGYwcYvajje2ZoKX435drSaLQN20T4TOK1QA5KfXrHP3mzv9zMyeMbO9xbeKeyU923VHANCDKvfrzGy3pE9I2i/pmKS3uPvp87bZJ+lP1T641lJ7lcbvVzKgAucsAhVqnwjd+QYAo6DirPuMpIPF/YOS7u/1BQGgGxVnXZliXg1J73P3V0m6QdK7zeyaXjveCJNFoGIt9443ABgVFWbdIUm3mNmTkm4pHsvMXmJmD6xuZGb/Q9L/kfRKM3vKzN7Za8cAcL4Ks+6Cxbzc/bi7P17cPyPpqKQre+14IwNZhmpmvyvplyQtS/oHSe9w9+cGMRagSlWeCD2syxXwIrIOuagy69z9pKQDQfvTkm5b8/itlQwApZB3yMEwFfMys/2SrpX0SMnX78qgzll8UNJd7t4wsw9JukvSBy70pDFJs+PpSclAX6Tnc19QxSdCry5XOGRmdxaPz/87Wl2u8LiZ7ZD0mJk96O7fqmpQWKerrAPqJseiD0hsOu9aLdeZc2nhlvNFxWeWg4Il24ICN1MT5RbRRX0sBX3ML6XFbOYX09/hueD3WlwI2oLtlhbSPhbPpUVvomI2S/Pp1WNWzqYFbhqLZ5O25kraR6uRtkXCAjeTU8Hrpb9vVDAnlha9Ccdi1c0VhqWYl5nNSfqkpPe6+wubee5mDWSy6O5/tebhlyS9aRDjAKrmcjWrW256h6SbivtHJD2s8/7HXByhWj1KdcbMVpcrMFnsA7IOuag461AD5B1y0GvWbUUxLzObVHuieK+7f6rrwZQ0DNVQf03tpXQhM3uXpHdJ0g6lRy2AYeYeH/1cY+SWK6Cj0lm3b8+uPg0J2Bolsg556Zh3a7Nu+uLL+zkmoGcVZ91qMa9D6lDMy9pfm/6RpKPu/uGqBrJWZZPFjb5mdff7i23uVnuZ3L2dXqfYcT4sSZfbNIctUSvu8dKWNUZuuUJuqsi66358H1mHWimRdRgBW5F3a7Puopf+BB8a1ErFWXdI0n1Fca7vSXqz1C7mJeked79N0o2S3i7p62b2RPG8D7r7A8HrbYnKJosbfc0qSWZ2UNLtkg64s3YFo8nlPR2BquNyhdyQdUDvWYd6IO+QuyqzrkwxL3f/oqS+FnAZVDXUW9U+t+pn3f1c2edNjpkunx6GlbPIUulP6otyXK6AF3WbdUDdsAwV3eSdu6t5XmXJ6HO03EgLoCwHhWvGG93vQzdKFtGJ2qJCONF2zUbaRyvYLmprhtuVK0gTFZWJitk0lxeStvLFZ8ppBYVwWiUL60RtzUZQRCe43mH0nnYjx6wb1HUW/0DSDkkPmtkTZvaxAY0DqNTqcoVOtx6VufbY6nKF1xd/a0+Y2W3xy6ECZB2yUHHWoR7IO4y8HLNuUNVQXzGIfoF+y3G5Al5E1iEXLEMFeYcc5Jh1rOkEKuQeL20BgFFC1gHIQY5Zx2QRqFCOa9sB5IesA5CDHLOuVpPFmTHTK3ekJ7ICfdFNgRu5lpt5hQqA/JB16I6pXYftRVNB4ZqpibQoytR4UOBmLD3rImorqxk8NxrfRMl+LagUMha8nkWvF26Xvi9jE+l+8tjEZPp6k+l2UTGbqKhMJBpL2fGVfW7UFr8v6fii97kbOWZdrSaLQN1w7TEAOSDrAOQgx6xjsghUyBWX/AaAUULWAchBjlnHZBGoko9uKWUA+BGyDkAOMsw6JotAhVoeX6wXAEYJWQcgBzlmXa0mi5OzE7rimj2DHgZy9czmn5Jj1SwA+aky68xst6RPSNov6Zikt7j76fO22SfpTyVdIakl6bC7/34lA8KWGR8zzW1bX3xl17a0AMrO2bRAy46ZdBd2dioogFKy+Ez0bdHCcrrccHq5+0IpUR8e/Nm0gr8lD57bbOzseixli8/0UuAmKqwzMTuXtE3OBG3b099tanY2aZsOPhvTM0Hb7NZMeXLcr9ua0kAAQq72coVONwAYBRVn3Z2SHnL3qyU9VDw+X0PS+9z9VZJukPRuM7um144BYK0c9+tq9c0iUDc5HoECkJ+Ks+4OSTcV949IeljSB9b378clHS/unzGzo5KulPStqgYFID857tcxWQQqFi0dAYBRc4Gs22Nmj655fNjdD5d86cuLyaDc/biZXbbRxma2X9K1kh4p+foAUFpu+3VMFoEKubuamV28FUB+SmTdCXd/bacfmtnn1D7f8Hx3b2YcZjYn6ZOS3uvuL2zmuQBwITnu19Vqsji5fVpXvu7lgx4GcvX5L2z+OS41M1uuACBDPWadu9/c6Wdm9oyZ7S2+Vdwr6dkO202qPVG8190/1fVg0DdTE2O6ave2dW27goIlO7elbXNBgZuZ8bQUx2TQFml6+m3RSjNtO7vcKDWWuemoAE/a9uzEYtI2PpEW4BmbSH+PqG1xMijyM50WhmnMzCdtUTGbZskCN2MlC+aMT6Vjmdq+I20LPgczwedgZnvax7a5tG1X0NaVDPfrKHADVMjVrnTW6QYAo6DirPuMpIPF/YOS7j9/AzMzSX8k6ai7f7jnHgEgkON+HZNFoEouNZutjjcAGAnVZt0hSbeY2ZOSbikey8xeYmYPFNvcKOntkl5vZk8Ut9t67RgA1slwv65Wy1CB+vHsToQGkKPqss7dT0o6ELQ/Lem24v4XJaVr9wBgS+W3X8dkEaiQF0egAGCUkXUAcpBj1tVqsjgxt02X3tixmBpQsT/p6lmtzE6EBpAnsg6bNTUxppdfun1d28VBYZOoWMy2oJDLdFDMZnwsKBYTfAcdfVm0GHymlxrNpG1+OW3bPZcWwtk1HxTvCX7fH55Ji96cDLY7O5MWn5nZnm63vDCdti3NJW2N4PdolZwYWfCmjkcFh4J/y8np4N8yKnAT/G67dqS/2yVzadtlwXbdqirrzGy3pE9I2i/pmKS3uPvpDtuOS3pU0vfd/fZKBlTgnEWgQu6uVqvzDQBGAVkHIAcVZ92dkh5y96slPVQ87uQ9ko722mEZTBaBirWa3vEGAKOCrAOQgwqz7g5JR4r7RyS9MdrIzK6S9IuS7um1wzJqtQwVqBt3cVQdwMgj6wDkoETW7TGzR9c8Puzuh0u+/OXufrzdjx83s8s6bPcRSb8lKb1AZQWYLAJVcs7jAZABsg5ADi6cdSfcvWOBFTP7nKQrgh/dXaZ7M7td0rPu/piZ3VTmOb2q1WRxbHaHpl7zM4MeBlCay7OrmgUgP2QdujEzMaZXXLK+wM3OmXTXdMdU2jYzGRRPCYqsWFDMZiy4ykpL6bdFQS0brbTSz/m5lXTD5xfTAjd7tk2l212UbndiPi3GcnI+LWZz6mzadnJ+KWmbP7eStK0spWNuBL9HdJmIlqdtY8EbPTaR/htNBcVsoqI3l8yl79XuoHDNJdvT7S69KN1u10xaHKcbvWadu9/c6Wdm9oyZ7S2+Vdwr6dlgsxslvaG4juyMpIvM7M/c/W1dD+oCBnrOopm938zczPYMchxAZbwdtJ1uvTCz3Wb2oJk9Wfz34g22HTezr5jZZ3vqFF0h6zDyKsw61At5h5FWbdZ9RtLB4v5BSfcn3bvf5e5Xuft+Sb8s6a+rnChKA5wsmtk+SbdI+t6gxgD0Q7PZ6njr0VBWzcJ6ZB1yUWHWoSbIO+Sgwqw7JOkWM3tS7b+jQ5JkZi8xswd6ffFuDfKbxd9T++RMDjliZLl3Pvq0BUeghrJqFhJkHUZexVmH+iDvMNKqzDp3P+nuB9z96uK/p4r2p939tmD7h6u+xqI0oHMWzewNal9E8qsWLSZfv+27JL1Lkl565d4+jA7YWs1Gej7CGiNXNQsv6jbr9u3ZVf3ggC12gazDiCubd2uz7tK9V/ZpdMDWyS3rKpssXqDazwcl/XyZ1yl2nA9L0rXXXefze/7Jlo0RqJp7S61GegL6GiNXNSs3VWTddT++j6PyqJUSWYcRsBV5tzbrXv1T1/or96wvcDMzkU40p8eDQinj6XZBzRtFE9egDo6iL4WaQeNy1NYMCrRsSwuqLDXS555eSIvPnAqKtrywK52gPLcYPDcohPNcUOBmfil9vYXltC16DxpB20Twps4GhYlmp9ICNzuCAje7gwI3FwcFgqKCSBcHxWyi7bqRY9ZVNlnsVO3HzF4j6WWSVo88XSXpcTO73t1/UNV4gIFwyZtBObWyT69h1azckHWAes461AN5h+xlmHV9X4bq7l+X9KPlcmZ2TNJr3f1Ev8cCVK7aI1CrVbMOaYOqWZLukqTim8X3M1HsD7IOWcnwaDteRN4hGxlmXa2uswjUkbcqOwJ1SNJ9ZvZOtSvPvVlqV82SdE90MjQAVKXCrAOAoZFb1g18slhcJwQYSe5e2REodz8p6UDQ/rSksGqWpIcrGQwuiKzDKKsy68xst6RPSNov6Zikt7j76fO2mZH0BUnTau/b/IW7/3YlA8IFkXcYVVVm3bAa+GRxMxYbLR09sTDoYQDleUvNzEIFQIaqzbrVa8oeMrM7i8cfOG+bJUmvd/d5M5uU9EUz+0t3/1JVg0LvJsdNL5lbvys6ExSusZV0388ai2lbM6hSWfZboKAQjo8Fu8kTaZEVn55N2laCIisLQYGbXTNpwZfLg+IuZ5fTa/idDgrcnNmZvgfzy+l7cG4lbVtspG3LjXLXDhwPCtxMTaQVh7ZNpr9v1DYXFMfZGRTC2TUbFNEJ+t0eVT/qRob7dbWaLAJ148pvuQKA/FScdXdIuqm4f0TtFRLrJovu7pLmi4eTxY2qwgC2VI77dUwWgSq5q7WS1xEoABm6cNZVfk1ZMxuX9JikV0j6qLs/UvL1AaCcDPfrmCwCVXLP7ggUgAxdOOsqvaZsewjelPRPzWyXpE+b2avd/Rtlnw8AF5Thfh2TRaBCLlerkZ5TAACjpNes24Jryq59refM7GFJt0pisghgy+S4X1eryeKZpab+5tipQQ8DKC/DqlkAMlRt1l3wmrJmdqmklWKiOCvpZkkfqmpA2BpjzRVtP/vMujZbOZdut5wWuPGobSkogtgKCrRE3wyNpUVWxibTIjU2sz3td2ImaRufTrebCtoumkrblmfSAjcLK+nvsWdbuhu/EBSkWQza4gI36Xat4MzfZtAYFbiZHk+LyswExWdmguIzUZGauC3td1vQNrZ8NmnrSob7dbWaLAK1465WZssVAGSo2qwrc03ZvZKOFOctjkm6z90/W9WAAGQqw/06JotAhTzDE6EB5KfKrCtzTVl3/5qkaysZAAAUctyvY7IIVCq/E6EB5IisA5CD/LKOySJQpQzXtgPIEFkHIAcZZp21r2NbD2b2Q0n/2MNL7JF0YouGQ//59f9j7n7pZp5gZv+z6LeTE+5+aw9jwggi6+h/wP2TdegLso7+B9w/WVdCrSaLvTKzRze6zhP90z8wCgb9Waf/vPsH+mXQn3X6z7v/XKQ1aAEAAAAA2WOyCAAAAABI5DZZPEz/9A9kYNCfdfrPu3+gXwb9Waf/vPvPQlbnLAIAAAAAysntm0UAAAAAQAlMFgEAAAAAiWwni2b2fjNzM9voWilV9Pu7ZvZtM/uamX3azHb1oc9bzezvzOw7ZnZn1f2d1/c+M/u8mR01s2+a2Xv62f+acYyb2VfM7LOD6B8YFLKuf4Yh78g65CqnrCv6zXrfjqzrnywni2a2T9Itkr43gO4flPRqd/9JSX8v6a4qOzOzcUkflfQLkq6R9FYzu6bKPs/TkPQ+d3+VpBskvbvP/a96j6SjA+gXGBiyru9ZMwx5R9YhOzllnTQUeUfWZSTLyaKk35P0W5L6Xt3H3f/K3RvFwy9JuqriLq+X9B13/667L0v6c0l3VNznj7j7cXd/vLh/Ru0/7Cv71b8kmdlVkn5R0j397BcYAmRdHw0678g6ZCynrJMy37cj6/oru8mimb1B0vfd/auDHoukX5P0lxX3caWk/7fm8VPq82RtlZntl3StpEf63PVH1P6fSKvP/QIDQ9YNLuukgeXdR0TWITMZZp00RHlH1o2+iUEPoApm9jlJVwQ/ulvSByX9/KD6d/f7i23uVvtr/HurHIskC9r6fuTNzOYkfVLSe939hT72e7ukZ939MTO7qV/9Av1A1q0fTtA2kGtDDSLvyDqMMrIuHVLQlsW+HVnXfyM5WXT3m6N2M3uNpJdJ+qqZSe2lAo+b2fXu/oOq+18zjoOSbpd0wKu/0OVTkvateXyVpKcr7nMdM5tUO0zudfdP9bNvSTdKeoOZ3SZpRtJFZvZn7v62Po8D2HJk3ToDzzppoHlH1mFkkXWJgecdWZcP689nejiZ2TFJr3X3E33s81ZJH5b0s+7+wz70N6H2CdcHJH1f0pcl/St3/2bVfRf9m6Qjkk65+3v70ecGY7lJ0vvd/fZBjgPoN7KuP4Yl78g65CqHrCv6ZN9OZF2/ZHfO4hD4A0k7JD1oZk+Y2ceq7Kw46fo3Jf0vtU9Avq+fO09qHwF6u6TXF7/vE8XRIACjLbesk8g7IEd9zTppKPKOrMtI1t8sAgAAAABifLMIAAAAAEgwWQQAAAAAJJgsAgAAAAASTBYBAAAAAAkmiwAAAACABJNFAAAAAECCySIAAAAAIMFkccSZ2X8ws/esefw7ZvZvBjkmANhqZB2AHJB16Ddz90GPARUys/2SPuXu15nZmKQnJV3v7icHOzIA2DpkHYAckHXot4lBDwDVcvdjZnbSzK6VdLmkrxAoAEYNWQcgB2Qd+o3JYh7ukfSrkq6Q9PHBDgUAKkPWAcgBWYe+YRlqBsxsStLXJU1KutrdmwMeEgBsObIOQA7IOvQT3yxmwN2Xzezzkp4jUACMKrIOQA7IOvQTk8UMFCdA3yDpzYMeCwBUhawDkAOyDv3EpTNGnJldI+k7kh5y9ycHPR4AqAJZByAHZB36jXMWAQAAAAAJvlkEAAAAACSYLAIAAAAAEkwWAQAAAAAJJosAAAAAgASTRQAAAABA4v8DQqhs/Y4u0BQAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "make_plot(50)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "make_plot(100)" + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_fields(['hx_fc', 'hy_fc', 'hz_fc'])\n", + "# fld_kwargs=[{\"vmin\": -.0065}, {\"vmin\": -.02}, {}])" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9cAAAItCAYAAAAzCYniAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABS20lEQVR4nO3de5hld13n+89n77p29SXpS5LOjYDmoJEBcWKQEx5FSJwQkeDj4AQVc0Y4EZUZmMEjkTzjeIbRiZdBmSMYewIaxshlBnLIYYIQGBAjgyZguCThkgkBOt1J052k79112d/zR+2Om2L91t5Vq9Zee+31fj1PPam9bvtXa1c+Xb/1Xev3c0QIAAAAAACsXavqBgAAAAAAUHd0rgEAAAAAKIjONQAAAAAABdG5BgAAAACgIDrXAAAAAAAUNFF1AwCMvvM8GyfUGcp77df8hyPiiqG8GQD0IOsANMEws05qVt7RuQbQ1wl19FPaOZT3+hN9fftQ3ggAViDrADTBMLNOalbe0bkG0JcltT2kN4shvQ8ArEDWAWiCoWad1Ki845lrAAAAAAAKonINoK/lK5xDusTZoKubAEYLWQegCYaadVKj8o7KNQAAAAAABdG5BgAAAACgIG4LBzCQoQ58AQAVIesANAFZVw4q1wAAAAAAFETlGkBfQx/4AgAqQNYBaAKyrjxUrgEAAAAAKIjKNYD+zLM5ABqArAPQBGRdaahcA6gd21fY/rLtB2xfl7H+Ktuft32P7bttP6+KdgIAAKA5qFwD6GuUns2x3Zb0VkmXS9ot6S7bt0XEfT2bfUzSbRERtp8p6b2Svmf4rQVQJ6OUdQBQFrKuPFSuAdTNJZIeiIgHI2Je0rslXdW7QUQciYjovpyTFAIAAABKROUaQF/LVziH9nbbbd/d83pXROzqeX2OpG/2vN4t6TkrD2L7JyX9B0lnSPrxMhoKYLwMOesAoBJkXXnoXAMYNfsj4uKc9Vn/HHxHZToibpV0q+0flvQmSZetU/sAAACA70DnGsAAPErP5uyWdF7P63Ml7UltHBGftP1dtrdHxP7SWwegxkYq6wCgJGRdWXjmGkDd3CXpQttPtT0l6WpJt/VuYPu77eV/NWz/gKQpSQeG3lIAAAA0BpVrAH1Zo3MlLiIWbb9G0ocltSW9IyLutf3q7vobJf2UpJ+3vSDpuKR/1jPAGQBkGqWsA4CykHXloXMNoHYi4nZJt69YdmPP978j6XeG3S4AAAA0F51rAAPh2RwATUDWAWgCsq4c3BEAAAAAAEBBdK4BAAAAACiI28IB9GVLbe4eAjDmyDoATUDWlYfKNQAAAAAABVG5BjAQBr4A0ARkHYAmIOvKQeUaAAAAAICCqFwD6Mvi2RwA44+sA9AEZF15qFwDAAAAAFAQlWsAfS1f4eQSJ4DxRtYBaAKyrjxUrgEAAAAAKIjKNYCB8GwOgCYg6wA0AVlXDirXAAAAAAAUROUaQF82z+YAGH9kHYAmIOvKQ+UaAAAAAICCqFwDGAjP5gBoArIOQBOQdeWgcg0AAAAAQEFUrgH0tTwfYtWtAIBykXUAmoCsKw+VawAAAAAACqJzDQAAAABAQdwWDqAvy0zZAGDskXUAmoCsKw+VawAAAAAACqJyDWAgDHwBoAnIOgBNQNaVg8o1AAAAAAAFUbkG0Jctns0BMPbIOgBNQNaVh8o1AAAAAAAFUbkG0JfFszkAxh9ZB6AJyLryULkGAAAAAKAgKtcABsKzOQCagKwD0ARkXTmoXAMAAAAAUBCVawB98WwOgCYg6wA0AVlXHirXAAAAAAAUROUawEB4NgdAE5B1AJqArCsHlWsAAAAAAAqicg2gL1tqcYUTwJgj6wA0AVlXHirXAAAAI8j2Fba/bPsB29dlrP9Z25/vfn3K9rOqaCcAYBmdawAAgBFjuy3prZJeJOkiSS+3fdGKzb4m6Uci4pmS3iRp13BbCQDoxW3hAAZgmTkbAIy9kcq6SyQ9EBEPSpLtd0u6StJ9pzaIiE/1bP9pSecOtYUAamqksm6sULkGAAAYvu227+75unbF+nMkfbPn9e7uspRXSvrQejcSAMo2wCMw/5fte7pfX7S9ZHtrd91Dtr/QXXf38Fv/7ahcA+jPUosrnADG3XCzbn9EXJzfmu8QmRvaP6rlzvXz1qNhAMbcCP1d1/MIzOVavoh4l+3bIqL3Lp3fk/R73e1/QtK/iojHeg7zoxGxf4jNTqJyDQAAMHp2Szqv5/W5kvas3Mj2MyXdJOmqiDgwpLYBwHp58hGYiJiXdOoRmJSXS3rXUFq2BlSuAfRlSW5zLQ7AeBuxrLtL0oW2nyrpYUlXS/qZ3g1sny/p/ZJeERFfGX4TAdRRBVm3fcUt27si4tQAjFmPwDwn6yC2N0i6QtJrehaHpI/YDkl/0nPcStC5BgAAGDERsWj7NZI+LKkt6R0Rca/tV3fX3yjpNyRtk/Q2L89Zu9jnVnMAqELeYzADPwIj6Sck/c2KW8IvjYg9ts+QdIftL0XEJ4s0tgg61wD6sxhVEsD4G7Gsi4jbJd2+YtmNPd+/StKrht0uADU3Wlk30CMwXVdrxS3hEbGn+999tm/V8m3mlXWuR+beJwAAAABAozz5CIztKS13oG9buZHtLZJ+RNIHepbN2d506ntJPybpi0NpdQKVawD92SMzqiQAlIasA9AEI5R1Az4CI0k/KekjEXG0Z/czJd3afSxmQtJfRMRfDq/134nONQAAAACgEv0egem+/jNJf7Zi2YOSnlVy81aFzjWAgbjFUyQAxh9ZB6AJyLpycFYBAAAAACiIyjWAvmyNzLM5AFAWsg5AE5B15aFyDQAAAABAQVSuAQxkhOZDBIDSkHUAmoCsKweVawAAAAAACqJzDQAAAABAQdwWDqA/W25zLQ7AmCPrADQBWVcazioAAAAAAAVRuQbQl8WUDQDGH1kHoAnIuvJQuQYAAAAAoCAq1wD6s+QWVzgBjDmyDkATkHWloXINAAAAAEBBVK4BDMBqMaokgLFH1gFoArKuLJxVAAAAAAAKonINoD9LZlRJAOOOrAPQBGRdaahcAwAAAABQEJVrAH2ZK5wAGoCsA9AEZF15qFwDAAAAAFAQlWsAA2FUSQBNQNYBaAKyrhycVQAAAAAACqJyDaA/m2dzAIw/sg5AE5B1paFyDQAAAABAQXSuAQAAAAAoiNvCAfRlSa0Wtw8BGG9kHYAmIOvKQ+UaAAAAAICCqFwD6M+SmbIBwLgj6wA0AVlXGs4qAAAAAAAFUbkGMJAWUzYAaACyDkATkHXloHINAAAAAEBBVK4B9GfLI3SF0/YVkt4iqS3ppoi4YcX6n5X0hu7LI5J+KSI+N9xWAqidEcs6ACgFWVcaKtcAasV2W9JbJb1I0kWSXm77ohWbfU3Sj0TEMyW9SdKu4bYSAAAATUPlGkBfHq1RJS+R9EBEPChJtt8t6SpJ953aICI+1bP9pyWdO9QWAqilEcs6ACgFWVceziqAUbPd9t09X9euWH+OpG/2vN7dXZbySkkfWu9GAgAAAL2oXAMYyBBHldwfERfnrM9qSGRuaP+oljvXz1uPhgEYf4ygC6AJyLpy0LkGUDe7JZ3X8/pcSXtWbmT7mZJukvSiiDgwpLYBAACgoehcA+jPklsjc4XzLkkX2n6qpIclXS3pZ3o3sH2+pPdLekVEfGX4TQRQS6OVdQBQDrKuNHSuAdRKRCzafo2kD2t5Kq53RMS9tl/dXX+jpN+QtE3S22xL0mKfW80BAACAQuhcA+jLslojNKpkRNwu6fYVy27s+f5Vkl417HYBqLdRyzoAKANZVx7OKgAAAAAABVG5BtCfJTOqJIBxR9YBaAKyrjRUrgEAAAAAKIjONQAAAAAABXFbOID+LJmBLwCMO7IOQBOQdaXhrAIAAAAAUBCVawADsNziWhyAcUfWAWgCsq4snFUAAAAAAAqicg2gL1tq8WwOgDFH1gFoArKuPJxVAAAAAAAKonINYABmVEkADUDWAWgCsq4snFUAAAAAAAqicg2gP+ZDBNAEZB2AJiDrSsNZBQAAAACgICrXAAbAfIgAmoCsA9AEZF1ZOKsAAAAAABRE5RpAf5bcblfdCgAoF1kHoAnIutJQuQYAAAAAoCAq1wD6MvMhAmgAsg5AE5B15eGsAgAAAABQEJ1rAAAAAAAK4rZwAP1ZajFlA4BxR9YBaAKyrjScVQAAAABAJWxfYfvLth+wfV3G+ufbPmj7nu7Xbwy677BRuQYwEAa+ANAEZB2AJhiVrLPdlvRWSZdL2i3pLtu3RcR9Kzb964h48Rr3HZrROKsAAAAAgKa5RNIDEfFgRMxLerekq4awbymoXAPoz0zZAKAByDoATTD8rNtu++6e17siYlf3+3MkfbNn3W5Jz8k4xnNtf07SHkm/GhH3rmLfoaFzDQAAAAAoy/6IuDixzhnLYsXrz0p6SkQcsX2lpP9X0oUD7jtUdK4B9GVJZlRJAGOOrAPQBCOWdbslndfz+lwtV6efFBGHer6/3fbbbG8fZN9hG5mzCgAAAABolLskXWj7qbanJF0t6bbeDWyfZdvd7y/Rch/2wCD7DhuVawD98RwigCYg6wA0wQhlXUQs2n6NpA9Lakt6R0Tca/vV3fU3Svqnkn7J9qKk45KujoiQlLlvJT9IF51rAAAAAEAlIuJ2SbevWHZjz/d/JOmPBt23SnSuAfTn0ZkPEQBKQ9YBaAKyrjScVQAAAAAACqJyDWAgLa5wAmgAsg5AE5B15eCsAgAAAABQEJVrAH3ZHqX5EAGgFGQdgCYg68rDWQUAAAAAoCA61wAAAAAAFMRt4QAGwpQNAJqArAPQBGRdOTirAAAAAAAUROUaQH82VzgBjD+yDkATkHWl4awCAAAAAFAQlWsAA2HKBgBNQNYBaAKyrhycVQAAAAAACqJyDaAv22q121U3AwBKRdYBaAKyrjxUrgEAAAAAKIjONVbN9v+wHbaTdz7YfoHtz9o+ZPtB29cOeizbf257b3ffr9h+Vc+6n7V9pOfrWHf/f9xd/5u2F1Zs87T1/Pmbyu3WUL6AUUHWNRNZh6Yh65ppWFnXtLxr1k+Lwmz/rPo8TmB7UtKtkv5E0hZJ/0zSm20/a8Bj/QdJF0TEZkkvkfTvT4VsRNwSERtPfUn6ZUkPSvpsz/7v6d0mIh5c0w8LoLHIOgBNQNYB64vOdQ3Z/mcrruCdtP2JIbzvFkn/VtKv9dl0q6TNkv5LLLtL0v2SLhrkWBFxb0ScPPWy+/Vdife6RtI7IyJW87NglUw1B8NH1n0bsm4YyDpUgKz7NmTdMAwx65qWd836acdERDx5BU/S2Vq+wveurG1tv832E4mvz6/yrX9b0h9LeqRP+x7ttuef227bfq6kp0i6c9Bjddt9TNKXJO2VdHvGNk+R9MOS3rli1U/Yfsz2vbZ/aaCfDMDIIeue3IasA8YYWffkNmQdao/RwmvMdkvSX0j6RET8SdY2EfHLWr7Fpuh7XSzpUkmvlXTuALu8S9JNkt7Sff1LEfHNQY8VEb9s+19Ieq6k50s6mbHZz0v664j4Ws+y90raJelRSc+R9D7bT0RE5j9SGJSZDxGVIevIuuEh61Adso6sGx6yriyc1Xr7LUmbJP3L9TzoisElPtQN+7dJem1ELA6w//dIeo+WQ3JK0vdJ+jXbP76aY0XEUkTcqeWgzrpS+fOSbl6xz30Rsae776e0/I/AP+37QwMYZWQdWQc0AVlH1qHmqFzXlO2rJb1c0g9GxELOdjdK+rnE6q9HxPetXBgRt0i6pecYp0m6WNJ7bEvSqYnxdtt+WUT89YpDPEPSlyPiw93XX7b93yW9SNLfrPJY0vLv6bc9m2P7Ui3fOvXfEj/bkz+OJPfZBn24+2wOMGxkHVk3TGQdqkLWkXXDRNaVh851Ddl+tqT/R9LlEfGtvG0j4tWSXl3wLQ9qOfBOOU/S30n6x5Ky3v/vJV1o+wWSPi7paZJeLOl3+h3L9hmSXiDpg5KOS7pMy//Y/MyK97hG0vsi4nDvQttXSfqkpCck/aCWr/6+cVU/LYCRQNZJIuuAsUfWSSLrMCboXNfTVZJOl3Rn9yqhtPyMyovKeLPuiI1PDlBhe6b77aOnbgGy/aFuG347Iv6X7V+Q9J+0PODFQS1fMX17v2PZDi3fKnSjlh9b+Lqk10XEB1bs89OSfiqjuVdLeoekaUm7Jf1ORNycsR2A0UfWkXVAE5B1ZB3GhBnpHkA/P/C0c+KTb/rFobzXpp/7t5+JiIuH8mYA0GPUss72FVp+xrQt6aaIuGHF+u+R9KeSfkDS9RHx+2W1F8D4GGbWSc36247KNQAAwIix3Zb0VkmXa7lid5ft2yLivp7NHtPybbIvHX4LAQAr0bkGMBCmbADQBCOUdZdIeiAiHpQk2+/W8u3DT3auI2KfpH22f7yaJgKoqxHKurHCWQUAABi+7bbv7vm6dsX6cyR9s+f17u4yAMCIonINoD9bbrX7bwcAdTbcrNvf5xnErOmGGCgHQHH8XVeaWnWuN7Xasa01WXUzgFr7+tLJ/RGxo+p2IK01vTEm5rZlrpuYnspcPjWVjvPNs9nr5nL2mZ3Inka0tXgiuU/n2OHkusUjxzOXzx89mdxn4cRi5vITS+n+xWJikM5Oco/8CVMnnL12upXea2o6+w+Wqbn0v1+TGzdkLm9t2JjcJ6ay9zm5lNxFRxbSKw+nzndiuSQtzmevW5rP+T1ZShwvcj6lxOcgSW5n/x53Dj9S96zbreVpjU45V9KeitpSiu3bt8f555+fuc6d7N9Vd9K/j0rsE528BMi7XpH9e5d7O22iwxI5HZloZ2fDYl7WddLrTixl/7wncv7/Pz6fvW4hZ5/Fxez36Sym9+ksJabwTnx2kpQ7+HIiG+z0Z9RKZEZrIp3R7Yns401Mpt9ndir9mc9OZq+bTryPJE0lfu++8Lm/r3vWjZVada63tSb1bzZfUHUzgFp71eNf/vqaduQK59BMzG3Tjn9yfea67U85N3P5+U87PXm8y77vzMzl//t56X2+Z/tM5vIN+76c3Gf+no8n1z36P+/JXL7n019L7rPnSwcyl3/58Hxyn/2Jzt7xnD9S2zm96x3T2f9MXrAh/UfYBU89LXP5OT+YvqN35/Oembl89tk/nNxn8fxnZy7/2tH0D/Spbz6RXPfxL+3LXH7/V7M/B0n61jez1x3anf49OXFwf+bypfnsCzCScissM1uy/6Y89PH/UPesu0vLcws/VdLDWp6SaOXcwLV2/vnn65N3/k3muqkTj2cubx9N/z76+KHM5Z2j6Qt/eZ261O+CZ+fS+8xuzn6bDem8Xdx0RubyA8fSFxIePZpe99XHjmYuv/+R9Hn44sMHM5c/vCe9zxPfyn6fo49lf3aSdPyJRzKXLx4/ktyns5jokCudDRMz6c8olRkbtqb7p6edkX28HWemL4A+45wtyXXfd3b278mF27IvmkrSOZumM5dfsH1T3bNurNSqcw0AANAE3TmCXyPpw1qeiusdEXGv7Vd3199o+yxJd0vaLKlj+3WSLoqI7F4mAKBUdK4BDMASo0oCGHujlXURcbuk21csu7Hn+0e0fLs4AKzCaGXdOOGsAgAAAABQEJVrAP1ZcptncwCMObIOQBOQdaWhcg0AAAAAQEG1qlzPd0IPHUuPGAigLGZUSQANQNYNU0fSfGIk/8nJ7FGTO5PpUeVbiVGlWzmDe0fOSNTJ0cKnZpO7dCazZ1pITZ0npc/BfM50W8dypshKrUtNtydJBxN/Xy+cTO+TWrdwLHvkcSk9Kvj80fQYfJ3F9AwRrYns6SnzLExnf34LJ9Oje88fzx6p+3jOOT2cc+5Sn9GxhfS0cakp1taGrCsLlWsAAAAAAAqqVeUaQEUsrnACGH9kHYAmIOtKQ+UaAAAAAICC6FwDAAAAAFAQt4UD6Muy3OJaHIDxRtYBaAKyrjy16lwvhvTYfHp0RAAAANRESIupEbEnEs+D5j0nOjGZvbyTHrXZecdzducj2on3kRTt7NGro5X+k3spcQ4WckYLP5kzcvTJxex1x3NGGF9K7LOYM3r10mL2eV3KGd17af5E5vK8EcHz1kUn+2fKm8N54mT2iPNLieWStLSYPeT8Ys45PZ7TZ0l9FicSn4Mkretg4ShNrTrXACrCwBcAmoCsA9AEZF1puB8AAAAAAICCqFwDGIBH6gqn7SskvUVSW9JNEXHDivXfI+lPJf2ApOsj4veH30oA9TNaWQcA5SDrykLnGkCt2G5LequkyyXtlnSX7dsi4r6ezR6T9C8lvXT4LQQAAEATVd657v6hfLekhyPixVW3B0C2ERpV8hJJD0TEg5Jk+92SrpL0ZOc6IvZJ2mf7x6tp4nci64B6GKGsqyWyDqgHsq4co3BWXyvp/qobAWBkbLd9d8/XtSvWnyPpmz2vd3eXjTqyDkATkHUAGqvSyrXtcyX9uKTfkvSv+20fkpbSsxIAKIuH+mzO/oi4OK81GctGOhlWm3UAKjLcrBs765l1kZgGKzU9Vq68faL6+Y1G4R+wiNW3IjUNVmr5Wo41KiJnWrShtWE9m0DWlabqyvUfSvo1Sclks33tqQrWCY32/3gAhmK3pPN6Xp8raU9FbRnUH2oVWdc5eWRoDQOAdfSHWkXWHTiwf2gNA4BhqKxybfvFkvZFxGdsPz+1XUTskrRLknZ4uvrLRkAjjdQVzrskXWj7qZIelnS1pJ+ptklpa8m6qa1PIeuASoxU1tXKWrLu+5/9A2QdUAmyrixV3hZ+qaSX2L5S0oykzbb/PCJ+rsI2ARhxEbFo+zWSPqzlqbjeERH32n51d/2Nts/S8oA6myV1bL9O0kURcaiCJpN1AJqArAPQeJV1riPi1yX9uiR1r3D+KgEMjChLbo/OFc6IuF3S7SuW3djz/SNavl28cmQdUCMjlnV1QtYBNULWlabqZ64BAAAAAKi9yue5lqSI+ISkT/TbriVptp01UDCAga1pXEBLzIdY2KBZB6AqZN16WE3W2dl/17mzkL1D3qjSncQ4ap3FnH1yjpf6Vcgbtjk1+njOqOTtxPu0MifH6K7L+XO4lTin7cRySWonGpE30LoTz+y2JqbWdZ/O4vzqj5fzPHGqYptXyW1NZJ+IVs4H0V7DurxuTur3ZG3IurJwVgEAAAAAKIjONQAAAAAABY3EbeEARpzFlA0Axh9ZB6AJyLrSULkGAAAAAKAgKtcABuDkoCEAMD7IOgBNQNaVhco1AAAAAKAStq+w/WXbD9i+LmP9z9r+fPfrU7af1bPuIdtfsH2P7buH2/LvVKvK9WTLOnO6Vk0GRs+xNe7HlA0AmoCsGxpbmkycbi9lT8XlpZxpmRL7xPyJ5D6xkHO81JRNM8ld5MXJRNvS7zMxMZu5fCpnXqaZxNRQees2TKUrldOJdZM5f3dPTmdPnzUxlf3zSNLEzFzm8siZEm0pp8Lanky0IfE+Urp9kzMb0vskflEnJtNt25hz7uYS+23IOd5E3vxrazEiWWe7Lemtki6XtFvSXbZvi4j7ejb7mqQfiYjHbb9I0i5Jz+lZ/6MRsX9ojc4xGmcVAAAAANA0l0h6ICIejIh5Se+WdFXvBhHxqYh4vPvy05LOHXIbB0YZGEB/5tkcAA1A1gFoguFn3fYVt2zviohd3e/PkfTNnnW79e1V6ZVeKelDPa9D0kdsh6Q/6TluJehcAwAAAADKsj8iLk6sy7rfPTI3tH9Uy53r5/UsvjQi9tg+Q9Idtr8UEZ8s1ty1o3MNYABmPkQADUDWAWiCkcq63ZLO63l9rqQ9Kzey/UxJN0l6UUQcOLU8IvZ0/7vP9q1avs28ss41z1wDAAAAAKpwl6QLbT/V9pSkqyXd1ruB7fMlvV/SKyLiKz3L52xvOvW9pB+T9MWhtTxDrSrXMy3r6ZuyRwUEMKC1jBZujcyokgBQGrJuqFqSZhIjYvt49j9Wnj+ePF4cO5i5vHP8aHqfxewRxiUln0n1Unpk61Yr+0/rmEy3e3Iqe2Tr6ZwRwTfljES9ObFu68b039Cnbcge5fzQTPZySZqezV43P7cluU9nMT1qeko7Z5/WRGK08NmNyX2mNm3NXp74eaT0z3raGs6plB5JfONU+nNN/b+yJiOUdRGxaPs1kj4sqS3pHRFxr+1Xd9ffKOk3JG2T9DbbkrTYvc38TEm3dpdNSPqLiPjLCn6MJ9Wqcw0AAAAAGB8Rcbuk21csu7Hn+1dJelXGfg9KetbK5VWicw2gL8vJ+T4BYFyQdQCagKwrz2jcDwAAAAAAQI1RuQbQnzVKo0oCQDnIOgBNQNaVhso1AAAAAAAF0bkGAAAAAKCgWt0WPjk7obMu2l51M4B6e3QtO5nbhwA0AFk3VNFRaz57miyfPJy9z7EnkodbOpy9Lo4eSjchbyquieyplLyG6aRa7fS0TDE5nbl8bub05D5Hcqbp2jKT/ef96RvS00bt2DSTufzAkfTPevJE9rlbXMieWixPakotKX/6rtR0aZM504FNz2VP07UhZ1qt2cS6bRuzPztJ2rE5ve70xBRnG6fTn+uGyfWsiZJ1ZaFyDQAAAABAQbWqXAOojltciwMw/sg6AE1A1pWDswoAAAAAQEFUrgH0Z57NAdAAZB2AJiDrSkPlGgAAAACAgmpVuZ6cm9Y5z3la1c0A6u3jn1zbfuZaHIAGIOuGp7MkHz+YuaqVGBV88fF96cMdPJC9/Ghi5HFJsYaRqD23OX28hewRtCcm0yNRp0bKnprckNxn41R69PHtiVHBHz+eHhl952nZo4UfzNnn5MnFzOWdxU5yH7ecuXx+Kj2y9tJi9vssHy/7M5qeTZ+fmbnsdRtyRvc+I3F+dm7JXi6lP4e8dRsn09XkDe1IrlsTsq4UnFUAAAAAAAqqVeUaQFXMFU4ADUDWAWgCsq4snFUAAAAAAAqicg1gIMEVTgANQNYBaAKyrhycVQAAAAAACqJyDaA/i2dzAIw/sg5AE5B1palV53pi4wbtuPTiqpsB1NyfVd0AAADkzqLaR7Onz1o88Ejm8qXEcklafOKxzOXzh44m9+ks5Ezz1M7ufEzOpY83efJ44ljpKZYmJrKnhoqJ9DRPmzfvTK47uZg9ZdPOTemppo7ML2UvP5E+P8fns9dFJz1lVGsi+5zOT6e7JEs5U3u1E8ebnE6f75nENFjbTp9N7nPO6dnTop19WnqfM+bSU3Ftmclu3+bpdIe3dSz7/xWMlsouWdg+z/bHbd9v+17br62qLQD6seQhfY0Zsg6oE7KuCPIOqIshZt2Y5l1KlZXrRUmvj4jP2t4k6TO274iI+ypsEwCsN7IOQFOQdwAarbLKdUTsjYjPdr8/LOl+SedU1R4AKANZB6ApyDsATTcSz1zbvkDSsyX9bca6ayVdK0nn7Th9uA0D8A9aDHxR1KBZ196wdbgNA/APyLp1kcq73qw7/+yzht8wAMvIulJUflZtb5T0Pkmvi4hDK9dHxK6IuDgiLt6+ZePwGwgA62A1WdeaJusA1Fde3vVm3Y6tp1XSPgAoS6WVa9uTWg7fWyLi/VW2BUBaSAqmbFgzsg6oB7KuOPIOGH1kXXkq61zbtqS3S7o/It48yD6t2U2a+kfPK7dhALCO1pJ1AFBHq827WFzQ0mOJKbe+9XDm8pOPpKfiOn7gYObyhUPHkvss5UzF1Z7M/jN5Yi49RdZsYnqqXInbcycm0lNnxVR6CqhNU5szl2+dzZ7yS5LO2pj9XscWsqfokqT5nCmyUvZPZk9BdXImfd6WltLv02plj0SdNxXXaYkpyZ6ybS65z1O2Z0/FlTe92Y6cqbg2T2V/5lOL2VO5SUpOW4fRUmXl+lJJr5D0Bdv3dJe9MSJur65JADLZElc414qsA+qCrCuKvAPqgKwrTWWd64i4U1KzJj4D0DhkHYCmIO8ANN1IjBYOoAa4wgmgCcg6AE1A1pWCswoAAAAAQEFUrgEMgGdzADQBWQegCci6stSqc700Ma0j2/+3qpsBAACAohYXVj0q+JGHv5U83InEaOHzh9IjMC/ljIbdToxsPTmXHiF68eiJzOWdpfT7bGhnv4+n0qOSt3JGC587LXvdlun0n/2pUa/zRgtfikiuS5mdym7DE8fmk/vkjUreTowWvmkm/bPu2JR9XlMjgkvSzsQ+OxOjrEvS6TkjlqdGC28/kR4RPJ54NLkOo6NWnWsA1WE+RABNQNYBaAKyrhycVQAAAAAACqJyDWAwXOEE0ARkHYAmIOtKwVkFAAAAAKAgKtcA+rOXvwBgnJF1AJqArCsNlWsAAAAAAAqqVeX6xGJH9+9PT6cAAACAeugsLGj+0b2Z61JTbuVNxXV8/7HM5ScOnUy3YT49zVMrMV3S1NxUcp8NJ9JTSiXfJzEV12zOVFyTc5vTx5vMnlJqy+adyX3ml7Kn1UpN0SVJnTVNxZX9s26ZnUzuM7+UMxVXovqaOxXX5uyf6ezN6fOdmnLr9Nn0+2zKmYqrdTR7yq3UcklaSExbh9FSq841gAox8AWAJiDrADQBWVcKzioAAAAAAAVRuQYwkOAKJ4AGIOsANAFZVw7OKgAAAAAABVG5BjAASy2uxQEYd2QdgCYg68pSq8714ZNL+uuHHqu6GQAAACios7C46lHBj+w5nDzekX3Zo4UvHE2P4L2UM1q429kjUU/NpUe2XjyxmLk8EqNxS1JrKvvP8Ym59OjV3pAeLXxyZmN2G6Zmk/tsmso+3nzOKN4LiZ8p50fVZKJDtzFndO+lTvqA7Vb2Z7RxOn280xM/0xk5o8DvSHzmW3JGBJ9ZSs9w1E6MCr6YMyL40oFHkuswOmrVuQZQEYtRJQGMP7IOQBOQdaXhrAIAAAAAUBCVawADMFc4ATQAWQegCci6snBWAQAAAAAoiMo1gMFwhRNAE5B1AJqArCsFZxUAAAAAgIJqVbk+fGJBH7330aqbATRScIUTQAOQdcPTWVzU8W89nrnu6KNHM5cf3nskebxj+7OnPjpyMnt6LEmaz5vmydnTPG0+spDcJzW1V2paL0lqz2RPyzSZMxXXxOYtyXWdLdsyl7dmNiX3mdsyl7l8fjr9/8NCJ3t6qk6kz+lkYuqsDZPpKa0WOunp0lKf0cap9PG2zGS3e0fOVFwbJxNTiE2lz0/riezfbUnS4f2Zi/Om2zr2aPY+a0XWlYOzCgAAAABAQbWqXAOoiBlVEkADkHUAmoCsKw1nFQD6sP3btk/reX267X9fYZMAoBTkHYAms31HRgZ+eND96VwDQH8viognTr2IiMclXVldcwCgNOQdgCbbnpGBZwy6M7eFAxhMYtCQhmjbno6Ik5Jke1bSdMVtAlCGZmedRN4BzUDWpXRsnx8R35Ak20+RlB6lb4Vada7nTy5pz0NPVN0MAM3z55I+ZvtPtRywvyDp5mqbBAClGFredRaWdGzfocx1R/dljxaeGhFckr51LHsU7yOL6dGm1zJa+PGl9PF2PJZ9vHbOqNJTc9mjV0+fnn1uJGnmQPYI45LU2rwvc/nk5q3JfTqJkcTnZk5P7nNyMftnXZzN/nnyTLbT5ydv9PFW4jPakBjdW5K2Jto3l7NPalTw9on0Z9Q6cTi5bulg9ueXWi5JJw6k3wvr6npJd9r+q+7rH5Z07aA716pzDaAqzR74IiJ+1/bnJV0myZLeFBEDP38DoC6anXUSeQc0A1mXEhF/afsHJP2QljPwX0XEwPOg0bkGgMHcL2kxIj5qe4PtTRGRviwNAPVF3gFoJNuWdIWkp0XEv7N9vu1LIuLvBtmfzjWAgUSDr3Da/j+1fEvQVknfJekcSTdKemGV7QKw/pqcdRJ5BzRF07Mux9skdSS9QNK/k3RY0vsk/eAgO1d6Vm1fYfvLth+wfV2VbQFQH/2yw8v+U3f957u39xTxK5IulXRIkiLiq1rFyJFkHYC1qCDrpAJ5R9YBWIsiWVdC7jwnIn5F0gnpydHCpwbdubLKte22pLdKulzSbkl32b4tIu6rqk0AcozIFc4Bs+NFki7sfj1H0h93/7tWJyNi3t2BU2xPaMCRI8k6oGaanXXSGvOOrANqZgyyrqTcWegeN7rt26HlSvZA+p5V2xdlLHv+4O1LukTSAxHxYETMS3q3pKvW4bgAxtsg2XGVpHfGsk9LOs32zn4Hzsm7v7L9Rkmzti+X9F8l/X/r2F4AWKmKrJPWnndkHYC1KJJ1ZeTOf5J0q6QzbP+WpDsl/fagOw9SuX6v7f8i6XclzXT/e7Gk566+rd/mHEnf7Hm9WxlXW21fq+7w5+0NW3Xg698o+LYAVitsxfDmQ9xu++6e17siYlfP60GyI2ubcyTt7fPeqby7VNIrJX1B0i9Kul3STQP9NGvMOgDDR9bpuZKu09rybtVZd9bMtI4/fiLzYKnlB08sJhvw2PxS5vK8qbgWcqZ5Sk3FNd9J16bazm7DZOLnkdI/6+zj6THkTuasm9rxRObyzpHs5ZLU2pA95dbUdPYUXZI0O5F9HuaXcqbVmsnueqSm1JLWOhVXO7nPbGLKrdTPI0kz7ez38dHsKeMkSTlTcXUOP5G5PO9zPfnE+o0pOOSsk/LzrkjWDZQ7qxERt9j+jJbHmbCkl0bE/afW2z69e6t4pkE618+R9DuSPiVpk6RbtPyHZlFZn+h3/N/TPfG7JGlq61MGnsAbQG3tj4iLc9YPkh0D5UuGzLyLiI6k/9z9+s4G2e+LiJ8q0F6yDmiekcs6SSqQd6vOuu/dspmsA5ohL++KZN1aMzBXRHxJ0pcSqz8mKTm+xSCd6wVJxyXNavnq5te6wVvUbknn9bw+V9KedTgugPUWUs6F42EbJDvWmi9rzbun5awj64C6IOsGkco7sg6oi/HJuqkB9l1vuSX/QZ5kv0vLAfyDkp4n6eW2/9s6NOwuSRfafqrtKUlXS7ptHY4LYLwNkh23Sfr57uiSPyTpYET0u03y1LHXknd5/0SRdQDWYhSzTkrnHVkHYC2KZF0VuZN7WWKQyvUrI+LUPfKPSLrK9isKtypi0fZrJH1YUlvSOyLi3qLHBVCGyH3maZhS2WH71d31N2r5GcErJT0g6Zikfz7g4dc978g6oE7IuvVub5FjAijLeGTdKOZO3851T/j2Lvsv6/HmEXG7lk8WAAwsKzu64Xvq+9DyXK2rPe5a8y73FiGyDsBajGDWSTl5R9YBWIsiWVdB7hS+LRwAFEP6GkW2z8hY9vSel28YYnMAlKjJWSdJtl9s506AS94BY2BYWTfKeZfF9tttf/+KZb/Z8/KFefsPclv4yFhaOKkjjz5UdTMANM9f2/43EfFeSbL9ei1PVXORJEXER6psHACso6slvcX2+yT9ae8UNNL65l0shRaOLGSuSy0/uJAedy015dahnKm45jvpP/2nWqufqmh2MXufLTlTiJ08NJ+5fOHoyeQ+C0fTU3vF8ezpoeLEseQ+rfnsdV5Mt2F6Yi57+VL6nC4kpjHbNJ3cRQs5x0tNxTWTM61W6nOdTky3JaXPgxdX/zlIUpzIXrd4LH28+UPpzw/r6p9I+se23xwR7+wue4mk35SkiHgsb+dada4BVCMk5fz90QTPl7TL9ssknSnpfkmXVNoiAOuOrJMi4udsb5b0ckl/ajsk/amkd0XE+k20C6AyZF2ufVr+u+8W28+R9Fr1uRW8F7eFA0Af3REp/1LScyVdIOmdEXGk0kYBQEki4pCk90l6t6Sdkn5S0mdt/4tKGwYA5XNEHIqIn5C0X9JfSdoy6M50rgGgD9t3SHqOpGdoebTKP7D9+9W2CgDWn+2X2L5V0v+QNCnpkoh4kaRnSfrVShsHAOX7wKlvIuLfSvptSV8bdGduCwcwkBiRKRsq8kcRcSpsn7D9XEm/XmWDAJSj4VknST8l6c0R8de9CyPimO1fqKhNANYZWfftbN8ZEc+T9Hrb/7p3laSw/TVJvxcRb8s7DpVrAEiwfWf32z+3fejUl6THJf2a7a/Z/uUKmwgA66In735K0n/vzbzu19ckPT3nEABQW92OtSJiU0Rs7vnaFBGbJV2s5eevc9Wqch2dJZ08nDtAG4ASNHXgi96gzVpve5ukT0nKvYoJoB6amnXSt+Xdxqz1ZeRdRGghMYr2Qid7hO+80b1PJNbl7ZO3bilR2csZVFrHl7LrVsdzRrzeMr+UuXwxZ4TxpRPZI4xL0tLJ7JGtJ+bTI1Grk90GLaXfpz2ZPVp4OzGCtyRNJkbqXor0PqkRwSUptWqindwl2YZ2zujwXsz+LLyYPj+dnPMdJ7PXLR7P+VwTvydr0eSsW6uIOGD7+f22o3INAGsUEQe0PKIkAIw18g5A03UHuM1Vq8o1gOpwgTPbIEELoD7IujTyDhgfZF05qFwDAAAAAFAQlWsA/QXP5gBoALIOQBOQdaWhcg0AAAAAQEFUrgEMhPkQATQBWQegCci6ctSrcx2hSE0VAAAAgLGQmrkqNT1W/rFGuxPRyZmma1gc2VOf5UlNkZUzo1X6WErvtDQKQ2+t4fysfxNG4Dygr3p1rgFUIiRV/88KAJSLrAPQBGRdeXjmGgAAAACAgqhcAxjIiN9VBwDrgqwD0ARkXTmoXAMAAAAAUBCVawADYRwNAE1A1gFoArKuHPXqXLul9tRs1a0Aam2h6gYAACDJklrt7FGiE4s1lTMU9Vr2mc/pYbQTo2Gnlue1IbVcktpT2TeSup2+wXRN61rpfaKV6BI4vU9qFPalnHPaSYz8nTeieydnXWqU8bxbnlMDeeVNTZU8PznnNH9dO3Nx3ufanszeB6OF28IBAAAAACioXpVrAJWIyL+iCwDjgKwD0ARkXXmoXAMAAAAAUBCVawADST2jBADjhKwD0ARkXTmoXAMAAAAAUBCVawAD4dEcAE1A1gFoArKuHLXqXLcmJjV7+plVNwOotRNVNwAAAEluW5Nzk5nrZmay/0SdnV9KHm8uMY3RUk4nou30ytQUXqn3kaTZxLq5ifQ0ShOJn3UysVySJuZmkutaMxsSy+eS+8RE9ucQ7ankPguJE7uQMxXXYuLjO7mYvkl5oZNe10pOi5Zzvlupdid30Ww7cX4m0p+Dp3LWTWevm5hJn+/2THYbMFpq1bkGUI1Q/jyTADAOyDoATUDWlYdnrgEAAAAAKIjKNYCBcH0TQBOQdQCagKwrB5VrAAAAAAAKonINYCA545MAwNgg6wA0AVlXjko617Z/T9JPSJqX9L8k/fOIeKLffu2pGW0+9+kltw4Yb49X3YAGWWvWAUDdrCXv3LJmNk9nrptOLN9yfDF5vPmc0Z7T+6x+tPCNE+kbP7dOZa+b3pIeBXp6S+IcnJ4e3XtqU/aI4JLUmtucudyJ5ZLUmcw+Xmcq/T4nT2QP/X0yZ3j2w/PZn9+xhfQo8KlRySWpnfiM8gbrajt71O2T7ZwRyyeyu0yenE3uM7HxtOS6VmLd9OmbkvtMbU7/PmB0VHVb+B2SnhERz5T0FUm/XlE7AAwoYjhfY4asA2qGrFsz8g6okWFl3ZjmXVIlneuI+EhEnLp09WlJ51bRDgAoE1kHoCnIOwAYjWeuf0HSe1IrbV8r6VpJas9tH1abAPQIhTqMK1nU4Fm3Yeuw2gSgB1m3bpJ515t1Z83ODLNNALrIuvKU1rm2/VFJZ2Wsuj4iPtDd5npJi5JuSR0nInZJ2iVJ0zu+i98CACOljKyb2voUsg7AyFmPvOvNuotO20zWARgrpXWuI+KyvPW2r5H0YkkvjGja3fgAxgVZB6ApyDsAyFfVaOFXSHqDpB+JiGNVtAHAKjRwQIr1QNYBNUPWrRl5B9QIWVeaqp65/iNJ05LusC1Jn46IV/fbaWKyrR3nnV5224Cx9vWqG9Asa8o6AKihVedda7Kl2e3ZUz2dOHQyc/mmE+mpuHQwe5/E7FiS8qfvamfP8qQtk+kDbt6QPc3Thm3pKa02bMuezmn6tPS0TDPbtiTXtbZsy14xm56KK2ay3+v4QvoEHU2sO3wyPa3WwcTndyQxRZckLeRMlzaZmIprYamd3Cdlop392UnS1EL2+0wmzpskdU6kp85qbTot+3ib05/RzLb0OoyOSjrXEfHdVbwvgLXL+bcNCWQdUD9k3dqQd0C9kHXlqGqeawAAAAAAxsYoTMUFYMSFeDYHwPgj6wA0AVlXHirXAAAAAAAUROUawEA64hIngPFH1gFoArKuHFSuAQAAAAAoqFaV69mZCX3fhdurbgZQa3evcT+ezQHQBGTd8LQmJrRhR/YUqwtH5zOXd3Lmzmol5s6aOZh9LEla6KSP13b28aY3TSX3mT19JnP53Jk5U3GdkT2t1uyO09JtO/2MVa/rzKan71qc2pi5/Mjx9BRZR+azp9zafyx9vh8/vpC5/HDiWNLaPqONU+kuTmpqr8lWuuaYmvJreiLnd2Emfb4nUp/RwQPJfTaccSi5bi3IunJQuQYAAAAAoKBaVa4BVCMkdbjECWDMkXUAmoCsKw+VawAAAAAACqJyDaC/kJbSjzwBwHgg6wA0AVlXGirXAAAAAAAUVKvK9aaZCb3we9KjIwLo7+Y17MOzOQCagKwbrtbkhDbs3Jq5bvHEyczlnaX059Oayq4ZTc6lR6/u5IxS3ZpqZy6fmptM7pMaLXzjzvTI0XM7t2Uf68wdyX3a285KrouN2ee0syF7ZHZJOpQ4DwdPps/Po0eyz+u+xEjvknQgMZL4wWPZo4hL0vxizmjhiVG8N86kuzgnF7NH+G4lRh6XpMnESPRTifeXpOmc891ZOJ65vL3jnOQ+U8cOJ9etFllXHirXAAAAAAAUROcaAAAAAICCanVbOICqhJa4fQjA2CPrADQBWVcWKtcAAAAAABRE5RpAXwx8AaAJyDoATUDWlYfKNQAAAAAABdWqcj031dYl526uuhlA84S0lJ4JAwDGA1k3VK3JCW04c3vmus784qqPN5mYfunkoexpvSRpKWcqLreza1BTG3Om4tq2MXP53DnpabVS6/KmZWpvTU/FtZiYAuq40u0+eDL7fH8rZ1qtR45kn9fdT2RPMyVJ+xKfxcHjeVNxpT+jqYns6dI2Tqe7OHlTe6UkZuLSZCtdp5yeSLdhS+Izam85mm7DjvWbiousKw+VawAAAADAyLG91fYdtr/a/e93XJmwfZ7tj9u+3/a9tl/bs+43bT9s+57u15VltrdWlWsA1eDZHABNQNYBaIKaZd11kj4WETfYvq77+g0rtlmU9PqI+KztTZI+Y/uOiLivu/4PIuL3h9FYKtcAAAAAgFF0laSbu9/fLOmlKzeIiL0R8dnu94cl3S8p/VxFiahcAxgI8yECaAKyDkATDDnrttu+u+f1rojYNeC+Z0bEXmm5E237jLyNbV8g6dmS/rZn8Wts/7yku7Vc4X588KavDp1rAAAAAEBZ9kfExamVtj8qKWuUvutX8ya2N0p6n6TXRcSh7uI/lvQmLd8N/yZJ/1HSL6zmuKtRq871dEu6YJah7YBhW342p+pWAEC5yLrh8sRkckTsuU56hOiUiZnpzOVTm9MjMC/ljEreSowWPjE3m9xnZlv2rDYbc0YLn0icg4kz0ne1Lm1MH29pw9bM5QePpn/WA8eyR+t+5HB6pPXUqOBfP3Asuc++Qycylx9OvL8kLeUMa91OfEYbEiPHS9KRxMjoSzn/87da2cOFT0/kjRaeGGJc0szcXGJ59mcnSRM7ss/dWoxa1kXEZal1th+1vbNbtd4paV9iu0ktd6xviYj39xz70Z5t/rOkD65fy78Tz1wDAAAAAEbRbZKu6X5/jaQPrNzAtiW9XdL9EfHmFet29rz8SUlfLKmdkmpWuQZQkci/ogsAY4GsA9AE9cq6GyS91/YrJX1D0sskyfbZkm6KiCslXSrpFZK+YPue7n5vjIjbJf2u7e/XcsH+IUm/WGZj6VwDAAAAAEZORByQ9MKM5XskXdn9/k5JmffhR8QrSm3gCnSuAfQVijrNhwgAa0LWAWgCsq48PHMNAAAAAEBBdK4BAAAAACioVreF++QxTXz9M1U3A2ikJe4eAtAAZN3weGIqPd1UYiqu7AmMlrVnpjKXTx7ekNynkzMVlxPTPE3OzST3mdm2JXufM85O7pOaiis2p6fb6mw4Pbnu4Mnsc5daLkl7E1NuPZyYOktKT7n19f3pqc+OHp7PXH7yRHoqrs5ieiquVmIqrBPT6S7O8fnVT/PWTkzFNZP4HZGkTVPpNsy0s483ObctuY8X09OirQVZVw4q1wAAAAAAFFRp59r2r9oO29urbAeAfCGpEzGUr3FE1gH1QNYVR94Bo2+YWTfOeZelss617fMkXa7l+coAYCyRdQCagrwD0HRVPnP9B5J+TdIHKmwDgEGEtNQZ/SuPtrdKeo+kCyQ9JOmnI+LxjO3eIenFkvZFxDNKbhZZB9RFTbJuhJF3QB2QdaWppHJt+yWSHo6Izw2w7bW277Z997cef6L8xgGos+skfSwiLpT0se7rLH8m6YqyG7PWrOucPFJ20wBgXQ2ad/xdB2CclVa5tv1RSWdlrLpe0hsl/dggx4mIXZJ2SdKzLzg7jt71V+vWRgCDOfVsTg1cJen53e9vlvQJSW9YuVFEfNL2BevxhmVk3dTWp9TiZAPjpkZZV4n1yLverLv4md8X2nJG5nbthezRo6OTHjl6diIxWvhc+oJl3vHcyq5BTWyYTe7T2pI92nN7W9Zp677P6dnrlnJGjj7u7J9Vkg6ezB4BPTUiuCTtO5o9ivfX92ePCL68LntU8ENPpEcYP3Youw3ziTZL+aOFOzGK92TOaOGLidHCv5lTyZ1KjEq+cSb9Phtz2rBhsp25fHoivc+WnBHiV4usK09pneuIuCxrue1/JOmpkj5nW5LOlfRZ25dExCNltQdAbWy3fXfP613dP8YGcWZE7JWkiNhrO/uvtnVE1gFoCvIOAPIN/ZnriPiCpCf/4LX9kKSLI2L/sNsCYHBDnA9xf0RcnFrZp3IyMsg6oJ6Y+3X1yDugfsi6clQ5oBkArFqqciJJth+1vbNbtd4pad8QmwYAAIAGq7xzHREXVN0GAPlq9GzObZKukXRD978jM2ItWQeMvhpl3Ugj74DRRtaVp7J5rgGgBDdIutz2V7U81+oNkmT7bNu3n9rI9rsk/U9JT7e92/YrK2ktAAAAxkbllWsANRChTg3mQ4yIA5JemLF8j6Qre16/fJjtAlATNck6ACiErCtNrTrXC0ePac/ffL7qZgAAAKCgaLW1NJs9vVD7tOypuCY62dMoSdLSxGTmcs8eTjdiMXsKKklSK3u6pNaGTeldNiV+nq3pqbiWZrdkLu/MZC+XpEPH0+fh8ePZ01qlptuSpIcfP565fO/B7OWSdCQxrdaRnKm4jh9JTMV1LHtaL0nqLKTb7cRnNDWX/oxSU3ulpvWSpN1T2e+TN93WabPZv4+SdPpM9roNk+k2zG6YS67D6KhV5xpANUKMKglg/JF1AJqArCsPz1wDAAAAAFAQnWsAAAAAAAritnAAA2HKBgBNQNYBaAKyrhxUrgEAAAAAKKhWleuFowva+5m9VTcDaJzlgS+4wglgvJF1Q9ZqK2ayR3WOhexRqltbckb3TvDkVHJdLKVH3XY7e4Roz2xI7tPesi1zeSfxc0pSJzFa+NHF9O/isYXsEa8l6fHj2SOtP3Y8fe72Hc4exfvAwfTI30cPZa9LjQguSccf35+5fOHEkeQ+nZwR3VOjhS/Np0c573R2ZC5vTaRrjpPT2e/zrY3p87Pv8HRyXWq08NNm012zuZzPfLXIuvJQuQYAAAAAoKBaVa4BVCSkTocrnADGHFkHoAnIutJQuQYAAAAAoCAq1wD6Wn42p+pWAEC5yDoATUDWlYfKNQAAAAAABVG5BjAQ5kME0AR1yTrbWyW9R9IFkh6S9NMR8XjGdu+Q9GJJ+yLiGcNsI4DRVZesq5tada6/cvzY/hfc83dfX+fDbpeUPS/AaKGd66vJ7XzKOh8P62zh8W/s3/PuX8zMuj2JfT6fc7wPLv+nyb/z+fL+vkjNsnIip52PJfb5TM773Pi+nJWFjP3nnjMx07hn3XWSPhYRN9i+rvv6DRnb/ZmkP5L0ziG2bSCf/ft79s9sOo2/60Yb7cxx5+p34e+6MVerznVEZE9MV4DtuyPi4vU+7nqjneuLdq5OKJgPcYjIOtq5Xmjn6tQs666S9Pzu9zdL+oQyOtcR8UnbFwytVatA1tHO9UI7V6dmWVcrtepcAwAAjInttu/ueb0rInatYv8zI2KvJEXEXttnrG/zAACrRecaQH8hLTEfIoBxN9ys29+vgmX7o5LOylh1fTlNAtAI/F1XGjrX0mquEleJdq4v2ommqcvvEu1cX7SzxiListQ624/a3tmtWu+UtG+ITRtldfldop3ri3ZiJDS+c73KW7AqQzvXF+1cnRBXOOtuVH6X+qGd64t2rk7Nsu42SddIuqH73w9U25zRMCq/S/3QzvVFO1enZllXK8xzDQAAUD83SLrc9lclXd59Ldtn27791Ea23yXpf0p6uu3dtl9ZSWsBoAEaX7kGAACom4g4IOmFGcv3SLqy5/XLh9kuAGgyKtc9bP+q7bC9veq2ZLH9e7a/ZPvztm+1fVrVbTrF9hW2v2z7ge58myPJ9nm2P277ftv32n5t1W1Ksd22/fe2P1h1W6I78MUwvlA+sq6YOuQdWbc2ZN14IeuKIevWV1Ozrml5R+e6y/Z5Wr6t6htVtyXHHZKeERHPlPQVSb9ecXskLYeFpLdKepGkiyS93PZF1bYqaVHS6yPieyX9kKRfGeG2vlbS/VU3AuOFrCumRnlH1qHRyLpiyLpSkHUNQOf6H/yBpF/T8jP+IykiPhIRi92Xn5Z0bpXt6XGJpAci4sGImJf0bklXVdymTBGxNyI+2/3+sJZD7pxqW/WdbJ8r6ccl3VR1W07h6ubYIOuKqUXekXVrR9aNDbKuGLJuHTU565qWd3SuJdl+iaSHI+JzVbdlFX5B0oeqbkTXOZK+2fN6t0Yw2FayfYGkZ0v624qbkuUPtfxHQafidmCMkHXronZ5R9ahaci6dUHWra8/FFnXCI0Z0Mz2RyWdlbHqeklvlPRjw21Rtrx2RsQHuttcr+XbYG4ZZttyOGPZSF+msr1R0vskvS4iDlXdnl62XyxpX0R8xvbzK26OJCnUvCuPdUXWla5WeUfWrQ5ZVx9kXenIunVC1jVLYzrXEXFZ1nLb/0jSUyV9zra0fEvOZ21fEhGPDLGJktLtPMX2NZJeLOmFETEq/1fslnRez+tzJe2pqC192Z7UcgDfEhHvr7o9GS6V9BLbV0qakbTZ9p9HxM9V3C7UAFlXutrkHVmHcUbWlY6sWz9kXYM0pnOdEhFfkHTGqde2H5J0cUTsr6xRCbavkPQGST8SEceqbk+PuyRdaPupkh6WdLWkn6m2Sdm8/C/t2yXdHxFvrro9WSLi19Ud1KR7hfNXKw/g7qiSqC+ybt3UIu/IujUi62qPrFs3ZN06IeuahWeu6+WPJG2SdIfte2zfWHWDJKk7GMdrJH1YywNJvDci7q22VUmXSnqFpBd0z+E93SuJAEbHSGadVKu8I+uA0UfWFUfWYaQ0vnK9UkRcUHUbUiLiu6tuQ0pE3C7p9qrb0U9E3Kns54hGUkR8QtInKm6GQlzhHDdk3drVIe/IurUh68YPWbd2ZN36I+vGH5VrAAAAAAAKonINoK/g2RwADUDWAWgCsq48VK4BAAAAACiIyjWAgXCFE0ATkHUAmoCsKweVawAAAAAACqJyDaCvUHCFE8DYI+sANAFZVx4q1wAAAAAAFETnGoXZfpPt1/a8/i3b/7LKNgHAeiPrADQFeQesDbeFYz28XdL7Jb3FdkvS1ZIuqbZJWE8R0iK3DwFk3Zgj64AnkXdjjKwrD51rFBYRD9k+YPvZks6U9PcRcaDqdgHAeiLrADQFeQesDZ1rrJebJP0fks6S9I5qm4IyMPAFIImsG3tkHfAk8m6MkXXl4JlrrJdbJV0h6QclfbjitgBAWcg6AE1B3gGrROUa6yIi5m1/XNITEbFUdXuwviK4wglIZN24I+uAf0DejS+yrjx0rrEuuoNd/JCkl1XdFgAoC1kHoCnIO2D16FyjMNsXSfqgpFsj4qtVtwflWAqucKLZyLpmIOsA8q4JyLpy0LlGYRFxn6SnVd0OACgTWQegKcg7jArbWyW9R9IFkh6S9NMR8XjGdg9JOixpSdJiRFy8mv3XC51rAH2FgmdzAIw9sg5AE9Qs666T9LGIuMH2dd3Xb0hs+6MRsb/A/oUxWjgAAAAAYBRdJenm7vc3S3rpkPdfFSrXAPpiVEkATUDWAWiCCrJuu+27e17viohdA+57ZkTslaSI2Gv7jMR2IekjtkPSn/Qcf9D91wWdawAAAABAWfafegY6i+2PSjorY9X1q3iPSyNiT7fzfIftL0XEJ1fb0KLoXAMYCNUcAE1A1gFoglHKuoi4LLXO9qO2d3arzjsl7UscY0/3v/ts3yrpEkmflDTQ/uuFZ64BAAAAAKPoNknXdL+/RtIHVm5ge872plPfS/oxSV8cdP/1ROUaQF8haanTqboZAFAqsg5AE9Qs626Q9F7br5T0DUkvkyTbZ0u6KSKulHSmpFttS8v927+IiL/M278sdK4BAAAAACMnIg5IemHG8j2Srux+/6CkZ61m/7JwWzgAAAAAAAVRuQbQX8RIDXwBAKUg6wA0AVlXGirXAAAAAAAUROUaQF/LA19whRPAeCPrADQBWVceKtcAAAAAABRE5RpAXxHSIlc4AYw5sg5AE5B15aFyDQAAAABAQVSuAfTFszkAmoCsA9AEZF15qFwDAAAAAFAQlWsA/QVXOAE0AFkHoAnIutJQuQYAAAAAoCAq1wD6CgVXOAGMPbIOQBOQdeWhcg0AAAAAQEFUrgEMhCucAJqArAPQBGRdOahcAwAAAABQEJVrAH0Fo0oCaACyDkATkHXloXINAAAAAEBBdK4BAAAAACiI28IBDCS4fQhAA5B1AJqArCsHlWsAAAAAAAqicg2grwipwxVOAGOOrAPQBGRdeahcAwAAAABQEJVrAAMIRYz+FU7bWyW9R9IFkh6S9NMR8fiKbc6T9E5JZ0nqSNoVEW8ZbksBjKZ6ZB0AFEPWlYXKNYBxcp2kj0XEhZI+1n290qKk10fE90r6IUm/YvuiIbYRAAAAY4jKNYCB1GRUyaskPb/7/c2SPiHpDb0bRMReSXu73x+2fb+kcyTdN7RWAhhZNck6ACiErCsHnWsAo2a77bt7Xu+KiF0D7ntmt/OsiNhr+4y8jW1fIOnZkv52TS0FAAAAuuhcA+hvuKNK7o+Ii1MrbX9Uy89Lr3T9at7E9kZJ75P0uog4tLomAhhLjKALoAnIutLQuQZQKxFxWWqd7Udt7+xWrXdK2pfYblLLHetbIuL9JTUVAAAADULnGkBfISk6VbdiILdJukbSDd3/fmDlBrYt6e2S7o+INw+3eQBGWY2yDgDWjKwrD6OFAxgnN0i63PZXJV3efS3bZ9u+vbvNpZJeIekFtu/pfl1ZTXMBAAAwLqhcAxhIHeZDjIgDkl6YsXyPpCu7398pyUNuGoCaqEPWAUBRZF05qFwDAAAAAFAQlWsA/TGqJIAmIOsANAFZVxoq1wAAAAAAFETlGsAAQsEVTgBjj6wD0ARkXVmoXAMAAAAAUBCdawAAAAAACuK2cAB9hcTtQwDGHlkHoAnIuvJQuQYAAAAAoCAq1wD6C6kTXOEEMObIOgBNQNaVhso1AAAAAAAFUbkGMBCezQHQBGQdgCYg68pB5RoAAAAAgIKoXAMYCFc4ATQBWQegCci6clC5BgAAAACgICrXAPqKCHW4wglgzJF1AJqArCsPlWsAAAAAAAqicg1gIMF8iAAagKwD0ARkXTmoXAMAAAAAUBCVawADiU7VLQCA8pF1AJqArCsHlWsAAAAAAAqicg2grwgxqiSAsUfWAWgCsq48VK4BAAAAACiIzjUAAAAAAAVxWziAgQS3DwFoALIOQBOQdeWgcg0AAAAAQEFUrgH0F1zhBNAAZB2AJiDrSkPlGgAAAACAgqhcAxhAqBNc4QQw7sg6AE1A1pWFyjUAAAAAAAVRuQbQV4hncwCMP7IOQBOQdeWhcg0AAAAAGDm2t9q+w/ZXu/89PWObp9u+p+frkO3Xddf9pu2He9ZdWWZ7qVwD6I9RJQE0AVkHoAnqlXXXSfpYRNxg+7ru6zf0bhARX5b0/ZJkuy3pYUm39mzyBxHx+8NoLJVrAAAAAMAoukrSzd3vb5b00j7bv1DS/4qIr5fZqBQq1wAG0qnPFU4AWLO6ZJ3trZLeI+kCSQ9J+umIeHzFNudJeqeksyR1JO2KiLcMt6UARtGQs2677bt7Xu+KiF0D7ntmROyVpIjYa/uMPttfLeldK5a9xvbPS7pb0utXZuV6onINAABQP6dulbxQ0se6r1da1PIfkt8r6Yck/Yrti4bYRgCQpP0RcXHP17d1rG1/1PYXM76uWs2b2J6S9BJJ/7Vn8R9L+i4t3za+V9J/LPaj5KNyDWAgwXyIABqgRll3laTnd7+/WdIn9J3PIe7V8h+TiojDtu+XdI6k+4bWSgAjaZSyLiIuS62z/ajtnd2q9U5J+3IO9SJJn42IR3uO/eT3tv+zpA+uR5tTqFwDAAAM33bbd/d8XbvK/b/tVklJubdK2r5A0rMl/e2aWgsA1bhN0jXd76+R9IGcbV+uFbeEdzvkp/ykpC+ua+tWoHINoK+IqNOokgCwJkPOuv0RcXHeBrY/quXnpVe6fjVvZHujpPdJel1EHFrNvgDGT83+rrtB0nttv1LSNyS9TJJsny3ppoi4svt6g6TLJf3iiv1/1/b3a3l674cy1q8rOtcAAAAjaD1ulbQ9qeWO9S0R8f6SmgoApYiIA1oeAXzl8j2Srux5fUzStoztXlFqA1fgtnAAAID66XurpG1Leruk+yPizUNsGwA0EpVrAAOpy/Q0AFBEjbJukFslL5X0CklfsH1Pd783RsTtFbQXwAipUdbVCp1rAACAmhnkVsmIuFOSh9w0AGgsOtcABhKdpaqbAAClI+sANAFZVw6euQYAAAAAoCAq1wD6i+AKJ4DxR9YBaAKyrjRUrgEAAAAAKIjKNYC+QlzhBDD+yDoATUDWlYfKNQAAAAAABVG5BtBfSLHEFU4AY46sA9AEZF1pqFwDAAAAAFAQlWsAA+DZHABNQNYBaAKyrixUrgEAAAAAKIjKNYD+mA8RQBOQdQCagKwrDZVrAAAAAAAKonINYCBc4QTQBGQdgCYg68pB5RoAAAAAgILoXAMAAAAAUBC3hQPoK5iyAUADkHUAmoCsKw+VawAAAAAACqJyDaC/YOALAA1A1gFoArKuNFSuAQAAAAAoiMo1gAGEOlzhBDD2yDoATUDWlYXKNQAAAAAABVG5BtBfMKokgAYg6wA0AVlXGirXAAAAAAAUROUaQF8hRpUEMP7IOgBNQNaVh8o1AAAAAAAFUbkG0F+EYokrnADGHFkHoAnIutJQuQYAAAAAoCAq1wAGwrM5AJqArAPQBGRdOahcAwAAAABQEJVrAP0xHyKAJiDrADQBWVcaKtcAAAAAABRE5xoAAAAAgIK4LRzAALh9CEATkHUAmoCsKwuVawAAAAAACqJyDaCvkBSdTtXNAIBSkXUAmoCsKw+VawBjw/ZW23fY/mr3v6dnbDNj++9sf872vbb/7yraCgAAgPFC5RpAf/WZsuE6SR+LiBtsX9d9/YYV25yU9IKIOGJ7UtKdtj8UEZ8edmMBjJj6ZB0ArB1ZVxoq1wDGyVWSbu5+f7Okl67cIJYd6b6c7H7FUFoHAACAsUXlGsBAhniFc7vtu3te74qIXQPue2ZE7JWkiNhr+4ysjWy3JX1G0ndLemtE/G2hFgMYG1RzADQBWVcOOtcARs3+iLg4tdL2RyWdlbHq+kHfICKWJH2/7dMk3Wr7GRHxxVW3FAAAAOiicw2gvwh1RuQKZ0Rcllpn+1HbO7tV652S9vU51hO2PyHpCkl0roGmG6GsA4DSkHWl4ZlrAOPkNknXdL+/RtIHVm5ge0e3Yi3bs5Iuk/SlYTUQAAAA44nKNYC+QlIs1eIK5w2S3mv7lZK+IellkmT7bEk3RcSVknZKurn73HVL0nsj4oNVNRjA6KhR1gHAmpF15aFzDWBsRMQBSS/MWL5H0pXd7z8v6dlDbhoAAADGHJ1rAP0xHyKAJiDrADQBWVcanrkGAAAAAKAgKtcABsAVTgBNQNYBaAKyrixUrgEAAAAAKIjONQAAAAAABXFbOICBcPsQgCYg6wA0AVlXDirXAAAAAAAUROUaQH9M2QCgCcg6AE1A1pWGyjUAAAAAAAU5IqpuA4ARZ/svJW0f0tvtj4grhvReAPAksg5AEww566QG5R2dawAAAAAACuK2cAAAAAAACqJzDQAAAABAQXSuAQAAAAAoiM41AAAAAAAF0bkGAAAAAKCg/x9/TWcfgZRI0gAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_fields(['jx_ec', 'jy_ec', 'jz_ec'])" + ] + }, + { + "cell_type": "code", + "execution_count": 152, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_fields(['ex_ec', 'ey_ec', 'ez_ec'])" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_fields(['jx_e_UP', 'jy_e_UP', 'jz_e_UP'])\n", + "# fld_kwargs=[{\"vmin\": -.0065}, {\"vmin\": -.02}, {}])" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_fields(['rho_e_UP', 'rho_i_UP'])\n", + "# fld_kwargs=[{\"vmin\": -.0065}, {\"vmin\": -.02}, {}])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# (B_fc(i,j+1,k) - B_fc(i,j,k))/dy + (B_fc(i,j,k+1) - B_fc(i,j,k))/dz\n", + "\n", + "divB_x = ds.hx_fc[1:,:-1,:-1].data - ds.hx_fc[:-1,:-1,:-1].data\n", + "divB_y = ds.hy_fc[:-1,1:,:-1].data - ds.hy_fc[:-1,:-1,:-1].data\n", + "divB_z = ds.hz_fc[:-1,:-1,1:].data - ds.hz_fc[:-1,:-1,:-1].data\n", + "divB = divB_x + divB_y + divB_z" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.pcolormesh(divB[:,:,0])\n", + "plt.colorbar()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ds.hy_fc[:,:,0].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ds.hx_fc[:,:,0].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 60a1d5ecbb..c7a9114144 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,10 +13,14 @@ if (NOT USE_CUDA) endif() add_psc_executable(psc_bubble_yz) add_psc_executable(psc_flatfoil_yz) -add_psc_executable(psc_flatfoil_yz_small) +#add_psc_executable(psc_flatfoil_yz_small) add_psc_executable(psc_whistler) +#add_psc_executable(psc_2d_shock) add_psc_executable(psc_harris_xz) -add_psc_executable(psc_2d_shock) +add_psc_executable(psc_turb) +add_psc_executable(psc_turb_harris_yz) +add_psc_executable(psc_turb_alf) +add_psc_executable(psc_turb_langevin) if (NOT USE_CUDA) install( diff --git a/src/include/psc.hxx b/src/include/psc.hxx index 92e3c17e74..34f5ea2676 100644 --- a/src/include/psc.hxx +++ b/src/include/psc.hxx @@ -131,7 +131,8 @@ inline double courant_length(const Grid_t::Domain& domain) // ====================================================================== // Psc -template +template struct Psc { using Mparticles = typename PscConfig::Mparticles; @@ -158,7 +159,7 @@ struct Psc Psc(const PscParams& params, Grid_t& grid, MfieldsState& mflds, Mparticles& mprts, Balance& balance, Collision& collision, Checks& checks, Marder& marder, Diagnostics& diagnostics, - InjectParticles& inject_particles) + InjectParticles& inject_particles, ExtCurrent& ext_current) : p_{params}, grid_{&grid}, mflds_{mflds}, @@ -171,6 +172,7 @@ struct Psc bndp_{grid}, diagnostics_{diagnostics}, inject_particles_{inject_particles}, + ext_current_{ext_current}, checkpointing_{params.write_checkpoint_every_step} { time_start_ = MPI_Wtime(); @@ -484,7 +486,7 @@ struct Psc // === particle injection prof_start(pr_inject_prts); - inject_particles(); + inject_particles_(grid(), mprts_); prof_stop(pr_inject_prts); if (checks_.continuity_every_step > 0 && @@ -522,6 +524,9 @@ struct Psc bnd_.fill_ghosts(mflds_, HX, HX + 3); #endif + // === external current + this->ext_current_(grid(), mflds_); + bndf_.add_ghosts_J(mflds_); bnd_.add_ghosts(mflds_, JXI, JXI + 3); bnd_.fill_ghosts(mflds_, JXI, JXI + 3); @@ -540,10 +545,12 @@ struct Psc // state is now: x^{n+3/2}, p^{n+1}, E^{n+3/2}, B^{n+1} // === field propagation B^{n+1} -> B^{n+3/2} + // mpi_printf(comm, "***** before Push fields jeff\n"); mpi_printf(comm, "***** Push fields B\n"); prof_restart(pr_push_flds); pushf_.push_H(mflds_, .5, Dim{}); prof_stop(pr_push_flds); + // mpi_printf(comm, "***** before if fields jeff\n"); #if 1 prof_start(pr_bndf); @@ -552,6 +559,7 @@ struct Psc prof_stop(pr_bndf); // state is now: x^{n+3/2}, p^{n+1}, E^{n+3/2}, B^{n+3/2} #endif + // mpi_printf(comm, "***** before continuity jeff\n"); if (checks_.continuity_every_step > 0 && timestep % checks_.continuity_every_step == 0) { @@ -559,6 +567,7 @@ struct Psc checks_.continuity_after_particle_push(mprts_, mflds_); prof_stop(pr_checks); } + // mpi_printf(comm, "***** before marder correction jeff\n"); // E at t^{n+3/2}, particles at t^{n+3/2} // B at t^{n+3/2} (Note: that is not its natural time, @@ -589,11 +598,6 @@ struct Psc #endif } - // ---------------------------------------------------------------------- - // inject_particles - - void inject_particles() { return this->inject_particles_(grid(), mprts_); } - private: // ---------------------------------------------------------------------- // print_profiling @@ -724,6 +728,7 @@ protected: Marder& marder_; Diagnostics& diagnostics_; InjectParticles& inject_particles_; + ExtCurrent& ext_current_; Sort sort_; PushParticles pushp_; @@ -762,21 +767,42 @@ InjectParticlesNone injectParticlesNone; } // namespace +// ====================================================================== +// ExtCurrentNone + +class ExtCurrentNone +{ +public: + template + void operator()(const Grid_t& grid, MfieldsState& mflds) + {} +}; + +namespace +{ + +ExtCurrentNone extCurrentNone; + +} // namespace + // ====================================================================== // makePscIntegrator template -Psc makePscIntegrator( + typename InjectParticles = InjectParticlesNone, + typename ExtCurrent = ExtCurrentNone> +Psc makePscIntegrator( const PscParams& params, Grid_t& grid, MfieldsState& mflds, Mparticles& mprts, Balance& balance, Collision& collision, Checks& checks, Marder& marder, Diagnostics& diagnostics, - InjectParticles& inject_particles = injectParticlesNone) + InjectParticles& inject_particles = injectParticlesNone, + ExtCurrent& ext_current = extCurrentNone) { - return {params, grid, mflds, mprts, balance, - collision, checks, marder, diagnostics, inject_particles}; + return {params, grid, mflds, mprts, balance, + collision, checks, marder, diagnostics, inject_particles, + ext_current}; } // ====================================================================== @@ -799,6 +825,22 @@ void partitionAndSetupParticles(SetupParticles& setup_particles, setupParticlesGeneralInit(setup_particles, mprts, init_npt_general); } +// ====================================================================== +// partitionAndSetupParticlesGeneral +// convenience/backward compatibility method to allow simpler function signature +// init_npt signature: (int kind, Double3 pos, npt) -> void + +template +void partitionAndSetupParticlesGeneral(SetupParticles& setup_particles, + Balance& balance, Grid_t*& grid_ptr, + Mparticles& mprts, FUNC&& init_npt) +{ + partitionParticlesGeneralInit(setup_particles, balance, grid_ptr, mprts, + init_npt); + setupParticlesGeneralInit(setup_particles, mprts, init_npt); +} + // ---------------------------------------------------------------------- // partitionParticlesGeneralInit // init_npt signature: (int kind, Double3 pos, int p, Int3 index, npt) -> void diff --git a/src/include/setup_fields.hxx b/src/include/setup_fields.hxx index 6760f04538..2efc3d3258 100644 --- a/src/include/setup_fields.hxx +++ b/src/include/setup_fields.hxx @@ -44,6 +44,37 @@ struct SetupFields }); } } + // I think in here is where the Jext should be included Jeff. + template + static void run_general(Mfields& mf, FUNC&& func) + { + const auto& grid = mf.grid(); + mpi_printf(grid.comm(), "**** Setting up fields...\n"); + + for (int p = 0; p < mf.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mf[p]); + + int n_ghosts = + std::max({mf.ibn()[0], mf.ibn()[1], mf.ibn()[2]}); // FIXME, not pretty + // FIXME, do we need the ghost points? + grid.Foreach_3d(n_ghosts, n_ghosts, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + + for (int c = 0; c < 3; c++) { + F(HX + c, jx, jy, jz) += + func(HX + c, index, p, + Centering::getPos(patch, index, Centering::FC, c)); + F(EX + c, jx, jy, jz) += + func(EX + c, index, p, + Centering::getPos(patch, index, Centering::EC, c)); + F(JXI + c, jx, jy, jz) += + func(JXI + c, index, p, + Centering::getPos(patch, index, Centering::EC, c)); + } + }); + } + } template static void runScalar(Mfields& mf, FUNC&& func, @@ -75,6 +106,12 @@ void setupFields(MF& mflds, FUNC&& func) detail::SetupFields::run(mflds, std::forward(func)); } +template +void setupFieldsGeneral(MF& mflds, FUNC&& func) +{ + detail::SetupFields::run_general(mflds, std::forward(func)); +} + // func signature: (int component, Double3 position) -> double fieldValue template void setupScalarField(MF& fld, const Centering::Centerer& centerer, FUNC&& func) diff --git a/src/libpsc/cuda/setup_fields_cuda.hxx b/src/libpsc/cuda/setup_fields_cuda.hxx index 78c9602583..d9913b2ea0 100644 --- a/src/libpsc/cuda/setup_fields_cuda.hxx +++ b/src/libpsc/cuda/setup_fields_cuda.hxx @@ -12,6 +12,15 @@ void detail::SetupFields::run(Mfields& mf, FUNC&& func) std::forward(func)); } +template <> +template +void detail::SetupFields::run_general(Mfields& mf, + FUNC&& func) +{ + return detail::SetupFields::run_general( + mf.mflds(), std::forward(func)); +} + template <> template void detail::SetupFields::run(Mfields& mf, FUNC&& func) @@ -57,3 +66,50 @@ void detail::SetupFields::run(Mfields& mf, FUNC&& func) } gt::copy(h_mf, mf.storage()); } + +template <> +template +void detail::SetupFields::run_general(Mfields& mf, FUNC&& func) +{ + auto bnd = mf.ibn(); + auto h_mf = gt::host_mirror(mf.gt()); + gt::copy(mf.storage(), h_mf); + + for (int p = 0; p < mf.n_patches(); ++p) { + auto& patch = mf.grid().patches[p]; + auto flds = + make_Fields3d(h_mf.view(_all, _all, _all, _all, p), -bnd); + + int n_ghosts = std::max({bnd[0], bnd[1], bnd[2]}); + + // FIXME, do we need the ghost points? + mf.grid().Foreach_3d(n_ghosts, n_ghosts, [&](int jx, int jy, int jz) { + Int3 idx{jx, jy, jz}; + double x_nc = patch.x_nc(jx), y_nc = patch.y_nc(jy), + z_nc = patch.z_nc(jz); + double x_cc = patch.x_cc(jx), y_cc = patch.y_cc(jy), + z_cc = patch.z_cc(jz); + + double ncc[3] = {x_nc, y_cc, z_cc}; + double cnc[3] = {x_cc, y_nc, z_cc}; + double ccn[3] = {x_cc, y_cc, z_nc}; + + double cnn[3] = {x_cc, y_nc, z_nc}; + double ncn[3] = {x_nc, y_cc, z_nc}; + double nnc[3] = {x_nc, y_nc, z_cc}; + + flds(HX, jx, jy, jz) += func(HX, idx, p, ncc); + flds(HY, jx, jy, jz) += func(HY, idx, p, cnc); + flds(HZ, jx, jy, jz) += func(HZ, idx, p, ccn); + + flds(EX, jx, jy, jz) += func(EX, idx, p, cnn); + flds(EY, jx, jy, jz) += func(EY, idx, p, ncn); + flds(EZ, jx, jy, jz) += func(EZ, idx, p, nnc); + + flds(JXI, jx, jy, jz) += func(JXI, idx, p, cnn); + flds(JYI, jx, jy, jz) += func(JYI, idx, p, ncn); + flds(JZI, jx, jy, jz) += func(JZI, idx, p, nnc); + }); + } + gt::copy(h_mf, mf.storage()); +} diff --git a/src/psc_harris_xz.cxx b/src/psc_harris_xz.cxx index 89fb729b44..b68464c3d7 100644 --- a/src/psc_harris_xz.cxx +++ b/src/psc_harris_xz.cxx @@ -143,8 +143,8 @@ PscParams psc_params; void setupHarrisParams() { g.wpedt_max = .36; - g.wpe_wce = 2.; - g.mi_me = 25.; + g.wpe_wce = 2.5; + g.mi_me = 1.; g.Lx_di = 40.; g.Ly_di = 1.; @@ -153,18 +153,18 @@ void setupHarrisParams() g.electron_sort_interval = 25; g.ion_sort_interval = 25; - g.taui = 40.; + g.taui = 10.; g.t_intervali = 1.; g.output_particle_interval = 10.; g.overalloc = 2.; g.gdims = {512, 1, 128}; - g.np = {4, 1, 1}; + g.np = {4, 1, 4}; - g.L_di = .5; + g.L_di = 1.0; g.Ti_Te = 5.; - g.nb_n0 = .05; + g.nb_n0 = .25; g.Tbe_Te = .333; g.Tbi_Ti = .333; @@ -459,6 +459,7 @@ void setup_log(const Grid_t& grid) mpi_printf(comm, "n_global_patches = %d\n", phys.n_global_patches); mpi_printf(comm, "nppc = %g\n", g.nppc); mpi_printf(comm, "b0 = %g\n", phys.b0); + mpi_printf(comm, "n0 = %g\n", phys.n0); mpi_printf(comm, "v_A (based on nb) = %g\n", phys.v_A); mpi_printf(comm, "di = %g\n", phys.di); mpi_printf(comm, "Ne = %g\n", phys.Ne); @@ -745,15 +746,15 @@ void initializeFields(MfieldsState& mflds) switch (m) { case HX: - return cs * b0 * tanh(z / L) + - dbx * cos(2. * M_PI * (x - .5 * Lx) / Lpert) * - sin(M_PI * z / Lz); + return cs * b0 * tanh(z / L) ;//+ + //dbx * cos(2. * M_PI * (x - .5 * Lx) / Lpert) * + // sin(M_PI * z / Lz); - case HY: return -sn * b0 * tanh(z / L) + b0 * g.bg; + case HY: return 0.;//-sn * b0 * tanh(z / L) ;//+ b0 * g.bg; case HZ: - return dbz * cos(M_PI * z / Lz) * - sin(2.0 * M_PI * (x - 0.5 * Lx) / Lpert); + return 0. ;//+ dbz * cos(M_PI * z / Lz) * + //sin(2.0 * M_PI * (x - 0.5 * Lx) / Lpert); case JYI: return 0.; // FIXME @@ -877,19 +878,19 @@ void run() outf_params.fields.pfield_interval = int((output_field_interval / (phys.wci * grid.dt))); outf_params.fields.tfield_interval = - int((output_field_interval / (phys.wci * grid.dt))); + -int((output_field_interval / (phys.wci * grid.dt))); OutputFields outf{grid, outf_params}; OutputParticlesParams outp_params{}; outp_params.every_step = - int((g.output_particle_interval / (phys.wci * grid.dt))); + -int((g.output_particle_interval / (phys.wci * grid.dt))); outp_params.data_dir = "."; outp_params.basename = "prt"; outp_params.lo = {192, 0, 48}; outp_params.hi = {320, 0, 80}; OutputParticles outp{grid, outp_params}; - int oute_interval = 100; + int oute_interval = -100; DiagEnergies oute{grid.comm(), oute_interval}; Diagnostics diagnostics{grid, outf, outp, oute}; diff --git a/src/psc_turb.cxx b/src/psc_turb.cxx new file mode 100644 index 0000000000..3191192237 --- /dev/null +++ b/src/psc_turb.cxx @@ -0,0 +1,428 @@ + +#include +#include +#include + +#include "DiagnosticsDefault.h" +#include "OutputFieldsDefault.h" +#include "psc_config.hxx" +#include "writer_mrc.hxx" + +#ifdef USE_CUDA +#include "cuda_bits.h" +#endif + +// ====================================================================== +// Particle kinds +// +// Particle kinds can be used to define different species, or different +// populations of the same species +// +// Here, we only enumerate the types, the actual information gets set up later. +// The last kind (MY_ELECTRON) will be used as "neutralizing kind", ie, in the +// initial setup, the code will add as many electrons as there are ions in a +// cell, at the same position, to ensure the initial plasma is neutral +// (so that Gauss's Law is satisfied). +enum +{ + MY_ELECTRON, + MY_ION, + N_MY_KINDS, +}; + +enum +{ + PERT_HX, + PERT_HY, + PERT_HZ, + PERT_VX, + PERT_VY, + PERT_VZ, + N_PERT, +}; + +// ====================================================================== +// PscTurbHarrisxzParams + +struct PscTurbHarrisxzParams +{ + double BB; + double Zi; + double mass_ratio; + double lambda0; + + double background_n; + double background_Te; + double background_Ti; + + // The following parameters are calculated from the above / and other + // information + + double d_i; +}; + +// ====================================================================== +// Global parameters +// +// I'm not a big fan of global parameters, but they're only for +// this particular case and they help make things simpler. + +// An "anonymous namespace" makes these variables visible in this source file +// only +namespace +{ + +// Parameters specific to this case. They don't really need to be collected in a +// struct, but maybe it's nice that they are + +PscTurbHarrisxzParams g; + +std::string read_checkpoint_filename; + +// This is a set of generic PSC params (see include/psc.hxx), +// like number of steps to run, etc, which also should be set by the case +PscParams psc_params; + +} // namespace + +// ====================================================================== +// PSC configuration +// +// This sets up compile-time configuration for the code, in particular +// what data structures and algorithms to use +// +// EDIT to change order / floating point type / cuda / 2d/3d + +using Dim = dim_xyz; + +#ifdef USE_CUDA +using PscConfig = PscConfig1vbecCuda; +#else +using PscConfig = PscConfig1vbecSingle; +#endif + +using Writer = WriterMRC; // can choose WriterMRC, WriterAdios2 + +// ---------------------------------------------------------------------- + +using MfieldsState = PscConfig::MfieldsState; +using MfieldsAlfven = Mfields; +using Mparticles = PscConfig::Mparticles; +using Balance = PscConfig::Balance; +using Collision = PscConfig::Collision; +using Checks = PscConfig::Checks; +using Marder = PscConfig::Marder; +using OutputParticles = PscConfig::OutputParticles; + +// ====================================================================== +// setupParameters + +void setupParameters() +{ + // -- set some generic PSC parameters + psc_params.nmax = 11; + psc_params.cfl = 0.75; + psc_params.write_checkpoint_every_step = -100; //This is not working + psc_params.stats_every = 1; + + // -- start from checkpoint: + // + // Uncomment when wanting to start from a checkpoint, ie., + // instead of setting up grid, particles and state fields here, + // they'll be read from a file + // FIXME: This parameter would be a good candidate to be provided + // on the command line, rather than requiring recompilation when change. + + // read_checkpoint_filename = "checkpoint_500.bp"; + + // -- Set some parameters specific to this case + g.BB = 1.; + g.Zi = 1.; + g.mass_ratio = 100.; + g.lambda0 = 20.; + + g.background_n = 1.; + g.background_Te = .01; + g.background_Ti = .01; +} + +// ====================================================================== +// setupGrid +// +// This helper function is responsible for setting up the "Grid", +// which is really more than just the domain and its decomposition, it +// also encompasses PC normalization parameters, information about the +// particle kinds, etc. + +Grid_t* setupGrid() +{ + // --- setup domain + //Grid_t::Real3 LL = {1., 80., 3. * 80.}; // domain size (in d_e) + //Int3 gdims = {1, 80, 3 * 80}; // global number of grid points + //Int3 np = {1, 2, 3 * 5}; // division into patches + Grid_t::Real3 LL = {2.*M_PI, 2.*M_PI, 2.*M_PI}; // domain size (in d_e) + Int3 gdims = {32, 32, 32}; // global number of grid points + Int3 np = {4, 1, 2}; // division into patches + + Grid_t::Domain domain{gdims, LL, -.5 * LL, np}; + + psc::grid::BC bc{{BND_FLD_PERIODIC, BND_FLD_PERIODIC, BND_FLD_PERIODIC}, + {BND_FLD_PERIODIC, BND_FLD_PERIODIC, BND_FLD_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_PERIODIC, BND_PRT_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_PERIODIC, BND_PRT_PERIODIC}}; + + // -- setup particle kinds + // last population ("i") is neutralizing + Grid_t::Kinds kinds(N_MY_KINDS); + kinds[MY_ION] = {g.Zi, g.mass_ratio * g.Zi, "i"}; + kinds[MY_ELECTRON] = {-1., 1., "e"}; + + g.d_i = sqrt(kinds[MY_ION].m / kinds[MY_ION].q); + + mpi_printf(MPI_COMM_WORLD, "d_e = %g, d_i = %g\n", 1., g.d_i); + mpi_printf(MPI_COMM_WORLD, "lambda_De (background) = %g\n", + sqrt(g.background_Te)); + + // -- setup normalization + auto norm_params = Grid_t::NormalizationParams::dimensionless(); + norm_params.nicell = 20; + + double dt = psc_params.cfl * courant_length(domain); + Grid_t::Normalization norm{norm_params}; + + mpi_printf(MPI_COMM_WORLD, "dt = %g\n", dt); + + Int3 ibn = {2, 2, 2}; + if (Dim::InvarX::value) { + ibn[0] = 0; + } + if (Dim::InvarY::value) { + ibn[1] = 0; + } + if (Dim::InvarZ::value) { + ibn[2] = 0; + } + + return new Grid_t{domain, bc, kinds, norm, dt, -1, ibn}; +} + +// ====================================================================== +// initializeAlfven + +void initializeAlfven(MfieldsAlfven& mflds) +{ + const auto& grid = mflds.grid(); + double kx = 2. * M_PI / grid.domain.length[0]; + double ky = 2. * M_PI / grid.domain.length[1]; + double kz = 2. * M_PI / grid.domain.length[2]; + + mpi_printf(grid.comm(), "**** Setting up Alfven fields...\n"); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); + + int n_ghosts = std::max( + {mflds.ibn()[0], mflds.ibn()[1], mflds.ibn()[2]}); // FIXME, not pretty + + grid.Foreach_3d(n_ghosts, n_ghosts, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + auto crd_fc = Centering::getPos(patch, index, Centering::FC); + auto crd_cc = Centering::getPos(patch, index, Centering::CC); + F(PERT_HX, jx, jy, jz) = 0.*g.BB + .1 * sin(kx * crd_fc[0]); + F(PERT_VX, jx, jy, jz) = -.1 * sin(kx * crd_cc[0]); + F(PERT_HY, jx, jy, jz) = 0.*g.BB + .1 * sin(ky * crd_fc[1]); + F(PERT_VY, jx, jy, jz) = -.1 * sin(ky * crd_cc[1]); + F(PERT_HZ, jx, jy, jz) = 0.*g.BB + .1 * sin(kz * crd_fc[2]); + F(PERT_VZ, jx, jy, jz) = -.1 * sin(kz * crd_cc[2]); + }); + } +} + +// ====================================================================== +// initializeParticles + +void initializeParticles(SetupParticles& setup_particles, + Balance& balance, Grid_t*& grid_ptr, Mparticles& mprts, + MfieldsAlfven& mflds_alfven) +{ + // -- set particle initial condition + partitionAndSetupParticlesGeneral( + setup_particles, balance, grid_ptr, mprts, + [&](int kind, Double3 crd, int p, Int3 idx, psc_particle_npt& npt) { + switch (kind) { + case MY_ION: + npt.n = g.background_n; + npt.T[0] = g.background_Ti; + npt.T[1] = g.background_Ti; + npt.T[2] = g.background_Ti; + npt.p[0] = mflds_alfven(PERT_VX, idx[0], idx[1], idx[2], p); + npt.p[1] = mflds_alfven(PERT_VY, idx[0], idx[1], idx[2], p); + npt.p[2] = mflds_alfven(PERT_VZ, idx[0], idx[1], idx[2], p); + break; + case MY_ELECTRON: + npt.n = g.background_n; + npt.T[0] = g.background_Te; + npt.T[1] = g.background_Te; + npt.T[2] = g.background_Te; + npt.p[0] = mflds_alfven(PERT_VX, idx[0], idx[1], idx[2], p); + npt.p[1] = mflds_alfven(PERT_VY, idx[0], idx[1], idx[2], p); + npt.p[2] = mflds_alfven(PERT_VZ, idx[0], idx[1], idx[2], p); + break; + default: assert(0); + } + }); +} + +// ====================================================================== +// initializeFields + +void initializeFields(MfieldsState& mflds, MfieldsAlfven& mflds_alfven) +{ + setupFieldsGeneral( + mflds, [&](int m, Int3 idx, int p, double crd[3]) -> MfieldsState::real_t { + switch (m) { + case HX: return mflds_alfven(PERT_HX, idx[0], idx[1], idx[2], p); + case HY: return mflds_alfven(PERT_HY, idx[0], idx[1], idx[2], p); + case HZ: return mflds_alfven(PERT_HZ, idx[0], idx[1], idx[2], p); + default: return 0.; + } + }); +} + +// ====================================================================== +// run +// +// This is basically the main function of this run, +// which sets up everything and then uses PscIntegrator to run the +// simulation + +void run() +{ + mpi_printf(MPI_COMM_WORLD, "*** Setting up...\n"); + + // ---------------------------------------------------------------------- + // setup various parameters first + + setupParameters(); + + // ---------------------------------------------------------------------- + // Set up grid, state fields, particles + + auto grid_ptr = setupGrid(); + auto& grid = *grid_ptr; + + Mparticles mprts(grid); + MfieldsState mflds(grid); + if (!read_checkpoint_filename.empty()) { + read_checkpoint(read_checkpoint_filename, grid, mprts, mflds); + } + + // ---------------------------------------------------------------------- + // Set up various objects needed to run this case + + // -- Balance + psc_params.balance_interval = 200; + Balance balance{3}; + + // -- Sort + psc_params.sort_interval = 10; + + // -- Collision + int collision_interval = 0; + double collision_nu = 1e-10; + // 3.76 * std::pow(g.target_Te, 2.) / g.Zi / g.lambda0; + Collision collision{grid, collision_interval, collision_nu}; + + // -- Checks + ChecksParams checks_params{}; + checks_params.continuity_every_step = 10; + checks_params.continuity_dump_always = false; + checks_params.continuity_threshold = 1e-4; + checks_params.continuity_verbose = true; + + checks_params.gauss_every_step = 10; + checks_params.gauss_dump_always = false; + checks_params.gauss_threshold = 1e-4; + checks_params.gauss_verbose = true; + + Checks checks{grid, MPI_COMM_WORLD, checks_params}; + + // -- Marder correction + double marder_diffusion = 0.9; + int marder_loop = 3; + bool marder_dump = false; + psc_params.marder_interval = 100; + Marder marder(grid, marder_diffusion, marder_loop, marder_dump); + + // ---------------------------------------------------------------------- + // Set up output + // + // FIXME, this really is too complicated and not very flexible + + // -- output fields + OutputFieldsItemParams outf_item_params{}; + OutputFieldsParams outf_params{}; + outf_item_params.pfield_interval = 50; + outf_item_params.tfield_interval = -10; + + outf_params.fields = outf_item_params; + outf_params.moments = outf_item_params; + OutputFields outf{grid, outf_params}; + + // -- output particles + OutputParticlesParams outp_params{}; + outp_params.every_step = -100; + outp_params.data_dir = "."; + outp_params.basename = "prt"; + OutputParticles outp{grid, outp_params}; + + int oute_interval = -100; + DiagEnergies oute{grid.comm(), oute_interval}; + + auto diagnostics = makeDiagnosticsDefault(outf, outp, oute); + + // ---------------------------------------------------------------------- + // Set up objects specific to the TurbHarrisxz case + + SetupParticles setup_particles(grid); + setup_particles.fractional_n_particles_per_cell = true; + //setup_particles.neutralizing_population = MY_ION; + + // ---------------------------------------------------------------------- + // setup initial conditions + + if (read_checkpoint_filename.empty()) { + MfieldsAlfven mflds_alfven(grid, N_PERT, grid.ibn); + initializeAlfven(mflds_alfven); + initializeParticles(setup_particles, balance, grid_ptr, mprts, + mflds_alfven); + initializeFields(mflds, mflds_alfven); + } + + // ---------------------------------------------------------------------- + // hand off to PscIntegrator to run the simulation + + auto psc = + makePscIntegrator(psc_params, *grid_ptr, mflds, mprts, balance, + collision, checks, marder, diagnostics); + + MEM_STATS(); + psc.integrate(); + MEM_STATS(); +} + +// ====================================================================== +// main + +int main(int argc, char** argv) +{ + psc_init(argc, argv); + + run(); + + MEM_STATS(); + + psc_finalize(); + return 0; +} diff --git a/src/psc_turb_alf.cxx b/src/psc_turb_alf.cxx new file mode 100644 index 0000000000..ffea11ba6f --- /dev/null +++ b/src/psc_turb_alf.cxx @@ -0,0 +1,565 @@ + +#include +#include +#include + +#include "DiagnosticsDefault.h" +#include "OutputFieldsDefault.h" +#include "psc_config.hxx" +#include "writer_mrc.hxx" + +#ifdef USE_CUDA +#include "cuda_bits.h" +#endif +#include "rngpool_iface.h" + +//----------------------------------------------------------------- +// To use the complex numbers +//------------------------------ +#include +// using std::complex; +using namespace std; +typedef complex dcomp; + +// using namespace std::complex_literals; +// auto c = 1.0 + 3.0i; +//------------------------------ + +// extern Grid* vgrid; // FIXME + +// To use the random numbers +//------------------------------- +static RngPool* rngpool; +//------------------------------- + +// static inline double trunc_granular(double a, double b) +//{ +// return b * (int)(a / b); +//} +//----------------------------------------------------------------- + + +// ====================================================================== +// Particle kinds +// +// Particle kinds can be used to define different species, or different +// populations of the same species +// +// Here, we only enumerate the types, the actual information gets set up later. +// The last kind (MY_ELECTRON) will be used as "neutralizing kind", ie, in the +// initial setup, the code will add as many electrons as there are ions in a +// cell, at the same position, to ensure the initial plasma is neutral +// (so that Gauss's Law is satisfied). +enum +{ + MY_ELECTRON, + MY_ION, + N_MY_KINDS, +}; + +enum +{ + PERT_HX, + PERT_HY, + PERT_HZ, + PERT_VX, + PERT_VY, + PERT_VZ, + N_PERT, +}; + +// ====================================================================== +// PscTurbHarrisxzParams + +struct PscTurbHarrisxzParams +{ + double BB; + double Zi; + double mass_ratio; + double lambda0; + + double background_n; + double background_Te; + double background_Ti; + + // The following parameters are calculated from the above / and other + // information + + double d_i; +}; + +// ====================================================================== +// Global parameters +// +// I'm not a big fan of global parameters, but they're only for +// this particular case and they help make things simpler. + +// An "anonymous namespace" makes these variables visible in this source file +// only +namespace +{ + +// Parameters specific to this case. They don't really need to be collected in a +// struct, but maybe it's nice that they are + + PscTurbHarrisxzParams g; + + std::string read_checkpoint_filename; + +// This is a set of generic PSC params (see include/psc.hxx), +// like number of steps to run, etc, which also should be set by the case + PscParams psc_params; + +} // namespace + +// ====================================================================== +// PSC configuration +// +// This sets up compile-time configuration for the code, in particular +// what data structures and algorithms to use +// +// EDIT to change order / floating point type / cuda / 2d/3d + +using Dim = dim_xyz; + +#ifdef USE_CUDA +using PscConfig = PscConfig1vbecCuda; +#else +using PscConfig = PscConfig1vbecSingle; +#endif + +using Writer = WriterMRC; // can choose WriterMRC, WriterAdios2 + +// ---------------------------------------------------------------------- + +using MfieldsState = PscConfig::MfieldsState; +using MfieldsAlfven = Mfields; +using Mparticles = PscConfig::Mparticles; +using Balance = PscConfig::Balance; +using Collision = PscConfig::Collision; +using Checks = PscConfig::Checks; +using Marder = PscConfig::Marder; +using OutputParticles = PscConfig::OutputParticles; + +// ====================================================================== +// setupParameters + +void setupParameters() +{ + // -- set some generic PSC parameters + psc_params.nmax = 2001; + psc_params.cfl = 0.75; + psc_params.write_checkpoint_every_step = -100; //This is not working + psc_params.stats_every = 1; + + // -- start from checkpoint: + // + // Uncomment when wanting to start from a checkpoint, ie., + // instead of setting up grid, particles and state fields here, + // they'll be read from a file + // FIXME: This parameter would be a good candidate to be provided + // on the command line, rather than requiring recompilation when change. + + // read_checkpoint_filename = "checkpoint_500.bp"; + + // -- Set some parameters specific to this case + g.BB = 1.; + g.Zi = 1.; + g.mass_ratio = 25.; + g.lambda0 = 20.; + + double vA_over_c_ = .1; //Why 0.1?? + double amplitude_ = .5; + double beta_e_par_ = 1.; //Ques_jeff what beta 0.1, 1?? + double beta_i_par_ = 1.; + double Ti_perp_over_Ti_par_ = 1.; + double Te_perp_over_Te_par_ = 1.; + + double B0 = vA_over_c_; + double debye_length_ = 1.* vA_over_c_ *sqrt(beta_i_par_ / 2. ); + double Te_par = beta_e_par_ * sqr(B0) / 2.; + double Te_perp = Te_perp_over_Te_par_ * Te_par; + double Ti_par = beta_i_par_ * sqr(B0) / 2.; + double Ti_perp = Ti_perp_over_Ti_par_ * Ti_par; + + g.background_n = 1.; + g.background_Te = Ti_par; + g.background_Ti = Te_par; +} + +// ====================================================================== +// setupGrid +// +// This helper function is responsible for setting up the "Grid", +// which is really more than just the domain and its decomposition, it +// also encompasses PC normalization parameters, information about the +// particle kinds, etc. + +Grid_t* setupGrid() +{ + // --- setup domain + //Grid_t::Real3 LL = {1., 80., 3. * 80.}; // domain size (in d_e) + //Int3 gdims = {1, 80, 3 * 80}; // global number of grid points + //Int3 np = {1, 2, 3 * 5}; // division into patches + Grid_t::Real3 LL = {2. * M_PI, 2. * M_PI, 2. * M_PI}; // domain size (in d_e) + Int3 gdims = {100, 100, 100}; // global number of grid points + Int3 np = {2, 2, 2}; // division into patches + + Grid_t::Domain domain{gdims, LL, -.5 * LL, np}; + + psc::grid::BC bc{{BND_FLD_PERIODIC, BND_FLD_PERIODIC, BND_FLD_PERIODIC}, + {BND_FLD_PERIODIC, BND_FLD_PERIODIC, BND_FLD_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_PERIODIC, BND_PRT_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_PERIODIC, BND_PRT_PERIODIC}}; + + // -- setup particle kinds + // last population ("i") is neutralizing + Grid_t::Kinds kinds(N_MY_KINDS); + kinds[MY_ION] = {g.Zi, g.mass_ratio * g.Zi, "i"}; + kinds[MY_ELECTRON] = {-1., 1., "e"}; + + g.d_i = sqrt(kinds[MY_ION].m / kinds[MY_ION].q); + + mpi_printf(MPI_COMM_WORLD, "d_e = %g, d_i = %g\n", 1., g.d_i); + mpi_printf(MPI_COMM_WORLD, "lambda_De (background) = %g\n", + sqrt(g.background_Te)); + + // -- setup normalization + auto norm_params = Grid_t::NormalizationParams::dimensionless(); + norm_params.nicell = 20; + + double dt = psc_params.cfl * courant_length(domain); + Grid_t::Normalization norm{norm_params}; + + mpi_printf(MPI_COMM_WORLD, "dt = %g\n", dt); + + Int3 ibn = {2, 2, 2}; + if (Dim::InvarX::value) { + ibn[0] = 0; + } + if (Dim::InvarY::value) { + ibn[1] = 0; + } + if (Dim::InvarZ::value) { + ibn[2] = 0; + } + + return new Grid_t{domain, bc, kinds, norm, dt, -1, ibn}; +} + +// ====================================================================== +// initializeAlfven + +void initializeAlfven(MfieldsAlfven& mflds) +{ + const auto& grid = mflds.grid(); + std::array k; + std::array mn_per; + std::array mn_par; + std::array k_a_per; + std::array k_a_par; + std::array phi; + std::array phase; + std::array Amp; + std::array dB_ax; + std::array dB_ay; + std::array dv_ax; + std::array dv_ay; + //----------------------------------------------------------------------- + double vA_over_c_ = .1; + double B0 = vA_over_c_; + double beta_e_par_ = 1.; + double beta_i_par_ = 1.; + + //double x = crd[0], y = crd[1], z = crd[2]; + double Lx = grid.domain.length[0]; + double Ly = grid.domain.length[1]; + double Lz = grid.domain.length[2]; + + double k_x = 2. * M_PI / Lx; + double k_y = 2. * M_PI / Ly; + double k_z = 2. * M_PI / Lz; + //------------------------------------------------------------------- + double rho_i = sqrt(beta_i_par_)*1.; //check how to set this as di !! + double sp = 1./3.; //Spectral index for the alfven wave (1/3 for AW and 2/3 for KAW) + int p = 1;// fraction of B0 so dB=(1/p)B0 + double crit_fact = 0.1; //critical balance /normalization coefficient + double C1; // normalization factor + + int m_per=1; //modes in the perpendicular directions + int m_par=1; //modes in the parallel direction acording to critical balance + int Nk = 8; + + // This part didn't work. there is a conflict that I don't understand yet + //--------------------------------------------------------------------- + //Rng* rng_; + //int rank_; + //MPI_Comm_rank(MPI_COMM_WORLD, &rank_); + //rngpool = RngPool_create(); + //RngPool_seed(rngpool, rank_); + //rng_ = RngPool_get(rngpool, 0); + //for (int n = 0; n < Nk; n++) { + // phase[n] = Rng_uniform(rng_, rph_a, rph_b); // random phase + // } + //--------------------------------------------------------------------- + + //if (rank_ == 0) { + double rph_a = 0.; + double rph_b = 2. * M_PI; + //---------------------------------------------------------------------- + double dB_axT, dB_ayT, dv_axT, dv_ayT; + + for (int n = 0; n < Nk; n++) { + mn_per[n] = 1. * m_per; + mn_par[n] = 1. * m_par; + } + + k[0] = {1. * k_x * mn_per[0], 0. * k_y * mn_per[0], 1. * k_z * mn_par[0]}; + k[1] = {0. * k_x * mn_per[1], 1. * k_y * mn_per[1], -1. * k_z * mn_par[1]}; + k[2] = {-1. * k_x * mn_per[2], 0. * k_y * mn_per[2], 1. * k_z * mn_par[2]}; + k[3] = {0. * k_x * mn_per[3], -1. * k_y * mn_per[3], -1. * k_z * mn_par[3]}; + k[4] = {1. * k_x * mn_per[4], 1. * k_y * mn_per[4], 1. * k_z * mn_par[4]}; + k[5] = {-1. * k_x * mn_per[5], 1. * k_y * mn_per[5], -1. * k_z * mn_par[5]}; + k[6] = {-1. * k_x * mn_per[6], -1. * k_y * mn_per[6], 1. * k_z * mn_par[6]}; + k[7] = {1. * k_x * mn_per[7], -1. * k_y * mn_per[7], -1. * k_z * mn_par[7]}; + + phase={0.987*2.*M_PI, 0.666*2.*M_PI, 0.025*2.*M_PI, 0.954*2.*M_PI, + 0.781*2.*M_PI, 0.846*2.*M_PI, 0.192*2.*M_PI, 0.778*2.*M_PI}; // random phases + + //----------------------------------------------------------------------- + mpi_printf(grid.comm(), "**** Setting up Alfven fields...\n"); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); + + int n_ghosts = std::max( + {mflds.ibn()[0], mflds.ibn()[1], mflds.ibn()[2]}); // FIXME, not pretty + + grid.Foreach_3d(n_ghosts, n_ghosts, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + auto crd_fc = Centering::getPos(patch, index, Centering::FC); + auto crd_cc = Centering::getPos(patch, index, Centering::CC); + + for (int n = 0; n < Nk; n++) { + k_a_per[n] = sqrt(sqr(k[n][0]) + sqr(k[n][1])); // k_per + k_a_par[n] = k[n][2]; //k_par + + phi[n] = n * M_PI/2.; // Polarization angle + //phase[n] = Rng_uniform(rng_, rph_a, rph_b); // random phase + + Amp[n] = B0 * crit_fact *pow((k_a_per[n]), -sp);//According to the critical balance Amp[i]=B0*crit_fact * K_a_perp[i]^(-sp); + dB_ax[n] = -Amp[n] * cos ( k[n][0] * crd_fc[0] + k[n][1] * crd_fc[1] + k[n][2] * crd_fc[2] + phase[n] ) * sin(phi[n]) ; + dB_ay[n] = Amp[n] * cos ( k[n][0] * crd_fc[0] + k[n][1] * crd_fc[1] + k[n][2] * crd_fc[2] + phase[n] ) * cos(phi[n]) ; + + dv_ax[n] = -Amp[n] * cos ( k[n][0] * crd_cc[0] + k[n][1] * crd_cc[1] + k[n][2] * crd_cc[2] + phase[n] ) * sin(phi[n]) ; + dv_ay[n] = Amp[n] * cos ( k[n][0] * crd_cc[0] + k[n][1] * crd_cc[1] + k[n][2] * crd_cc[2] + phase[n] ) * cos(phi[n]) ; + } + + dB_axT = dB_ax[0] + dB_ax[1] + dB_ax[2] + dB_ax[3] + dB_ax[4] + dB_ax[5] + dB_ax[6] + dB_ax[7]; + dB_ayT = dB_ay[0] + dB_ay[1] + dB_ay[2] + dB_ay[3] + dB_ay[4] + dB_ay[5] + dB_ay[6] + dB_ay[7]; + + dv_axT = -dv_ax[0] + dv_ax[1] - dv_ax[2] + dv_ax[3] - dv_ax[4] + dv_ax[5] - dv_ax[6] + dv_ax[7]; + dv_ayT = -dv_ay[0] + dv_ay[1] - dv_ay[2] + dv_ay[3] - dv_ay[4] + dv_ay[5] - dv_ay[6] + dv_ay[7]; + + C1 = B0/sqrt(sqr(Amp[0])+sqr(Amp[1])+sqr(Amp[2])+sqr(Amp[3])+sqr(Amp[4])+sqr(Amp[5])+sqr(Amp[6])+sqr(Amp[7])); // + + F(PERT_HX, jx, jy, jz) = C1 * dB_axT;//g.BB + .1 * sin(ky * crd_fc[1]); + F(PERT_HY, jx, jy, jz) = C1 * dB_ayT;//g.BB + .1 * sin(ky * crd_fc[1]); + F(PERT_HZ, jx, jy, jz) = B0;//g.BB + .1 * sin(ky * crd_fc[1]); + + F(PERT_VX, jx, jy, jz) = C1 * dv_axT;//-.1 * sin(ky * crd_cc[1]); + F(PERT_VY, jx, jy, jz) = C1 * dv_ayT;//-.1 * sin(ky * crd_cc[1]); + F(PERT_VZ, jx, jy, jz) = 0.;//g.BB + .1 * sin(ky * crd_fc[1]); + }); + } + //} +} + +// ====================================================================== +// initializeParticles + + void initializeParticles(SetupParticles& setup_particles, + Balance& balance, Grid_t*& grid_ptr, Mparticles& mprts, + MfieldsAlfven& mflds_alfven) + { + // -- set particle initial condition + partitionAndSetupParticlesGeneral( + setup_particles, balance, grid_ptr, mprts, + [&](int kind, Double3 crd, int p, Int3 idx, psc_particle_npt& npt) { + switch (kind) { + case MY_ION: + npt.n = g.background_n; + npt.T[0] = g.background_Ti; + npt.T[1] = g.background_Ti; + npt.T[2] = g.background_Ti; + npt.p[0] = mflds_alfven(PERT_VX, idx[0], idx[1], idx[2], p); + npt.p[1] = mflds_alfven(PERT_VY, idx[0], idx[1], idx[2], p); + npt.p[2] = mflds_alfven(PERT_VZ, idx[0], idx[1], idx[2], p); + break; + case MY_ELECTRON: + npt.n = g.background_n; + npt.T[0] = g.background_Te; + npt.T[1] = g.background_Te; + npt.T[2] = g.background_Te; + npt.p[0] = mflds_alfven(PERT_VX, idx[0], idx[1], idx[2], p); + npt.p[1] = mflds_alfven(PERT_VY, idx[0], idx[1], idx[2], p); + npt.p[2] = mflds_alfven(PERT_VZ, idx[0], idx[1], idx[2], p); + break; + default: assert(0); + } + }); + } + +// ====================================================================== +// initializeFields + + void initializeFields(MfieldsState& mflds, MfieldsAlfven& mflds_alfven) + { + setupFieldsGeneral( + mflds, [&](int m, Int3 idx, int p, double crd[3]) -> MfieldsState::real_t { + switch (m) { + case HX: return mflds_alfven(PERT_HX, idx[0], idx[1], idx[2], p); + case HY: return mflds_alfven(PERT_HY, idx[0], idx[1], idx[2], p); + case HZ: return mflds_alfven(PERT_HZ, idx[0], idx[1], idx[2], p); + default: return 0.; + } + }); + } + +// ====================================================================== +// run +// +// This is basically the main function of this run, +// which sets up everything and then uses PscIntegrator to run the +// simulation + + void run() + { + mpi_printf(MPI_COMM_WORLD, "*** Setting up...\n"); + + // ---------------------------------------------------------------------- + // setup various parameters first + + setupParameters(); + + // ---------------------------------------------------------------------- + // Set up grid, state fields, particles + + auto grid_ptr = setupGrid(); + auto& grid = *grid_ptr; + + Mparticles mprts(grid); + MfieldsState mflds(grid); + if (!read_checkpoint_filename.empty()) { + read_checkpoint(read_checkpoint_filename, grid, mprts, mflds); + } + + // ---------------------------------------------------------------------- + // Set up various objects needed to run this case + + // -- Balance + psc_params.balance_interval = 200; + Balance balance{3}; + + // -- Sort + psc_params.sort_interval = 10; + + // -- Collision + int collision_interval = 0; + double collision_nu = 1e-10; + // 3.76 * std::pow(g.target_Te, 2.) / g.Zi / g.lambda0; + Collision collision{grid, collision_interval, collision_nu}; + + // -- Checks + ChecksParams checks_params{}; + checks_params.continuity_every_step = 10; + checks_params.continuity_dump_always = false; + checks_params.continuity_threshold = 1e-4; + checks_params.continuity_verbose = true; + + checks_params.gauss_every_step = 10; + checks_params.gauss_dump_always = false; + checks_params.gauss_threshold = 1e-4; + checks_params.gauss_verbose = true; + + Checks checks{grid, MPI_COMM_WORLD, checks_params}; + + // -- Marder correction + double marder_diffusion = 0.9; + int marder_loop = 3; + bool marder_dump = false; + psc_params.marder_interval = 100; + Marder marder(grid, marder_diffusion, marder_loop, marder_dump); + + // ---------------------------------------------------------------------- + // Set up output + // + // FIXME, this really is too complicated and not very flexible + + // -- output fields + OutputFieldsItemParams outf_item_params{}; + OutputFieldsParams outf_params{}; + outf_item_params.pfield_interval = 50; + outf_item_params.tfield_interval = -10; + + outf_params.fields = outf_item_params; + outf_params.moments = outf_item_params; + OutputFields outf{grid, outf_params}; + + // -- output particles + OutputParticlesParams outp_params{}; + outp_params.every_step = -100; + outp_params.data_dir = "."; + outp_params.basename = "prt"; + OutputParticles outp{grid, outp_params}; + + int oute_interval = -100; + DiagEnergies oute{grid.comm(), oute_interval}; + + auto diagnostics = makeDiagnosticsDefault(outf, outp, oute); + + // ---------------------------------------------------------------------- + // Set up objects specific to the TurbHarrisxz case + + SetupParticles setup_particles(grid); + setup_particles.fractional_n_particles_per_cell = true; + //setup_particles.neutralizing_population = MY_ION; + + // ---------------------------------------------------------------------- + // setup initial conditions + + if (read_checkpoint_filename.empty()) { + MfieldsAlfven mflds_alfven(grid, N_PERT, grid.ibn); + initializeAlfven(mflds_alfven); + initializeParticles(setup_particles, balance, grid_ptr, mprts, + mflds_alfven); + initializeFields(mflds, mflds_alfven); + } + + // ---------------------------------------------------------------------- + // hand off to PscIntegrator to run the simulation + + auto psc = + makePscIntegrator(psc_params, *grid_ptr, mflds, mprts, balance, + collision, checks, marder, diagnostics); + + MEM_STATS(); + psc.integrate(); + MEM_STATS(); + } + +// ====================================================================== +// main + + int main(int argc, char** argv) + { + psc_init(argc, argv); + + run(); + + MEM_STATS(); + + psc_finalize(); + return 0; + } diff --git a/src/psc_turb_harris_xz.cxx b/src/psc_turb_harris_xz.cxx new file mode 100644 index 0000000000..2b2500c4cc --- /dev/null +++ b/src/psc_turb_harris_xz.cxx @@ -0,0 +1,1135 @@ + +#include +#include +#include + +#include "DiagnosticsDefault.h" +#include "OutputFieldsDefault.h" +#include "psc_config.hxx" +#include "writer_mrc.hxx" + +#ifdef USE_CUDA +#include "cuda_bits.h" +#endif + +#include "rngpool_iface.h" + +//----------------------------------------------------------------- +// To use the complex numbers +//------------------------------ +#include +//using std::complex; +using namespace std; +typedef complex dcomp; + +//using namespace std::complex_literals; +// auto c = 1.0 + 3.0i; +//------------------------------ + +//extern Grid* vgrid; // FIXME + +// To use the random numbers +//------------------------------- +static RngPool* rngpool; +//------------------------------- + +//static inline double trunc_granular(double a, double b) +//{ +// return b * (int)(a / b); +//} +//----------------------------------------------------------------- + + +// ====================================================================== +// Particle kinds +// +// Particle kinds can be used to define different species, or different +// populations of the same species +// +// Here, we only enumerate the types, the actual information gets set up later. +// The last kind (MY_ELECTRON) will be used as "neutralizing kind", ie, in the +// initial setup, the code will add as many electrons as there are ions in a +// cell, at the same position, to ensure the initial plasma is neutral +// (so that Gauss's Law is satisfied). +enum +{ + MY_ELECTRON_UP, + MY_ION_UP, + //MY_ELECTRON_BO, + //MY_ION_BO, + N_MY_KINDS, +}; + +enum +{ + PERT_HX, + PERT_HY, + PERT_HZ, + PERT_VX, + PERT_VY, + PERT_VZ, + N_PERT, +}; + +// ====================================================================== +// PscTurbHarrisxzParams + +struct PscTurbHarrisxzParams +{ + + //---------------------------------- + double BB; + double Zi; + double lambda0; + double background_n; + double background_Te; + double background_Ti; + //---------------------------------- + + + //---------------------------------- + double Lx_di, Ly_di, Lz_di; // Size of box in di + double L_di; // Sheet thickness / ion inertial length + double Lpert_Lx; // wavelength of perturbation in terms of Lx + + double taui; // simulation wci's to run + double t_intervali; // output interval in terms of 1/wci + double output_particle_interval; // particle output interval in terms of 1/wci + int ion_sort_interval; + int electron_sort_interval; + double overalloc; // Overallocation factor (> 1) for particle arrays + + double wpe_wce; // electron plasma freq / electron cyclotron freq + double mi_me; // Ion mass / electron mass + double wpedt_max; //Is rhis necessary? + double Ti_Te; // Ion temperature / electron temperature + double nb_n0; // background plasma density + + double Tbe_Te; // Ratio of background T_e to Harris T_e + double Tbi_Ti; // Ratio of background T_i to Harris T_i + double Tbi_Tbe; // Ratio of background T_i to background T_e + + double bg; // Guide field + double theta; + double cs; + double sn; + + double db_b0; // perturbation in Bz relative to B0 + double nppc; // Average number of macro particle per cell per species + bool open_bc_x; // Flag to signal we want to do open boundary condition in x + bool driven_bc_z; // Flag to signal we want to do driven boundary condition in z + + Int3 gdims; // + Int3 np; + //---------------------------------- + + + //------------------------------------- + double ec; + double me; + double c; + double eps0; + double de; + double kb; + + double mi; + double di; + double wpe; + double wpi; + double wce; + double wci; + + // calculated + double b0; // B0 + double n0; + double v_A; + double rhoi_L; + double Lx, Ly, Lz; // size of box + double L; // Harris sheet thickness + double Lpert; // wavelength of perturbation + //double dbx; // Perturbation in Bz relative to Bo (Only change here) + //double dbz; // Set Bx perturbation so that div(B) = 0 + double dbz; // Perturbation in Bz relative to Bo (Only change here) in the case of yz + double dby; // Set By perturbation so that div(B) = 0 in the case of yz + double tanhf; + + double Te; // Electron temperature main harris + double Ti; // Ion temperature main harris + double Tbe; // Electron temperature backgroung + double Tbi; // Ion temperature backgroung + + double weight_s; // Charge per macro electron + + double vthe; // Electron thermal velocity + double vthi; // Ion thermal velocity + double vdre; // Electron drift velocity + double vdri; // Ion drift velocity + + double gdri; // gamma of ion drift frame + double gdre; // gamma of electron drift frame + double udri; // 4-velocity of ion drift frame + double udre; // 4-velocity of electron drift frame + + double Ne_back; // Number of macro electrons in background + double weight_b; // Charge per macro electron + double vtheb; // normalized background e thermal vel. + double vthib; // normalized background ion thermal vel. + + int n_global_patches; + + double Ne; // Total number of macro electrons + double Ne_sheet; // Number of macro electrons in Harris sheet + double Npe_sheet; // N physical e's in sheet + double Npe_back; // N physical e's in backgrnd + double Npe; //?? + + + //-------------------------------------------------- +}; + +// ====================================================================== +// Global parameters +// +// I'm not a big fan of global parameters, but they're only for +// this particular case and they help make things simpler. + +// An "anonymous namespace" makes these variables visible in this source file +// only +namespace +{ + +// Parameters specific to this case. They don't really need to be collected in a +// struct, but maybe it's nice that they are + +PscTurbHarrisxzParams g; + +std::string read_checkpoint_filename; + +// This is a set of generic PSC params (see include/psc.hxx), +// like number of steps to run, etc, which also should be set by the case +PscParams psc_params; + +} // namespace + +// ====================================================================== +// PSC configuration +// +// This sets up compile-time configuration for the code, in particular +// what data structures and algorithms to use +// +// EDIT to change order / floating point type / cuda / 2d/3d + +// There is something not quite right here ask Kai Jeff +//-------------------------------------------------------------------------------- +//using Dim = dim_yz; +using Dim = dim_xyz; +//using Dim = dim_yz; +//-------------------------------------------------------------------------------- + +#ifdef USE_CUDA +using PscConfig = PscConfig1vbecCuda; +#else +using PscConfig = PscConfig1vbecSingle; +#endif + +using Writer = WriterMRC; // can choose WriterMRC, WriterAdios2 + +// ---------------------------------------------------------------------- + +using MfieldsState = PscConfig::MfieldsState; +using MfieldsAlfven = Mfields; +using Mparticles = PscConfig::Mparticles; +using Balance = PscConfig::Balance; +using Collision = PscConfig::Collision; +using Checks = PscConfig::Checks; +using Marder = PscConfig::Marder; +using OutputParticles = PscConfig::OutputParticles; + +// ====================================================================== +// setupParameters + +void setupParameters() +{ + // -- set some generic PSC parameters + //----------------------------------------------- + //----------------------------------------------- + psc_params.nmax = 1801; + psc_params.cfl = 0.75; + psc_params.write_checkpoint_every_step = -100; //This is not working + psc_params.stats_every = -1; + //----------------------------------------------- + //----------------------------------------------- + + // -- start from checkpoint: + // + // Uncomment when wanting to start from a checkpoint, ie., + // instead of setting up grid, particles and state fields here, + // they'll be read from a file + // FIXME: This parameter would be a good candidate to be provided + // on the command line, rather than requiring recompilation when change. + + // read_checkpoint_filename = "checkpoint_500.bp"; + + //----------------------------------------------- + // -- Set some parameters specific to this case + //---------------------------------- + g.BB = 1.; + g.Zi = 1.; + g.lambda0 = 20.; + + g.background_n = 1.; + g.background_Te = .01; + g.background_Ti = .01; + //---------------------------------- + + //---------------------------------- + // Space dimensions + //-------------------------------------------------------------------------------- + /*** This is in the case of xz geometry + g.Lx_di = 40.; + g.Ly_di = 1.; + g.Lz_di = 10.; + g.gdims = {512, 1, 128}; + g.np = {4, 1, 2}; + ***/ + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + ///*** // This is ion the case of yz geometry + g.Lz_di = 40.; + g.Lx_di = 1.; + g.Ly_di = 10.; + g.gdims = {2, 128, 512}; + g.np = {1, 2, 4}; + //***/ + //-------------------------------------------------------------------------------- + + g.L_di = 1.0; + g.Lpert_Lx = 1.; + + //Time dimensions + g.taui = 10.; + g.t_intervali = 1.; + g.output_particle_interval = 100.; + g.electron_sort_interval = 25; + g.ion_sort_interval = 25; + g.overalloc = 2.; + + //Non-dimensional ratios + g.wpe_wce = 2.5; + g.mi_me = 1.; + g.Ti_Te = 1.; + g.nb_n0 = 0.1; + + g.Tbe_Te = .333; //How to stimate this ratio???? It is now consistent but I need an extra condition to estimate this ratio. + g.Tbi_Ti = .333; + g.Tbi_Tbe = 1.; + + //Background field + g.bg = 0.; + g.theta = 0.; + g.cs=cos(g.theta); + g.sn=sin(g.theta); + + //Amplitud of the fluctuation + g.db_b0 = 0.1; + + //Number of macro particles + g.nppc = 20; + + g.wpedt_max = .36; // what is this for? + + //---------------------------------- + + //----------------------------------- + // use natural PIC units + g.ec = 1.; // Charge normalization + g.me = 1.; // Mass normalization + g.c = 1.; // Speed of light + g.de = 1.; // Length normalization (electron inertial length) + g.eps0 = 1.; // Permittivity of space + g.wpe = 1.; // g.wce * g.wpe_wce; // electron plasma frequency + g.kb = 1.; // k Boltzman + + // derived quantities + g.wce = g.wpe / g.wpe_wce ; // Electron cyclotron frequency + g.wci = g.wce / g.mi_me ; // Ion cyclotron frequency + g.mi = g.me * g.mi_me; // Ion mass + g.wpi = g.wpe / sqrt(g.mi_me); // ion plasma frequency + + g.di = g.c / g.wpi; // ion inertial length + g.L = g.L_di * g.di; // Harris sheet thickness in di // Jeff check the thickness. It works best for g.L_di alone + g.Lx = g.Lx_di * g.di; // size of box in x dimension (non-dimensional Jeff) + g.Ly = g.Ly_di * g.di; // size of box in y dimension + g.Lz = g.Lz_di * g.di; // size of box in z dimension + + g.b0 = g.me * g.c * g.wce / g.ec; // Asymptotic magnetic field strength + g.n0 = g.me * g.eps0 * sqr(g.wpe) / (sqr(g.ec)); // Peak electron (ion) density this is the cgs correct one but gives n0 = 0.07 + + //g.n0 = 1.; + //g.b0 = 1.; + + g.Te = g.me * sqr(g.c) / + (2. * g.kb * sqr(g.wpe_wce) * (1. + g.Ti_Te)); // Electron temperature neglecting the background plasma pressure + + //g.Te = sqr(g.b0) / + // (8. * M_PI * g.kb * g.n0 * (1. + g.Ti_Te)); // Electron temperature neglecting the background plasma pressure + + //g.Te = sqr(g.b0) / + // (8. * M_PI * g.kb * g.n0 * ((1. + g.Ti_Te) - g.nb_n0 * g.Tbe_Te * (1 + g.Tbi_Tbe) ) ); // Electron temperature INCLUDING the background + // plasma pressure which is important here due to the way psc inject particles + + g.Ti = g.Te * g.Ti_Te; // Ion temperature + + g.Tbe = g.Te * g.Tbe_Te; + g.Tbi = g.Ti * g.Tbi_Ti; + + g.v_A = g.c * (g.wci / g.wpi);// / sqrt(g.nb_n0); // based on nb + // Include the relativistic alfven speed correction. + g.rhoi_L = sqrt(g.Ti_Te / (1. + g.Ti_Te)) / g.L_di; + + g.vthe = sqrt(g.Te / g.me); // Electron thermal velocity + g.vthi = sqrt(g.Ti / g.mi); // Ion thermal velocity + g.vtheb = sqrt(g.Tbe_Te * g.Te / g.me); // normalized background e thermal vel. + g.vthib = sqrt(g.Tbi_Ti * g.Ti / g.mi); // normalized background ion thermal vel. + + + g.vdri = g.c * g.b0 / (8 * M_PI * g.L * g.ec * g.n0 * (1 + 1/g.Ti_Te)); // Ion drift velocity + g.vdre = -g.vdri / (g.Ti_Te); // electron drift velocity + + g.n_global_patches = g.np[0] * g.np[1] * g.np[2]; + + g.Npe_sheet = 2 * g.n0 * g.Lx * g.Ly * g.L * tanh(0.5 * g.Lz / g.L); // N physical e's in sheet + g.Npe_back = g.nb_n0 * g.n0 * g.Ly * g.Lz * g.Lx; // N physical e's in backgrnd + g.Npe = g.Npe_sheet + g.Npe_back; + + g.Ne = g.nppc * g.gdims[0] * g.gdims[1] * g.gdims[2]; // total macro electrons in box + g.Ne_sheet = g.Ne * g.Npe_sheet / g.Npe; + g.Ne_back = g.Ne * g.Npe_back / g.Npe; + + //g.Ne_sheet = trunc_granular(g.Ne_sheet, g.n_global_patches); // Make it divisible by # subdomains + //g.Ne_back = trunc_granular( g.Ne_back, g.n_global_patches); // Make it divisible by # subdomains + g.Ne = g.Ne_sheet + g.Ne_back; + //g.weight_s = g.ec * g.Npe_sheet / g.Ne_sheet; // Charge per macro electron + //g.weight_b = g.ec * g.Npe_back / g.Ne_back; // Charge per macro electron + + g.gdri = 1. / sqrt(1. - sqr(g.vdri) / sqr(g.c)); // gamma of ion drift frame + g.gdre = 1. / sqrt(1. - sqr(g.vdre) / sqr(g.c)); // gamma of electron drift frame + + g.udri = g.vdri * g.gdri; // 4-velocity of ion drift frame + g.udre = g.vdre * g.gdre; // 4-velocity of electron drift frame + g.tanhf = tanh(0.5 * g.Lz / g.L); + g.Lpert = g.Lpert_Lx * g.Lx; // wavelength of perturbation + + //-------------------------------------------------------------------------------- + // This is in the case of xz geometry + //g.dbx = g.db_b0 * g.b0 * M_PI * g.L / g.Lz; // Set Bx perturbation so that div(B) = 0 + //g.dbz = -g.db_b0 * g.b0 * 2 * M_PI * g.L / g.Lx; // Perturbation in Bz relative to Bo (Only change here) + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + // This is in the case of yz geometry + g.dbz = g.db_b0 * g.b0 * M_PI * g.L / g.Ly; // Set Bz perturbation so that div(B) = 0 in the case of yz geometry + g.dby = -g.db_b0 * g.b0 * 2 * M_PI * g.L / g.Lz; // Perturbation in By relative to Bo (Only change here) in the case of yz geometry + //-------------------------------------------------------------------------------- + + //----------------------------------- +} + +// ====================================================================== +// setupGrid +// +// This helper function is responsible for setting up the "Grid", +// which is really more than just the domain and its decomposition, it +// also encompasses PC normalization parameters, information about the +// particle kinds, etc. + +Grid_t* setupGrid() +{ + + //--------------------------------------------------------------- + mpi_printf(MPI_COMM_WORLD, "***********************************************\n"); + mpi_printf(MPI_COMM_WORLD, "* Topology: %d x %d x %d\n", g.np[0], g.np[1], g.np[2]); + mpi_printf(MPI_COMM_WORLD, "tanhf = %g\n", g.tanhf); + mpi_printf(MPI_COMM_WORLD, "L_di = %g\n", g.L_di); + mpi_printf(MPI_COMM_WORLD, "rhoi/L = %g\n", g.rhoi_L); + mpi_printf(MPI_COMM_WORLD, "Ti/Te = %g\n", g.Ti_Te); + mpi_printf(MPI_COMM_WORLD, "Ti = %g\n", g.Ti); + mpi_printf(MPI_COMM_WORLD, "Te = %g\n", g.Te); + mpi_printf(MPI_COMM_WORLD, "nb/n0 = %g\n", g.nb_n0); + mpi_printf(MPI_COMM_WORLD, "wpe/wce = %g\n", g.wpe_wce); + mpi_printf(MPI_COMM_WORLD, "mi/me = %g\n", g.mi_me); + mpi_printf(MPI_COMM_WORLD, "theta = %g\n", g.theta); + mpi_printf(MPI_COMM_WORLD, "Lpert/Lx = %g\n", g.Lpert_Lx); + mpi_printf(MPI_COMM_WORLD, "dbz/b0 = %g\n", g.db_b0); + mpi_printf(MPI_COMM_WORLD, "taui = %g\n", g.taui); + mpi_printf(MPI_COMM_WORLD, "t_intervali = %g\n", g.t_intervali); + mpi_printf(MPI_COMM_WORLD, "num_step = %d\n", psc_params.nmax); + mpi_printf(MPI_COMM_WORLD, "n0 = %g\n", g.n0); + mpi_printf(MPI_COMM_WORLD, "Lx/di = %g\n", g.Lx / g.di); + mpi_printf(MPI_COMM_WORLD, "Lx/de = %g\n", g.Lx / g.de); + mpi_printf(MPI_COMM_WORLD, "Ly/di = %g\n", g.Ly / g.di); + mpi_printf(MPI_COMM_WORLD, "Ly/de = %g\n", g.Ly / g.de); + mpi_printf(MPI_COMM_WORLD, "Lz/di = %g\n", g.Lz / g.di); + mpi_printf(MPI_COMM_WORLD, "Lz/de = %g\n", g.Lz / g.de); + mpi_printf(MPI_COMM_WORLD, "Lx = %g\n", g.Lx); + mpi_printf(MPI_COMM_WORLD, "Ly = %g\n", g.Ly); + mpi_printf(MPI_COMM_WORLD, "Lz = %g\n", g.Lz); + mpi_printf(MPI_COMM_WORLD, "Lx_di = %g\n", g.Lx_di); + mpi_printf(MPI_COMM_WORLD, "Ly_di = %g\n", g.Ly_di); + mpi_printf(MPI_COMM_WORLD, "Lz_di = %g\n", g.Lz_di); + mpi_printf(MPI_COMM_WORLD, "nx = %d\n", g.gdims[0]); + mpi_printf(MPI_COMM_WORLD, "ny = %d\n", g.gdims[1]); + mpi_printf(MPI_COMM_WORLD, "nz = %d\n", g.gdims[2]); + mpi_printf(MPI_COMM_WORLD, "n_global_patches = %d\n", g.n_global_patches); + mpi_printf(MPI_COMM_WORLD, "nppc = %g\n", g.nppc); + mpi_printf(MPI_COMM_WORLD, "b0 = %g\n", g.b0); + mpi_printf(MPI_COMM_WORLD, "v_A (based on nb) = %g\n", g.v_A); + mpi_printf(MPI_COMM_WORLD, "di = %g\n", g.di); + mpi_printf(MPI_COMM_WORLD, "Ne = %g\n", g.Ne); + mpi_printf(MPI_COMM_WORLD, "Ne_sheet = %g\n", g.Ne_sheet); + mpi_printf(MPI_COMM_WORLD, "Ne_back = %g\n", g.Ne_back); + mpi_printf(MPI_COMM_WORLD, "total # of particles = %g\n", 2 * g.Ne); + //mpi_printf(MPI_COMM_WORLD, "dt*wpe = %g\n", g.wpe * grid.dt); + //mpi_printf(MPI_COMM_WORLD, "dt*wce = %g\n", g.wce * grid.dt); + //mpi_printf(MPI_COMM_WORLD, "dt*wci = %g\n", g.wci * grid.dt); + mpi_printf(MPI_COMM_WORLD, "dx/de = %g\n", g.Lx / (g.de * g.gdims[0])); + mpi_printf(MPI_COMM_WORLD, "dy/de = %g\n", g.Ly / (g.de * g.gdims[1])); + mpi_printf(MPI_COMM_WORLD, "dz/de = %g\n", g.Lz / (g.de * g.gdims[2])); + mpi_printf(MPI_COMM_WORLD, "dx/rhoi = %g\n", + (g.Lx / g.gdims[0]) / (g.vthi / g.wci)); + mpi_printf(MPI_COMM_WORLD, "dx/rhoe = %g\n", + (g.Lx / g.gdims[0]) / (g.vthe / g.wce)); + mpi_printf(MPI_COMM_WORLD, "L/debye = %g\n", g.L / (g.vthe / g.wpe)); + mpi_printf(MPI_COMM_WORLD, "dx/debye = %g\n", + (g.Lx / g.gdims[0]) / (g.vthe / g.wpe)); + mpi_printf(MPI_COMM_WORLD, "n0 = %g\n", g.n0); + mpi_printf(MPI_COMM_WORLD, "vthi/c = %g\n", g.vthi / g.c); + mpi_printf(MPI_COMM_WORLD, "vthe/c = %g\n", g.vthe / g.c); + mpi_printf(MPI_COMM_WORLD, "vdri/c = %g\n", g.vdri / g.c); + mpi_printf(MPI_COMM_WORLD, "vdre/c = %g\n", g.vdre / g.c); + mpi_printf(MPI_COMM_WORLD, "gdri = %g\n", g.gdri); + mpi_printf(MPI_COMM_WORLD, "gdre = %g\n", g.gdre); + //------------------------------------------------------------- + + // --- setup domain + Grid_t::Real3 LL = {g.Lx_di, g.Ly_di, g.Lz_di}; // domain size (in d_i) !!!! This is important (jeff) + //Grid_t::Real3 LL = {3. * 80., 1., 80.}; // domain size (in d_e) + //Int3 gdims = {3 * 80, 1, 80}; // global number of grid points + //Int3 np = {3*5, 1, 2}; // division into patches + + Grid_t::Domain domain{g.gdims, LL, -.5 * LL, g.np}; + // There was an issue with the conducting and reflective boundary conditions. This returns continuity diff messages. + //Both and each of them generate the discontinuity error + //-------------------------------------------------------------------------------- + /*** // This is in the case og xz geometry + psc::grid::BC bc{{BND_FLD_PERIODIC, BND_FLD_PERIODIC, BND_FLD_CONDUCTING_WALL}, + {BND_FLD_PERIODIC, BND_FLD_PERIODIC, BND_FLD_CONDUCTING_WALL}, + {BND_PRT_PERIODIC, BND_PRT_PERIODIC, BND_PRT_REFLECTING}, + {BND_PRT_PERIODIC, BND_PRT_PERIODIC, BND_PRT_REFLECTING}}; + ***/ + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + // This is in the case of yz geometry + psc::grid::BC bc{{BND_FLD_PERIODIC, BND_FLD_CONDUCTING_WALL, BND_FLD_PERIODIC}, // this is in the case of yz geometry + {BND_FLD_PERIODIC, BND_FLD_CONDUCTING_WALL, BND_FLD_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_REFLECTING, BND_PRT_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_REFLECTING, BND_PRT_PERIODIC}}; + //-------------------------------------------------------------------------------- + + + // -- setup particle kinds + // last population ("i") is neutralizing + Grid_t::Kinds kinds(N_MY_KINDS); + kinds[MY_ION_UP] = {g.Zi, g.mi_me * g.Zi, "i_UP"}; + kinds[MY_ELECTRON_UP] = {-1., 1., "e_UP"}; + //kinds[MY_ION_BO] = {g.Zi, g.mi_me * g.Zi, "i_BO"}; + //kinds[MY_ELECTRON_BO] = {-1., 1., "e_BO"}; + + g.di = sqrt(kinds[MY_ION_UP].m / kinds[MY_ION_UP].q); + + mpi_printf(MPI_COMM_WORLD, "de = %g, di = %g\n", 1., g.di); + mpi_printf(MPI_COMM_WORLD, "lambda_De (background) = %g\n", + sqrt(g.background_Te)); + + // -- setup normalization + auto norm_params = Grid_t::NormalizationParams::dimensionless(); + norm_params.nicell = g.nppc ; + + double dt = psc_params.cfl * courant_length(domain); + Grid_t::Normalization norm{norm_params}; + + mpi_printf(MPI_COMM_WORLD, "dt = %g\n", dt); + + Int3 ibn = {2, 2, 2}; + if (Dim::InvarX::value) { + ibn[0] = 0; + } + if (Dim::InvarY::value) { + ibn[1] = 0; + } + if (Dim::InvarZ::value) { + ibn[2] = 0; + } + + return new Grid_t{domain, bc, kinds, norm, dt, -1, ibn}; +} + +// ====================================================================== +// initializeAlfven + +void initializeAlfven(MfieldsAlfven& mflds) +{ + const auto& grid = mflds.grid(); + double ky = 2. * M_PI / grid.domain.length[1]; + +// This is for the implementation of the Langevin antena +//------------------------------------------------------------------------------------------------------------ + +// double x = crd[0], y=crd[1], z = crd[2]; +//Following the same 8 modes, background field along the z direction (direction of the harris field) + +//To compute J_ext = (c/4pi) \nabla \times B_ext + +double Nk = 8; +double L_per=sqrt(sqr(g.Lx) + sqr(g.Ly)) ; + +double dB0 = g.b0 * g.db_b0; // I'm not sure this is the right one Jeff +double dB_bar = 0.5 * g.b0 * g.db_b0 * L_per/g.Lz ; + +double k_x = 2 * M_PI / g.Lx; +double k_y = 2 * M_PI / g.Ly; +double k_z = 2 * M_PI / g.Lz; + +Double3 k1 = {1 * k_x, 0 * k_y, 1 * k_z}; +Double3 k2 = {1 * k_x, 0 * k_y, -1 * k_z}; +Double3 k3 = {0 * k_x, 1 * k_y, 1 * k_z}; +Double3 k4 = {0 * k_x, 1 * k_y, -1 * k_z}; +Double3 k5 = {-1 * k_x, 0 * k_y, 1 * k_z}; +Double3 k6 = {-1 * k_x, 0 * k_y, -1 * k_z}; +Double3 k7 = {0 * k_x, -1 * k_y, 1 * k_z}; +Double3 k8 = {0 * k_x, -1 * k_y, -1 * k_z}; + +double k_per[8]={sqrt( sqr(k1[0]) + sqr(k1[1]) ), + sqrt( sqr(k2[0]) + sqr(k2[1]) ), + sqrt( sqr(k3[0]) + sqr(k3[1]) ), + sqrt( sqr(k4[0]) + sqr(k4[1]) ), + sqrt( sqr(k5[0]) + sqr(k5[1]) ), + sqrt( sqr(k6[0]) + sqr(k6[1]) ), + sqrt( sqr(k7[0]) + sqr(k7[1]) ), + sqrt( sqr(k8[0]) + sqr(k8[1]) )}; + +// For reproducibility; +//double rand_ph[8]={0.987*2.*M_PI, 0.666*2.*M_PI, 0.025*2.*M_PI, 0.954*2.*M_PI, 0.781*2.*M_PI, 0.846*2.*M_PI, 0.192*2.*M_PI, 0.778*2.*M_PI}; + + +// Generate the random numbers +//------------------------------------------- +rngpool = + RngPool_create(); + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + RngPool_seed(rngpool, rank); + Rng* rng = RngPool_get(rngpool, 0); +//------------------------------------------- +double ua = -0.5; +double ub = 0.5; +double rph_a = -1; +double rph_b = 1; +//----------------------------------------------------------- +double rand_ph[8]={2 * M_PI * Rng_uniform(rng, rph_a, rph_b), // I think this numbers need to change at each time + 2 * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2 * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2 * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2 * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2 * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2 * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2 * M_PI * Rng_uniform(rng, rph_a, rph_b)}; +dcomp unk[8]={2. * M_PI * Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), // This needs to change at each time + 2. * M_PI * Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + 2. * M_PI * Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + 2. * M_PI * Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + 2. * M_PI * Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + 2. * M_PI * Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + 2. * M_PI * Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + 2. * M_PI * Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub)}; +dcomp b0k[8] = {polar(dB0,rand_ph[0]), + polar(dB0,rand_ph[1]), + polar(dB0,rand_ph[2]), + polar(dB0,rand_ph[3]), + polar(dB0,rand_ph[4]), + polar(dB0,rand_ph[5]), + polar(dB0,rand_ph[6]), + polar(dB0,rand_ph[7])}; +//----------------------------------------------------------- + +//----------------------------------------------------------- +double omega_0 = 0.9 * (2 * M_PI * g.v_A / g.Lz); // These are the values according to Daniel Groselj +double gamma_0 = 0.6 * omega_0; + +double delta_t_n = 1.; //dt; // This is the time step that has to be calculated +double dBn = dB0; // This is the magnetic field of the previous step. It needs to be included + +dcomp bn_k[8] = { b0k[0] , b0k[1] , b0k[2] , b0k[3] , b0k[4] , b0k[5] , b0k[6] , b0k[7] }; // This needs to be calculated properly + +// This is an iterative formula +double Cnp1 = 1. + delta_t_n * (dB_bar - dBn) / dB_bar ; + +double dBnp1 = Cnp1 * dBn; + +dcomp bnp1_k[8] = {Cnp1 * bn_k[0] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12 * gamma_0 * delta_t_n) * unk[0], + Cnp1 * bn_k[1] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12 * gamma_0 * delta_t_n) * unk[1], + Cnp1 * bn_k[2] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12 * gamma_0 * delta_t_n) * unk[2], + Cnp1 * bn_k[3] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12 * gamma_0 * delta_t_n) * unk[3], + Cnp1 * bn_k[4] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12 * gamma_0 * delta_t_n) * unk[4], + Cnp1 * bn_k[5] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12 * gamma_0 * delta_t_n) * unk[5], + Cnp1 * bn_k[6] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12 * gamma_0 * delta_t_n) * unk[6], + Cnp1 * bn_k[7] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12 * gamma_0 * delta_t_n) * unk[7]} ; +//----------------------------------------------------------- + + +//----------------------------------------------------------- +//dcomp kp_k_exp_1 = polar ((k_per[0] / k_z), (k1[0] * x + k1[1] * y + k1[2] * z)); +//double pol_ar = kp_k_exp_1.real(); + +//----------------------------------------------------------- +const dcomp i(0.0,1.0); +//----------------------------------------------------------- +dcomp pol = std::polar(1.,0.); +double pol_r = pol.real(); +//dcomp pol = ; + +dcomp pol_1 = g.b0 * 3. + 4.i; +dcomp pol_2 = 3. + -4.i; +dcomp pol_3 = pol_1*pol_2; +double pol_3r = pol_3.real(); +double b0kr = b0k[0].real(); + +mpi_printf(MPI_COMM_WORLD, "rand_ph = %g\n", rand_ph[0]); +mpi_printf(MPI_COMM_WORLD, "uk = %g\n", unk[0].real()); +mpi_printf(MPI_COMM_WORLD, "polr = %g\n", pol_r); +mpi_printf(MPI_COMM_WORLD, "pol3r = %g\n", pol_3r); +mpi_printf(MPI_COMM_WORLD, "b0kr = %g\n", b0kr); +//mpi_printf(MPI_COMM_WORLD, "pola3 = %g\n", pol_ar); +//----------------------------------------------------------- + + +//----------------------------------------------------------- +double B_ext_x_r = 1. / sqrt(Nk) ; +double B_ext_y_r = 1. / sqrt(Nk) ; +double B_ext_z_r = 1. / sqrt(Nk) ; + +//----------------------------------------------------------- + +//-------------------------------------------------------------------------------- + mpi_printf(grid.comm(), "**** Setting up Alfven fields...\n"); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); // In here the dim_xyz works! + + int n_ghosts = std::max( + {mflds.ibn()[0], mflds.ibn()[1], mflds.ibn()[2]}); // FIXME, not pretty + + grid.Foreach_3d(n_ghosts, n_ghosts, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + auto crd_fc = Centering::getPos(patch, index, Centering::FC); + auto crd_cc = Centering::getPos(patch, index, Centering::CC); + F(PERT_HY, jx, jy, jz) = g.BB + .1 * sin(ky * crd_fc[1]); + F(PERT_VY, jx, jy, jz) = -.1 * sin(ky * crd_cc[1]); + + F(PERT_HX, jx, jy, jz) = sin(k_x * crd_cc[0]); // This neads to be the real part of B_ext_x + + + }); + + } +//-------------------------------------------------------------------------------- +} + +// ====================================================================== +// initializeParticles + +void initializeParticles(SetupParticles& setup_particles, + Balance& balance, Grid_t*& grid_ptr, Mparticles& mprts, + MfieldsAlfven& mflds_alfven) +{ + //*** + // -- set particle initial condition + partitionAndSetupParticlesGeneral( + setup_particles, balance, grid_ptr, mprts, + [&](int kind, Double3 crd, int p, Int3 idx, psc_particle_npt& npt) { + double x = crd[0], y=crd[1], z = crd[2]; + switch (kind) { + //-------------------------------------------------------------------------------- + /*** // This is a block for the xz configuration using single popullation + case 0: //Ion drifting up + npt.n = g.n0 * (g.nb_n0 + (1 / sqr(cosh(z / g.L))) ) ; + npt.T[0] = g.Ti / sqr(cosh(z / g.L)) + g.Tbi; + npt.T[1] = g.Ti / sqr(cosh(z / g.L)) + g.Tbi; + npt.T[2] = g.Ti / sqr(cosh(z / g.L)) + g.Tbi; + npt.p[0] = 0.; + npt.p[1] = g.udri / sqr(cosh(z / g.L)); + npt.p[2] = 0.;//mflds_alfven(PERT_VZ, idx[0], idx[1], idx[2], p); + npt.kind = MY_ION_UP; + break; + case 1: //Electron drifting up + npt.n = g.n0 * (g.nb_n0 + (1 / sqr(cosh(z / g.L))) ) ; + npt.T[0] = g.Te / sqr(cosh(z / g.L)) + g.Tbe; + npt.T[1] = g.Te / sqr(cosh(z / g.L)) + g.Tbe; + npt.T[2] = g.Te / sqr(cosh(z / g.L)) + g.Tbe; + npt.p[0] = 0.; + npt.p[1] = g.udre / sqr(cosh(z / g.L)); + npt.p[2] = 0.;//mflds_alfven(PERT_VZ, idx[0], idx[1], idx[2], p); + npt.kind = MY_ELECTRON_UP; + break; + ***/ + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + /*** // This is a block for the yz configuration using a single poppulation + double psi; + if (y<=g.L && y>=0.) psi=1.; + else if (y<0. && y>=-g.L) psi=1.; + else psi=0.; + case 0: //Ion drifting up + npt.n = g.n0 * (g.nb_n0 + (1 / sqr(cosh(y / g.L))) ) ; + npt.T[0] = g.Ti * psi + g.Tbi; + npt.T[1] = g.Ti * psi + g.Tbi; + npt.T[2] = g.Ti * psi + g.Tbi; + npt.p[0] = g.udri * psi; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ION_UP; + break; + case 1: //Electron drifting up + npt.n = g.n0 * (g.nb_n0 + (1 / sqr(cosh(y / g.L))) ) ; + npt.T[0] = g.Te * psi + g.Tbe; + npt.T[1] = g.Te * psi + g.Tbe; + npt.T[2] = g.Te * psi + g.Tbe; + npt.p[0] = g.udre * psi ; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ELECTRON_UP; + break; + ***/ + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + //*** // This is a block for the yz configuration using two popullations + case 0: //Ion drifting up + npt.n = g.n0 * (g.nb_n0 + (1 / sqr(cosh(y / g.L))) ) ; + npt.T[0] = g.Ti ; + npt.T[1] = g.Ti ; + npt.T[2] = g.Ti ; + npt.p[0] = g.udri; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ION_UP; + break; + case 1: //Electron drifting up + npt.n = g.n0 * (g.nb_n0 + (1 / sqr(cosh(y / g.L))) ) ; + npt.T[0] = g.Te ; + npt.T[1] = g.Te ; + npt.T[2] = g.Te ; + npt.p[0] = g.udre; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ELECTRON_UP; + break; + case 2: //Ion background up + npt.n = g.n0 * g.nb_n0 ; + npt.T[0] = g.Tbi; + npt.T[1] = g.Tbi; + npt.T[2] = g.Tbi; + npt.p[0] = 0.; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ION_UP; + break; + case 3: //Electron background up + npt.n = g.n0 * g.nb_n0; + npt.T[0] = g.Tbe; + npt.T[1] = g.Tbe; + npt.T[2] = g.Tbe; + npt.p[0] = 0.; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ELECTRON_UP; + break; + /***/ + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + /*** // This is a block for the xz configuration using two popullations + case 0: //Ion drifting up + npt.n = g.n0 / sqr(cosh(z / g.L)) + g.nb_n0 * g.n0; + npt.T[0] = g.Ti; + npt.T[1] = g.Ti; + npt.T[2] = g.Ti; + npt.p[0] = g.udri;// + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ION_UP; + break; + case 1: //Electron drifting up + npt.n = g.n0 / sqr(cosh(z / g.L)) + g.nb_n0 * g.n0; + npt.T[0] = g.Te; + npt.T[1] = g.Te; + npt.T[2] = g.Te; + npt.p[0] = g.udre; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ELECTRON_UP; + break; + case 2: //Ion background up + npt.n = g.nb_n0 * g.n0; + npt.T[0] = g.Tbi; + npt.T[1] = g.Tbi; + npt.T[2] = g.Tbi; + npt.p[0] = 0.; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ION_UP; + break; + case 3: //Electron Background up + npt.n = g.nb_n0 * g.n0; + npt.T[0] = g.Tbe; + npt.T[1] = g.Tbe; + npt.T[2] = g.Tbe; + npt.p[0] = 0.; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ELECTRON_UP; + break; + ***/ + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + /*** // This is to include the up and bottom labels using two popullations in xz geometry + case 4: //Ion drifting Bottom + npt.n = g.background_n; + npt.T[0] = g.background_Ti; + npt.T[1] = g.background_Ti; + npt.T[2] = g.background_Ti; + npt.p[0] = mflds_alfven(PERT_VX, idx[0], idx[1], idx[2], p); + npt.p[1] = mflds_alfven(PERT_VY, idx[0], idx[1], idx[2], p); + npt.p[2] = mflds_alfven(PERT_VZ, idx[0], idx[1], idx[2], p); + npt.kind = MY_ION_BO; + break; + case 5: //Electron drifting Bottom + npt.n = g.background_n; + npt.T[0] = g.background_Te; + npt.T[1] = g.background_Te; + npt.T[2] = g.background_Te; + npt.p[0] = mflds_alfven(PERT_VX, idx[0], idx[1], idx[2], p); + npt.p[1] = mflds_alfven(PERT_VY, idx[0], idx[1], idx[2], p); + npt.p[2] = mflds_alfven(PERT_VZ, idx[0], idx[1], idx[2], p); + npt.kind = MY_ELECTRON_UP; + break; + case 6: //Ion background bottom + npt.n = g.background_n; + npt.T[0] = g.background_Ti; + npt.T[1] = g.background_Ti; + npt.T[2] = g.background_Ti; + npt.p[0] = mflds_alfven(PERT_VX, idx[0], idx[1], idx[2], p); + npt.p[1] = mflds_alfven(PERT_VY, idx[0], idx[1], idx[2], p); + npt.p[2] = mflds_alfven(PERT_VZ, idx[0], idx[1], idx[2], p); + npt.kind = MY_ION_BO; + break; + case 7: //Electron background bottom + npt.n = g.background_n; + npt.T[0] = g.background_Te; + npt.T[1] = g.background_Te; + npt.T[2] = g.background_Te; + npt.p[0] = mflds_alfven(PERT_VX, idx[0], idx[1], idx[2], p); + npt.p[1] = mflds_alfven(PERT_VY, idx[0], idx[1], idx[2], p); + npt.p[2] = mflds_alfven(PERT_VZ, idx[0], idx[1], idx[2], p); + npt.kind = MY_ELECTRON_BO; + break; + ***/ + //-------------------------------------------------------------------------------- + default: assert(0); + } + }); +} + +// ====================================================================== +// initializeFields + +void initializeFields(MfieldsState& mflds, MfieldsAlfven& mflds_alfven) +{ + setupFieldsGeneral( + mflds, [&](int m, Int3 idx, int p, double crd[3]) -> MfieldsState::real_t { + double x = crd[0], y=crd[1], z = crd[2]; + switch (m) { + //-------------------------------------------------------------------------------- + //case HY: return mflds_alfven(PERT_HY, idx[0], idx[1], idx[2], p); + //default: return 0.; + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + /*** //This is the magnetic field in the case xz geometry + case HX: + return g.b0 * tanh(z / g.L) + g.dbx * cos(2. * M_PI * x / g.Lx) * sin(M_PI * z / g.Lz); + case HY: + return 0.;//-g.sn * g.b0 * tanh(z / g.L) ;//+ g.b0 * g.bg;// this part is just to change the inclination of the harris Bfield + dB_azT; + case HZ: + return 0. + g.dbz * sin(2. * M_PI * x / g.Lx) * cos(M_PI * z / g.Lz); // + dB_azT; + ***/ + + //-------------------------------------------------------------------------------- + ///*** This is the magnetic field in the case yz geometry + case HX: + return 0. ; + case HY: + return 0. + g.dby * sin(2. * M_PI * (z - 0.5 * g.Lz) / g.Lz) * cos(M_PI * y / g.Ly); // + dB_azT //In the case of yz geometry + case HZ: + return g.b0 * tanh(y / g.L) + g.dbz * cos(2. * M_PI * (z - 0.5 * g.Lz) / g.Lz) * sin(M_PI * y / g.Ly); + //***/ + //-------------------------------------------------------------------------------- + + //case JYI: return 0.; // FIXME + + default: return 0.; + } + }); +} + +// ====================================================================== +// run +// +// This is basically the main function of this run, +// which sets up everything and then uses PscIntegrator to run the +// simulation + +void run() +{ + mpi_printf(MPI_COMM_WORLD, "*** Setting up...\n"); + + // ---------------------------------------------------------------------- + // setup various parameters first + + setupParameters(); + + // ---------------------------------------------------------------------- + // Set up grid, state fields, particles + + auto grid_ptr = setupGrid(); + auto& grid = *grid_ptr; + + Mparticles mprts(grid); + MfieldsState mflds(grid); + if (!read_checkpoint_filename.empty()) { + read_checkpoint(read_checkpoint_filename, grid, mprts, mflds); + } + + // ---------------------------------------------------------------------- + // Set up various objects needed to run this case + + // -- Balance + psc_params.balance_interval = 180; + Balance balance{3}; + + // -- Sort + psc_params.sort_interval = 10; + + // -- Collision + int collision_interval = 0; + double collision_nu = 1e-10; + // 3.76 * std::pow(g.target_Te, 2.) / g.Zi / g.lambda0; + Collision collision{grid, collision_interval, collision_nu}; + + // -- Checks + ChecksParams checks_params{}; + checks_params.continuity_every_step = -2; + checks_params.continuity_dump_always = false; + checks_params.continuity_threshold = 1e-4; + checks_params.continuity_verbose = true; + + checks_params.gauss_every_step = -2; + checks_params.gauss_dump_always = false; + checks_params.gauss_threshold = 1e-4; + checks_params.gauss_verbose = true; + + Checks checks{grid, MPI_COMM_WORLD, checks_params}; + + // -- Marder correction + double marder_diffusion = 0.9; + int marder_loop = 3; + bool marder_dump = false; + psc_params.marder_interval = 10; + Marder marder(grid, marder_diffusion, marder_loop, marder_dump); + + // ---------------------------------------------------------------------- + // Set up output + // + // FIXME, this really is too complicated and not very flexible + + // -- output fields + OutputFieldsItemParams outf_item_params{}; + OutputFieldsParams outf_params{}; + outf_item_params.pfield_interval = 45; + outf_item_params.tfield_interval = -10; + + outf_params.fields = outf_item_params; + outf_params.moments = outf_item_params; + OutputFields outf{grid, outf_params}; + + // -- output particles + OutputParticlesParams outp_params{}; + outp_params.every_step = -100; + outp_params.data_dir = "."; + outp_params.basename = "prt"; + OutputParticles outp{grid, outp_params}; + + int oute_interval = -100; + DiagEnergies oute{grid.comm(), oute_interval}; + + auto diagnostics = makeDiagnosticsDefault(outf, outp, oute); + + // ---------------------------------------------------------------------- + // Set up objects specific to the TurbHarrisxz case + + SetupParticles setup_particles(grid); + setup_particles.fractional_n_particles_per_cell = true; + setup_particles.neutralizing_population = MY_ION_UP; //It has to be the ions + + // ---------------------------------------------------------------------- + // setup initial conditions + + if (read_checkpoint_filename.empty()) { // This is the block which is returning the + MfieldsAlfven mflds_alfven(grid, N_PERT, grid.ibn); + initializeAlfven(mflds_alfven); + initializeParticles(setup_particles, balance, grid_ptr, mprts, + mflds_alfven); + initializeFields(mflds, mflds_alfven); + } + + // ---------------------------------------------------------------------- + // hand off to PscIntegrator to run the simulation + + auto psc = + makePscIntegrator(psc_params, *grid_ptr, mflds, mprts, balance, + collision, checks, marder, diagnostics); + + MEM_STATS(); + psc.integrate(); + MEM_STATS(); +} + +// ====================================================================== +// main + +int main(int argc, char** argv) +{ + psc_init(argc, argv); + + run(); + + MEM_STATS(); + + psc_finalize(); + return 0; +} diff --git a/src/psc_turb_harris_yz.cxx b/src/psc_turb_harris_yz.cxx new file mode 100644 index 0000000000..c68096cd79 --- /dev/null +++ b/src/psc_turb_harris_yz.cxx @@ -0,0 +1,1160 @@ + +#include +#include +#include + +#include "DiagnosticsDefault.h" +#include "OutputFieldsDefault.h" +#include "psc_config.hxx" +#include "writer_mrc.hxx" + +#ifdef USE_CUDA +#include "cuda_bits.h" +#endif + +#include "rngpool_iface.h" + +//----------------------------------------------------------------- +// To use the complex numbers +//------------------------------ +#include +// using std::complex; +using namespace std; +typedef complex dcomp; + +// using namespace std::complex_literals; +// auto c = 1.0 + 3.0i; +//------------------------------ + +// extern Grid* vgrid; // FIXME + +// To use the random numbers +//------------------------------- +static RngPool* rngpool; +//------------------------------- + +// static inline double trunc_granular(double a, double b) +//{ +// return b * (int)(a / b); +//} +//----------------------------------------------------------------- + +// ====================================================================== +// Particle kinds +// +// Particle kinds can be used to define different species, or different +// populations of the same species +// +// Here, we only enumerate the types, the actual information gets set up later. +// The last kind (MY_ELECTRON) will be used as "neutralizing kind", ie, in the +// initial setup, the code will add as many electrons as there are ions in a +// cell, at the same position, to ensure the initial plasma is neutral +// (so that Gauss's Law is satisfied). +enum +{ + MY_ELECTRON_UP, + MY_ION_UP, + MY_ELECTRON_BA, + MY_ION_BA, + N_MY_KINDS, +}; + +enum +{ + PERT_HX, + PERT_HY, + PERT_HZ, + PERT_AZ, + DIV_B, + PERT_JX_ext, + PERT_JY_ext, + PERT_JZ_ext, + N_PERT, +}; + +// ====================================================================== +// PscTurbHarrisxzParams + +struct PscTurbHarrisxzParams +{ + + //---------------------------------- + double BB; + double Zi; + double lambda0; + double background_n; + double background_Te; + double background_Ti; + //---------------------------------- + + //---------------------------------- + double Lx_di, Ly_di, Lz_di; // Size of box in di + double L_di; // Sheet thickness / ion inertial length + double Lpert_Lx; // wavelength of perturbation in terms of Lx + + double taui; // simulation wci's to run + double t_intervali; // output interval in terms of 1/wci + double output_particle_interval; // particle output interval in terms of 1/wci + int ion_sort_interval; + int electron_sort_interval; + double overalloc; // Overallocation factor (> 1) for particle arrays + + double wpe_wce; // electron plasma freq / electron cyclotron freq + double mi_me; // Ion mass / electron mass + double wpedt_max; // Is rhis necessary? + double Ti_Te; // Ion temperature / electron temperature + double nb_n0; // background plasma density + + double Tbe_Te; // Ratio of background T_e to Harris T_e + double Tbi_Ti; // Ratio of background T_i to Harris T_i + double Tbi_Tbe; // Ratio of background T_i to background T_e + + double bg; // Guide field + double theta; + double cs; + double sn; + + double db_b0; // perturbation in Bz relative to B0 + double nppc; // Average number of macro particle per cell per species + bool open_bc_x; // Flag to signal we want to do open boundary condition in x + bool + driven_bc_z; // Flag to signal we want to do driven boundary condition in z + + Int3 gdims; // + Int3 np; + //---------------------------------- + + //------------------------------------- + double ec; + double me; + double c; + double eps0; + double de; + double kb; + + double mi; + double di; + double wpe; + double wpi; + double wce; + double wci; + + // calculated + double b0; // B0 + double n0; + double v_A; + double rhoi_L; + double Lx, Ly, Lz; // size of box + double L; // Harris sheet thickness + double Lpert; // wavelength of perturbation + // double dbx; // Perturbation in Bz relative to Bo (Only change here) + // double dbz; // Set Bx perturbation so that div(B) = 0 + double dbz; // Perturbation in Bz relative to Bo (Only change here) in the + // case of yz + double dby; // Set By perturbation so that div(B) = 0 in the case of yz + double tanhf; + + double Te; // Electron temperature main harris + double Ti; // Ion temperature main harris + double Tbe; // Electron temperature backgroung + double Tbi; // Ion temperature backgroung + + double weight_s; // Charge per macro electron + + double vthe; // Electron thermal velocity + double vthi; // Ion thermal velocity + double vdre; // Electron drift velocity + double vdri; // Ion drift velocity + + double gdri; // gamma of ion drift frame + double gdre; // gamma of electron drift frame + double udri; // 4-velocity of ion drift frame + double udre; // 4-velocity of electron drift frame + + double Ne_back; // Number of macro electrons in background + double weight_b; // Charge per macro electron + double vtheb; // normalized background e thermal vel. + double vthib; // normalized background ion thermal vel. + + int n_global_patches; + + double Ne; // Total number of macro electrons + double Ne_sheet; // Number of macro electrons in Harris sheet + double Npe_sheet; // N physical e's in sheet + double Npe_back; // N physical e's in backgrnd + double Npe; //?? + + //-------------------------------------------------- +}; + +// ====================================================================== +// Global parameters +// +// I'm not a big fan of global parameters, but they're only for +// this particular case and they help make things simpler. + +// An "anonymous namespace" makes these variables visible in this source file +// only +namespace +{ + +// Parameters specific to this case. They don't really need to be collected in a +// struct, but maybe it's nice that they are + +PscTurbHarrisxzParams g; + +std::string read_checkpoint_filename; + +// This is a set of generic PSC params (see include/psc.hxx), +// like number of steps to run, etc, which also should be set by the case +PscParams psc_params; + +} // namespace + +// ====================================================================== +// PSC configuration +// +// This sets up compile-time configuration for the code, in particular +// what data structures and algorithms to use +// +// EDIT to change order / floating point type / cuda / 2d/3d + +// There is something not quite right here ask Kai Jeff +//-------------------------------------------------------------------------------- +// using Dim = dim_yz; +using Dim = dim_xyz; +//-------------------------------------------------------------------------------- + +#ifdef USE_CUDA +using PscConfig = PscConfig1vbecCuda; +#else +using PscConfig = PscConfig1vbecSingle; +#endif + +using Writer = WriterMRC; // can choose WriterMRC, WriterAdios2 + +// ---------------------------------------------------------------------- + +using MfieldsState = PscConfig::MfieldsState; +using MfieldsAlfven = Mfields; +using Mparticles = PscConfig::Mparticles; +using Balance = PscConfig::Balance; +using Collision = PscConfig::Collision; +using Checks = PscConfig::Checks; +using Marder = PscConfig::Marder; +using OutputParticles = PscConfig::OutputParticles; + +// ====================================================================== +// setupParameters + +void setupParameters() +{ + // -- set some generic PSC parameters + //----------------------------------------------- + //----------------------------------------------- + psc_params.nmax = 5000; // 1801; + psc_params.cfl = 0.75; + psc_params.write_checkpoint_every_step = -100; // This is not working + psc_params.stats_every = -1; + //----------------------------------------------- + //----------------------------------------------- + + // -- start from checkpoint: + // + // Uncomment when wanting to start from a checkpoint, ie., + // instead of setting up grid, particles and state fields here, + // they'll be read from a file + // FIXME: This parameter would be a good candidate to be provided + // on the command line, rather than requiring recompilation when change. + + // read_checkpoint_filename = "checkpoint_500.bp"; + + //----------------------------------------------- + // -- Set some parameters specific to this case + //---------------------------------- + g.BB = 1.; + g.Zi = 1.; + g.lambda0 = 20.; + + g.background_n = 1.; + g.background_Te = .01; + g.background_Ti = .01; + //---------------------------------- + + //---------------------------------- + // Space dimensions + //-------------------------------------------------------------------------------- + ///*** // This is ion the case of yz geometry + //g.Lx_di = 2.*M_PI; + //g.Ly_di = 2.*M_PI; + //g.Lz_di = 10.*2.*M_PI; + //g.gdims = {40, 40, 10*40}; + + g.Lx_di = 1.; + g.Ly_di = 6.; + g.Lz_di = 1.; + g.gdims = {10, 30, 10}; + g.np = {2, 2, 2}; + //***/ + //-------------------------------------------------------------------------------- + + g.L_di = 1.; + g.Lpert_Lx = 1.; + + // Time dimensions + g.taui = 10.; + g.t_intervali = 1.; + g.output_particle_interval = 100.; + g.electron_sort_interval = 25; + g.ion_sort_interval = 25; + g.overalloc = 2.; + + // Non-dimensional ratios + g.wpe_wce = 2.5; + g.mi_me = 1.; + g.Ti_Te = 1.; + g.nb_n0 = 0.1; + + g.Tbe_Te = .333; // How to stimate this ratio???? It is now consistent but I + // need an extra condition to estimate this ratio. + g.Tbi_Ti = .333; + g.Tbi_Tbe = 1.; + + // Background field + g.bg = 0.; + g.theta = 0.; + g.cs = cos(g.theta); + g.sn = sin(g.theta); + + // Amplitud of the fluctuation + g.db_b0 = 0.1; + + // Number of macro particles + g.nppc = 30; + + g.wpedt_max = .36; // what is this for? + + //---------------------------------- + + //----------------------------------- + // use natural PIC units + g.ec = 1.; // Charge normalization + g.me = 1.; // Mass normalization + g.c = 1.; // Speed of light + g.de = 1.; // Length normalization (electron inertial length) + g.eps0 = 1.; // Permittivity of space + g.wpe = 1.; // g.wce * g.wpe_wce; // electron plasma frequency + g.kb = 1.; // k Boltzman + + // derived quantities + g.wce = g.wpe / g.wpe_wce; // Electron cyclotron frequency + g.wci = g.wce / g.mi_me; // Ion cyclotron frequency + g.mi = g.me * g.mi_me; // Ion mass + g.wpi = g.wpe / sqrt(g.mi_me); // ion plasma frequency + + g.di = g.c / g.wpi; // ion inertial length + g.L = g.L_di; // Harris sheet thickness in di // Jeff check the thickness. It + // works best for g.L_di alone + g.Lx = g.Lx_di; // size of box in x dimension (in di Jeff) + g.Ly = g.Ly_di; // size of box in y dimension + g.Lz = g.Lz_di; // size of box in z dimension + + g.b0 = g.me * g.c * g.wce / g.ec; // Asymptotic magnetic field strength + g.n0 = g.me * g.eps0 * sqr(g.wpe) / + (sqr(g.ec)); // Peak electron (ion) density this is the cgs correct one + // but gives n0 = 0.07 + + // g.n0 = 1.; + // g.b0 = 1.; + + g.Te = g.me * sqr(g.c) / + (2. * g.kb * sqr(g.wpe_wce) * + (1. + g.Ti_Te)); // Electron temperature neglecting the background + // plasma pressure + + // g.Te = sqr(g.b0) / + // (8. * M_PI * g.kb * g.n0 * (1. + g.Ti_Te)); // Electron temperature + // neglecting the background plasma pressure + + // g.Te = sqr(g.b0) / + // (8. * M_PI * g.kb * g.n0 * ((1. + g.Ti_Te) - g.nb_n0 * g.Tbe_Te * (1 + + // g.Tbi_Tbe) ) ); // Electron temperature INCLUDING the background + // plasma pressure which is important here due to the way psc inject particles + + g.Ti = g.Te * g.Ti_Te; // Ion temperature + + g.Tbe = g.Te * g.Tbe_Te; + g.Tbi = g.Ti * g.Tbi_Ti; + + g.v_A = g.c * (g.wci / + g.wpi); // / sqrt(g.nb_n0); // based on nb + // Include the relativistic alfven speed correction. + g.rhoi_L = sqrt(g.Ti_Te / (1. + g.Ti_Te)) / g.L_di; + + g.vthe = sqrt(g.Te / g.me); // Electron thermal velocity + g.vthi = sqrt(g.Ti / g.mi); // Ion thermal velocity + g.vtheb = + sqrt(g.Tbe_Te * g.Te / g.me); // normalized background e thermal vel. + g.vthib = + sqrt(g.Tbi_Ti * g.Ti / g.mi); // normalized background ion thermal vel. + + // g.vdri = + // g.c * g.b0 / + // (8 * M_PI * g.L * g.ec * g.n0 * (1 + 1 / g.Ti_Te)); // Ion drift velocity + // g.vdre = -g.vdri / (g.Ti_Te); // electron drift velocity + + g.vdri = 2.*g.c*g.Ti/(g.ec*g.b0*g.L); // Ion drift velocity + g.vdre = -g.vdri/(g.Ti_Te); // electron drift velocity + + g.n_global_patches = g.np[0] * g.np[1] * g.np[2]; + + g.Npe_sheet = 2 * g.n0 * g.Lx * g.Ly * g.L * + tanh(0.5 * g.Lz / g.L); // N physical e's in sheet + g.Npe_back = + g.nb_n0 * g.n0 * g.Ly * g.Lz * g.Lx; // N physical e's in backgrnd + g.Npe = g.Npe_sheet + g.Npe_back; + + g.Ne = g.nppc * g.gdims[0] * g.gdims[1] * + g.gdims[2]; // total macro electrons in box + g.Ne_sheet = g.Ne * g.Npe_sheet / g.Npe; + g.Ne_back = g.Ne * g.Npe_back / g.Npe; + + // g.Ne_sheet = trunc_granular(g.Ne_sheet, g.n_global_patches); // Make it + // divisible by # subdomains g.Ne_back = trunc_granular( g.Ne_back, + // g.n_global_patches); // Make it divisible by # subdomains + g.Ne = g.Ne_sheet + g.Ne_back; + // g.weight_s = g.ec * g.Npe_sheet / g.Ne_sheet; // Charge per macro electron + // g.weight_b = g.ec * g.Npe_back / g.Ne_back; // Charge per macro electron + + g.gdri = 1. / sqrt(1. - sqr(g.vdri) / sqr(g.c)); // gamma of ion drift frame + g.gdre = + 1. / sqrt(1. - sqr(g.vdre) / sqr(g.c)); // gamma of electron drift frame + + g.udri = g.vdri * g.gdri; // 4-velocity of ion drift frame + g.udre = g.vdre * g.gdre; // 4-velocity of electron drift frame + + mpi_printf(MPI_COMM_WORLD, "vdre = %g\n", g.vdre); + mpi_printf(MPI_COMM_WORLD, "vdri = %g\n", g.vdri); + mpi_printf(MPI_COMM_WORLD, "gdre = %g\n", g.gdre); + mpi_printf(MPI_COMM_WORLD, "gdri = %g\n", g.gdri); + mpi_printf(MPI_COMM_WORLD, "udre = %g\n", g.udre); + mpi_printf(MPI_COMM_WORLD, "udri = %g\n", g.udri); + + g.tanhf = tanh(0.5 * g.Lz / g.L); + g.Lpert = g.Lpert_Lx * g.Lx; // wavelength of perturbation + + //-------------------------------------------------------------------------------- + // This is in the case of yz geometry + g.dbz = + g.db_b0 * g.b0 * M_PI * g.L / + g.Ly; // Set Bz perturbation so that div(B) = 0 in the case of yz geometry + g.dby = -g.db_b0 * g.b0 * 2 * M_PI * g.L / + g.Lz; // Perturbation in By relative to Bo (Only change here) in the + // case of yz geometry + //-------------------------------------------------------------------------------- + + //----------------------------------- +} + +// ====================================================================== +// setupGrid +// +// This helper function is responsible for setting up the "Grid", +// which is really more than just the domain and its decomposition, it +// also encompasses PC normalization parameters, information about the +// particle kinds, etc. + +Grid_t* setupGrid() +{ + + //--------------------------------------------------------------- + mpi_printf(MPI_COMM_WORLD, + "***********************************************\n"); + mpi_printf(MPI_COMM_WORLD, "* Topology: %d x %d x %d\n", g.np[0], g.np[1], + g.np[2]); + mpi_printf(MPI_COMM_WORLD, "tanhf = %g\n", g.tanhf); + mpi_printf(MPI_COMM_WORLD, "L_di = %g\n", g.L_di); + mpi_printf(MPI_COMM_WORLD, "rhoi/L = %g\n", g.rhoi_L); + mpi_printf(MPI_COMM_WORLD, "Ti/Te = %g\n", g.Ti_Te); + mpi_printf(MPI_COMM_WORLD, "Ti = %g\n", g.Ti); + mpi_printf(MPI_COMM_WORLD, "Te = %g\n", g.Te); + mpi_printf(MPI_COMM_WORLD, "nb/n0 = %g\n", g.nb_n0); + mpi_printf(MPI_COMM_WORLD, "wpe/wce = %g\n", g.wpe_wce); + mpi_printf(MPI_COMM_WORLD, "mi/me = %g\n", g.mi_me); + mpi_printf(MPI_COMM_WORLD, "theta = %g\n", g.theta); + mpi_printf(MPI_COMM_WORLD, "Lpert/Lx = %g\n", g.Lpert_Lx); + mpi_printf(MPI_COMM_WORLD, "dbz/b0 = %g\n", g.db_b0); + mpi_printf(MPI_COMM_WORLD, "taui = %g\n", g.taui); + mpi_printf(MPI_COMM_WORLD, "t_intervali = %g\n", g.t_intervali); + mpi_printf(MPI_COMM_WORLD, "num_step = %d\n", psc_params.nmax); + mpi_printf(MPI_COMM_WORLD, "n0 = %g\n", g.n0); + mpi_printf(MPI_COMM_WORLD, "Lx/di = %g\n", g.Lx); + mpi_printf(MPI_COMM_WORLD, "Lx/de = %g\n", g.Lx * g.de / g.di); + mpi_printf(MPI_COMM_WORLD, "Ly/di = %g\n", g.Ly); + mpi_printf(MPI_COMM_WORLD, "Ly/de = %g\n", g.Ly * g.de / g.di); + mpi_printf(MPI_COMM_WORLD, "Lz/di = %g\n", g.Lz); + mpi_printf(MPI_COMM_WORLD, "Lz/de = %g\n", g.Lz * g.de / g.di); + mpi_printf(MPI_COMM_WORLD, "nx = %d\n", g.gdims[0]); + mpi_printf(MPI_COMM_WORLD, "ny = %d\n", g.gdims[1]); + mpi_printf(MPI_COMM_WORLD, "nz = %d\n", g.gdims[2]); + mpi_printf(MPI_COMM_WORLD, "n_global_patches = %d\n", g.n_global_patches); + mpi_printf(MPI_COMM_WORLD, "nppc = %g\n", g.nppc); + mpi_printf(MPI_COMM_WORLD, "b0 = %g\n", g.b0); + mpi_printf(MPI_COMM_WORLD, "v_A (based on nb) = %g\n", g.v_A); + mpi_printf(MPI_COMM_WORLD, "di = %g\n", g.di); + mpi_printf(MPI_COMM_WORLD, "Ne = %g\n", g.Ne); + mpi_printf(MPI_COMM_WORLD, "Ne_sheet = %g\n", g.Ne_sheet); + mpi_printf(MPI_COMM_WORLD, "Ne_back = %g\n", g.Ne_back); + mpi_printf(MPI_COMM_WORLD, "total # of particles = %g\n", 2 * g.Ne); + // mpi_printf(MPI_COMM_WORLD, "dt*wpe = %g\n", g.wpe * grid.dt); + // mpi_printf(MPI_COMM_WORLD, "dt*wce = %g\n", g.wce * grid.dt); + // mpi_printf(MPI_COMM_WORLD, "dt*wci = %g\n", g.wci * grid.dt); + mpi_printf(MPI_COMM_WORLD, "dx/de = %g\n", g.Lx / (g.de * g.gdims[0])); + mpi_printf(MPI_COMM_WORLD, "dy/de = %g\n", g.Ly / (g.de * g.gdims[1])); + mpi_printf(MPI_COMM_WORLD, "dz/de = %g\n", g.Lz / (g.de * g.gdims[2])); + mpi_printf(MPI_COMM_WORLD, "dx/rhoi = %g\n", + (g.Lx / g.gdims[0]) / (g.vthi / g.wci)); + mpi_printf(MPI_COMM_WORLD, "dx/rhoe = %g\n", + (g.Lx / g.gdims[0]) / (g.vthe / g.wce)); + mpi_printf(MPI_COMM_WORLD, "L/debye = %g\n", g.L / (g.vthe / g.wpe)); + mpi_printf(MPI_COMM_WORLD, "dx/debye = %g\n", + (g.Lx / g.gdims[0]) / (g.vthe / g.wpe)); + mpi_printf(MPI_COMM_WORLD, "n0 = %g\n", g.n0); + mpi_printf(MPI_COMM_WORLD, "vthi/c = %g\n", g.vthi / g.c); + mpi_printf(MPI_COMM_WORLD, "vthe/c = %g\n", g.vthe / g.c); + mpi_printf(MPI_COMM_WORLD, "vdri/c = %g\n", g.vdri / g.c); + mpi_printf(MPI_COMM_WORLD, "vdre/c = %g\n", g.vdre / g.c); + mpi_printf(MPI_COMM_WORLD, "gdri = %g\n", g.gdri); + mpi_printf(MPI_COMM_WORLD, "gdre = %g\n", g.gdre); + //------------------------------------------------------------- + + // --- setup domain + Grid_t::Real3 LL = { + g.Lx_di, g.Ly_di, + g.Lz_di}; // domain size (in d_i) !!!! This is important (jeff) + // Grid_t::Real3 LL = {3. * 80., 1., 80.}; // domain size (in d_e) + // Int3 gdims = {3 * 80, 1, 80}; // global number of grid points + // Int3 np = {3*5, 1, 2}; // division into patches + + Grid_t::Domain domain{g.gdims, LL, -.5 * LL, g.np}; + // There was an issue with the conducting and reflective boundary conditions. + // This returns continuity diff messages. + // Both and each of them generate the discontinuity error + + //-------------------------------------------------------------------------------- + // This is in the case of yz geometry + psc::grid::BC bc{{BND_FLD_PERIODIC, BND_FLD_CONDUCTING_WALL, + BND_FLD_PERIODIC}, // this is in the case of yz geometry + {BND_FLD_PERIODIC, BND_FLD_CONDUCTING_WALL, + BND_FLD_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_REFLECTING, + BND_PRT_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_REFLECTING, + BND_PRT_PERIODIC}}; + //-------------------------------------------------------------------------------- + + // -- setup particle kinds + // last population ("i") is neutralizing + Grid_t::Kinds kinds(N_MY_KINDS); + kinds[MY_ION_UP] = {g.Zi, g.mi_me * g.Zi, "i_UP"}; + kinds[MY_ELECTRON_UP] = {-1., 1., "e_UP"}; + kinds[MY_ION_BA] = {g.Zi, g.mi_me * g.Zi, "i_BA"}; + kinds[MY_ELECTRON_BA] = {-1., 1., "e_BA"}; + + g.di = sqrt(kinds[MY_ION_UP].m / kinds[MY_ION_UP].q); + + mpi_printf(MPI_COMM_WORLD, "de = %g, di = %g\n", 1., g.di); + mpi_printf(MPI_COMM_WORLD, "lambda_De (background) = %g\n", + sqrt(g.background_Te)); + + // -- setup normalization + auto norm_params = Grid_t::NormalizationParams::dimensionless(); + norm_params.nicell = g.nppc; + + double dt = psc_params.cfl * courant_length(domain); + Grid_t::Normalization norm{norm_params}; + + mpi_printf(MPI_COMM_WORLD, "dt = %g\n", dt); + + Int3 ibn = {2, 2, 2}; + if (Dim::InvarX::value) { + ibn[0] = 0; + } + if (Dim::InvarY::value) { + ibn[1] = 0; + } + if (Dim::InvarZ::value) { + ibn[2] = 0; + } + + return new Grid_t{domain, bc, kinds, norm, dt, -1, ibn}; +} + +// ====================================================================== +// Langevin antenna + +struct Langevin +{ + Langevin(); + + void step(double dt); + + int Nk; + double dB_bar; + double omega_0; + double gamma_0; + double g_rate; + double dBn; + + std::array bn_k; + std::array k; + std::array k_per; + + Rng* rng_; + int rank_; +}; + +Langevin::Langevin() +{ + Nk = 8; + + double L_per = sqrt(sqr(g.Lx) + sqr(g.Ly)); + dB_bar = 0.5 * g.b0 * L_per / g.Lz; // 0.5 * g.b0 * g.db_b0 * L_per/g.Lz ; + + dBn = dB_bar; + // Checking the iterations, assuming B_bar remains constant, + // then dBn is always dB0. + + omega_0 = 0.9 * (2. * M_PI * g.v_A / + g.Lz); // These are the values according to Daniel Groselj + gamma_0 = 0.6 * omega_0; + g_rate = 0.1; // This is chosen so omega_0 << g_rate << wpe; + + double k_x = 2. * M_PI / g.Lx; + double k_y = 2. * M_PI / g.Ly; + double k_z = 2. * M_PI / g.Lz; + + k[0] = {1. * k_x, 0. * k_y, 1. * k_z}; + k[1] = {1. * k_x, 0. * k_y, -1. * k_z}; + k[2] = {0. * k_x, 1. * k_y, 1. * k_z}; + k[3] = {0. * k_x, 1. * k_y, -1. * k_z}; + k[4] = {-1. * k_x, 0. * k_y, 1. * k_z}; + k[5] = {-1. * k_x, 0. * k_y, -1. * k_z}; + k[6] = {0. * k_x, -1. * k_y, 1. * k_z}; + k[7] = {0. * k_x, -1. * k_y, -1. * k_z}; + + for (int n = 0; n < Nk; n++) { + k_per[n] = std::sqrt(sqr(k[n][0]) + sqr(k[n][1])); + } + + MPI_Comm_rank(MPI_COMM_WORLD, &rank_); + rngpool = RngPool_create(); + RngPool_seed(rngpool, rank_); + rng_ = RngPool_get(rngpool, 0); + if (rank_ == 0) { + double rph_a = 0.; + double rph_b = 2. * M_PI; + + //------------------------------------------- + // const dcomp i(0.0,1.0); + //----------------------------------------------------------- + + for (int n = 0; n < Nk; n++) { + // I think this numbers need to change at each time + double rand_ph = Rng_uniform(rng_, rph_a, rph_b); + bn_k[n] = std::polar(dBn, rand_ph); + } + } + MPI_Bcast(bn_k.data(), Nk, MPI_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); +} + +void Langevin::step(double dt) +{ + const double ua = -0.5; + const double ub = 0.5; + + // This is the time step that has to be calculated + double delta_t_n = dt; + + // double Cnp1 = 1.; // Since dBn = dB0 always, Cnp1=1 always. + double Cnp1 = 1. + delta_t_n * g_rate * (dB_bar - dBn) / dB_bar; + double dBnp1 = Cnp1 * dBn; + + dcomp unk[8]; + if (rank_ == 0) { + for (int n = 0; n < Nk; n++) { + unk[n] = Rng_uniform(rng_, ua, ub) + 1.i * Rng_uniform(rng_, ua, ub); + } + } + MPI_Bcast(unk, Nk, MPI_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); + + // This is an iterative formula + + dcomp bnp1_k[8]; + for (int n = 0; n < Nk; n++) { + bnp1_k[n] = + Cnp1 * bn_k[n] * std::exp(-(gamma_0 + omega_0 * 1.i) * delta_t_n) + + dBnp1 * sqrt(12. * gamma_0 * delta_t_n) * unk[n]; + } + + // update n -> n + 1 + dBn = dBnp1; + for (int n = 0; n < Nk; n++) { + bn_k[n] = bnp1_k[n]; + } +}; + +struct Langevin* lng; + +//-------------------------------------------------------------------------------- +// Calculate the magnetic field components from the vector potential + +void calc_curl_Az(MfieldsAlfven& mflds) +{ + const auto& grid = mflds.grid(); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); + grid.Foreach_3d(1, 0, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + + // Bx_{i, j+1/2, k+1/2} = (Az(i, j+1, k+1/2) - Az(i, j, k+1/2)) / dy + // Bx_{i, j, k} = (Az(i, j+1, k) - Az(i, j, k)) / dy + + // Bx_{i, j+1/2, k+1/2} + // By_{i+1/2, j, k+1/2} + // Bz_{i+1/2, j+1/2, k} + F(PERT_HX, jx, jy, jz) = + (F(PERT_AZ, jx, jy + 1, jz) - F(PERT_AZ, jx, jy, jz)) / + (patch.y_nc(1) - patch.y_nc(0)); + F(PERT_HY, jx, jy, jz) = + -(F(PERT_AZ, jx + 1, jy, jz) - F(PERT_AZ, jx, jy, jz)) / + (patch.x_nc(1) - patch.x_nc(0)); + F(PERT_HZ, jx, jy, jz) = 0.; + }); + } +} + +//-------------------------------------------------------------------------------- +// Calculate the magnetic field divergence + +void calc_div_B(MfieldsAlfven& mflds) +{ + const auto& grid = mflds.grid(); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); + grid.Foreach_3d(1, 0, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + + F(DIV_B, jx, jy, jz) = + (F(PERT_HX, jx + 1, jy, jz) - F(PERT_HX, jx, jy, jz)) / + (patch.x_nc(1) - patch.x_nc(0)) + + (F(PERT_HY, jx, jy + 1, jz) - F(PERT_HY, jx, jy, jz)) / + (patch.y_nc(1) - patch.y_nc(0)) + + (F(PERT_HZ, jx, jy, jz + 1) - F(PERT_HZ, jx, jy, jz)) / + (patch.z_nc(1) - patch.z_nc(0)); + }); + } +} + +//-------------------------------------------------------------------------------- +// Calculate the external current componentfrom the magnetuc field + +void calc_curl_H(MfieldsAlfven& mflds) +{ + const auto& grid = mflds.grid(); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); + grid.Foreach_3d(0, 0, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + + // Bx_{i, j+1/2, k+1/2} + // By_{i+1/2, j, k+1/2} + // Bz_{i+1/2, j+1/2, k} + + // This is where the current compomemts live + //--------------------------------------------------------------------------- + // Jx_{i+1/2, j, k} = (Bz(i+1/2, j+1/2, k+1) - Bz(i+1/2, j-1/2, k+1)) / dy + // - (By(i, j+1/2, k+1/2) - By(i, j+1/2, k-1/2)) / dz + + // Jy_{i+1, j+1/2, k} = -(Bz(i+1/2, j+1/2, k+1) - Bz(i-1/2, j+1/2, k+1)) / + // dx + // + (Bx(i+1, j+1/2, k+1/2) - Bx(i+1, j+1/2, k-1/2)) / dz + + // Jz_{i, j, k+1/2} = (By(i+1/2, j, k+1/2) - By(i-1/2, j, k+1/2)) / dx + // - (Bx(i, j+1/2, k+1/2) - Bx(i, j-1/2, k+1/2)) / dy + //-------------------------------------------------------------------------------- + // This is how it is implemented assuming that the right coordinates take + // care of the 1/2's + //-------------------------------------------------------------------------------- + // Jx_{i, j, k} = (Bz(i, j, k) - Bz(i, j-1, k)) / dy + // - (By(i, j, k) - By(i, j, k-1)) / dz + + // Jy_{i, j, k} = -(Bz(i, j, k) - Bz(i-1, j, k)) / dx + // + (Bx(i, j, k) - Bx(i, j, k-1)) / dz + + // Jz_{i, j, k} = (By(i, j, k) - By(i-1, j, k)) / dx + // - (Bx(i, j, k) - Bx(i, j-1, k)) / dy + //-------------------------------------------------------------------------------- + + F(PERT_JX_ext, jx, jy, jz) = // remember to remove the zeros when including the external current. Jeff + 0.*(F(PERT_HZ, jx, jy, jz) - F(PERT_HZ, jx, jy - 1, jz)) / + (patch.y_nc(1) - patch.y_nc(0)) - + 0.*(F(PERT_HY, jx, jy, jz) - F(PERT_HY, jx, jy, jz - 1)) / + (patch.z_nc(1) - patch.z_nc(0)); + + F(PERT_JY_ext, jx, jy, jz) = + 0.*(F(PERT_HX, jx, jy, jz) - F(PERT_HX, jx, jy, jz - 1)) / + (patch.z_nc(1) - patch.z_nc(0)) - + 0.*(F(PERT_HZ, jx, jy, jz) - F(PERT_HZ, jx - 1, jy, jz)) / + (patch.x_nc(1) - patch.x_nc(0)); + + F(PERT_JZ_ext, jx, jy, jz) = + 0.*(F(PERT_HY, jx, jy, jz) - F(PERT_HY, jx - 1, jy, jz)) / + (patch.x_nc(1) - patch.x_nc(0)) - + 0.*(F(PERT_HX, jx, jy, jz) - F(PERT_HX, jx, jy - 1, jz)) / + (patch.y_nc(1) - patch.y_nc(0)); + }); + } +} + +// ====================================================================== +// initializeAlfven + +void initializeAlfven(MfieldsAlfven& mflds, Langevin& lng) +{ + const auto& grid = mflds.grid(); + + //-------------------------------------------------------------------------------- + mpi_printf(grid.comm(), "**** Setting up Alfven fields...\n"); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); + + int n_ghosts = std::max( + {mflds.ibn()[0], mflds.ibn()[1], mflds.ibn()[2]}); // FIXME, not pretty + + grid.Foreach_3d(n_ghosts, n_ghosts, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + auto crd_ec_z = Centering::getPos(patch, index, Centering::EC, 2); + //-------------------------------------------------------------------------------- + // Calculate the vector potential + dcomp Bext_x = 0., Bext_y = 0., Az = 0.; + for (int n = 0; n < lng.Nk; n++) { + Az += (lng.bn_k[n] * + exp(1i * (lng.k[n][0] * crd_ec_z[0] + lng.k[n][1] * crd_ec_z[1] + + lng.k[n][2] * crd_ec_z[2]))) / + lng.k_per[n]; + } + F(PERT_AZ, jx, jy, jz) = Az.real(); + }); + + calc_curl_Az(mflds); + // calc_div_B(mflds); + calc_curl_H(mflds); + } + //-------------------------------------------------------------------------------- + +#if 0 + + //------------------------------------------------------------------------------------------------------------ +#endif +} + +///*** +// ====================================================================== +// initializeParticles + +void initializeParticles(SetupParticles& setup_particles, + Balance& balance, Grid_t*& grid_ptr, Mparticles& mprts, + MfieldsAlfven& mflds_alfven) +{ + //*** + // -- set particle initial condition + partitionAndSetupParticlesGeneral( + setup_particles, balance, grid_ptr, mprts, + [&](int kind, Double3 crd, int p, Int3 idx, psc_particle_npt& npt) { + double x = crd[0], y = crd[1], z = crd[2]; + switch (kind) { + + //-------------------------------------------------------------------------------- + /*** // This is a block for the yz configuration using a single + poppulation double psi; if (y<=g.L && y>=0.) psi=1.; else if (y<0. && + y>=-g.L) psi=1.; else psi=0.; case 0: //Ion drifting up npt.n = g.n0 * + (g.nb_n0 + (1 / sqr(cosh(y / g.L))) ) ; npt.T[0] = g.Ti * psi + g.Tbi; + npt.T[1] = g.Ti * psi + g.Tbi; + npt.T[2] = g.Ti * psi + g.Tbi; + npt.p[0] = g.udri * psi; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ION_UP; + break; + case 1: //Electron drifting up + npt.n = g.n0 * (g.nb_n0 + (1 / sqr(cosh(y / g.L))) ) ; + npt.T[0] = g.Te * psi + g.Tbe; + npt.T[1] = g.Te * psi + g.Tbe; + npt.T[2] = g.Te * psi + g.Tbe; + npt.p[0] = g.udre * psi ; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ELECTRON_UP; + break; + ***/ + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + //*** // This is a block for the yz configuration using two + // popullations + case MY_ION_UP: // Ion drifting up + //npt.n = (g.n0 * (g.nb_n0 + (1 / sqr(cosh(y / g.L)))))/(g.nb_n0 + g.n0); + npt.n = g.n0 / sqr(cosh(y / g.L)); + npt.T[0] = g.Ti; + npt.T[1] = g.Ti; + npt.T[2] = g.Ti; + npt.p[0] = g.udri; + npt.p[1] = 0.; + npt.p[2] = 0.; + //npt.kind = MY_ION_UP; + break; + case MY_ELECTRON_UP: // Electron drifting up + //npt.n = (g.n0 * (g.nb_n0 + (1 / sqr(cosh(y / g.L)))))/(g.nb_n0 + g.n0); + npt.n = g.n0 / sqr(cosh(y / g.L)); + npt.T[0] = g.Te; + npt.T[1] = g.Te; + npt.T[2] = g.Te; + npt.p[0] = g.udre; + npt.p[1] = 0.; + npt.p[2] = 0.; + //npt.kind = MY_ELECTRON_UP; + break; + case MY_ION_BA: // Ion background up + npt.n = g.n0 * g.nb_n0; + npt.T[0] = g.Tbi; + npt.T[1] = g.Tbi; + npt.T[2] = g.Tbi; + npt.p[0] = 0.; + npt.p[1] = 0.; + npt.p[2] = 0.; + //npt.kind = MY_ION_BA; + break; + case MY_ELECTRON_BA: // Electron background up + npt.n = g.n0 * g.nb_n0; + npt.T[0] = g.Tbe; + npt.T[1] = g.Tbe; + npt.T[2] = g.Tbe; + npt.p[0] = 0.; + npt.p[1] = 0.; + npt.p[2] = 0.; + //npt.kind = MY_ELECTRON_BA; + break; + /***/ + //-------------------------------------------------------------------------------- + + default: assert(0); + } + //npt.n = 0; + }); +} + +// ====================================================================== +// initializeFields + +void initializeFields(MfieldsState& mflds, MfieldsAlfven& mflds_alfven) +{ + setupFieldsGeneral( + mflds, [&](int m, Int3 idx, int p, double crd[3]) -> MfieldsState::real_t { + double x = crd[0], y = crd[1], z = crd[2]; + switch (m) { + //-------------------------------------------------------------------------------- + // case HY: return mflds_alfven(PERT_HY, idx[0], idx[1], idx[2], p); + // default: return 0.; + //-------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------- + ///*** This is the magnetic field in the case yz geometry + //case HX: return mflds_alfven(PERT_HX, idx[0], idx[1], idx[2], p); + //case HY: return mflds_alfven(PERT_HY, idx[0], idx[1], idx[2], p); + //case HZ: return mflds_alfven(PERT_HZ, idx[0], idx[1], idx[2], p); + //case JXI: return mflds_alfven(PERT_JX_ext, idx[0], idx[1], idx[2], p); + //case JYI: return mflds_alfven(PERT_JY_ext, idx[0], idx[1], idx[2], p); + //case JZI: return mflds_alfven(PERT_JZ_ext, idx[0], idx[1], idx[2], p); + + //double db_la_x = mflds_alfven(PERT_HX, idx[0], idx[1], idx[2], p); + //double db_la_y = mflds_alfven(PERT_HY, idx[0], idx[1], idx[2], p); + //double db_la_z = mflds_alfven(PERT_HZ, idx[0], idx[1], idx[2], p); + + case HX: return 0. + 0.*mflds_alfven(PERT_HX, idx[0], idx[1], idx[2], p); + case HY: + return 0. * g.dby * sin(2. * M_PI * (z - 0.5 * g.Lz) / g.Lz) * + cos(M_PI * y / g.Ly) + 0.*mflds_alfven(PERT_HY, idx[0], idx[1], idx[2], p); + case HZ: + return g.b0 * tanh(y / g.L) + + 0. * g.dbz * cos(2. * M_PI * (z - 0.5 * g.Lz) / g.Lz) * + sin(M_PI * y / g.Ly) + 0.*mflds_alfven(PERT_HZ, idx[0], idx[1], idx[2], p); + default: return 0.; + } + }); +} + +// ====================================================================== +// run +// +// This is basically the main function of this run, +// which sets up everything and then uses PscIntegrator to run the +// simulation + +void run() +{ + mpi_printf(MPI_COMM_WORLD, "*** Setting up...\n"); + + // ---------------------------------------------------------------------- + // setup various parameters first + + setupParameters(); + + // ---------------------------------------------------------------------- + // Set up grid, state fields, particles + + auto grid_ptr = setupGrid(); + auto& grid = *grid_ptr; + + Mparticles mprts(grid); + MfieldsState mflds(grid); + if (!read_checkpoint_filename.empty()) { + read_checkpoint(read_checkpoint_filename, grid, mprts, mflds); + } + + // ---------------------------------------------------------------------- + // Set up various objects needed to run this case + + // -- Balance + psc_params.balance_interval = 180; + Balance balance{3}; + + // -- Sort + psc_params.sort_interval = 10; + + // -- Collision + int collision_interval = 0; + double collision_nu = 1e-10; + // 3.76 * std::pow(g.target_Te, 2.) / g.Zi / g.lambda0; + Collision collision{grid, collision_interval, collision_nu}; + + // -- Checks + ChecksParams checks_params{}; + checks_params.continuity_every_step = -2; + checks_params.continuity_dump_always = false; + checks_params.continuity_threshold = 1e-4; + checks_params.continuity_verbose = true; + + checks_params.gauss_every_step = -2; + checks_params.gauss_dump_always = false; + checks_params.gauss_threshold = 1e-4; + checks_params.gauss_verbose = true; + + Checks checks{grid, MPI_COMM_WORLD, checks_params}; + + // -- Marder correction + double marder_diffusion = 0.9; + int marder_loop = 3; + bool marder_dump = false; + psc_params.marder_interval = 10; + Marder marder(grid, marder_diffusion, marder_loop, marder_dump); + + // ---------------------------------------------------------------------- + // Set up output + // + // FIXME, this really is too complicated and not very flexible + + // -- output fields + OutputFieldsItemParams outf_item_params{}; + OutputFieldsParams outf_params{}; + outf_item_params.pfield_interval = 50; + outf_item_params.tfield_interval = -10; + + outf_params.fields = outf_item_params; + outf_params.moments = outf_item_params; + OutputFields outf{grid, outf_params}; + + // -- output particles + OutputParticlesParams outp_params{}; + outp_params.every_step = -100; + outp_params.data_dir = "."; + outp_params.basename = "prt"; + OutputParticles outp{grid, outp_params}; + + int oute_interval = -100; + DiagEnergies oute{grid.comm(), oute_interval}; + + auto diagnostics = makeDiagnosticsDefault(outf, outp, oute); + + // ---------------------------------------------------------------------- + // Set up objects specific to the TurbHarrisxz case + + SetupParticles setup_particles(grid); + setup_particles.fractional_n_particles_per_cell = true; + setup_particles.neutralizing_population = MY_ION_UP; // It has to be the ions + + // ---------------------------------------------------------------------- + // setup initial conditions + + lng = new Langevin(); + + MfieldsAlfven mflds_alfven(grid, N_PERT, grid.ibn); + + auto lf_ext_current = [&](const Grid_t& grid, MfieldsState& mflds) { + lng->step(grid.dt); + initializeAlfven(mflds_alfven, *lng); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto F = make_Fields3d(mflds[p]); + auto FA = make_Fields3d(mflds_alfven[p]); + grid.Foreach_3d(0, 0, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + + F(JXI, jx, jy, jz) += FA(PERT_JX_ext, jx, jy, jz); + F(JYI, jx, jy, jz) += FA(PERT_JY_ext, jx, jy, jz); + F(JZI, jx, jy, jz) += FA(PERT_JZ_ext, jx, jy, jz); + }); + } + }; + + if (read_checkpoint_filename + .empty()) { // This is the block which is returning the + initializeAlfven(mflds_alfven, *lng); + initializeParticles(setup_particles, balance, grid_ptr, mprts, + mflds_alfven); + initializeFields(mflds, mflds_alfven); + } + + // ---------------------------------------------------------------------- + // hand off to PscIntegrator to run the simulation + + auto psc = makePscIntegrator( + psc_params, *grid_ptr, mflds, mprts, balance, collision, checks, marder, + diagnostics, injectParticlesNone, lf_ext_current); + + MEM_STATS(); + psc.integrate(); + MEM_STATS(); +} + +// ====================================================================== +// main + +int main(int argc, char** argv) +{ + psc_init(argc, argv); + + run(); + + MEM_STATS(); + + psc_finalize(); + return 0; +} diff --git a/src/psc_turb_harris_yz_0.cxx b/src/psc_turb_harris_yz_0.cxx new file mode 100644 index 0000000000..f0845766bb --- /dev/null +++ b/src/psc_turb_harris_yz_0.cxx @@ -0,0 +1,1046 @@ + +#include +#include +#include + +#include "DiagnosticsDefault.h" +#include "OutputFieldsDefault.h" +#include "psc_config.hxx" +#include "writer_mrc.hxx" + +#ifdef USE_CUDA +#include "cuda_bits.h" +#endif + +#include "rngpool_iface.h" + +//----------------------------------------------------------------- +// To use the complex numbers +//------------------------------ +#include +//using std::complex; +using namespace std; +typedef complex dcomp; + +//using namespace std::complex_literals; +// auto c = 1.0 + 3.0i; +//------------------------------ + +//extern Grid* vgrid; // FIXME + +// To use the random numbers +//------------------------------- +static RngPool* rngpool; +//------------------------------- + +//static inline double trunc_granular(double a, double b) +//{ +// return b * (int)(a / b); +//} +//----------------------------------------------------------------- + + +// ====================================================================== +// Particle kinds +// +// Particle kinds can be used to define different species, or different +// populations of the same species +// +// Here, we only enumerate the types, the actual information gets set up later. +// The last kind (MY_ELECTRON) will be used as "neutralizing kind", ie, in the +// initial setup, the code will add as many electrons as there are ions in a +// cell, at the same position, to ensure the initial plasma is neutral +// (so that Gauss's Law is satisfied). +enum +{ + MY_ELECTRON_UP, + MY_ION_UP, + //MY_ELECTRON_BO, + //MY_ION_BO, + N_MY_KINDS, +}; + +enum +{ + PERT_HX, + PERT_HY, + PERT_HZ, + PERT_VX, + PERT_VY, + PERT_VZ, + N_PERT, +}; + +// ====================================================================== +// PscTurbHarrisxzParams + +struct PscTurbHarrisxzParams +{ + + //---------------------------------- + double BB; + double Zi; + double lambda0; + double background_n; + double background_Te; + double background_Ti; + //---------------------------------- + + + //---------------------------------- + double Lx_di, Ly_di, Lz_di; // Size of box in di + double L_di; // Sheet thickness / ion inertial length + double Lpert_Lx; // wavelength of perturbation in terms of Lx + + double taui; // simulation wci's to run + double t_intervali; // output interval in terms of 1/wci + double output_particle_interval; // particle output interval in terms of 1/wci + int ion_sort_interval; + int electron_sort_interval; + double overalloc; // Overallocation factor (> 1) for particle arrays + + double wpe_wce; // electron plasma freq / electron cyclotron freq + double mi_me; // Ion mass / electron mass + double wpedt_max; //Is rhis necessary? + double Ti_Te; // Ion temperature / electron temperature + double nb_n0; // background plasma density + + double Tbe_Te; // Ratio of background T_e to Harris T_e + double Tbi_Ti; // Ratio of background T_i to Harris T_i + double Tbi_Tbe; // Ratio of background T_i to background T_e + + double bg; // Guide field + double theta; + double cs; + double sn; + + double db_b0; // perturbation in Bz relative to B0 + double nppc; // Average number of macro particle per cell per species + bool open_bc_x; // Flag to signal we want to do open boundary condition in x + bool driven_bc_z; // Flag to signal we want to do driven boundary condition in z + + Int3 gdims; // + Int3 np; + //---------------------------------- + + + //------------------------------------- + double ec; + double me; + double c; + double eps0; + double de; + double kb; + + double mi; + double di; + double wpe; + double wpi; + double wce; + double wci; + + // calculated + double b0; // B0 + double n0; + double v_A; + double rhoi_L; + double Lx, Ly, Lz; // size of box + double L; // Harris sheet thickness + double Lpert; // wavelength of perturbation + //double dbx; // Perturbation in Bz relative to Bo (Only change here) + //double dbz; // Set Bx perturbation so that div(B) = 0 + double dbz; // Perturbation in Bz relative to Bo (Only change here) in the case of yz + double dby; // Set By perturbation so that div(B) = 0 in the case of yz + double tanhf; + + double Te; // Electron temperature main harris + double Ti; // Ion temperature main harris + double Tbe; // Electron temperature backgroung + double Tbi; // Ion temperature backgroung + + double weight_s; // Charge per macro electron + + double vthe; // Electron thermal velocity + double vthi; // Ion thermal velocity + double vdre; // Electron drift velocity + double vdri; // Ion drift velocity + + double gdri; // gamma of ion drift frame + double gdre; // gamma of electron drift frame + double udri; // 4-velocity of ion drift frame + double udre; // 4-velocity of electron drift frame + + double Ne_back; // Number of macro electrons in background + double weight_b; // Charge per macro electron + double vtheb; // normalized background e thermal vel. + double vthib; // normalized background ion thermal vel. + + int n_global_patches; + + double Ne; // Total number of macro electrons + double Ne_sheet; // Number of macro electrons in Harris sheet + double Npe_sheet; // N physical e's in sheet + double Npe_back; // N physical e's in backgrnd + double Npe; //?? + + + //-------------------------------------------------- +}; + +// ====================================================================== +// Global parameters +// +// I'm not a big fan of global parameters, but they're only for +// this particular case and they help make things simpler. + +// An "anonymous namespace" makes these variables visible in this source file +// only +namespace +{ + +// Parameters specific to this case. They don't really need to be collected in a +// struct, but maybe it's nice that they are + +PscTurbHarrisxzParams g; + +std::string read_checkpoint_filename; + +// This is a set of generic PSC params (see include/psc.hxx), +// like number of steps to run, etc, which also should be set by the case +PscParams psc_params; + +} // namespace + +// ====================================================================== +// PSC configuration +// +// This sets up compile-time configuration for the code, in particular +// what data structures and algorithms to use +// +// EDIT to change order / floating point type / cuda / 2d/3d + +// There is something not quite right here ask Kai Jeff +//-------------------------------------------------------------------------------- +//using Dim = dim_yz; +using Dim = dim_xyz; +//using Dim = dim_yz; +//-------------------------------------------------------------------------------- + +#ifdef USE_CUDA +using PscConfig = PscConfig1vbecCuda; +#else +using PscConfig = PscConfig1vbecSingle; +#endif + +using Writer = WriterMRC; // can choose WriterMRC, WriterAdios2 + +// ---------------------------------------------------------------------- + +using MfieldsState = PscConfig::MfieldsState; +using MfieldsAlfven = Mfields; +using Mparticles = PscConfig::Mparticles; +using Balance = PscConfig::Balance; +using Collision = PscConfig::Collision; +using Checks = PscConfig::Checks; +using Marder = PscConfig::Marder; +using OutputParticles = PscConfig::OutputParticles; + +// ====================================================================== +// setupParameters + +void setupParameters() +{ + // -- set some generic PSC parameters + //----------------------------------------------- + //----------------------------------------------- + psc_params.nmax = 2;//1801; + psc_params.cfl = 0.75; + psc_params.write_checkpoint_every_step = -100; //This is not working + psc_params.stats_every = -1; + //----------------------------------------------- + //----------------------------------------------- + + // -- start from checkpoint: + // + // Uncomment when wanting to start from a checkpoint, ie., + // instead of setting up grid, particles and state fields here, + // they'll be read from a file + // FIXME: This parameter would be a good candidate to be provided + // on the command line, rather than requiring recompilation when change. + + // read_checkpoint_filename = "checkpoint_500.bp"; + + //----------------------------------------------- + // -- Set some parameters specific to this case + //---------------------------------- + g.BB = 1.; + g.Zi = 1.; + g.lambda0 = 20.; + + g.background_n = 1.; + g.background_Te = .01; + g.background_Ti = .01; + //---------------------------------- + + //---------------------------------- + // Space dimensions + //-------------------------------------------------------------------------------- + ///*** // This is ion the case of yz geometry + g.Lz_di = 40.; + g.Lx_di = 1.; + g.Ly_di = 10.; + g.gdims = {2, 128, 512}; + g.np = {1, 2, 4}; + //***/ + //-------------------------------------------------------------------------------- + + g.L_di = 1.0; + g.Lpert_Lx = 1.; + + //Time dimensions + g.taui = 10.; + g.t_intervali = 1.; + g.output_particle_interval = 100.; + g.electron_sort_interval = 25; + g.ion_sort_interval = 25; + g.overalloc = 2.; + + //Non-dimensional ratios + g.wpe_wce = 2.5; + g.mi_me = 1.; + g.Ti_Te = 1.; + g.nb_n0 = 0.1; + + g.Tbe_Te = .333; //How to stimate this ratio???? It is now consistent but I need an extra condition to estimate this ratio. + g.Tbi_Ti = .333; + g.Tbi_Tbe = 1.; + + //Background field + g.bg = 0.; + g.theta = 0.; + g.cs=cos(g.theta); + g.sn=sin(g.theta); + + //Amplitud of the fluctuation + g.db_b0 = 0.1; + + //Number of macro particles + g.nppc = 20; + + g.wpedt_max = .36; // what is this for? + + //---------------------------------- + + //----------------------------------- + // use natural PIC units + g.ec = 1.; // Charge normalization + g.me = 1.; // Mass normalization + g.c = 1.; // Speed of light + g.de = 1.; // Length normalization (electron inertial length) + g.eps0 = 1.; // Permittivity of space + g.wpe = 1.; // g.wce * g.wpe_wce; // electron plasma frequency + g.kb = 1.; // k Boltzman + + // derived quantities + g.wce = g.wpe / g.wpe_wce ; // Electron cyclotron frequency + g.wci = g.wce / g.mi_me ; // Ion cyclotron frequency + g.mi = g.me * g.mi_me; // Ion mass + g.wpi = g.wpe / sqrt(g.mi_me); // ion plasma frequency + + g.di = g.c / g.wpi; // ion inertial length + g.L = g.L_di ; // Harris sheet thickness in di // Jeff check the thickness. It works best for g.L_di alone + g.Lx = g.Lx_di ; // size of box in x dimension (in di Jeff) + g.Ly = g.Ly_di ; // size of box in y dimension + g.Lz = g.Lz_di ; // size of box in z dimension + + g.b0 = g.me * g.c * g.wce / g.ec; // Asymptotic magnetic field strength + g.n0 = g.me * g.eps0 * sqr(g.wpe) / (sqr(g.ec)); // Peak electron (ion) density this is the cgs correct one but gives n0 = 0.07 + + //g.n0 = 1.; + //g.b0 = 1.; + + g.Te = g.me * sqr(g.c) / + (2. * g.kb * sqr(g.wpe_wce) * (1. + g.Ti_Te)); // Electron temperature neglecting the background plasma pressure + + //g.Te = sqr(g.b0) / + // (8. * M_PI * g.kb * g.n0 * (1. + g.Ti_Te)); // Electron temperature neglecting the background plasma pressure + + //g.Te = sqr(g.b0) / + // (8. * M_PI * g.kb * g.n0 * ((1. + g.Ti_Te) - g.nb_n0 * g.Tbe_Te * (1 + g.Tbi_Tbe) ) ); // Electron temperature INCLUDING the background + // plasma pressure which is important here due to the way psc inject particles + + g.Ti = g.Te * g.Ti_Te; // Ion temperature + + g.Tbe = g.Te * g.Tbe_Te; + g.Tbi = g.Ti * g.Tbi_Ti; + + g.v_A = g.c * (g.wci / g.wpi);// / sqrt(g.nb_n0); // based on nb + // Include the relativistic alfven speed correction. + g.rhoi_L = sqrt(g.Ti_Te / (1. + g.Ti_Te)) / g.L_di; + + g.vthe = sqrt(g.Te / g.me); // Electron thermal velocity + g.vthi = sqrt(g.Ti / g.mi); // Ion thermal velocity + g.vtheb = sqrt(g.Tbe_Te * g.Te / g.me); // normalized background e thermal vel. + g.vthib = sqrt(g.Tbi_Ti * g.Ti / g.mi); // normalized background ion thermal vel. + + + g.vdri = g.c * g.b0 / (8 * M_PI * g.L * g.ec * g.n0 * (1 + 1/g.Ti_Te)); // Ion drift velocity + g.vdre = -g.vdri / (g.Ti_Te); // electron drift velocity + + + g.n_global_patches = g.np[0] * g.np[1] * g.np[2]; + + g.Npe_sheet = 2 * g.n0 * g.Lx * g.Ly * g.L * tanh(0.5 * g.Lz / g.L); // N physical e's in sheet + g.Npe_back = g.nb_n0 * g.n0 * g.Ly * g.Lz * g.Lx; // N physical e's in backgrnd + g.Npe = g.Npe_sheet + g.Npe_back; + + g.Ne = g.nppc * g.gdims[0] * g.gdims[1] * g.gdims[2]; // total macro electrons in box + g.Ne_sheet = g.Ne * g.Npe_sheet / g.Npe; + g.Ne_back = g.Ne * g.Npe_back / g.Npe; + + //g.Ne_sheet = trunc_granular(g.Ne_sheet, g.n_global_patches); // Make it divisible by # subdomains + //g.Ne_back = trunc_granular( g.Ne_back, g.n_global_patches); // Make it divisible by # subdomains + g.Ne = g.Ne_sheet + g.Ne_back; + //g.weight_s = g.ec * g.Npe_sheet / g.Ne_sheet; // Charge per macro electron + //g.weight_b = g.ec * g.Npe_back / g.Ne_back; // Charge per macro electron + + g.gdri = 1. / sqrt(1. - sqr(g.vdri) / sqr(g.c)); // gamma of ion drift frame + g.gdre = 1. / sqrt(1. - sqr(g.vdre) / sqr(g.c)); // gamma of electron drift frame + + g.udri = g.vdri * g.gdri; // 4-velocity of ion drift frame + g.udre = g.vdre * g.gdre; // 4-velocity of electron drift frame + g.tanhf = tanh(0.5 * g.Lz / g.L); + g.Lpert = g.Lpert_Lx * g.Lx; // wavelength of perturbation + + //-------------------------------------------------------------------------------- + // This is in the case of yz geometry + g.dbz = g.db_b0 * g.b0 * M_PI * g.L / g.Ly; // Set Bz perturbation so that div(B) = 0 in the case of yz geometry + g.dby = -g.db_b0 * g.b0 * 2 * M_PI * g.L / g.Lz; // Perturbation in By relative to Bo (Only change here) in the case of yz geometry + //-------------------------------------------------------------------------------- + + //----------------------------------- +} + +// ====================================================================== +// setupGrid +// +// This helper function is responsible for setting up the "Grid", +// which is really more than just the domain and its decomposition, it +// also encompasses PC normalization parameters, information about the +// particle kinds, etc. + +Grid_t* setupGrid() +{ + + //--------------------------------------------------------------- + mpi_printf(MPI_COMM_WORLD, "***********************************************\n"); + mpi_printf(MPI_COMM_WORLD, "* Topology: %d x %d x %d\n", g.np[0], g.np[1], g.np[2]); + mpi_printf(MPI_COMM_WORLD, "tanhf = %g\n", g.tanhf); + mpi_printf(MPI_COMM_WORLD, "L_di = %g\n", g.L_di); + mpi_printf(MPI_COMM_WORLD, "rhoi/L = %g\n", g.rhoi_L); + mpi_printf(MPI_COMM_WORLD, "Ti/Te = %g\n", g.Ti_Te); + mpi_printf(MPI_COMM_WORLD, "Ti = %g\n", g.Ti); + mpi_printf(MPI_COMM_WORLD, "Te = %g\n", g.Te); + mpi_printf(MPI_COMM_WORLD, "nb/n0 = %g\n", g.nb_n0); + mpi_printf(MPI_COMM_WORLD, "wpe/wce = %g\n", g.wpe_wce); + mpi_printf(MPI_COMM_WORLD, "mi/me = %g\n", g.mi_me); + mpi_printf(MPI_COMM_WORLD, "theta = %g\n", g.theta); + mpi_printf(MPI_COMM_WORLD, "Lpert/Lx = %g\n", g.Lpert_Lx); + mpi_printf(MPI_COMM_WORLD, "dbz/b0 = %g\n", g.db_b0); + mpi_printf(MPI_COMM_WORLD, "taui = %g\n", g.taui); + mpi_printf(MPI_COMM_WORLD, "t_intervali = %g\n", g.t_intervali); + mpi_printf(MPI_COMM_WORLD, "num_step = %d\n", psc_params.nmax); + mpi_printf(MPI_COMM_WORLD, "n0 = %g\n", g.n0); + mpi_printf(MPI_COMM_WORLD, "Lx/di = %g\n", g.Lx ); + mpi_printf(MPI_COMM_WORLD, "Lx/de = %g\n", g.Lx * g.de /g.di); + mpi_printf(MPI_COMM_WORLD, "Ly/di = %g\n", g.Ly ); + mpi_printf(MPI_COMM_WORLD, "Ly/de = %g\n", g.Ly * g.de /g.di); + mpi_printf(MPI_COMM_WORLD, "Lz/di = %g\n", g.Lz ); + mpi_printf(MPI_COMM_WORLD, "Lz/de = %g\n", g.Lz * g.de /g.di); + mpi_printf(MPI_COMM_WORLD, "nx = %d\n", g.gdims[0]); + mpi_printf(MPI_COMM_WORLD, "ny = %d\n", g.gdims[1]); + mpi_printf(MPI_COMM_WORLD, "nz = %d\n", g.gdims[2]); + mpi_printf(MPI_COMM_WORLD, "n_global_patches = %d\n", g.n_global_patches); + mpi_printf(MPI_COMM_WORLD, "nppc = %g\n", g.nppc); + mpi_printf(MPI_COMM_WORLD, "b0 = %g\n", g.b0); + mpi_printf(MPI_COMM_WORLD, "v_A (based on nb) = %g\n", g.v_A); + mpi_printf(MPI_COMM_WORLD, "di = %g\n", g.di); + mpi_printf(MPI_COMM_WORLD, "Ne = %g\n", g.Ne); + mpi_printf(MPI_COMM_WORLD, "Ne_sheet = %g\n", g.Ne_sheet); + mpi_printf(MPI_COMM_WORLD, "Ne_back = %g\n", g.Ne_back); + mpi_printf(MPI_COMM_WORLD, "total # of particles = %g\n", 2 * g.Ne); + //mpi_printf(MPI_COMM_WORLD, "dt*wpe = %g\n", g.wpe * grid.dt); + //mpi_printf(MPI_COMM_WORLD, "dt*wce = %g\n", g.wce * grid.dt); + //mpi_printf(MPI_COMM_WORLD, "dt*wci = %g\n", g.wci * grid.dt); + mpi_printf(MPI_COMM_WORLD, "dx/de = %g\n", g.Lx / (g.de * g.gdims[0])); + mpi_printf(MPI_COMM_WORLD, "dy/de = %g\n", g.Ly / (g.de * g.gdims[1])); + mpi_printf(MPI_COMM_WORLD, "dz/de = %g\n", g.Lz / (g.de * g.gdims[2])); + mpi_printf(MPI_COMM_WORLD, "dx/rhoi = %g\n", + (g.Lx / g.gdims[0]) / (g.vthi / g.wci)); + mpi_printf(MPI_COMM_WORLD, "dx/rhoe = %g\n", + (g.Lx / g.gdims[0]) / (g.vthe / g.wce)); + mpi_printf(MPI_COMM_WORLD, "L/debye = %g\n", g.L / (g.vthe / g.wpe)); + mpi_printf(MPI_COMM_WORLD, "dx/debye = %g\n", + (g.Lx / g.gdims[0]) / (g.vthe / g.wpe)); + mpi_printf(MPI_COMM_WORLD, "n0 = %g\n", g.n0); + mpi_printf(MPI_COMM_WORLD, "vthi/c = %g\n", g.vthi / g.c); + mpi_printf(MPI_COMM_WORLD, "vthe/c = %g\n", g.vthe / g.c); + mpi_printf(MPI_COMM_WORLD, "vdri/c = %g\n", g.vdri / g.c); + mpi_printf(MPI_COMM_WORLD, "vdre/c = %g\n", g.vdre / g.c); + mpi_printf(MPI_COMM_WORLD, "gdri = %g\n", g.gdri); + mpi_printf(MPI_COMM_WORLD, "gdre = %g\n", g.gdre); + //------------------------------------------------------------- + + // --- setup domain + Grid_t::Real3 LL = {g.Lx_di, g.Ly_di, g.Lz_di}; // domain size (in d_i) !!!! This is important (jeff) + //Grid_t::Real3 LL = {3. * 80., 1., 80.}; // domain size (in d_e) + //Int3 gdims = {3 * 80, 1, 80}; // global number of grid points + //Int3 np = {3*5, 1, 2}; // division into patches + + Grid_t::Domain domain{g.gdims, LL, -.5 * LL, g.np}; + // There was an issue with the conducting and reflective boundary conditions. This returns continuity diff messages. + //Both and each of them generate the discontinuity error + + //-------------------------------------------------------------------------------- + // This is in the case of yz geometry + psc::grid::BC bc{{BND_FLD_PERIODIC, BND_FLD_CONDUCTING_WALL, BND_FLD_PERIODIC}, // this is in the case of yz geometry + {BND_FLD_PERIODIC, BND_FLD_CONDUCTING_WALL, BND_FLD_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_REFLECTING, BND_PRT_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_REFLECTING, BND_PRT_PERIODIC}}; + //-------------------------------------------------------------------------------- + + + // -- setup particle kinds + // last population ("i") is neutralizing + Grid_t::Kinds kinds(N_MY_KINDS); + kinds[MY_ION_UP] = {g.Zi, g.mi_me * g.Zi, "i_UP"}; + kinds[MY_ELECTRON_UP] = {-1., 1., "e_UP"}; + //kinds[MY_ION_BO] = {g.Zi, g.mi_me * g.Zi, "i_BO"}; + //kinds[MY_ELECTRON_BO] = {-1., 1., "e_BO"}; + + g.di = sqrt(kinds[MY_ION_UP].m / kinds[MY_ION_UP].q); + + mpi_printf(MPI_COMM_WORLD, "de = %g, di = %g\n", 1., g.di); + mpi_printf(MPI_COMM_WORLD, "lambda_De (background) = %g\n", + sqrt(g.background_Te)); + + // -- setup normalization + auto norm_params = Grid_t::NormalizationParams::dimensionless(); + norm_params.nicell = g.nppc ; + + double dt = psc_params.cfl * courant_length(domain); + Grid_t::Normalization norm{norm_params}; + + mpi_printf(MPI_COMM_WORLD, "dt = %g\n", dt); + + Int3 ibn = {2, 2, 2}; + if (Dim::InvarX::value) { + ibn[0] = 0; + } + if (Dim::InvarY::value) { + ibn[1] = 0; + } + if (Dim::InvarZ::value) { + ibn[2] = 0; + } + + return new Grid_t{domain, bc, kinds, norm, dt, -1, ibn}; +} + +// ====================================================================== +// initializeAlfven + +void initializeAlfven(MfieldsAlfven& mflds){ + const auto& grid = mflds.grid(); + double ky = 2. * M_PI / grid.domain.length[1]; + + //-------------------------------------------------------------------------------- + mpi_printf(grid.comm(), "**** Setting up Alfven fields...\n"); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); // In here the dim_xyz works! + + int n_ghosts = std::max( + {mflds.ibn()[0], mflds.ibn()[1], mflds.ibn()[2]}); // FIXME, not pretty + + grid.Foreach_3d(n_ghosts, n_ghosts, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + auto crd_fc = Centering::getPos(patch, index, Centering::FC); + auto crd_cc = Centering::getPos(patch, index, Centering::CC); + F(PERT_HY, jx, jy, jz) = g.BB + .1 * sin(ky * crd_fc[1]); + F(PERT_VY, jx, jy, jz) = -.1 * sin(ky * crd_cc[1]); + }); + } + //-------------------------------------------------------------------------------- + + + // This is for the implementation of the Langevin antena + //------------------------------------------------------------------------------------------------------------ + //------------------------------------------------------------------------------------------------------------ + // double x = crd[0], y=crd[1], z = crd[2]; + //Following the same 8 modes, background field along the z direction (direction of the harris field) + + //To compute J_ext = (c/4pi) \nabla \times B_ext + + int Nk = 8; + double L_per=sqrt(sqr(g.Lx) + sqr(g.Ly)) ; + + double dB_bar = 0.5 * g.b0 * L_per/g.Lz ; //0.5 * g.b0 * g.db_b0 * L_per/g.Lz ; + double dB0 = dB_bar; + + double k_x = 2. * M_PI / g.Lx; + double k_y = 2. * M_PI / g.Ly; + double k_z = 2. * M_PI / g.Lz; + + Double3 k1 = {1. * k_x, 0. * k_y, 1. * k_z}; + Double3 k2 = {1. * k_x, 0. * k_y, -1. * k_z}; + Double3 k3 = {0. * k_x, 1. * k_y, 1. * k_z}; + Double3 k4 = {0. * k_x, 1. * k_y, -1. * k_z}; + Double3 k5 = {-1. * k_x, 0. * k_y, 1. * k_z}; + Double3 k6 = {-1. * k_x, 0. * k_y, -1. * k_z}; + Double3 k7 = {0. * k_x, -1. * k_y, 1. * k_z}; + Double3 k8 = {0. * k_x, -1. * k_y, -1. * k_z}; + + double k_per[8]={sqrt( sqr(k1[0]) + sqr(k1[1]) ), + sqrt( sqr(k2[0]) + sqr(k2[1]) ), + sqrt( sqr(k3[0]) + sqr(k3[1]) ), + sqrt( sqr(k4[0]) + sqr(k4[1]) ), + sqrt( sqr(k5[0]) + sqr(k5[1]) ), + sqrt( sqr(k6[0]) + sqr(k6[1]) ), + sqrt( sqr(k7[0]) + sqr(k7[1]) ), + sqrt( sqr(k8[0]) + sqr(k8[1]) )}; + + // For reproducibility; + //double rand_ph[8]={0.987*2.*M_PI, 0.666*2.*M_PI, 0.025*2.*M_PI, 0.954*2.*M_PI, 0.781*2.*M_PI, 0.846*2.*M_PI, 0.192*2.*M_PI, 0.778*2.*M_PI}; + + // Generate the random numbers + //------------------------------------------- + rngpool = + RngPool_create(); + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + RngPool_seed(rngpool, rank); + Rng* rng = RngPool_get(rngpool, 0); + //------------------------------------------- + double ua = -0.5; + double ub = 0.5; + double rph_a = -1.; + double rph_b = 1.; + //------------------------------------------- + //const dcomp i(0.0,1.0); + //----------------------------------------------------------- + double rand_ph[8]={2. * M_PI * Rng_uniform(rng, rph_a, rph_b), // I think this numbers need to change at each time + 2. * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2. * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2. * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2. * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2. * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2. * M_PI * Rng_uniform(rng, rph_a, rph_b), + 2. * M_PI * Rng_uniform(rng, rph_a, rph_b)}; + dcomp unk[8]={ Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), // This needs to change at each time + Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub), + Rng_uniform(rng, ua, ub) + 2.i * M_PI * Rng_uniform(rng, ua, ub)}; + dcomp b0k[8] = {polar(dB0,rand_ph[0]), + polar(dB0,rand_ph[1]), + polar(dB0,rand_ph[2]), + polar(dB0,rand_ph[3]), + polar(dB0,rand_ph[4]), + polar(dB0,rand_ph[5]), + polar(dB0,rand_ph[6]), + polar(dB0,rand_ph[7])}; + //----------------------------------------------------------- + + //----------------------------------------------------------- + double omega_0 = 0.9 * (2. * M_PI * g.v_A / g.Lz); // These are the values according to Daniel Groselj + double gamma_0 = 0.6 * omega_0; + double g_rate = 0.1; // This is chosen so omega_0 << g_rate << wpe; + + double delta_t_n = grid.timestep();//psc_params.cfl * courant_length(grid.domain); //dt; + // This is the time step that has to be calculated + + double dBn = dB0; // Checking the iterations, assuming B_bar remains constant, then dBn is always dB0. + double Cnp1 = 1.; // Since dBn = dB0 always, Cnp1=1 always. + //double Cnp1 = 1. + delta_t_n * g_rate * (dB_bar - dBn) / dB_bar ; + + + dcomp bn_k[8] = { b0k[0] , b0k[1] , b0k[2] , b0k[3] , b0k[4] , b0k[5] , b0k[6] , b0k[7] }; // This needs to be calculated properly + + // This is an iterative formula + + double dBnp1 = Cnp1 * dBn; + + dcomp bnp1_k[8] = {Cnp1 * bn_k[0] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12. * gamma_0 * delta_t_n) * unk[0], + Cnp1 * bn_k[1] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12. * gamma_0 * delta_t_n) * unk[1], + Cnp1 * bn_k[2] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12. * gamma_0 * delta_t_n) * unk[2], + Cnp1 * bn_k[3] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12. * gamma_0 * delta_t_n) * unk[3], + Cnp1 * bn_k[4] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12. * gamma_0 * delta_t_n) * unk[4], + Cnp1 * bn_k[5] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12. * gamma_0 * delta_t_n) * unk[5], + Cnp1 * bn_k[6] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12. * gamma_0 * delta_t_n) * unk[6], + Cnp1 * bn_k[7] * exp ( -(gamma_0 + omega_0*1.i) * delta_t_n ) + dBnp1 * sqrt(12. * gamma_0 * delta_t_n) * unk[7]} ; + + //----------------------------------------------------------- + // Now the components of the total external field + //----------------------------------------------------------- + + dcomp Bext_x,Bext_y; + double Bext_x_r, Bext_y_r; + double Bext_z_r = 0.; // From the definition there is no fluctuation in the z direction. + + // How to use the crd ?? + //double x = crd[0], y=crd[1], z = crd[2]; + double x, y, z; + x=1.; y=1.; z=1., + + // This can be implemented as a function? + //The x component + Bext_x = (bnp1_k[0] * exp(1i * (k1[0] * x + k1[1] * y + k1[2] * z)) ) * k1[1] / k_per[0] + +(bnp1_k[1] * exp(1i * (k2[0] * x + k2[1] * y + k2[2] * z)) ) * k2[1] / k_per[1] + +(bnp1_k[2] * exp(1i * (k3[0] * x + k3[1] * y + k3[2] * z)) ) * k3[1] / k_per[2] + +(bnp1_k[3] * exp(1i * (k4[0] * x + k4[1] * y + k4[2] * z)) ) * k4[1] / k_per[3] + +(bnp1_k[4] * exp(1i * (k5[0] * x + k5[1] * y + k5[2] * z)) ) * k5[1] / k_per[4] + +(bnp1_k[5] * exp(1i * (k6[0] * x + k6[1] * y + k6[2] * z)) ) * k6[1] / k_per[5] + +(bnp1_k[6] * exp(1i * (k7[0] * x + k7[1] * y + k7[2] * z)) ) * k7[1] / k_per[6] + +(bnp1_k[7] * exp(1i * (k8[0] * x + k8[1] * y + k8[2] * z)) ) * k8[1] / k_per[7] ; + + Bext_x_r = - (1. / sqrt(Nk)) * Bext_x.real() ; + + //The y component + Bext_y = (bnp1_k[0] * exp(1i * (k1[0] * x + k1[1] * y + k1[2] * z)) ) * k1[0] / k_per[0] + +(bnp1_k[1] * exp(1i * (k2[0] * x + k2[1] * y + k2[2] * z)) ) * k2[0] / k_per[1] + +(bnp1_k[2] * exp(1i * (k3[0] * x + k3[1] * y + k3[2] * z)) ) * k3[0] / k_per[2] + +(bnp1_k[3] * exp(1i * (k4[0] * x + k4[1] * y + k4[2] * z)) ) * k4[0] / k_per[3] + +(bnp1_k[4] * exp(1i * (k5[0] * x + k5[1] * y + k5[2] * z)) ) * k5[0] / k_per[4] + +(bnp1_k[5] * exp(1i * (k6[0] * x + k6[1] * y + k6[2] * z)) ) * k6[0] / k_per[5] + +(bnp1_k[6] * exp(1i * (k7[0] * x + k7[1] * y + k7[2] * z)) ) * k7[0] / k_per[6] + +(bnp1_k[7] * exp(1i * (k8[0] * x + k8[1] * y + k8[2] * z)) ) * k8[0] / k_per[7] ; + + Bext_y_r = (1. / sqrt(Nk)) * Bext_y.real() ; + + // There is no alfvenic fluctuation along z. + //double Bext_z_r = 0.; + + + //----------------------------------------------------------- + //To compute Jext = (c/4pi) \nabla \times B_ext + // It is Jext_x_r, Jext_y_r and Jext_z_r what need to be passed to push the electric field + //----------------------------------------------------------- + double Jext_x_r = 1.; + double Jext_y_r = 1.; + double Jext_z_r = 1.; + //----------------------------------------------------------- + + // These values have to be passed to the next time step and the random numbers need to be generated again + //----------------------------------------------------------- + //Then continuining the iteration + bn_k[0] = bnp1_k[0]; + bn_k[1] = bnp1_k[1]; + bn_k[2] = bnp1_k[2]; + bn_k[3] = bnp1_k[3]; + bn_k[4] = bnp1_k[4]; + bn_k[5] = bnp1_k[5]; + bn_k[6] = bnp1_k[6]; + bn_k[7] = bnp1_k[7]; + //----------------------------------------------------------- + + + // This is just to check that things work + //----------------------------------------------------------- + mpi_printf(MPI_COMM_WORLD, "omega_0 = %g\n", omega_0); + mpi_printf(MPI_COMM_WORLD, "gamma_0 = %g\n", gamma_0); + mpi_printf(MPI_COMM_WORLD, "delta_t_n = %g\n", delta_t_n); + //----------------------------------------------------------- + //dcomp kp_k_exp_1 = polar ((k_per[0] / k_z), (k1[0] * x + k1[1] * y + k1[2] * z)); + //double pol_ar = kp_k_exp_1.real(); + //----------------------------------------------------------- + const dcomp i(0.0,1.0); + //----------------------------------------------------------- + dcomp pol = std::polar(1.,0.); + double pol_r = pol.real(); + + dcomp pol_1 = g.b0 * 3. + 4.i; + dcomp pol_2 = 3. + -4.i; + dcomp pol_3 = pol_1*pol_2; + double pol_3r = pol_3.real(); + double b0kr = b0k[0].real(); + + mpi_printf(MPI_COMM_WORLD, "rand_ph = %g\n", rand_ph[0]); + mpi_printf(MPI_COMM_WORLD, "uk = %g\n", unk[0].real()); + mpi_printf(MPI_COMM_WORLD, "polr = %g\n", pol_r); + mpi_printf(MPI_COMM_WORLD, "pol3r = %g\n", pol_3r); + mpi_printf(MPI_COMM_WORLD, "b0kr = %g\n", b0kr); + //mpi_printf(MPI_COMM_WORLD, "pola3 = %g\n", pol_ar); + //----------------------------------------------------------- + + //------------------------------------------------------------------------------------------------------------ + //------------------------------------------------------------------------------------------------------------ + +} + +///*** +// ====================================================================== +// initializeParticles + +void initializeParticles(SetupParticles& setup_particles, + Balance& balance, Grid_t*& grid_ptr, Mparticles& mprts, + MfieldsAlfven& mflds_alfven) +{ + //*** + // -- set particle initial condition + partitionAndSetupParticlesGeneral( + setup_particles, balance, grid_ptr, mprts, + [&](int kind, Double3 crd, int p, Int3 idx, psc_particle_npt& npt) { + double x = crd[0], y=crd[1], z = crd[2]; + switch (kind) { + + //-------------------------------------------------------------------------------- + /*** // This is a block for the yz configuration using a single poppulation + double psi; + if (y<=g.L && y>=0.) psi=1.; + else if (y<0. && y>=-g.L) psi=1.; + else psi=0.; + case 0: //Ion drifting up + npt.n = g.n0 * (g.nb_n0 + (1 / sqr(cosh(y / g.L))) ) ; + npt.T[0] = g.Ti * psi + g.Tbi; + npt.T[1] = g.Ti * psi + g.Tbi; + npt.T[2] = g.Ti * psi + g.Tbi; + npt.p[0] = g.udri * psi; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ION_UP; + break; + case 1: //Electron drifting up + npt.n = g.n0 * (g.nb_n0 + (1 / sqr(cosh(y / g.L))) ) ; + npt.T[0] = g.Te * psi + g.Tbe; + npt.T[1] = g.Te * psi + g.Tbe; + npt.T[2] = g.Te * psi + g.Tbe; + npt.p[0] = g.udre * psi ; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ELECTRON_UP; + break; + ***/ + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + //*** // This is a block for the yz configuration using two popullations + case 0: //Ion drifting up + npt.n = g.n0 * (g.nb_n0 + (1 / sqr(cosh(y / g.L))) ) ; + npt.T[0] = g.Ti ; + npt.T[1] = g.Ti ; + npt.T[2] = g.Ti ; + npt.p[0] = g.udri; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ION_UP; + break; + case 1: //Electron drifting up + npt.n = g.n0 * (g.nb_n0 + (1 / sqr(cosh(y / g.L))) ) ; + npt.T[0] = g.Te ; + npt.T[1] = g.Te ; + npt.T[2] = g.Te ; + npt.p[0] = g.udre; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ELECTRON_UP; + break; + case 2: //Ion background up + npt.n = g.n0 * g.nb_n0 ; + npt.T[0] = g.Tbi; + npt.T[1] = g.Tbi; + npt.T[2] = g.Tbi; + npt.p[0] = 0.; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ION_UP; + break; + case 3: //Electron background up + npt.n = g.n0 * g.nb_n0; + npt.T[0] = g.Tbe; + npt.T[1] = g.Tbe; + npt.T[2] = g.Tbe; + npt.p[0] = 0.; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ELECTRON_UP; + break; + /***/ + //-------------------------------------------------------------------------------- + + default: assert(0); + } + }); +} + +// ====================================================================== +// initializeFields + +void initializeFields(MfieldsState& mflds, MfieldsAlfven& mflds_alfven) +{ + setupFieldsGeneral( + mflds, [&](int m, Int3 idx, int p, double crd[3]) -> MfieldsState::real_t { + double x = crd[0], y=crd[1], z = crd[2]; + switch (m) { + //-------------------------------------------------------------------------------- + //case HY: return mflds_alfven(PERT_HY, idx[0], idx[1], idx[2], p); + //default: return 0.; + //-------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------- + ///*** This is the magnetic field in the case yz geometry + case HX: + return 0.;//mflds_alfven(PERT_VX, idx[0], idx[1], idx[2], p); //0. ; + case HY: + return 0. + g.dby * sin(2. * M_PI * (z - 0.5 * g.Lz) / g.Lz) * cos(M_PI * y / g.Ly); // + dB_azT //In the case of yz geometry + case HZ: + return g.b0 * tanh(y / g.L) + g.dbz * cos(2. * M_PI * (z - 0.5 * g.Lz) / g.Lz) * sin(M_PI * y / g.Ly); + //***/ + //-------------------------------------------------------------------------------- + + //case JYI: return 0.; // FIXME + + default: return 0.; + } + }); +} + +// ====================================================================== +// run +// +// This is basically the main function of this run, +// which sets up everything and then uses PscIntegrator to run the +// simulation + +void run() +{ + mpi_printf(MPI_COMM_WORLD, "*** Setting up...\n"); + + // ---------------------------------------------------------------------- + // setup various parameters first + + setupParameters(); + + // ---------------------------------------------------------------------- + // Set up grid, state fields, particles + + auto grid_ptr = setupGrid(); + auto& grid = *grid_ptr; + + Mparticles mprts(grid); + MfieldsState mflds(grid); + if (!read_checkpoint_filename.empty()) { + read_checkpoint(read_checkpoint_filename, grid, mprts, mflds); + } + + // ---------------------------------------------------------------------- + // Set up various objects needed to run this case + + // -- Balance + psc_params.balance_interval = 180; + Balance balance{3}; + + // -- Sort + psc_params.sort_interval = 10; + + // -- Collision + int collision_interval = 0; + double collision_nu = 1e-10; + // 3.76 * std::pow(g.target_Te, 2.) / g.Zi / g.lambda0; + Collision collision{grid, collision_interval, collision_nu}; + + // -- Checks + ChecksParams checks_params{}; + checks_params.continuity_every_step = -2; + checks_params.continuity_dump_always = false; + checks_params.continuity_threshold = 1e-4; + checks_params.continuity_verbose = true; + + checks_params.gauss_every_step = -2; + checks_params.gauss_dump_always = false; + checks_params.gauss_threshold = 1e-4; + checks_params.gauss_verbose = true; + + Checks checks{grid, MPI_COMM_WORLD, checks_params}; + + // -- Marder correction + double marder_diffusion = 0.9; + int marder_loop = 3; + bool marder_dump = false; + psc_params.marder_interval = 10; + Marder marder(grid, marder_diffusion, marder_loop, marder_dump); + + // ---------------------------------------------------------------------- + // Set up output + // + // FIXME, this really is too complicated and not very flexible + + // -- output fields + OutputFieldsItemParams outf_item_params{}; + OutputFieldsParams outf_params{}; + outf_item_params.pfield_interval = 45; + outf_item_params.tfield_interval = -10; + + outf_params.fields = outf_item_params; + outf_params.moments = outf_item_params; + OutputFields outf{grid, outf_params}; + + // -- output particles + OutputParticlesParams outp_params{}; + outp_params.every_step = -100; + outp_params.data_dir = "."; + outp_params.basename = "prt"; + OutputParticles outp{grid, outp_params}; + + int oute_interval = -100; + DiagEnergies oute{grid.comm(), oute_interval}; + + auto diagnostics = makeDiagnosticsDefault(outf, outp, oute); + + // ---------------------------------------------------------------------- + // Set up objects specific to the TurbHarrisxz case + + SetupParticles setup_particles(grid); + setup_particles.fractional_n_particles_per_cell = true; + setup_particles.neutralizing_population = MY_ION_UP; //It has to be the ions + + // ---------------------------------------------------------------------- + // setup initial conditions + + if (read_checkpoint_filename.empty()) { // This is the block which is returning the + MfieldsAlfven mflds_alfven(grid, N_PERT, grid.ibn); + initializeAlfven(mflds_alfven); + initializeParticles(setup_particles, balance, grid_ptr, mprts, + mflds_alfven); + initializeFields(mflds, mflds_alfven); + } + + // ---------------------------------------------------------------------- + // hand off to PscIntegrator to run the simulation + + auto psc = + makePscIntegrator(psc_params, *grid_ptr, mflds, mprts, balance, + collision, checks, marder, diagnostics); + + MEM_STATS(); + psc.integrate(); + MEM_STATS(); +} + +// ====================================================================== +// main + +int main(int argc, char** argv) +{ + psc_init(argc, argv); + + run(); + + MEM_STATS(); + + psc_finalize(); + return 0; +} diff --git a/src/psc_turb_langevin.cxx b/src/psc_turb_langevin.cxx new file mode 100644 index 0000000000..ac9f34b69c --- /dev/null +++ b/src/psc_turb_langevin.cxx @@ -0,0 +1,1084 @@ + +#include +#include +#include + +#include "DiagnosticsDefault.h" +#include "OutputFieldsDefault.h" +#include "psc_config.hxx" +#include "writer_mrc.hxx" + +#ifdef USE_CUDA +#include "cuda_bits.h" +#endif + +#include "rngpool_iface.h" + +//----------------------------------------------------------------- +// To use the complex numbers +//------------------------------ +#include +// using std::complex; +using namespace std; +typedef complex dcomp; + +// using namespace std::complex_literals; +// auto c = 1.0 + 3.0i; +//------------------------------ + +// extern Grid* vgrid; // FIXME + +// To use the random numbers +//------------------------------- +static RngPool* rngpool; +//------------------------------- + +// static inline double trunc_granular(double a, double b) +//{ +// return b * (int)(a / b); +//} +//----------------------------------------------------------------- + +// ====================================================================== +// Particle kinds +// +// Particle kinds can be used to define different species, or different +// populations of the same species +// +// Here, we only enumerate the types, the actual information gets set up later. +// The last kind (MY_ELECTRON) will be used as "neutralizing kind", ie, in the +// initial setup, the code will add as many electrons as there are ions in a +// cell, at the same position, to ensure the initial plasma is neutral +// (so that Gauss's Law is satisfied). +enum +{ + MY_ELECTRON_UP, + MY_ION_UP, + // MY_ELECTRON_BO, + // MY_ION_BO, + N_MY_KINDS, +}; + +enum +{ + PERT_HX, + PERT_HY, + PERT_HZ, + PERT_AZ, + DIV_B, + PERT_JX_ext, + PERT_JY_ext, + PERT_JZ_ext, + N_PERT, +}; + +// ====================================================================== +// PscTurbHarrisxzParams + +struct PscTurbHarrisxzParams +{ + + //---------------------------------- + double BB; + double Zi; + double lambda0; + double background_n; + double background_Te; + double background_Ti; + //---------------------------------- + + //---------------------------------- + double Lx_di, Ly_di, Lz_di; // Size of box in di + double L_di; // Sheet thickness / ion inertial length + double Lpert_Lx; // wavelength of perturbation in terms of Lx + + double taui; // simulation wci's to run + double t_intervali; // output interval in terms of 1/wci + double output_particle_interval; // particle output interval in terms of 1/wci + int ion_sort_interval; + int electron_sort_interval; + double overalloc; // Overallocation factor (> 1) for particle arrays + + double wpe_wce; // electron plasma freq / electron cyclotron freq + double mi_me; // Ion mass / electron mass + double wpedt_max; // Is rhis necessary? + double Ti_Te; // Ion temperature / electron temperature + double nb_n0; // background plasma density + + double Tbe_Te; // Ratio of background T_e to Harris T_e + double Tbi_Ti; // Ratio of background T_i to Harris T_i + double Tbi_Tbe; // Ratio of background T_i to background T_e + + double bg; // Guide field + double theta; + double cs; + double sn; + + double db_b0; // perturbation in Bz relative to B0 + double nppc; // Average number of macro particle per cell per species + bool open_bc_x; // Flag to signal we want to do open boundary condition in x + bool + driven_bc_z; // Flag to signal we want to do driven boundary condition in z + + Int3 gdims; // + Int3 np; + //---------------------------------- + + //------------------------------------- + double ec; + double me; + double c; + double eps0; + double de; + double kb; + + double mi; + double di; + double wpe; + double wpi; + double wce; + double wci; + + // calculated + double b0; // B0 + double n0; + double v_A; + double rhoi_L; + double Lx, Ly, Lz; // size of box + double L; // Harris sheet thickness + double Lpert; // wavelength of perturbation + // double dbx; // Perturbation in Bz relative to Bo (Only change here) + // double dbz; // Set Bx perturbation so that div(B) = 0 + double dbz; // Perturbation in Bz relative to Bo (Only change here) in the + // case of yz + double dby; // Set By perturbation so that div(B) = 0 in the case of yz + double tanhf; + + double Te; // Electron temperature main harris + double Ti; // Ion temperature main harris + double Tbe; // Electron temperature backgroung + double Tbi; // Ion temperature backgroung + + double weight_s; // Charge per macro electron + + double vthe; // Electron thermal velocity + double vthi; // Ion thermal velocity + double vdre; // Electron drift velocity + double vdri; // Ion drift velocity + + double gdri; // gamma of ion drift frame + double gdre; // gamma of electron drift frame + double udri; // 4-velocity of ion drift frame + double udre; // 4-velocity of electron drift frame + + double Ne_back; // Number of macro electrons in background + double weight_b; // Charge per macro electron + double vtheb; // normalized background e thermal vel. + double vthib; // normalized background ion thermal vel. + + int n_global_patches; + + double Ne; // Total number of macro electrons + double Ne_sheet; // Number of macro electrons in Harris sheet + double Npe_sheet; // N physical e's in sheet + double Npe_back; // N physical e's in backgrnd + double Npe; //?? + + //-------------------------------------------------- +}; + +// ====================================================================== +// Global parameters +// +// I'm not a big fan of global parameters, but they're only for +// this particular case and they help make things simpler. + +// An "anonymous namespace" makes these variables visible in this source file +// only +namespace +{ + +// Parameters specific to this case. They don't really need to be collected in a +// struct, but maybe it's nice that they are + +PscTurbHarrisxzParams g; + +std::string read_checkpoint_filename; + +// This is a set of generic PSC params (see include/psc.hxx), +// like number of steps to run, etc, which also should be set by the case +PscParams psc_params; + +} // namespace + +// ====================================================================== +// PSC configuration +// +// This sets up compile-time configuration for the code, in particular +// what data structures and algorithms to use +// +// EDIT to change order / floating point type / cuda / 2d/3d + +// There is something not quite right here ask Kai Jeff +//-------------------------------------------------------------------------------- +// using Dim = dim_yz; +using Dim = dim_xyz; +//-------------------------------------------------------------------------------- + +#ifdef USE_CUDA +using PscConfig = PscConfig1vbecCuda; +#else +using PscConfig = PscConfig1vbecSingle; +#endif + +using Writer = WriterMRC; // can choose WriterMRC, WriterAdios2 + +// ---------------------------------------------------------------------- + +using MfieldsState = PscConfig::MfieldsState; +using MfieldsAlfven = Mfields; +using Mparticles = PscConfig::Mparticles; +using Balance = PscConfig::Balance; +using Collision = PscConfig::Collision; +using Checks = PscConfig::Checks; +using Marder = PscConfig::Marder; +using OutputParticles = PscConfig::OutputParticles; + +// ====================================================================== +// setupParameters + +void setupParameters() +{ + // -- set some generic PSC parameters + //----------------------------------------------- + //----------------------------------------------- + psc_params.nmax = 2001; // 1801; + psc_params.cfl = 0.75; + psc_params.write_checkpoint_every_step = -100; // This is not working + psc_params.stats_every = -1; + //----------------------------------------------- + //----------------------------------------------- + + // -- start from checkpoint: + // + // Uncomment when wanting to start from a checkpoint, ie., + // instead of setting up grid, particles and state fields here, + // they'll be read from a file + // FIXME: This parameter would be a good candidate to be provided + // on the command line, rather than requiring recompilation when change. + + // read_checkpoint_filename = "checkpoint_500.bp"; + + //----------------------------------------------- + // -- Set some parameters specific to this case + //---------------------------------- + g.BB = 1.; + g.Zi = 1.; + g.lambda0 = 20.; + + g.background_n = 1.; + g.background_Te = .01; + g.background_Ti = .01; + //---------------------------------- + + //---------------------------------- + // Space dimensions + //-------------------------------------------------------------------------------- + ///*** // This is ion the case of yz geometry + // g.Lz_di = 40.; + // g.Lx_di = 1.; + // g.Ly_di = 10.; + // g.gdims = {1, 64, 256}; + g.Lz_di = 3*2.*M_PI; + g.Lx_di = 3*2.*M_PI; + g.Ly_di = 3*2.*M_PI; + g.gdims = {100, 100, 100}; + g.np = {2, 2, 2}; + //***/ + //-------------------------------------------------------------------------------- + + g.L_di = 1.0; + g.Lpert_Lx = 1.; + + // Time dimensions + g.taui = 10.; + g.t_intervali = 1.; + g.output_particle_interval = 100.; + g.electron_sort_interval = 25; + g.ion_sort_interval = 25; + g.overalloc = 2.; + + // Non-dimensional ratios + g.wpe_wce = 2.5; + g.mi_me = 25.; + g.Ti_Te = 1.; + g.nb_n0 = 0.1; + + g.Tbe_Te = .333; // How to stimate this ratio???? It is now consistent but I + // need an extra condition to estimate this ratio. + g.Tbi_Ti = .333; + g.Tbi_Tbe = 1.; + + // Background field + g.bg = 0.; + g.theta = 0.; + g.cs = cos(g.theta); + g.sn = sin(g.theta); + + // Amplitud of the fluctuation + g.db_b0 = 0.1; + + // Number of macro particles + g.nppc = 20; + + g.wpedt_max = .36; // what is this for? + + //---------------------------------- + + //----------------------------------- + // use natural PIC units + g.ec = 1.; // Charge normalization + g.me = 1.; // Mass normalization + g.c = 1.; // Speed of light + g.de = 1.; // Length normalization (electron inertial length) + g.eps0 = 1.; // Permittivity of space + g.wpe = 1.; // g.wce * g.wpe_wce; // electron plasma frequency + g.kb = 1.; // k Boltzman + + // derived quantities + g.wce = g.wpe / g.wpe_wce; // Electron cyclotron frequency + g.wci = g.wce / g.mi_me; // Ion cyclotron frequency + g.mi = g.me * g.mi_me; // Ion mass + g.wpi = g.wpe / sqrt(g.mi_me); // ion plasma frequency + + g.di = g.c / g.wpi; // ion inertial length + g.L = g.L_di; // Harris sheet thickness in di // Jeff check the thickness. It + // works best for g.L_di alone + g.Lx = g.Lx_di; // size of box in x dimension (in di Jeff) + g.Ly = g.Ly_di; // size of box in y dimension + g.Lz = g.Lz_di; // size of box in z dimension + + g.b0 = g.me * g.c * g.wce / g.ec; // Asymptotic magnetic field strength + g.n0 = g.me * g.eps0 * sqr(g.wpe) / + (sqr(g.ec)); // Peak electron (ion) density this is the cgs correct one + // but gives n0 = 0.07 + + // g.n0 = 1.; + // g.b0 = 1.; + + g.Te = g.me * sqr(g.c) / + (2. * g.kb * sqr(g.wpe_wce) * + (1. + g.Ti_Te)); // Electron temperature neglecting the background + // plasma pressure + + // g.Te = sqr(g.b0) / + // (8. * M_PI * g.kb * g.n0 * (1. + g.Ti_Te)); // Electron temperature + // neglecting the background plasma pressure + + // g.Te = sqr(g.b0) / + // (8. * M_PI * g.kb * g.n0 * ((1. + g.Ti_Te) - g.nb_n0 * g.Tbe_Te * (1 + + // g.Tbi_Tbe) ) ); // Electron temperature INCLUDING the background + // plasma pressure which is important here due to the way psc inject particles + + g.Ti = g.Te * g.Ti_Te; // Ion temperature + + g.Tbe = g.Te * g.Tbe_Te; + g.Tbi = g.Ti * g.Tbi_Ti; + + g.v_A = g.c * (g.wci / + g.wpi); // / sqrt(g.nb_n0); // based on nb + // Include the relativistic alfven speed correction. + g.rhoi_L = sqrt(g.Ti_Te / (1. + g.Ti_Te)) / g.L_di; + + g.vthe = sqrt(g.Te / g.me); // Electron thermal velocity + g.vthi = sqrt(g.Ti / g.mi); // Ion thermal velocity + g.vtheb = + sqrt(g.Tbe_Te * g.Te / g.me); // normalized background e thermal vel. + g.vthib = + sqrt(g.Tbi_Ti * g.Ti / g.mi); // normalized background ion thermal vel. + + g.vdri = + g.c * g.b0 / + (8 * M_PI * g.L * g.ec * g.n0 * (1 + 1 / g.Ti_Te)); // Ion drift velocity + g.vdre = -g.vdri / (g.Ti_Te); // electron drift velocity + + g.n_global_patches = g.np[0] * g.np[1] * g.np[2]; + + g.Npe_sheet = 2 * g.n0 * g.Lx * g.Ly * g.L * + tanh(0.5 * g.Lz / g.L); // N physical e's in sheet + g.Npe_back = + g.nb_n0 * g.n0 * g.Ly * g.Lz * g.Lx; // N physical e's in backgrnd + g.Npe = g.Npe_sheet + g.Npe_back; + + g.Ne = g.nppc * g.gdims[0] * g.gdims[1] * + g.gdims[2]; // total macro electrons in box + g.Ne_sheet = g.Ne * g.Npe_sheet / g.Npe; + g.Ne_back = g.Ne * g.Npe_back / g.Npe; + + // g.Ne_sheet = trunc_granular(g.Ne_sheet, g.n_global_patches); // Make it + // divisible by # subdomains g.Ne_back = trunc_granular( g.Ne_back, + // g.n_global_patches); // Make it divisible by # subdomains + g.Ne = g.Ne_sheet + g.Ne_back; + // g.weight_s = g.ec * g.Npe_sheet / g.Ne_sheet; // Charge per macro electron + // g.weight_b = g.ec * g.Npe_back / g.Ne_back; // Charge per macro electron + + g.gdri = 1. / sqrt(1. - sqr(g.vdri) / sqr(g.c)); // gamma of ion drift frame + g.gdre = + 1. / sqrt(1. - sqr(g.vdre) / sqr(g.c)); // gamma of electron drift frame + + g.udri = g.vdri * g.gdri; // 4-velocity of ion drift frame + g.udre = g.vdre * g.gdre; // 4-velocity of electron drift frame + g.tanhf = tanh(0.5 * g.Lz / g.L); + g.Lpert = g.Lpert_Lx * g.Lx; // wavelength of perturbation + + //-------------------------------------------------------------------------------- + // This is in the case of yz geometry + g.dbz = + g.db_b0 * g.b0 * M_PI * g.L / + g.Ly; // Set Bz perturbation so that div(B) = 0 in the case of yz geometry + g.dby = -g.db_b0 * g.b0 * 2 * M_PI * g.L / + g.Lz; // Perturbation in By relative to Bo (Only change here) in the + // case of yz geometry + //-------------------------------------------------------------------------------- + + //----------------------------------- +} + +// ====================================================================== +// setupGrid +// +// This helper function is responsible for setting up the "Grid", +// which is really more than just the domain and its decomposition, it +// also encompasses PC normalization parameters, information about the +// particle kinds, etc. + +Grid_t* setupGrid() +{ + + //--------------------------------------------------------------- + mpi_printf(MPI_COMM_WORLD, + "***********************************************\n"); + mpi_printf(MPI_COMM_WORLD, "* Topology: %d x %d x %d\n", g.np[0], g.np[1], + g.np[2]); + mpi_printf(MPI_COMM_WORLD, "tanhf = %g\n", g.tanhf); + mpi_printf(MPI_COMM_WORLD, "L_di = %g\n", g.L_di); + mpi_printf(MPI_COMM_WORLD, "rhoi/L = %g\n", g.rhoi_L); + mpi_printf(MPI_COMM_WORLD, "Ti/Te = %g\n", g.Ti_Te); + mpi_printf(MPI_COMM_WORLD, "Ti = %g\n", g.Ti); + mpi_printf(MPI_COMM_WORLD, "Te = %g\n", g.Te); + mpi_printf(MPI_COMM_WORLD, "nb/n0 = %g\n", g.nb_n0); + mpi_printf(MPI_COMM_WORLD, "wpe/wce = %g\n", g.wpe_wce); + mpi_printf(MPI_COMM_WORLD, "mi/me = %g\n", g.mi_me); + mpi_printf(MPI_COMM_WORLD, "theta = %g\n", g.theta); + mpi_printf(MPI_COMM_WORLD, "Lpert/Lx = %g\n", g.Lpert_Lx); + mpi_printf(MPI_COMM_WORLD, "dbz/b0 = %g\n", g.db_b0); + mpi_printf(MPI_COMM_WORLD, "taui = %g\n", g.taui); + mpi_printf(MPI_COMM_WORLD, "t_intervali = %g\n", g.t_intervali); + mpi_printf(MPI_COMM_WORLD, "num_step = %d\n", psc_params.nmax); + mpi_printf(MPI_COMM_WORLD, "n0 = %g\n", g.n0); + mpi_printf(MPI_COMM_WORLD, "Lx/di = %g\n", g.Lx); + mpi_printf(MPI_COMM_WORLD, "Lx/de = %g\n", g.Lx * g.de / g.di); + mpi_printf(MPI_COMM_WORLD, "Ly/di = %g\n", g.Ly); + mpi_printf(MPI_COMM_WORLD, "Ly/de = %g\n", g.Ly * g.de / g.di); + mpi_printf(MPI_COMM_WORLD, "Lz/di = %g\n", g.Lz); + mpi_printf(MPI_COMM_WORLD, "Lz/de = %g\n", g.Lz * g.de / g.di); + mpi_printf(MPI_COMM_WORLD, "nx = %d\n", g.gdims[0]); + mpi_printf(MPI_COMM_WORLD, "ny = %d\n", g.gdims[1]); + mpi_printf(MPI_COMM_WORLD, "nz = %d\n", g.gdims[2]); + mpi_printf(MPI_COMM_WORLD, "n_global_patches = %d\n", g.n_global_patches); + mpi_printf(MPI_COMM_WORLD, "nppc = %g\n", g.nppc); + mpi_printf(MPI_COMM_WORLD, "b0 = %g\n", g.b0); + mpi_printf(MPI_COMM_WORLD, "v_A (based on nb) = %g\n", g.v_A); + mpi_printf(MPI_COMM_WORLD, "di = %g\n", g.di); + mpi_printf(MPI_COMM_WORLD, "Ne = %g\n", g.Ne); + mpi_printf(MPI_COMM_WORLD, "Ne_sheet = %g\n", g.Ne_sheet); + mpi_printf(MPI_COMM_WORLD, "Ne_back = %g\n", g.Ne_back); + mpi_printf(MPI_COMM_WORLD, "total # of particles = %g\n", 2 * g.Ne); + // mpi_printf(MPI_COMM_WORLD, "dt*wpe = %g\n", g.wpe * grid.dt); + // mpi_printf(MPI_COMM_WORLD, "dt*wce = %g\n", g.wce * grid.dt); + // mpi_printf(MPI_COMM_WORLD, "dt*wci = %g\n", g.wci * grid.dt); + mpi_printf(MPI_COMM_WORLD, "dx/de = %g\n", g.Lx / (g.de * g.gdims[0])); + mpi_printf(MPI_COMM_WORLD, "dy/de = %g\n", g.Ly / (g.de * g.gdims[1])); + mpi_printf(MPI_COMM_WORLD, "dz/de = %g\n", g.Lz / (g.de * g.gdims[2])); + mpi_printf(MPI_COMM_WORLD, "dx/rhoi = %g\n", + (g.Lx / g.gdims[0]) / (g.vthi / g.wci)); + mpi_printf(MPI_COMM_WORLD, "dx/rhoe = %g\n", + (g.Lx / g.gdims[0]) / (g.vthe / g.wce)); + mpi_printf(MPI_COMM_WORLD, "L/debye = %g\n", g.L / (g.vthe / g.wpe)); + mpi_printf(MPI_COMM_WORLD, "dx/debye = %g\n", + (g.Lx / g.gdims[0]) / (g.vthe / g.wpe)); + mpi_printf(MPI_COMM_WORLD, "n0 = %g\n", g.n0); + mpi_printf(MPI_COMM_WORLD, "vthi/c = %g\n", g.vthi / g.c); + mpi_printf(MPI_COMM_WORLD, "vthe/c = %g\n", g.vthe / g.c); + mpi_printf(MPI_COMM_WORLD, "vdri/c = %g\n", g.vdri / g.c); + mpi_printf(MPI_COMM_WORLD, "vdre/c = %g\n", g.vdre / g.c); + mpi_printf(MPI_COMM_WORLD, "gdri = %g\n", g.gdri); + mpi_printf(MPI_COMM_WORLD, "gdre = %g\n", g.gdre); + //------------------------------------------------------------- + + // --- setup domain + Grid_t::Real3 LL = { + g.Lx_di, g.Ly_di, + g.Lz_di}; // domain size (in d_i) !!!! This is important (jeff) + // Grid_t::Real3 LL = {3. * 80., 1., 80.}; // domain size (in d_e) + // Int3 gdims = {3 * 80, 1, 80}; // global number of grid points + // Int3 np = {3*5, 1, 2}; // division into patches + + Grid_t::Domain domain{g.gdims, LL, -.5 * LL, g.np}; + // There was an issue with the conducting and reflective boundary conditions. + // This returns continuity diff messages. + // Both and each of them generate the discontinuity error + + //-------------------------------------------------------------------------------- + // This is in the case of yz geometry + psc::grid::BC bc{{BND_FLD_PERIODIC, BND_FLD_PERIODIC, // CONDUCTING_WALL, + BND_FLD_PERIODIC}, // this is in the case of yz geometry + {BND_FLD_PERIODIC, BND_FLD_PERIODIC, // CONDUCTING_WALL, + BND_FLD_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_PERIODIC, // REFLECTING, + BND_PRT_PERIODIC}, + {BND_PRT_PERIODIC, BND_PRT_PERIODIC, // REFLECTING, + BND_PRT_PERIODIC}}; + //-------------------------------------------------------------------------------- + + // -- setup particle kinds + // last population ("i") is neutralizing + Grid_t::Kinds kinds(N_MY_KINDS); + kinds[MY_ION_UP] = {g.Zi, g.mi_me * g.Zi, "i"}; + kinds[MY_ELECTRON_UP] = {-1., 1., "e"}; + // kinds[MY_ION_BO] = {g.Zi, g.mi_me * g.Zi, "i_BO"}; + // kinds[MY_ELECTRON_BO] = {-1., 1., "e_BO"}; + + g.di = sqrt(kinds[MY_ION_UP].m / kinds[MY_ION_UP].q); + + mpi_printf(MPI_COMM_WORLD, "de = %g, di = %g\n", 1., g.di); + mpi_printf(MPI_COMM_WORLD, "lambda_De (background) = %g\n", + sqrt(g.background_Te)); + + // -- setup normalization + auto norm_params = Grid_t::NormalizationParams::dimensionless(); + norm_params.nicell = g.nppc; + + double dt = psc_params.cfl * courant_length(domain); + Grid_t::Normalization norm{norm_params}; + + mpi_printf(MPI_COMM_WORLD, "dt = %g\n", dt); + + Int3 ibn = {2, 2, 2}; + if (Dim::InvarX::value) { + ibn[0] = 0; + } + if (Dim::InvarY::value) { + ibn[1] = 0; + } + if (Dim::InvarZ::value) { + ibn[2] = 0; + } + + return new Grid_t{domain, bc, kinds, norm, dt, -1, ibn}; +} + +// ====================================================================== +// Langevin antenna + +struct Langevin +{ + Langevin(); + + void step(double dt); + + int Nk; + double dB_bar; + double omega_0; + double gamma_0; + double g_rate; + double dBn; + + std::array bn_k; + std::array k; + std::array k_per; + + Rng* rng_; + int rank_; +}; + +Langevin::Langevin() +{ + Nk = 8; + + double L_per = sqrt(sqr(g.Lx) + sqr(g.Ly)); + dB_bar = 0.5 * g.b0 * L_per / g.Lz; // 0.5 * g.b0 * g.db_b0 * L_per/g.Lz ; + + dBn = dB_bar; + // Checking the iterations, assuming B_bar remains constant, + // then dBn is always dB0. + + omega_0 = 0.6 * (2. * M_PI * g.v_A / + (sqrt(3) * g.Lz)); // These are the values according to Daniel Groselj, Zhdakin + gamma_0 = 0.6 * omega_0; + g_rate = 0.1; // This is chosen so omega_0 << g_rate << wpe; + + double k_x = 2. * M_PI / g.Lx; + double k_y = 2. * M_PI / g.Ly; + double k_z = 2. * M_PI / g.Lz; + + k[0] = {1. * k_x, 0. * k_y, 1. * k_z}; + k[1] = {1. * k_x, 0. * k_y, -1. * k_z}; + k[2] = {0. * k_x, 1. * k_y, 1. * k_z}; + k[3] = {0. * k_x, 1. * k_y, -1. * k_z}; + k[4] = {-1. * k_x, 0. * k_y, 1. * k_z}; + k[5] = {-1. * k_x, 0. * k_y, -1. * k_z}; + k[6] = {0. * k_x, -1. * k_y, 1. * k_z}; + k[7] = {0. * k_x, -1. * k_y, -1. * k_z}; + + for (int n = 0; n < Nk; n++) { + k_per[n] = std::sqrt(sqr(k[n][0]) + sqr(k[n][1])); + } + + MPI_Comm_rank(MPI_COMM_WORLD, &rank_); + rngpool = RngPool_create(); + RngPool_seed(rngpool, rank_); + rng_ = RngPool_get(rngpool, 0); + if (rank_ == 0) { + double rph_a = 0.; + double rph_b = 2. * M_PI; + + //------------------------------------------- + // const dcomp i(0.0,1.0); + //----------------------------------------------------------- + + for (int n = 0; n < Nk; n++) { + // I think this numbers need to change at each time + double rand_ph = Rng_uniform(rng_, rph_a, rph_b); + bn_k[n] = std::polar(dBn, rand_ph); + } + } + MPI_Bcast(bn_k.data(), Nk, MPI_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); +} + +void Langevin::step(double dt) +{ + const double ua = -0.5; + const double ub = 0.5; + + // This is the time step that has to be calculated + double delta_t_n = dt; + + // double Cnp1 = 1.; // Since dBn = dB0 always, Cnp1=1 always. + double Cnp1 = 1. + delta_t_n * g_rate * (dB_bar - dBn) / dB_bar; + double dBnp1 = Cnp1 * dBn; + + dcomp unk[8]; + if (rank_ == 0) { + for (int n = 0; n < Nk; n++) { + unk[n] = Rng_uniform(rng_, ua, ub) + 1.i * Rng_uniform(rng_, ua, ub); + } + } + MPI_Bcast(unk, Nk, MPI_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); + + // This is an iterative formula + + dcomp bnp1_k[8]; + for (int n = 0; n < Nk; n++) { + bnp1_k[n] = + Cnp1 * bn_k[n] * std::exp(-(gamma_0 + omega_0 * 1.i) * delta_t_n) + + dBnp1 * sqrt(12. * gamma_0 * delta_t_n) * unk[n]; + } + + // update n -> n + 1 + dBn = dBnp1; + for (int n = 0; n < Nk; n++) { + bn_k[n] = bnp1_k[n]; + } +}; + +struct Langevin* lng; + +//-------------------------------------------------------------------------------- +// Calculate the magnetic field components from the vector potential + +void calc_curl_Az(MfieldsAlfven& mflds) +{ + const auto& grid = mflds.grid(); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); + grid.Foreach_3d(1, 0, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + + // Bx_{i, j+1/2, k+1/2} = (Az(i, j+1, k+1/2) - Az(i, j, k+1/2)) / dy + // Bx_{i, j, k} = (Az(i, j+1, k) - Az(i, j, k)) / dy + + // Bx_{i, j+1/2, k+1/2} + // By_{i+1/2, j, k+1/2} + // Bz_{i+1/2, j+1/2, k} + F(PERT_HX, jx, jy, jz) = + (F(PERT_AZ, jx, jy + 1, jz) - F(PERT_AZ, jx, jy, jz)) / + (patch.y_nc(1) - patch.y_nc(0)); + F(PERT_HY, jx, jy, jz) = + -(F(PERT_AZ, jx + 1, jy, jz) - F(PERT_AZ, jx, jy, jz)) / + (patch.x_nc(1) - patch.x_nc(0)); + F(PERT_HZ, jx, jy, jz) = 0.; + }); + } +} + +//-------------------------------------------------------------------------------- +// Calculate the magnetic field divergence + +void calc_div_B(MfieldsAlfven& mflds) +{ + const auto& grid = mflds.grid(); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); + grid.Foreach_3d(1, 0, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + + F(DIV_B, jx, jy, jz) = + (F(PERT_HX, jx + 1, jy, jz) - F(PERT_HX, jx, jy, jz)) / + (patch.x_nc(1) - patch.x_nc(0)) + + (F(PERT_HY, jx, jy + 1, jz) - F(PERT_HY, jx, jy, jz)) / + (patch.y_nc(1) - patch.y_nc(0)) + + (F(PERT_HZ, jx, jy, jz + 1) - F(PERT_HZ, jx, jy, jz)) / + (patch.z_nc(1) - patch.z_nc(0)); + }); + } +} + +//-------------------------------------------------------------------------------- +// Calculate the external current componentfrom the magnetuc field + +void calc_curl_H(MfieldsAlfven& mflds) +{ + const auto& grid = mflds.grid(); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); + grid.Foreach_3d(0, 0, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + + // Hx_{i, j+1/2, k+1/2} + // Hy_{i+1/2, j, k+1/2} + // Hz_{i+1/2, j+1/2, k} + + // This is where the current compomemts live + //--------------------------------------------------------------------------- + // Jx_{i+1/2, j, k} = (Hz(i+1/2, j+1/2, k+1) - Hz(i+1/2, j-1/2, k+1)) / dy + // - (Hy(i, j+1/2, k+1/2) - Hy(i, j+1/2, k-1/2)) / dz + + // Jy_{i+1, j+1/2, k} = -(Hz(i+1/2, j+1/2, k+1) - Hz(i-1/2, j+1/2, k+1)) / + // dx + // + (Hx(i+1, j+1/2, k+1/2) - Hx(i+1, j+1/2, k-1/2)) / dz + + // Jz_{i, j, k+1/2} = (Hy(i+1/2, j, k+1/2) - Hy(i-1/2, j, k+1/2)) / dx + // - (Hx(i, j+1/2, k+1/2) - Hx(i, j-1/2, k+1/2)) / dy + //-------------------------------------------------------------------------------- + // This is how it is implemented assuming that the right coordinates take + // care of the 1/2's + //-------------------------------------------------------------------------------- + // Jx_{i, j, k} = (Hz(i, j, k) - Hz(i, j-1, k)) / dy + // - (Hy(i, j, k) - Hy(i, j, k-1)) / dz + + // Jy_{i, j, k} = -(Hz(i, j, k) - Hz(i-1, j, k)) / dx + // + (Hx(i, j, k) - Hx(i, j, k-1)) / dz + + // Jz_{i, j, k} = (Hy(i, j, k) - Hy(i-1, j, k)) / dx + // - (Hx(i, j, k) - Hx(i, j-1, k)) / dy + //-------------------------------------------------------------------------------- + + F(PERT_JX_ext, jx, jy, jz) = + (F(PERT_HZ, jx, jy, jz) - F(PERT_HZ, jx, jy - 1, jz)) / + (patch.y_nc(1) - patch.y_nc(0)) - + (F(PERT_HY, jx, jy, jz) - F(PERT_HY, jx, jy, jz - 1)) / + (patch.z_nc(1) - patch.z_nc(0)); + + F(PERT_JY_ext, jx, jy, jz) = + (F(PERT_HX, jx, jy, jz) - F(PERT_HX, jx, jy, jz - 1)) / + (patch.z_nc(1) - patch.z_nc(0)) - + (F(PERT_HZ, jx, jy, jz) - F(PERT_HZ, jx - 1, jy, jz)) / + (patch.x_nc(1) - patch.x_nc(0)); + + F(PERT_JZ_ext, jx, jy, jz) = + (F(PERT_HY, jx, jy, jz) - F(PERT_HY, jx - 1, jy, jz)) / + (patch.x_nc(1) - patch.x_nc(0)) - + (F(PERT_HX, jx, jy, jz) - F(PERT_HX, jx, jy - 1, jz)) / + (patch.y_nc(1) - patch.y_nc(0)); + }); + } +} + +// ====================================================================== +// initializeAlfven + +void initializeAlfven(MfieldsAlfven& mflds, Langevin& lng) +{ + const auto& grid = mflds.grid(); + + //-------------------------------------------------------------------------------- + mpi_printf(grid.comm(), "**** Setting up Alfven fields...\n"); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto& patch = grid.patches[p]; + auto F = make_Fields3d(mflds[p]); + + int n_ghosts = std::max( + {mflds.ibn()[0], mflds.ibn()[1], mflds.ibn()[2]}); // FIXME, not pretty + + grid.Foreach_3d(n_ghosts, n_ghosts, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + auto crd_ec_z = Centering::getPos(patch, index, Centering::EC, 2); + //-------------------------------------------------------------------------------- + // Calculate the vector potential + dcomp Bext_x = 0., Bext_y = 0., Az = 0.; + for (int n = 0; n < lng.Nk; n++) { + Az += (lng.bn_k[n] * + exp(1i * (lng.k[n][0] * crd_ec_z[0] + lng.k[n][1] * crd_ec_z[1] + + lng.k[n][2] * crd_ec_z[2]))) / + lng.k_per[n]; + } + F(PERT_AZ, jx, jy, jz) = Az.real(); + }); + + calc_curl_Az(mflds); + // calc_div_B(mflds); + calc_curl_H(mflds); + } + //-------------------------------------------------------------------------------- + +#if 0 + + //------------------------------------------------------------------------------------------------------------ +#endif +} + +///*** +// ====================================================================== +// initializeParticles + +void initializeParticles(SetupParticles& setup_particles, + Balance& balance, Grid_t*& grid_ptr, Mparticles& mprts, + MfieldsAlfven& mflds_alfven) +{ + //*** + // -- set particle initial condition + partitionAndSetupParticlesGeneral( + setup_particles, balance, grid_ptr, mprts, + [&](int kind, Double3 crd, int p, Int3 idx, psc_particle_npt& npt) { + double x = crd[0], y = crd[1], z = crd[2]; + switch (kind) { + + case MY_ION_UP: + npt.n = g.n0; + npt.T[0] = g.Ti; + npt.T[1] = g.Ti; + npt.T[2] = g.Ti; + npt.p[0] = 0.; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ION_UP; + break; + case MY_ELECTRON_UP: + npt.n = g.n0; + npt.T[0] = g.Te; + npt.T[1] = g.Te; + npt.T[2] = g.Te; + npt.p[0] = 0.;//g.udre; + npt.p[1] = 0.; + npt.p[2] = 0.; + npt.kind = MY_ELECTRON_UP; + break; + //-------------------------------------------------------------------------------- + + default: assert(0); + } + //npt.n = 0; + }); +} + +// ====================================================================== +// initializeFields + +void initializeFields(MfieldsState& mflds, MfieldsAlfven& mflds_alfven) +{ + setupFieldsGeneral( + mflds, [&](int m, Int3 idx, int p, double crd[3]) -> MfieldsState::real_t { + double x = crd[0], y = crd[1], z = crd[2]; + switch (m) { + //-------------------------------------------------------------------------------- + // case HY: return mflds_alfven(PERT_HY, idx[0], idx[1], idx[2], p); + // default: return 0.; + //-------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------- + ///*** This is the magnetic field in the case yz geometry + case HX: return mflds_alfven(PERT_HX, idx[0], idx[1], idx[2], p); + case HY: return mflds_alfven(PERT_HY, idx[0], idx[1], idx[2], p); + case HZ: return mflds_alfven(PERT_HZ, idx[0], idx[1], idx[2], p); + case JXI: return mflds_alfven(PERT_JX_ext, idx[0], idx[1], idx[2], p); + case JYI: return mflds_alfven(PERT_JY_ext, idx[0], idx[1], idx[2], p); + case JZI: return mflds_alfven(PERT_JZ_ext, idx[0], idx[1], idx[2], p); + default: return 0.; + } + }); +} + +// ====================================================================== +// run +// +// This is basically the main function of this run, +// which sets up everything and then uses PscIntegrator to run the +// simulation + +void run() +{ + mpi_printf(MPI_COMM_WORLD, "*** Setting up...\n"); + + // ---------------------------------------------------------------------- + // setup various parameters first + + setupParameters(); + + // ---------------------------------------------------------------------- + // Set up grid, state fields, particles + + auto grid_ptr = setupGrid(); + auto& grid = *grid_ptr; + + Mparticles mprts(grid); + MfieldsState mflds(grid); + if (!read_checkpoint_filename.empty()) { + read_checkpoint(read_checkpoint_filename, grid, mprts, mflds); + } + + // ---------------------------------------------------------------------- + // Set up various objects needed to run this case + + // -- Balance + psc_params.balance_interval = 180; + Balance balance{3}; + + // -- Sort + psc_params.sort_interval = 10; + + // -- Collision + int collision_interval = 0; + double collision_nu = 1e-10; + // 3.76 * std::pow(g.target_Te, 2.) / g.Zi / g.lambda0; + Collision collision{grid, collision_interval, collision_nu}; + + // -- Checks + ChecksParams checks_params{}; + checks_params.continuity_every_step = -2; + checks_params.continuity_dump_always = false; + checks_params.continuity_threshold = 1e-4; + checks_params.continuity_verbose = true; + + checks_params.gauss_every_step = -2; + checks_params.gauss_dump_always = false; + checks_params.gauss_threshold = 1e-4; + checks_params.gauss_verbose = true; + + Checks checks{grid, MPI_COMM_WORLD, checks_params}; + + // -- Marder correction + double marder_diffusion = 0.9; + int marder_loop = 3; + bool marder_dump = false; + psc_params.marder_interval = 10; + Marder marder(grid, marder_diffusion, marder_loop, marder_dump); + + // ---------------------------------------------------------------------- + // Set up output + // + // FIXME, this really is too complicated and not very flexible + + // -- output fields + OutputFieldsItemParams outf_item_params{}; + OutputFieldsParams outf_params{}; + outf_item_params.pfield_interval = 50; + outf_item_params.tfield_interval = -10; + + outf_params.fields = outf_item_params; + outf_params.moments = outf_item_params; + OutputFields outf{grid, outf_params}; + + // -- output particles + OutputParticlesParams outp_params{}; + outp_params.every_step = 100; + outp_params.data_dir = "."; + outp_params.basename = "prt"; + OutputParticles outp{grid, outp_params}; + + int oute_interval = -100; + DiagEnergies oute{grid.comm(), oute_interval}; + + auto diagnostics = makeDiagnosticsDefault(outf, outp, oute); + + // ---------------------------------------------------------------------- + // Set up objects specific to the TurbHarrisxz case + + SetupParticles setup_particles(grid); + setup_particles.fractional_n_particles_per_cell = true; + setup_particles.neutralizing_population = MY_ION_UP; // It has to be the ions + + // ---------------------------------------------------------------------- + // setup initial conditions + + lng = new Langevin(); + + MfieldsAlfven mflds_alfven(grid, N_PERT, grid.ibn); + + auto lf_ext_current = [&](const Grid_t& grid, MfieldsState& mflds) { + lng->step(grid.dt); + initializeAlfven(mflds_alfven, *lng); + + for (int p = 0; p < mflds.n_patches(); ++p) { + auto F = make_Fields3d(mflds[p]); + auto FA = make_Fields3d(mflds_alfven[p]); + grid.Foreach_3d(0, 0, [&](int jx, int jy, int jz) { + Int3 index{jx, jy, jz}; + + F(JXI, jx, jy, jz) += FA(PERT_JX_ext, jx, jy, jz); + F(JYI, jx, jy, jz) += FA(PERT_JY_ext, jx, jy, jz); + F(JZI, jx, jy, jz) += FA(PERT_JZ_ext, jx, jy, jz); + }); + } + }; + + if (read_checkpoint_filename + .empty()) { // This is the block which is returning the + initializeAlfven(mflds_alfven, *lng); + initializeParticles(setup_particles, balance, grid_ptr, mprts, + mflds_alfven); + initializeFields(mflds, mflds_alfven); + } + + // ---------------------------------------------------------------------- + // hand off to PscIntegrator to run the simulation + + auto psc = makePscIntegrator( + psc_params, *grid_ptr, mflds, mprts, balance, collision, checks, marder, + diagnostics, injectParticlesNone, lf_ext_current); + + MEM_STATS(); + psc.integrate(); + MEM_STATS(); +} + +// ====================================================================== +// main + +int main(int argc, char** argv) +{ + psc_init(argc, argv); + + run(); + + MEM_STATS(); + + psc_finalize(); + return 0; +}