From 6c799bcb6d53517364ae13b9bc9b47ef91aa8d59 Mon Sep 17 00:00:00 2001 From: jan-janssen Date: Fri, 3 Oct 2025 20:52:21 +0200 Subject: [PATCH 1/7] update notebooks --- notebooks/5-1-gpaw.ipynb | 238 +++++++++++++-------------- notebooks/5-2-quantum-espresso.ipynb | 108 +++++++----- 2 files changed, 179 insertions(+), 167 deletions(-) diff --git a/notebooks/5-1-gpaw.ipynb b/notebooks/5-1-gpaw.ipynb index 98e94eb5..cb72aa81 100644 --- a/notebooks/5-1-gpaw.ipynb +++ b/notebooks/5-1-gpaw.ipynb @@ -18,9 +18,9 @@ "source": [ "import subprocess\n", "from ase.build import bulk\n", - "from atomistics.workflows.evcurve.helper import (\n", - " analyse_structures_helper as evcurve_analyse_structures,\n", - " generate_structures_helper as evcurve_generate_structures,\n", + "from atomistics.workflows import (\n", + " analyse_results_for_energy_volume_curve,\n", + " get_tasks_for_energy_volume_curve,\n", ")\n", "import matplotlib.pyplot as plt\n", "import pprint\n", @@ -29,10 +29,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The only function which is executed using [mpi4py](https://mpi4py.readthedocs.io) is the `evaluate_with_gpaw()` function:", - "id": "e15eed0da3c6547b" + "id": "e15eed0da3c6547b", + "metadata": {}, + "source": [ + "The only function which is executed using [mpi4py](https://mpi4py.readthedocs.io) is the `evaluate_with_gpaw()` function:" + ] }, { "cell_type": "code", @@ -54,31 +56,53 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "As a first step of the workflow the equilibrium structure of four Aluminium atoms is strained by 5%.", - "id": "e9936ca22151d490" + "id": "e9936ca22151d490", + "metadata": {}, + "source": [ + "As a first step of the workflow the equilibrium structure of four Aluminium atoms is strained by 5%." + ] }, { "cell_type": "code", "execution_count": 3, "id": "a1d4e9a1-7275-4d9a-b038-db27185f00ae", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'calc_energy': {0.95: Atoms(symbols='Al4', pbc=True, cell=[3.9813426685908118, 3.9813426685908118, 3.9813426685908118]),\n", + " 0.9666667: Atoms(symbols='Al4', pbc=True, cell=[4.004490529815683, 4.004490529815683, 4.004490529815683]),\n", + " 0.9833333: Atoms(symbols='Al4', pbc=True, cell=[4.027373829573266, 4.027373829573266, 4.027373829573266]),\n", + " 1.0: Atoms(symbols='Al4', pbc=True, cell=[4.05, 4.05, 4.05]),\n", + " 1.0166667: Atoms(symbols='Al4', pbc=True, cell=[4.072376144702493, 4.072376144702493, 4.072376144702493]),\n", + " 1.0333333: Atoms(symbols='Al4', pbc=True, cell=[4.0945090584006865, 4.0945090584006865, 4.0945090584006865]),\n", + " 1.05: Atoms(symbols='Al4', pbc=True, cell=[4.1164052451001565, 4.1164052451001565, 4.1164052451001565])}}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "structure_dict = evcurve_generate_structures(\n", + "task_dict = get_tasks_for_energy_volume_curve(\n", " structure=bulk(\"Al\", a=4.05, cubic=True),\n", " num_points=7,\n", " vol_range=0.05,\n", " axes=(\"x\", \"y\", \"z\"),\n", - ")" + ")\n", + "task_dict" ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The resulting dictionary of structures `structure_dict` is transformed to simplify the parallel execution:", - "id": "8bf60b7b0f5af31a" + "id": "8bf60b7b0f5af31a", + "metadata": {}, + "source": [ + "The resulting dictionary of structures `task_dict` is transformed to simplify the parallel execution:" + ] }, { "cell_type": "code", @@ -87,14 +111,16 @@ "metadata": {}, "outputs": [], "source": [ - "task_loop_dict = {k: {\"calc_energy\": v} for k, v in structure_dict.items()}" + "task_loop_dict = {k: {\"calc_energy\": v} for k, v in task_dict[\"calc_energy\"].items()}" ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The status of the flux cluster is validated using the `flux resource list` command and the `flux jobs -a` command, just to highlight flux was initialized correctly and has access to the available resources.", - "id": "af5ba456f3fafd39" + "id": "af5ba456f3fafd39", + "metadata": {}, + "source": [ + "The status of the flux cluster is validated using the `flux resource list` command and the `flux jobs -a` command, just to highlight flux was initialized correctly and has access to the available resources." + ] }, { "cell_type": "code", @@ -107,8 +133,8 @@ "output_type": "stream", "text": [ "[' STATE NNODES NCORES NGPUS NODELIST',\n", - " ' free 1 2 1 '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", + " ' free 1 2 0 '\n", + " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", " ' allocated 0 0 0 ',\n", " ' down 0 0 0 ',\n", " '']\n" @@ -157,10 +183,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The for each strained structure a calculation task is submitted to the `FluxClusterExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.", - "id": "2670c218fbde5b02" + "id": "2670c218fbde5b02", + "metadata": {}, + "source": [ + "The for each strained structure a calculation task is submitted to the `FluxClusterExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects." + ] }, { "cell_type": "code", @@ -172,41 +200,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n", - " ' ƒAXDuVAf jan executorl+ S 2 - - ',\n", - " ' ƒAgwGnFh jan executorl+ S 2 - - ',\n", - " ' ƒANnfaAs jan executorl+ R 2 1 0.805s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " '']\n" + "[' JOBID USER NAME ST NTASKS NNODES TIME INFO', '']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:38<00:00, 5.45s/it]\n" + "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:00<00:00, 55924.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n", - " ' ƒBGnAPNF jan executorl+ CD 2 1 5.577s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒB8hgJKH jan executorl+ CD 2 1 5.319s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAzbiDyy jan executorl+ CD 2 1 5.414s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAqSxf6X jan executorl+ CD 2 1 7.899s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAgwGnFh jan executorl+ CD 2 1 5.277s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAXDuVAf jan executorl+ CD 2 1 5.130s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒANnfaAs jan executorl+ CD 2 1 5.447s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " '']\n" + "[' JOBID USER NAME ST NTASKS NNODES TIME INFO', '']\n" ] } ], @@ -232,10 +240,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.", - "id": "8c80e3bcb483b069" + "id": "8c80e3bcb483b069", + "metadata": {}, + "source": [ + "The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume." + ] }, { "cell_type": "code", @@ -244,19 +254,21 @@ "metadata": {}, "outputs": [], "source": [ - "fit_dict = evcurve_analyse_structures(\n", + "fit_dict = analyse_results_for_energy_volume_curve(\n", " output_dict={\"energy\": result_dict},\n", - " structure_dict=structure_dict,\n", + " task_dict=task_dict,\n", " fit_type=\"polynomial\",\n", " fit_order=3,\n", ")" ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The final energy volume curve plot summarizes the results of this calculation.", - "id": "571b7c25dcca8bb" + "id": "571b7c25dcca8bb", + "metadata": {}, + "source": [ + "The final energy volume curve plot summarizes the results of this calculation." + ] }, { "cell_type": "code", @@ -270,14 +282,14 @@ "text": [ "<>:2: SyntaxWarning: invalid escape sequence '\\A'\n", "<>:2: SyntaxWarning: invalid escape sequence '\\A'\n", - "/tmp/ipykernel_21313/4024930470.py:2: SyntaxWarning: invalid escape sequence '\\A'\n", + "/tmp/ipykernel_47033/4024930470.py:2: SyntaxWarning: invalid escape sequence '\\A'\n", " plt.xlabel(\"Volume [$\\AA^3$]\")\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -286,7 +298,7 @@ }, { "data": { - "image/png": "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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg==", + "image/png": "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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -322,10 +334,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The for each strained structure a calculation task is submitted to the `FluxJobExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.", - "id": "21bdd0d42f9806e4" + "id": "21bdd0d42f9806e4", + "metadata": {}, + "source": [ + "The for each strained structure a calculation task is submitted to the `FluxJobExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects." + ] }, { "cell_type": "code", @@ -338,28 +352,14 @@ "output_type": "stream", "text": [ "[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n", - " ' ƒUKWVQxX jan python S 2 - - ',\n", - " ' ƒUKWVQxY jan python S 2 - - ',\n", - " ' ƒUKXyQEs jan python S 2 - - ',\n", - " ' ƒUKXyQEt jan python S 2 - - ',\n", - " ' ƒUKZTPXD jan python S 2 - - ',\n", - " ' ƒUKZTPXE jan python S 2 - - ',\n", - " ' ƒUKV1RgB jan python R 2 1 1.030s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒBGnAPNF jan executorl+ CD 2 1 5.577s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒB8hgJKH jan executorl+ CD 2 1 5.319s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAzbiDyy jan executorl+ CD 2 1 5.414s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAqSxf6X jan executorl+ CD 2 1 7.899s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAgwGnFh jan executorl+ CD 2 1 5.277s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAXDuVAf jan executorl+ CD 2 1 5.130s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒANnfaAs jan executorl+ CD 2 1 5.447s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", + " ' ƒHXLakXJ jan python S 2 - - ',\n", + " ' ƒHXN4jod jan python S 2 - - ',\n", + " ' ƒHXN4joe jan python S 2 - - ',\n", + " ' ƒHXPYj5y jan python S 2 - - ',\n", + " ' ƒHXPYj5z jan python S 2 - - ',\n", + " ' ƒHXPYj61 jan python S 2 - - ',\n", + " ' ƒHXLakXH jan python R 2 1 1.018s '\n", + " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", " '']\n" ] }, @@ -367,7 +367,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:21<00:00, 3.10s/it]\n" + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:15<00:00, 2.21s/it]\n" ] }, { @@ -375,34 +375,20 @@ "output_type": "stream", "text": [ "[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n", - " ' ƒUKZTPXE jan python CD 2 1 3.447s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒUKZTPXD jan python CD 2 1 3.978s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒUKXyQEt jan python CD 2 1 3.305s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒUKXyQEs jan python CD 2 1 3.308s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒUKWVQxY jan python CD 2 1 2.872s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒUKWVQxX jan python CD 2 1 2.903s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒUKV1RgB jan python CD 2 1 3.094s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒBGnAPNF jan executorl+ CD 2 1 5.577s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒB8hgJKH jan executorl+ CD 2 1 5.319s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAzbiDyy jan executorl+ CD 2 1 5.414s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAqSxf6X jan executorl+ CD 2 1 7.899s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAgwGnFh jan executorl+ CD 2 1 5.277s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒAXDuVAf jan executorl+ CD 2 1 5.130s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", - " ' ƒANnfaAs jan executorl+ CD 2 1 5.447s '\n", - " 'p200300e77f488c5f903797efb75a6bf7.dip0.t-ipconnect.de',\n", + " ' ƒHXPYj61 jan python CD 2 1 2.447s '\n", + " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", + " ' ƒHXPYj5z jan python CD 2 1 2.394s '\n", + " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", + " ' ƒHXPYj5y jan python CD 2 1 2.390s '\n", + " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", + " ' ƒHXN4joe jan python CD 2 1 2.368s '\n", + " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", + " ' ƒHXN4jod jan python CD 2 1 2.424s '\n", + " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", + " ' ƒHXLakXJ jan python CD 2 1 2.243s '\n", + " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", + " ' ƒHXLakXH jan python CD 2 1 2.436s '\n", + " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", " '']\n" ] } @@ -429,10 +415,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.", - "id": "ca353da1941c1c7c" + "id": "ca353da1941c1c7c", + "metadata": {}, + "source": [ + "The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume." + ] }, { "cell_type": "code", @@ -441,19 +429,21 @@ "metadata": {}, "outputs": [], "source": [ - "fit_dict = evcurve_analyse_structures(\n", + "fit_dict = analyse_results_for_energy_volume_curve(\n", " output_dict={\"energy\": result_dict},\n", - " structure_dict=structure_dict,\n", + " task_dict=task_dict,\n", " fit_type=\"polynomial\",\n", " fit_order=3,\n", ")" ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The final energy volume curve plot summarizes the results of this calculation.", - "id": "3d4189b5c74ba2a2" + "id": "3d4189b5c74ba2a2", + "metadata": {}, + "source": [ + "The final energy volume curve plot summarizes the results of this calculation." + ] }, { "cell_type": "code", @@ -467,14 +457,14 @@ "text": [ "<>:2: SyntaxWarning: invalid escape sequence '\\A'\n", "<>:2: SyntaxWarning: invalid escape sequence '\\A'\n", - "/tmp/ipykernel_21313/4024930470.py:2: SyntaxWarning: invalid escape sequence '\\A'\n", + "/tmp/ipykernel_47033/4024930470.py:2: SyntaxWarning: invalid escape sequence '\\A'\n", " plt.xlabel(\"Volume [$\\AA^3$]\")\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 14, @@ -483,7 +473,7 @@ }, { "data": { - "image/png": "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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg==", + "image/png": "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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -524,7 +514,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.5" + "version": "3.12.10" } }, "nbformat": 4, diff --git a/notebooks/5-2-quantum-espresso.ipynb b/notebooks/5-2-quantum-espresso.ipynb index 02958042..b7333dc7 100644 --- a/notebooks/5-2-quantum-espresso.ipynb +++ b/notebooks/5-2-quantum-espresso.ipynb @@ -19,9 +19,9 @@ "import os\n", "import subprocess\n", "from ase.build import bulk\n", - "from atomistics.workflows.evcurve.helper import (\n", - " analyse_structures_helper as evcurve_analyse_structures,\n", - " generate_structures_helper as evcurve_generate_structures,\n", + "from atomistics.workflows import (\n", + " analyse_results_for_energy_volume_curve,\n", + " get_tasks_for_energy_volume_curve,\n", ")\n", "import matplotlib.pyplot as plt\n", "import pprint\n", @@ -30,10 +30,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The function which handles the parallel execution is the `evaluate_with_quantum_espresso()` function, internally it calls `flux run pw.x` to execute the quantum espresso Fortran executable in parallel:", - "id": "7e44687dee535c05" + "id": "7e44687dee535c05", + "metadata": {}, + "source": [ + "The function which handles the parallel execution is the `evaluate_with_quantum_espresso()` function, internally it calls `flux run pw.x` to execute the quantum espresso Fortran executable in parallel:" + ] }, { "cell_type": "code", @@ -62,10 +64,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The pseudo potential is located in `tests/integration`, here the absolute path to the pseudo potential is given as: `/home/runner/work/executorlib/executorlib/tests/integration`.", - "id": "89e65ac14c2ae034" + "id": "89e65ac14c2ae034", + "metadata": {}, + "source": [ + "The pseudo potential is located in `tests/integration`, here the absolute path to the pseudo potential is given as: `/home/runner/work/executorlib/executorlib/tests/integration`." + ] }, { "cell_type": "code", @@ -78,10 +82,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "As a first step of the workflow the equilibrium structure of four Aluminium atoms is strained by 5%.", - "id": "246aac73af27fcb3" + "id": "246aac73af27fcb3", + "metadata": {}, + "source": [ + "As a first step of the workflow the equilibrium structure of four Aluminium atoms is strained by 5%." + ] }, { "cell_type": "code", @@ -90,7 +96,7 @@ "metadata": {}, "outputs": [], "source": [ - "structure_dict = evcurve_generate_structures(\n", + "task_dict = get_tasks_for_energy_volume_curve(\n", " structure=bulk(\"Al\", a=4.15, cubic=True),\n", " num_points=7,\n", " vol_range=0.05,\n", @@ -99,10 +105,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The resulting dictionary of structures `structure_dict` is transformed to simplify the parallel execution:", - "id": "91dc9dc13d40835e" + "id": "91dc9dc13d40835e", + "metadata": {}, + "source": [ + "The resulting dictionary of structures `task_dict` is transformed to simplify the parallel execution:" + ] }, { "cell_type": "code", @@ -111,14 +119,16 @@ "metadata": {}, "outputs": [], "source": [ - "task_loop_dict = {k: {\"calc_energy\": v} for k, v in structure_dict.items()}" + "task_loop_dict = {k: {\"calc_energy\": v} for k, v in task_dict[\"calc_energy\"].items()}" ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The status of the flux cluster is validated using the `flux resource list` command and the `flux jobs -a` command, just to highlight flux was initialized correctly and has access to the available resources.", - "id": "80b40994805c5e10" + "id": "80b40994805c5e10", + "metadata": {}, + "source": [ + "The status of the flux cluster is validated using the `flux resource list` command and the `flux jobs -a` command, just to highlight flux was initialized correctly and has access to the available resources." + ] }, { "cell_type": "code", @@ -181,10 +191,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The for each strained structure a calculation task is submitted to the `FluxClusterExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.", - "id": "21f9e2a13fafd6fd" + "id": "21f9e2a13fafd6fd", + "metadata": {}, + "source": [ + "The for each strained structure a calculation task is submitted to the `FluxClusterExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects." + ] }, { "cell_type": "code", @@ -261,10 +273,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.", - "id": "ab134a77a64251a3" + "id": "ab134a77a64251a3", + "metadata": {}, + "source": [ + "The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume." + ] }, { "cell_type": "code", @@ -273,19 +287,21 @@ "metadata": {}, "outputs": [], "source": [ - "fit_dict = evcurve_analyse_structures(\n", + "fit_dict = analyse_results_for_energy_volume_curve(\n", " output_dict={\"energy\": result_dict},\n", - " structure_dict=structure_dict,\n", + " task_dict=task_dict,\n", " fit_type=\"polynomial\",\n", " fit_order=3,\n", ")" ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The final energy volume curve plot summarizes the results of this calculation.", - "id": "175dd036cb6e4bdd" + "id": "175dd036cb6e4bdd", + "metadata": {}, + "source": [ + "The final energy volume curve plot summarizes the results of this calculation." + ] }, { "cell_type": "code", @@ -351,10 +367,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The for each strained structure a calculation task is submitted to the `FluxJobExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.", - "id": "800c01d8a5347bb1" + "id": "800c01d8a5347bb1", + "metadata": {}, + "source": [ + "The for each strained structure a calculation task is submitted to the `FluxJobExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects." + ] }, { "cell_type": "code", @@ -463,10 +481,12 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.", - "id": "8a9c8658af1dda5a" + "id": "8a9c8658af1dda5a", + "metadata": {}, + "source": [ + "The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume." + ] }, { "cell_type": "code", @@ -475,19 +495,21 @@ "metadata": {}, "outputs": [], "source": [ - "fit_dict = evcurve_analyse_structures(\n", + "fit_dict = analyse_results_for_energy_volume_curve(\n", " output_dict={\"energy\": result_dict},\n", - " structure_dict=structure_dict,\n", + " task_dict=task_dict,\n", " fit_type=\"polynomial\",\n", " fit_order=3,\n", ")" ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "The final energy volume curve plot summarizes the results of this calculation.", - "id": "9c3358ea83647f01" + "id": "9c3358ea83647f01", + "metadata": {}, + "source": [ + "The final energy volume curve plot summarizes the results of this calculation." + ] }, { "cell_type": "code", @@ -558,7 +580,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.5" + "version": "3.12.10" } }, "nbformat": 4, From 9151656b5c67b39b759ee8b1307fa52630e3a2e6 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Fri, 3 Oct 2025 22:23:27 +0200 Subject: [PATCH 2/7] Update 5-1-gpaw.ipynb --- notebooks/5-1-gpaw.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notebooks/5-1-gpaw.ipynb b/notebooks/5-1-gpaw.ipynb index cb72aa81..02ab2a53 100644 --- a/notebooks/5-1-gpaw.ipynb +++ b/notebooks/5-1-gpaw.ipynb @@ -232,7 +232,7 @@ " sleep(1)\n", " pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n", " result_dict = {\n", - " k: f.result()[-1] \n", + " k: f.result() \n", " for k, f in tqdm(future_dict.items())\n", " }\n", " sleep(1)\n", @@ -407,7 +407,7 @@ " sleep(1)\n", " pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n", " result_dict = {\n", - " k: f.result()[-1] \n", + " k: f.result() \n", " for k, f in tqdm(future_dict.items())\n", " }\n", " sleep(1)\n", From c7cf3fd282aef7354249dc51bc78d6714d21f136 Mon Sep 17 00:00:00 2001 From: jan-janssen Date: Sat, 4 Oct 2025 10:14:35 +0200 Subject: [PATCH 3/7] fix mpi --- .ci_support/mpi4pywrapper.py | 123 ++++++++ .github/workflows/pipeline.yml | 2 + notebooks/5-1-gpaw.ipynb | 523 +-------------------------------- 3 files changed, 126 insertions(+), 522 deletions(-) create mode 100644 .ci_support/mpi4pywrapper.py diff --git a/.ci_support/mpi4pywrapper.py b/.ci_support/mpi4pywrapper.py new file mode 100644 index 00000000..129e71f9 --- /dev/null +++ b/.ci_support/mpi4pywrapper.py @@ -0,0 +1,123 @@ +try: + from mpi4py.MPI import Request, SUM, MAX, MIN, IN_PLACE, IDENT, CONGRUENT, SIMILAR, UNEQUAL +except ImportError: + pass + +import numpy as np + + +class MPI4PYWrapper: + def __init__(self, comm, parent=None): + self.comm = comm + self.size = comm.size + self.rank = comm.rank + self.parent = parent # XXX check C-object against comm.parent? + + def new_communicator(self, ranks): + comm = self.comm.Create(self.comm.group.Incl(ranks)) + if self.comm.rank in ranks: + return MPI4PYWrapper(comm, parent=self) + else: + # This cpu is not in the new communicator: + return None + + def max_scalar(self, a, root=-1): + return self.sum_scalar(a, root=-1, _op=MAX) + + def min_scalar(self, a, root=-1): + return self.sum_scalar(a, root=-1, _op=MIN) + + def sum_scalar(self, a, root=-1, _op=None): + if _op is None: + _op = SUM + assert isinstance(a, (int, float, complex)) + if root == -1: + return self.comm.allreduce(a, op=_op) + else: + return self.comm.reduce(a, root=root, op=_op) + + def sum(self, a, root=-1): + if root == -1: + self.comm.Allreduce(IN_PLACE, a, op=SUM) + else: + if root == self.rank: + self.comm.Reduce(IN_PLACE, a, root=root, op=SUM) + else: + self.comm.Reduce(a, None, root=root, op=SUM) + + def scatter(self, a, b, root): + self.comm.Scatter(a, b, root) + + def alltoallv(self, sbuffer, scounts, sdispls, rbuffer, rcounts, rdispls): + self.comm.Alltoallv((sbuffer, (scounts, sdispls), sbuffer.dtype.char), + (rbuffer, (rcounts, rdispls), rbuffer.dtype.char)) + + def all_gather(self, a, b): + self.comm.Allgather(a, b) + + def gather(self, a, root, b=None): + self.comm.Gather(a, b, root) + + def broadcast(self, a, root): + self.comm.Bcast(a, root) + + def sendreceive(self, a, dest, b, src, sendtag=123, recvtag=123): + return self.comm.Sendrecv(a, dest, sendtag, b, src, recvtag) + + def send(self, a, dest, tag=123, block=True): + if block: + self.comm.Send(a, dest, tag) + else: + return self.comm.Isend(a, dest, tag) + + def ssend(self, a, dest, tag=123): + return self.comm.Ssend(a, dest, tag) + + def receive(self, a, src, tag=123, block=True): + if block: + self.comm.Recv(a, src, tag) + else: + return self.comm.Irecv(a, src, tag) + + def test(self, request): + return request.test() + + def testall(self, requests): + return Request.testall(requests) + + def wait(self, request): + request.wait() + + def waitall(self, requests): + Request.waitall(requests) + + def name(self): + return self.comm.Get_name() + + def barrier(self): + self.comm.barrier() + + def abort(self, errcode): + self.comm.Abort(errcode) + + def compare(self, othercomm): + code = self.comm.Compare(othercomm.comm) + if code == IDENT: + return "ident" + elif code == CONGRUENT: + return "congruent" + elif code == SIMILAR: + return "similar" + elif code == UNEQUAL: + return "unequal" + else: + raise ValueError(f"Unknown compare code {code}") + + def translate_ranks(self, other, ranks): + return np.array(self.comm.Get_group().Translate_ranks(ranks, other.comm.Get_group())) + + def get_members(self): + return self.translate_ranks(self.parent, np.arange(self.size)) + + def get_c_object(self): + return self.comm diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index 987c884a..a318d862 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -186,6 +186,8 @@ jobs: shell: bash -l {0} timeout-minutes: 20 run: | + cp .ci_support/mpi4pywrapper.py /home/runner/miniconda3/envs/test/lib/python3.12/site-packages/gpaw + flux start flux resource list flux start papermill notebooks/5-1-gpaw.ipynb notebooks/5-1-gpaw-out.ipynb -k python3 flux start papermill notebooks/5-2-quantum-espresso.ipynb notebooks/5-2-quantum-espresso-out.ipynb -k python3 diff --git a/notebooks/5-1-gpaw.ipynb b/notebooks/5-1-gpaw.ipynb index 02ab2a53..2f7a6248 100644 --- a/notebooks/5-1-gpaw.ipynb +++ b/notebooks/5-1-gpaw.ipynb @@ -1,522 +1 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "745ca7d3-5046-4a8c-a370-d9d05b77a1b7", - "metadata": {}, - "source": [ - "# GPAW\n", - "The [gpaw](https://gpaw.readthedocs.io/index.html) density-functional theory (DFT) simulation code provides a Python interface supporting the [message passing interface (MPI) for Python - mpi4py](https://mpi4py.readthedocs.io) for parallelization. So `executorlib` is used to orchestrate multiple [gpaw](https://gpaw.readthedocs.io/index.html) simulation each using multiple CPU cores for parallelization. These kind of hierarchical workflows are one of the core strength of `executorlib`. While the same could be achieved by writing the whole simulation workflow using [mpi4py](https://mpi4py.readthedocs.io) this would drastically increase the complexity. With `executorlib` the user can quickly up-scale their simulation workflow without the need to address the parallel execution explicitly, rather the parallelization is introduced on a per-function level, by submitting the functions to the `FluxClusterExecutor` or `FluxJobExecutor`." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "21852c01-efda-43fe-add9-d08123a82995", - "metadata": {}, - "outputs": [], - "source": [ - "import subprocess\n", - "from ase.build import bulk\n", - "from atomistics.workflows import (\n", - " analyse_results_for_energy_volume_curve,\n", - " get_tasks_for_energy_volume_curve,\n", - ")\n", - "import matplotlib.pyplot as plt\n", - "import pprint\n", - "from tqdm import tqdm\n", - "from time import sleep" - ] - }, - { - "cell_type": "markdown", - "id": "e15eed0da3c6547b", - "metadata": {}, - "source": [ - "The only function which is executed using [mpi4py](https://mpi4py.readthedocs.io) is the `evaluate_with_gpaw()` function:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "aa435760-390f-4eff-88f4-96b15777de3e", - "metadata": {}, - "outputs": [], - "source": [ - "def evaluate_with_gpaw(task_dict, kpts, encut):\n", - " from gpaw import GPAW, PW\n", - "\n", - " structure = task_dict[\"calc_energy\"].copy()\n", - " structure.calc = GPAW(\n", - " xc=\"PBE\",\n", - " mode=PW(encut),\n", - " kpts=kpts,\n", - " )\n", - " return structure.get_potential_energy()" - ] - }, - { - "cell_type": "markdown", - "id": "e9936ca22151d490", - "metadata": {}, - "source": [ - "As a first step of the workflow the equilibrium structure of four Aluminium atoms is strained by 5%." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "a1d4e9a1-7275-4d9a-b038-db27185f00ae", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'calc_energy': {0.95: Atoms(symbols='Al4', pbc=True, cell=[3.9813426685908118, 3.9813426685908118, 3.9813426685908118]),\n", - " 0.9666667: Atoms(symbols='Al4', pbc=True, cell=[4.004490529815683, 4.004490529815683, 4.004490529815683]),\n", - " 0.9833333: Atoms(symbols='Al4', pbc=True, cell=[4.027373829573266, 4.027373829573266, 4.027373829573266]),\n", - " 1.0: Atoms(symbols='Al4', pbc=True, cell=[4.05, 4.05, 4.05]),\n", - " 1.0166667: Atoms(symbols='Al4', pbc=True, cell=[4.072376144702493, 4.072376144702493, 4.072376144702493]),\n", - " 1.0333333: Atoms(symbols='Al4', pbc=True, cell=[4.0945090584006865, 4.0945090584006865, 4.0945090584006865]),\n", - " 1.05: Atoms(symbols='Al4', pbc=True, cell=[4.1164052451001565, 4.1164052451001565, 4.1164052451001565])}}" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "task_dict = get_tasks_for_energy_volume_curve(\n", - " structure=bulk(\"Al\", a=4.05, cubic=True),\n", - " num_points=7,\n", - " vol_range=0.05,\n", - " axes=(\"x\", \"y\", \"z\"),\n", - ")\n", - "task_dict" - ] - }, - { - "cell_type": "markdown", - "id": "8bf60b7b0f5af31a", - "metadata": {}, - "source": [ - "The resulting dictionary of structures `task_dict` is transformed to simplify the parallel execution:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "73ad1043-eacd-4758-a7b4-f64969beabab", - "metadata": {}, - "outputs": [], - "source": [ - "task_loop_dict = {k: {\"calc_energy\": v} for k, v in task_dict[\"calc_energy\"].items()}" - ] - }, - { - "cell_type": "markdown", - "id": "af5ba456f3fafd39", - "metadata": {}, - "source": [ - "The status of the flux cluster is validated using the `flux resource list` command and the `flux jobs -a` command, just to highlight flux was initialized correctly and has access to the available resources." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "8a93aa2b-2bce-4c87-943c-38364a4324ee", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[' STATE NNODES NCORES NGPUS NODELIST',\n", - " ' free 1 2 0 '\n", - " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", - " ' allocated 0 0 0 ',\n", - " ' down 0 0 0 ',\n", - " '']\n" - ] - } - ], - "source": [ - "pprint.pp(subprocess.check_output([\"flux\", \"resource\", \"list\"], universal_newlines=True).split(\"\\n\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "f7f072d5-ea3b-43f5-9ec1-0ea1036d7e25", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[' JOBID USER NAME ST NTASKS NNODES TIME INFO', '']\n" - ] - } - ], - "source": [ - "pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))" - ] - }, - { - "cell_type": "markdown", - "id": "62c7297b-efae-4950-a513-3b84345ad7b4", - "metadata": {}, - "source": [ - "## FluxClusterExecutor\n", - "The [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) is used in this demonstration primarily because flux can be installed on any workstation for testing. The [SlurmClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#slurm) could be used analogously." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "9cd01061-c84a-4d8d-80e1-c269af3d8c29", - "metadata": {}, - "outputs": [], - "source": [ - "from executorlib import FluxClusterExecutor" - ] - }, - { - "cell_type": "markdown", - "id": "2670c218fbde5b02", - "metadata": {}, - "source": [ - "The for each strained structure a calculation task is submitted to the `FluxClusterExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "11d7a7f3-5fbf-4377-ac98-71cd29caf433", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[' JOBID USER NAME ST NTASKS NNODES TIME INFO', '']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:00<00:00, 55924.05it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[' JOBID USER NAME ST NTASKS NNODES TIME INFO', '']\n" - ] - } - ], - "source": [ - "future_dict = {}\n", - "with FluxClusterExecutor() as exe:\n", - " for k, v in task_loop_dict.items():\n", - " future_dict[k] = exe.submit(\n", - " evaluate_with_gpaw, \n", - " task_dict=v, \n", - " kpts=(3, 3, 3), \n", - " encut=300,\n", - " resource_dict={\"cores\": 2},\n", - " )\n", - " sleep(1)\n", - " pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n", - " result_dict = {\n", - " k: f.result() \n", - " for k, f in tqdm(future_dict.items())\n", - " }\n", - " sleep(1)\n", - " pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))" - ] - }, - { - "cell_type": "markdown", - "id": "8c80e3bcb483b069", - "metadata": {}, - "source": [ - "The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "5a5822c7-5ab6-483b-a3ab-8cef5fcaf269", - "metadata": {}, - "outputs": [], - "source": [ - "fit_dict = analyse_results_for_energy_volume_curve(\n", - " output_dict={\"energy\": result_dict},\n", - " task_dict=task_dict,\n", - " fit_type=\"polynomial\",\n", - " fit_order=3,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "571b7c25dcca8bb", - "metadata": {}, - "source": [ - "The final energy volume curve plot summarizes the results of this calculation." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "d420b4c5-1a2f-4290-ba81-0c7f7bdf7ef3", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "<>:2: SyntaxWarning: invalid escape sequence '\\A'\n", - "<>:2: SyntaxWarning: invalid escape sequence '\\A'\n", - "/tmp/ipykernel_47033/4024930470.py:2: SyntaxWarning: invalid escape sequence '\\A'\n", - " plt.xlabel(\"Volume [$\\AA^3$]\")\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\n", - "plt.xlabel(\"Volume [$\\AA^3$]\")\n", - "plt.ylabel(\"Energy [eV]\")\n", - "plt.legend()" - ] - }, - { - "cell_type": "markdown", - "id": "fed42763-52cf-44c2-961d-6d00918ba6df", - "metadata": {}, - "source": [ - "## FluxJobExecutor\n", - "In analogy to the [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) the [FluxJobExecutor](https://executorlib.readthedocs.io/en/latest/3-hpc-job.html#flux) can be applied to distribute simulation within a given queuing system allocation. The calculation of the bulk modulus with [gpaw](https://gpaw.readthedocs.io) is implemented in the same way." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "516a91d4-0be6-47a6-9c9c-f5b0082bfee7", - "metadata": {}, - "outputs": [], - "source": [ - "from executorlib import FluxJobExecutor" - ] - }, - { - "cell_type": "markdown", - "id": "21bdd0d42f9806e4", - "metadata": {}, - "source": [ - "The for each strained structure a calculation task is submitted to the `FluxJobExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "2b0c559b-a117-4766-b679-314ab9e65e97", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n", - " ' ƒHXLakXJ jan python S 2 - - ',\n", - " ' ƒHXN4jod jan python S 2 - - ',\n", - " ' ƒHXN4joe jan python S 2 - - ',\n", - " ' ƒHXPYj5y jan python S 2 - - ',\n", - " ' ƒHXPYj5z jan python S 2 - - ',\n", - " ' ƒHXPYj61 jan python S 2 - - ',\n", - " ' ƒHXLakXH jan python R 2 1 1.018s '\n", - " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", - " '']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:15<00:00, 2.21s/it]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n", - " ' ƒHXPYj61 jan python CD 2 1 2.447s '\n", - " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", - " ' ƒHXPYj5z jan python CD 2 1 2.394s '\n", - " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", - " ' ƒHXPYj5y jan python CD 2 1 2.390s '\n", - " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", - " ' ƒHXN4joe jan python CD 2 1 2.368s '\n", - " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", - " ' ƒHXN4jod jan python CD 2 1 2.424s '\n", - " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", - " ' ƒHXLakXJ jan python CD 2 1 2.243s '\n", - " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", - " ' ƒHXLakXH jan python CD 2 1 2.436s '\n", - " 'p200300e77f3f33731db0767ca20d29a8.dip0.t-ipconnect.de',\n", - " '']\n" - ] - } - ], - "source": [ - "future_dict = {}\n", - "with FluxJobExecutor() as exe:\n", - " for k, v in task_loop_dict.items():\n", - " future_dict[k] = exe.submit(\n", - " evaluate_with_gpaw, \n", - " task_dict=v, \n", - " kpts=(3, 3, 3), \n", - " encut=300,\n", - " resource_dict={\"cores\": 2},\n", - " )\n", - " sleep(1)\n", - " pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n", - " result_dict = {\n", - " k: f.result() \n", - " for k, f in tqdm(future_dict.items())\n", - " }\n", - " sleep(1)\n", - " pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))" - ] - }, - { - "cell_type": "markdown", - "id": "ca353da1941c1c7c", - "metadata": {}, - "source": [ - "The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "8bb73863-bfde-4e96-9323-5330b2051632", - "metadata": {}, - "outputs": [], - "source": [ - "fit_dict = analyse_results_for_energy_volume_curve(\n", - " output_dict={\"energy\": result_dict},\n", - " task_dict=task_dict,\n", - " fit_type=\"polynomial\",\n", - " fit_order=3,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "3d4189b5c74ba2a2", - "metadata": {}, - "source": [ - "The final energy volume curve plot summarizes the results of this calculation." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "95000e45-dd86-4659-90f4-f2d144477703", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "<>:2: SyntaxWarning: invalid escape sequence '\\A'\n", - "<>:2: SyntaxWarning: invalid escape sequence '\\A'\n", - "/tmp/ipykernel_47033/4024930470.py:2: SyntaxWarning: invalid escape sequence '\\A'\n", - " plt.xlabel(\"Volume [$\\AA^3$]\")\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\n", - "plt.xlabel(\"Volume [$\\AA^3$]\")\n", - "plt.ylabel(\"Energy [eV]\")\n", - "plt.legend()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8e67f9a4-d449-420c-9f62-72d106d18636", - "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.12.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} +{"metadata":{"kernelspec":{"name":"flux","display_name":"Flux","language":"python"},"language_info":{"name":"python","version":"3.10.16","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":5,"nbformat":4,"cells":[{"id":"745ca7d3-5046-4a8c-a370-d9d05b77a1b7","cell_type":"markdown","source":"# GPAW\nThe [gpaw](https://gpaw.readthedocs.io/index.html) density-functional theory (DFT) simulation code provides a Python interface supporting the [message passing interface (MPI) for Python - mpi4py](https://mpi4py.readthedocs.io) for parallelization. So `executorlib` is used to orchestrate multiple [gpaw](https://gpaw.readthedocs.io/index.html) simulation each using multiple CPU cores for parallelization. These kind of hierarchical workflows are one of the core strength of `executorlib`. While the same could be achieved by writing the whole simulation workflow using [mpi4py](https://mpi4py.readthedocs.io) this would drastically increase the complexity. With `executorlib` the user can quickly up-scale their simulation workflow without the need to address the parallel execution explicitly, rather the parallelization is introduced on a per-function level, by submitting the functions to the `FluxClusterExecutor` or `FluxJobExecutor`.","metadata":{}},{"id":"21852c01-efda-43fe-add9-d08123a82995","cell_type":"code","source":"import subprocess\nfrom ase.build import bulk\nfrom atomistics.workflows import (\n analyse_results_for_energy_volume_curve,\n get_tasks_for_energy_volume_curve,\n)\nimport matplotlib.pyplot as plt\nimport pprint\nfrom tqdm import tqdm\nfrom time import sleep","metadata":{"trusted":true},"outputs":[{"name":"stderr","output_type":"stream","text":"/srv/conda/envs/notebook/lib/python3.10/site-packages/atomistics/workflows/__init__.py:77: UserWarning: PhonopyWorkflow(), QuasiHarmonicWorkflow(), get_band_structure(), get_dynamical_matrix(), get_hesse_matrix(), get_thermal_properties_for_harmonic_approximation(), get_tasks_for_harmonic_approximation(), analyse_results_for_harmonic_approximation(), get_tasks_for_quasi_harmonic_approximation(), analyse_results_for_quasi_harmonic_approximation(), get_thermal_properties_for_quasi_harmonic_approximation(), plot_band_structure() and plot_dos() are not available as the import of the module named 'structuretoolkit' failed.\n raise_warning(module_list=phonopy_workflows, import_error=e)\n"}],"execution_count":1},{"id":"e15eed0da3c6547b","cell_type":"markdown","source":"The only function which is executed using [mpi4py](https://mpi4py.readthedocs.io) is the `evaluate_with_gpaw()` function:","metadata":{}},{"id":"aa435760-390f-4eff-88f4-96b15777de3e","cell_type":"code","source":"def evaluate_with_gpaw(task_dict, kpts, encut):\n import os\n os.environ[\"OMP_NUM_THREADS\"] = \"1\"\n os.environ[\"GPAW_MPI4PY\"] = \"1\"\n\n from mpi4py import MPI\n from gpaw import GPAW, PW\n from gpaw.mpi4pywrapper import MPI4PYWrapper\n\n structure = task_dict[\"calc_energy\"].copy()\n structure.calc = GPAW(\n xc=\"PBE\",\n mode=PW(encut),\n kpts=kpts,\n communicator=MPI4PYWrapper(MPI.COMM_WORLD),\n )\n return structure.get_potential_energy()","metadata":{"trusted":true},"outputs":[],"execution_count":2},{"id":"e9936ca22151d490","cell_type":"markdown","source":"As a first step of the workflow the equilibrium structure of four Aluminium atoms is strained by 5%.","metadata":{}},{"id":"a1d4e9a1-7275-4d9a-b038-db27185f00ae","cell_type":"code","source":"task_dict = get_tasks_for_energy_volume_curve(\n structure=bulk(\"Al\", a=4.05, cubic=True),\n num_points=7,\n vol_range=0.05,\n axes=(\"x\", \"y\", \"z\"),\n)\ntask_dict","metadata":{"trusted":true},"outputs":[{"execution_count":3,"output_type":"execute_result","data":{"text/plain":"{'calc_energy': {np.float64(0.95): Atoms(symbols='Al4', pbc=True, cell=[3.9813426685908118, 3.9813426685908118, 3.9813426685908118]),\n np.float64(0.9666667): Atoms(symbols='Al4', pbc=True, cell=[4.004490529815683, 4.004490529815683, 4.004490529815683]),\n np.float64(0.9833333): Atoms(symbols='Al4', pbc=True, cell=[4.027373829573266, 4.027373829573266, 4.027373829573266]),\n np.float64(1.0): Atoms(symbols='Al4', pbc=True, cell=[4.05, 4.05, 4.05]),\n np.float64(1.0166667): Atoms(symbols='Al4', pbc=True, cell=[4.072376144702493, 4.072376144702493, 4.072376144702493]),\n np.float64(1.0333333): Atoms(symbols='Al4', pbc=True, cell=[4.0945090584006865, 4.0945090584006865, 4.0945090584006865]),\n np.float64(1.05): Atoms(symbols='Al4', pbc=True, cell=[4.1164052451001565, 4.1164052451001565, 4.1164052451001565])}}"},"metadata":{}}],"execution_count":3},{"id":"8bf60b7b0f5af31a","cell_type":"markdown","source":"The resulting dictionary of structures `task_dict` is transformed to simplify the parallel execution:","metadata":{}},{"id":"73ad1043-eacd-4758-a7b4-f64969beabab","cell_type":"code","source":"task_loop_dict = {k: {\"calc_energy\": v} for k, v in task_dict[\"calc_energy\"].items()}","metadata":{"trusted":true},"outputs":[],"execution_count":4},{"id":"af5ba456f3fafd39","cell_type":"markdown","source":"The status of the flux cluster is validated using the `flux resource list` command and the `flux jobs -a` command, just to highlight flux was initialized correctly and has access to the available resources.","metadata":{}},{"id":"8a93aa2b-2bce-4c87-943c-38364a4324ee","cell_type":"code","source":"pprint.pp(subprocess.check_output([\"flux\", \"resource\", \"list\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' STATE NNODES NCORES NGPUS NODELIST',\n ' free 1 24 0 jupyter-jan-janssen-exe-q4mqmd0j',\n ' allocated 0 0 0 ',\n ' down 0 0 0 ',\n '']\n"}],"execution_count":5},{"id":"f7f072d5-ea3b-43f5-9ec1-0ea1036d7e25","cell_type":"code","source":"pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO', '']\n"}],"execution_count":6},{"id":"62c7297b-efae-4950-a513-3b84345ad7b4","cell_type":"markdown","source":"## FluxClusterExecutor\nThe [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) is used in this demonstration primarily because flux can be installed on any workstation for testing. The [SlurmClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#slurm) could be used analogously.","metadata":{}},{"id":"9cd01061-c84a-4d8d-80e1-c269af3d8c29","cell_type":"code","source":"from executorlib import FluxClusterExecutor","metadata":{"trusted":true},"outputs":[],"execution_count":7},{"id":"2670c218fbde5b02","cell_type":"markdown","source":"The for each strained structure a calculation task is submitted to the `FluxClusterExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.","metadata":{}},{"id":"11d7a7f3-5fbf-4377-ac98-71cd29caf433","cell_type":"code","source":"future_dict = {}\nwith FluxClusterExecutor() as exe:\n for k, v in task_loop_dict.items():\n future_dict[k] = exe.submit(\n evaluate_with_gpaw, \n task_dict=v, \n kpts=(3, 3, 3), \n encut=300,\n resource_dict={\"cores\": 2},\n )\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n result_dict = {\n k: f.result() \n for k, f in tqdm(future_dict.items())\n }\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ2gSToFV jovyan executorl+ R 2 1 0.199s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ R 2 1 0.948s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ R 2 1 1.309s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"100%|██████████| 7/7 [04:36<00:00, 39.49s/it] \n"},{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ4Px1bKu jovyan executorl+ R 2 1 4.572m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"}],"execution_count":8},{"id":"8c80e3bcb483b069","cell_type":"markdown","source":"The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.","metadata":{}},{"id":"5a5822c7-5ab6-483b-a3ab-8cef5fcaf269","cell_type":"code","source":"fit_dict = analyse_results_for_energy_volume_curve(\n output_dict={\"energy\": result_dict},\n task_dict=task_dict,\n fit_type=\"polynomial\",\n fit_order=3,\n)","metadata":{"trusted":true},"outputs":[],"execution_count":9},{"id":"571b7c25dcca8bb","cell_type":"markdown","source":"The final energy volume curve plot summarizes the results of this calculation.","metadata":{}},{"id":"d420b4c5-1a2f-4290-ba81-0c7f7bdf7ef3","cell_type":"code","source":"plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\nplt.xlabel(\"Volume [$\\AA^3$]\")\nplt.ylabel(\"Energy [eV]\")\nplt.legend()","metadata":{"trusted":true},"outputs":[{"execution_count":10,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"iVBORw0KGgoAAAANSUhEUgAAAlcAAAG2CAYAAABSy6M+AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXxxJREFUeJzt3Xd8U3XbP/DPadK9S/emLaOsQpkFRLjZCghoGcoSREVxIKIi3oADUVG8vfEW0AcZLoYMAWWIBQUE20JbRqFAoXvRlg660jbn+aMQqUCbtElOkn7er1dev6fJycmV84vkc1/nm+sIoiiKICIiIiKtMJO6ACIiIiJTwnBFREREpEUMV0RERERaxHBFREREpEUMV0RERERaxHBFREREpEUMV0RERERaxHBFREREpEVyqQtoKZRKJbKysmBvbw9BEKQuh4iIiNQgiiJKS0vh7e0NMzP1elIMV3qSlZUFPz8/qcsgIiKiJkhPT4evr69a2zJc6Ym9vT2Auv/PcXBwkLgaIiIiUkdJSQn8/PxU3+PqYLjSk9unAh0cHBiuiIiIjIwmS3q4oJ2IiIhIixiuiIiIiLSI4YqIiIhIi7jmioiIDJooiqipqUFtba3UpZAJkslkkMvlWh2TxHBFREQGS6FQIDs7G+Xl5VKXQibMxsYGXl5esLCw0Mr+GK6IiMggKZVKXLt2DTKZDN7e3rCwsOAQZtIqURShUChw/fp1XLt2DW3atFF7UGhDGK6IiMggKRQKKJVK+Pn5wcbGRupyyERZW1vD3NwcqampUCgUsLKyavY+uaCdiIgMmjY6CUQN0fZnjJ9YIiIiIi1iuCIiIiLSIoYrIiIiIi1iuCIiItKBAQMGQBAE1c3FxQVjx47F9evXdf7agYGB9V779u35559XbbN8+XL07NkT9vb2cHd3x9ixY5GUlNTgfpcuXXrXPj09PTXe5l5ycnLw0ksvISQkBFZWVvDw8ED//v2xZs2aeqM4ZsyYodqvubk5goKC8Oqrr6KsrEzDo6Q7/LWgERNFEbviM7EtNgP/mdQV7vbN/4UDERE1nyiKiI+Px8cff4wnnngCSqUSZ8+eRWRkJN577z189tlnOn39mJiYekNXz507h6FDhyIyMlJ13++//47nn38ePXv2RE1NDRYtWoRhw4YhMTERtra29913x44dcejQIdXfMpmsSdvc6erVq+jXrx+cnJzw/vvvo3PnzqipqcGlS5fw9ddfw9vbG2PGjFFtP2LECKxfvx7V1dU4evQonnrqKZSVlWH16tUNHxg9YbgyYoIgYNOJVMSlFWH7qUzMGRgsdUlERATg8uXLKC0txcCBA1VdG29vbwQHB+ulw+Lm5lbv7w8++ADBwcF48MEHVfft37+/3jbr16+Hu7s7Tp06hQEDBtx333K5vNFOlDrb3Om5556DXC5HbGxsvWDXuXNnPProoxBFsd72lpaWqv0//vjjOHz4MHbt2oXVq1dj//79eO+993Du3DnIZDJERETgs88+Q3Cw/r4jeVrQyE3u6Q8A2BKTdteHj4jI1IiiiHJFjd5vmv77eurUKVhYWKBz584AgKqqKnz11Ve4fPkynn322Uaf//7778POzq7B29GjR9WqRaFQ4Ntvv8XMmTMbHMJaXFwMAHBxcWlwf5cvX4a3tzdat26NSZMm4erVq03a5raCggIcPHgQzz///H07Zo0Nj7W2tkZ1dTUAoKysDK+88gpiYmLw22+/wczMDOPGjYNSqWxwH9rEzpWRe7iLF97Zm4iUgnKcvFqIiOBWUpdERKQzFdW16LD4gN5fN/Gd4bCxUP8r8/Tp06iurlYFlfLycri7u+PAgQPo0aMHAGDv3r2YP38+lEolXn/9dTz11FOq5z/77LOYMGFCg6/h4+OjVi27du1CUVERZsyYcd9tRFHEK6+8gv79+6NTp0733a53797YtGkT2rZti9zcXLz33nvo27cvzp8/j1atWqm9zZ2uXLkCURTRrl27eve7urqisrISAPD888/jww8/vGdN0dHR+P777zF48GAAwKOPPlrv8XXr1sHd3R2JiYkNvjdtYrgycraWcowO88YP0WnYHJPGcEVEZABOnTqFCRMm4L333gMAXL9+HQsXLsQzzzyDhIQEVZg5fPgwHBwcEB4ejvHjx6vCmIuLS6MdJHWtW7cOI0eOhLe39323mTt3Ls6cOYNjx441uK+RI0eq/u/OnTsjIiICwcHB2LhxI1555RW1t7mXf3anoqOjoVQq8cQTT6CqqqreY3v37oWdnR1qampQXV2NRx55BKtWrQIAJCcn49///jdOnjyJ/Px8VccqLS2N4YrUN7mXH36ITsO+czl4u1wBJxvtXHiSiMjQWJvLkPjOcEleVxNxcXF49913ERISAgAICQnBq6++itGjRyM1NRU5OTno2LGjqvv00EMP4cCBA5g8eTKAutOC77//foOvsW/fPjzwwAMNbpOamopDhw5hx44d993mhRdewO7du/HHH3/A19dXk7cJW1tbdO7cGZcvX27yNiEhIRAEARcvXqx3f1BQEIC6U37/NGjQIKxevRrm5ubw9vaGubm56rHRo0fDz88PX331Fby9vaFUKtGpUycoFAqN3ltzMFyZgM4+jujg5YDE7BLsjMvEk/1aS10SEZFOCIKg0ek5KVy9ehVFRUUIDw+/636ZTAYXFxecPn263mk9X19fZGZmqv7W1mnB24vUH3744bseE0URL7zwAnbu3IkjR46gdWvNvzuqqqpw4cKFBkNeY9u0atUKQ4cOxeeff44XXnihwV8q3mZra6sKrncqKCjAhQsXsHbtWtXrNdaN0wXD/oSSWgRBwKReflj803lsjk7HjL6BvHI8EZFETp06BUEQ4OHhgZycHJSVleHo0aNYsmQJnn32WTg5Od1zgfyd/25r47SgUqnE+vXrMX36dMjld3/dP//88/j+++/x008/wd7eHjk5OQAAR0dHWFtb4/PPP8fOnTvx22+/qZ5zu/vm7++PvLw8vPfeeygpKcH06dM12uafvvjiC/Tr1w89evTA0qVL0aVLF5iZmSEmJgYXL15E9+7d1XrPzs7OaNWqFb788kt4eXkhLS0Nb7zxhrqHTGsYrkzEI119sOznC0jKLUV8ehG6+TtLXRIRUYt0+vRpiKKo6qw4OzujTZs2WLlypSpg+Pj41OtUZWRkoHfv3lqt49ChQ0hLS8PMmTPv+fjtmVADBw6sd//69esxY8YM5OfnIzk5ud5jGRkZmDx5MvLz8+Hm5oY+ffrg5MmTCAgI0GibfwoODkZcXBzef/99LFy4EBkZGbC0tESHDh3w6quv4rnnnlPrPZuZmWHz5s148cUX0alTJ7Rr1w7//e9/73qPuiaI/P2+XpSUlMDR0RHFxcVwcHDQyWu8siUeO+IyMbGHHz58rItOXoOISF8qKytx7do1tG7dGlZWpjUkuaamBqGhoThy5IhqQfvJkyfv+Ws60r2GPmtN+f7mnCsTMqlX3cyrPWeycLOqRuJqiIjofuRyOT755BMMGjQI3bp1w4IFCxisTAhPC5qQnoHOCHKzxdXrZdiTkIXJt8IWEREZnjFjxtS7pAuZDnauTIggCJjU0w8AsDk6TeJqiIiIWiaGKxMzPtwX5jIBCRnFSMwqkbocIiKiFofhysS42lliaAcPAHXXGyQiIiL9YrgyQZNuXcx5Z1wmKqtrJa6GiIioZWG4MkH9Q1zh42SNksoa7DuXLXU5RETNwolBpGva/owxXJkgMzMBE28tbP8hOl3iaoiImub29eLKy8slroRM3e3P2J3XKGwOjmIwUZE9fPGfQ5cQfa0QV6/fRJCbndQlERFpRCaTwcnJCXl5eQAAGxsbXtqLtEoURZSXlyMvLw9OTk6QyTS7QPf9MFyZKC9Hawxq547fLuZhS0w6Fj4UKnVJREQa8/T0BABVwCLSBScnJ9VnTRsYrkzYxJ5++O1iHn48lYH5w9rBQs6zwERkXARBgJeXF9zd3VFdXS11OWSCzM3Ntdaxuo3hyoT9q7073O0tkVdahd8u5GJkZy+pSyIiahKZTKb1L0AiXWErw4TJZWZ4rLsvAOCHGC5sJyIi0geGKxN3+1eDRy9fR3ohf3FDRESkawxXJi6glS36hbSCKALbTmVIXQ4REZHJY7hqASbemti+LTYdtUoO4yMiItIlhqsWYHhHDzjbmCO7uBJ/XLoudTlEREQmjeGqBbCUyzA+/NbC9mhezJmIiEiXGK5aiEm3Frb/djEPeSWVEldDRERkuhiuWog2HvboHuCMWqWIH09zYTsREZGuMFy1ILfHMmyJSYeSC9uJiIh0guGqBRnVxQv2lnKkFpTj5NUCqcshIiIySQxXLYiNhRxjunoDADZzYjsREZFOMFy1MJNuzbzafy4HN8oUEldDRERkehiuWpjOvo7o6O0ARa0SO+MypS6HiIjI5BhNuFq2bBn69u0LGxsbODk5NbhtQUEBfH19IQgCioqKGtw2OTkZ48aNg5ubGxwcHDBhwgTk5ubW2+bGjRuYOnUqHB0d4ejoiKlTpza6X0M2qVdd92pzTBpEkQvbiYiItMlowpVCoUBkZCTmzJnT6LazZs1Cly5dGt2urKwMw4YNgyAIiIqKwvHjx6FQKDB69GgolUrVdo8//jji4+Oxf/9+7N+/H/Hx8Zg6dWqz3o+UHunqDStzM1zKvYnTaUVSl0NERGRS5FIXoK63334bALBhw4YGt1u9ejWKioqwePFi7Nu3r8Ftjx8/jpSUFMTFxcHBwQEAsH79eri4uCAqKgpDhgzBhQsXsH//fpw8eRK9e/cGAHz11VeIiIhAUlIS2rVr1/w3p2cOVuZ4uLM3tp/OwJaYNHQPcJa6JCIiIpNhNJ0rdSQmJuKdd97Bpk2bYGbW+FurqqqCIAiwtLRU3WdlZQUzMzMcO3YMAHDixAk4OjqqghUA9OnTB46Ojvjzzz8b3HdJSUm9myGZ1Ktu5tWehGyUVlZLXA0REZHpMJlwVVVVhcmTJ2PFihXw9/dX6zl9+vSBra0tXn/9dZSXl6OsrAwLFiyAUqlEdnY2ACAnJwfu7u53Pdfd3R05OTn33ffy5ctVa7QcHR3h5+fXtDemIz0CnBHiboeK6lrsTsiSuhwiIiKTIWm4Wrp0KQRBaPAWGxur1r4WLlyI0NBQTJkyRe3Xd3Nzw7Zt27Bnzx7Y2dnB0dERxcXFCA8Ph0wmU20nCMJdzxVF8Z7331lPcXGx6paeblhzpQRBUF1vcAtnXhEREWmNpGuu5s6di0mTJjW4TWBgoFr7ioqKwtmzZ/Hjjz8CgOpXcK6urli0aJFqzdY/DRs2DMnJycjPz4dcLoeTkxM8PT3RunVrAICnp+ddvx4EgOvXr8PDw+O+9VhaWtY73WiIxnXzwYf7L+JMRjHOZxWjo7ej1CUREREZPUnDlaurK1xdXbWyr+3bt6OiokL1d0xMDGbOnImjR48iODhYrVqAupCWl5eHMWPGAAAiIiJQXFyM6Oho9OrVCwDw119/obi4GH379tVK7VJpZWeJYR098fOZbGyJScc7jzBcERERNZfRrLlKS0tDfHw80tLSUFtbi/j4eMTHx+PmzZsAgODgYHTq1El1u915Cg0NVa2ZyszMRPv27REdHa3a7/r163Hy5EkkJyfj22+/RWRkJObNm6f6FWBoaChGjBiB2bNn4+TJkzh58iRmz56NUaNGGeUvBf/p9qnBnXGZqFDUSlwNERGR8TOaUQyLFy/Gxo0bVX9369YNAHD48GEMHDhQrX1UV1cjKSkJ5eXlqvuSkpKwcOFCFBYWIjAwEIsWLcK8efPqPe+7777Diy++iGHDhgEAxowZg88//7yZ78gw9At2hZ+LNdILK/DL2Ww82t1X6pKIiIiMmiByRLdelJSUqBbM356pZSg+j7qMjw9eQq9AF2x9NkLqcoiIiAxGU76/jea0IOnOY939YCYA0SmFuJJ3U+pyiIiIjBrDFcHT0Qr/al+3Lm1LTJrE1RARERk3hisCAEzqWTd4dfvpTChqlI1sTURERPfDcEUAgIHt3ODhYInCMgV+Tbx7rhcRERGph+GKAABymRkiu9eNZdjMU4NERERNxnBFKhN61IWrY1fykV5Y3sjWREREdC8MV6Ti38oG/UNcIYrA1lheb5CIiKgpGK6onkm96rpX22IzUFPLhe1ERESaYriieoZ28ICzjTlySirx+6XrUpdDRERkdBiuqB5LuQyPhtddAueHaJ4aJCIi0hTDFd3l9qnBw0l5yC2plLgaIiIi48JwRXcJcbdHjwBn1CpF/HgqQ+pyiIiIjArDFd3TpF51E9u3xKRDqeS1vYmIiNTFcEX39FBnT9hbypFWWI4TVwukLoeIiMhoMFzRPdlYyPFIN28AwA/RnNhORESG68D5HHz/V5rBXBuX4Yru6/bFnA+ez0VhmULiaoiIiO5WU6vE8l8u4M2dZ/HdX6lSlwOA4Yoa0MnHEZ18HKCoVWLHaS5sJyIiw/NTfBZSCsrhYmuhuoyb1BiuqEG3u1ebY9IhilzYTkREhqOmVolVUZcBAE8PCIKtpVziiuowXFGDHunqDWtzGa7k3cTptBtSl0NERKRyZ9dqap8AqctRYbiiBtlbmePhLl4AOLGdiIgMh6F2rQCGK1LD5FsT2/eeyUJJZbXE1RARERlu1wpguCI1hPs7I8TdDpXVSuyOz5K6HCIiauHu7FrNfsCwulYAwxWpQRAETOpZ173aHMOZV0REJK3bXStnG3NMizCsrhXAcEVqGh/uCwuZGc5lluBcZrHU5RARUQtVf61VsMF1rQCGK1KTi60FhnX0AMDuFRERScfQu1YAwxVpYPKtizn/FJeFckWNxNUQEVFLU1OrxOeHrwAw3K4VwHBFGogIagU/F2uUVtXgl7M5UpdDREQtzO6ELFzLLzPorhXAcEUaMDMT/p7Yzos5ExGRHtWttTL8rhXAcEUaeqy7L2RmAmJTb+BybqnU5RARUQthLF0rgOGKNOThYIVB7dwBAFtiOLGdiIh0z5i6VgDDFTXB7Ynt209noKqmVuJqiIjI1BlT1wpguKImeLCtGzwdrHCjvBq/JuZKXQ4REZmwO7tWsw3sGoL3w3BFGpPLzBDZwxcAsJkXcyYiIh2q37UKlLoctTBcUZNM6OEHQQCOXclHWkG51OUQEZEJ+mfXys4IulYAwxU1kZ+LDfqHuAIAtsaye0VERNpnjF0rgOGKmuH2zKttp9JRU6uUuBoiIjIlxtq1AhiuqBmGdvCAi60FckuqcDjputTlEBGRCdlzxji7VgDDFTWDhdwMj4b7AAC28GLORESkJTW1Sqz6zTi7VgDDFTXTxFunBqMu5iGnuFLiaoiIyBTsOZOFq0batQIYrqiZQtzt0CvQBUoR+PEUF7YTEVHzGHvXCmC4Ii2Y2LNuYvuW2HQolaLE1RARkTEz9q4VwHBFWvBQZy/YW8mRXliB48n5UpdDRERGyhS6VgDDFWmBtYUMY7vWLWzfzIs5ExFRE93uWjkZcdcKYLgiLZl062LOB8/noOBmlcTVEBGRsanXtXrAeLtWAMMVaUlHb0d08XVEda2IHaczpS6HiIiMzJ1dq+l9A6Uup1kYrkhrbi9s3xyTBlHkwnYiIlJPrVI0ma4VwHBFWjQmzBvW5jIkXy9DbOoNqcshIiIjsSfBdLpWAMMVaZG9lTlGh3kBADZHc2E7ERE1rlYp4r+/XQZgGl0rgOGKtOz2xPafz2ahuKJa4mqIiMjQmVrXCmC4Ii0L93dCWw87VFYrsTueC9uJiOj+TLFrBTBckZYJgqDqXnHmFRERNcQUu1YAwxXpwPhuPrCQmeF8VgnOZhRLXQ4RERkgU+1aAQxXpAPOthYY0ckTAPBDTJrE1RARkSEy1a4VwHBFOjLp1syr3fFZKFfUSFwNEREZElPuWgEMV6QjfYJaIaCVDW5W1WDvmWypyyEiIgNyZ9dqWkSA1OVoHcMV6YSZmYAJPeq6V1u4sJ2IiG6pVYr4b9TfXSt7K3OJK9I+hivSmcjuvpCZCTiVegOXckulLoeIiAzA3jNZuHrddLtWAMMV6ZC7gxUGt3cHwIntRERU17X67DfT7loBDFekY5N61Z0a3BGXgaqaWomrISIiKbWErhXAcEU69mBbd3g5WqGovBoHzudKXQ4REUmkpXStAIYr0jGZmYDIWwvbN0dz5hURUUvVUrpWAMMV6cGEHr4QBODP5AKkFpRJXQ4REelZS+paAQxXpAe+zjZ4oI0bAI5lICJqiVpS1wpguCI9uT2xfdupDNTUKiWuhoiI9OXOrtVT/VubfNcKYLgiPRkS6oFWtha4XlqFqIt5UpdDRER6crtr5WhtetcQvB+GK9ILC7kZHuvuCwDYzFODREQtQv21Vi2jawUwXJEeTbh1avBIUh6yiyskroaIiHStJXatAIYr0qNgNzv0au0CpQhsi82QuhwiItKhWqWI/7bArhXAcEV6NrnX3xdzVipFiashIiJd2XsmC8ktsGsFMFyRno3s5AUHKzkyiypw7Eq+1OUQEZEOtOSuFWBE4WrZsmXo27cvbGxs4OTk1OC2BQUF8PX1hSAIKCoqanDb5ORkjBs3Dm5ubnBwcMCECROQm1v/Mi2avDY1zMpchnHdfAAAm2M4sZ2IyBS15K4VYEThSqFQIDIyEnPmzGl021mzZqFLly6NbldWVoZhw4ZBEARERUXh+PHjUCgUGD16NJTKv2cxafLa1LiJPf0BAL8m5iL/ZpXE1RARkTa19K4VAMilLkBdb7/9NgBgw4YNDW63evVqFBUVYfHixdi3b1+D2x4/fhwpKSmIi4uDg4MDAGD9+vVwcXFBVFQUhgwZotFrk3o6eDsgzNcRCRnF2HE6A08PCJa6JCIi0pKW3rUCjKhzpY7ExES888472LRpE8zMGn9rVVVVEAQBlpaWqvusrKxgZmaGY8eONauWqqoqlJSU1LvR3yb1qutebY5JhyhyYTsRkSlg16qOyYSrqqoqTJ48GStWrIC/v79az+nTpw9sbW3x+uuvo7y8HGVlZViwYAGUSiWys7ObVc/y5cvh6Oiouvn5+TVrf6ZmdJg3bCxkuHq9DDEpN6Quh4iItIBdqzqShqulS5dCEIQGb7GxsWrta+HChQgNDcWUKVPUfn03Nzds27YNe/bsgZ2dHRwdHVFcXIzw8HDIZLKmvi1VPcXFxapbejqnkt/JzlKO0V28AQCbo7mwnYjI2N3ZtWop1xC8H0nXXM2dOxeTJk1qcJvAwEC19hUVFYWzZ8/ixx9/BADVqSZXV1csWrRItW7qn4YNG4bk5GTk5+dDLpfDyckJnp6eaN26tfpv5B4sLS3rnW6ku03s5Yctsen4+Ww2lozuCEeblvsfIhGRsavXteoXKHU5kpI0XLm6usLV1VUr+9q+fTsqKv6+pEpMTAxmzpyJo0ePIji48QXTt+uIiopCXl4exowZo5W66P66+TmhnYc9knJL8VNCJqZFBEpdEhERNUGtUsSqqCsA6rpWDi24awUY0a8F09LSUFhYiLS0NNTW1iI+Ph4AEBISAjs7u7sCVH5+3YDK0NBQ1WyqzMxMDB48GJs2bUKvXr0A1P06MDQ0FG5ubjhx4gReeuklzJs3D+3atVP7talpBEHApF5+eHtPIn6ITsfUPgEQBEHqsoiISEM/n83Glbyb7FrdYjThavHixdi4caPq727dugEADh8+jIEDB6q1j+rqaiQlJaG8vFx1X1JSEhYuXIjCwkIEBgZi0aJFmDdvntZfm+5tXDcfLN93EReyS3Amoxhhfk5Sl0RERBr451qrlt61AgBB5O/g9aKkpES1YP72TC2q89LmOPwUn4XJvfyxfHxnqcshIiIN7E7Iwos/xMHR2hxHXx9kcuGqKd/fJjOKgYzXpFsT23fHZ6KsqkbiaoiISF3sWt0bwxVJrk+QCwJb2aBMUYufzzRvvhgREekP11rdG8MVSU4QBNX1Bn/gxZyJiIwCu1b3x3BFBuHR7j6QmwmISytCUk6p1OUQEVEj2LW6P7V+LRgeHq7RTgVBwO7du+Hj49Okoqjlcbe3wuBQdxw4n4vNMWlYMrqj1CUREdF93Nm1msWu1V3UClfx8fGYP3++WjOdRFHEBx98gKqqqmYXRy3LpF7+OHA+FzvjMvH6iPawMm/eJYiIiEg3bnetHKzkmMGu1V3UnnO1YMECuLu7q7XtJ5980uSCqOUa0MYN3o5WyCquxIHzOXikKzufRESGpt5aqweC2LW6B7XWXF27dg1ubm5q7zQxMREBAQFNLopaJpmZgMgefgCAzdG80DURkSH6hV2rRqkVrgICApCQkKD2Tv38/CCT8ZQOaW5CTz8IAnDiagFS8sukLoeIiO7ArpV61P61YHh4OLp3747Vq1ejuLhYlzVRC+bjZI0Bbeq6pFti2b0iIjIkv5zNxmV2rRqldrg6fvw4wsPD8cYbb8DLywtTpkzB4cOHdVkbtVCTe9WdGtwWm4HqWqXE1RAREcCulSbUDlcRERH46quvkJOTg9WrVyMjIwNDhgxBcHAwli1bhoyMDF3WSS3Iv9p7wNXOAvk3q/DbhTypyyEiIrBrpQmNh4haW1tj+vTpOHLkCC5duoTJkydj7dq1aN26NR566CFd1EgtjIXcDI929wUAbOHEdiIiybFrpZlmTWgPDg7GG2+8gUWLFsHBwQEHDhzQVl3Uwt2+mPPvl64jq6hC4mqIiFo2dq000+Rw9fvvv2P69Onw9PTEa6+9hvHjx+P48eParI1asNautujd2gVKEdjKhe1ERJJh10pzGoWr9PR0vPvuuwgODsagQYOQnJyMVatWISsrC1999RX69OmjqzqpBZrcq657tS02A7VKUeJqiIhaJnatNKf2hPahQ4fi8OHDcHNzw7Rp0zBz5ky0a9dOl7VRCzeikyccd5sjs6gCRy9fx8B26l0hgIiItENZ7xqC7FqpS+1wZW1tje3bt2PUqFEcEEp6YWUuw7huPtjwZwq2xKQzXBER6dkv59i1agq1Twvu3r0bjzzyiCpYXblyBQcOHEBFRd1iY1HkaRvSvok962Ze/ZqYi+ulvBg4EZG+KJUiPjv0d9fK0ZpdK3VpvKC9oKAAgwcPRtu2bfHQQw8hOzsbAPDUU09h/vz5Wi+QWrZQLweE+TmhRili+2nOUiMi0hd2rZpO43A1b948mJubIy0tDTY2Nqr7J06ciP3792u1OCIAmHyre7UlJp0dUiIiPWDXqnk0DlcHDx7Ehx9+CF9f33r3t2nTBqmpqVorjOi20WHesLWQ4Vp+Gf66Vih1OUREJo9dq+bROFyVlZXV61jdlp+fD0tLS60URXQnW0s5Rod5AwA2R3NiOxGRLrFr1Xwah6sBAwZg06ZNqr8FQYBSqcSKFSswaNAgrRZHdNukWzOvfjmXg+LyaomrISIyXexaNZ/aoxhuW7FiBQYOHIjY2FgoFAq89tprOH/+PAoLCzmhnXQmzNcR7T3tcTGnFDvjMjCjX2upSyIiMjnsWmmHxp2rDh064MyZM+jVqxeGDh2KsrIyjB8/HnFxcQgODtZFjUQQBAGTbi1s38yF7UREOsGulXZo3LkCAE9PT7z99tvaroWoQeO6+eL9fRdxMacUCRnF6OrnJHVJREQm486u1cz+rdm1aga1OldnzpyBUqlUe6fnz59HTU1Nk4siuhdHG3M81MkTABe2ExFp2+2ulb2VHE9y6UWzqBWuunXrhoKCArV3GhERgbQ0fvmR9t1e2L47IQs3qxjgiYi0of41BNm1ai61TguKooh///vf9xzBcC8KhaJZRRHdT+/WLmjtaotr+WXYm5ClCltERNR0+87l4FIuu1baola4GjBgAJKSktTeaUREBKytrZtcFNH9CIKAiT398MG+i/ghJp3hioiomZRKEZ/9dgkAu1baola4OnLkiI7LIFLfo+G++PhAEhLSi3AhuwShXg5Sl0REZLTYtdI+jUcxEEnNzd4SQ0I9ANRdb5CIiJqGXSvdYLgiozSpV93Mqx2nM1BZXStxNURExoldK91guCKj9EAbN/g4WaOksgb7z+VIXQ4RkdFh10p3GK7IKMnMBET28AUA/MCZV0REGmPXSnc0DldlZWW6qINIYxN6+MFMAP66Voir129KXQ4RkdG4s2s1sx+7Vtqmcbjy8PDAzJkzcezYMV3UQ6Q2bydrPNjWDQCwJZYL24mI1HVn12pmf3attE3jcPXDDz+guLgYgwcPRtu2bfHBBx8gKytLF7URNWpiz7o5V9tPZUBRo/4lmoiIWqo7p7Gza6UbGoer0aNHY/v27cjKysKcOXPwww8/ICAgAKNGjcKOHTt4TUHSq8Gh7nC1s0T+TQWiLuZKXQ4RkcHbfz4HSbml7FrpUJMXtLdq1Qrz5s1DQkICVq5ciUOHDuGxxx6Dt7c3Fi9ejPLycm3WSXRP5jIzPNb99sJ2nhokImqIUinis0PsWulak8NVTk4OPvroI4SGhuKNN97AY489ht9++w2ffvopdu7cibFjx2qxTKL7m9SzbubVH5evI+MGQz0R0f2wa6Ufal3+5k47duzA+vXrceDAAXTo0AHPP/88pkyZAicnJ9U2Xbt2Rbdu3bRZJ9F9BbraIiKoFU5cLcC22AzMG9pW6pKIiAwOu1b6o3Hn6sknn4S3tzeOHz+O+Ph4zJ07t16wAoCgoCAsWrRIWzUSNer2xPZtsemoVYoSV0NEZHjYtdIfjTtX2dnZsLGxaXAba2trLFmypMlFEWlqeEdPONmYI6u4En9cvo5B7dylLomIyGCwa6VfGneuampqUFJSctettLQUCoVCFzUSNcrKXIZx3XwAAJs5sZ2IqB52rfRL43Dl5OQEZ2fnu25OTk6wtrZGQEAAlixZAqWSM4dIvybdmnn124U85JVWSlwNEZFhYNdK/zQOVxs2bIC3tzfefPNN7Nq1Czt37sSbb74JHx8frF69Gk8//TT++9//4oMPPtBFvUT31c7THt38nVCjFLH9VKbU5RARGQRV18pSjpm8hqBeaLzmauPGjfjkk08wYcIE1X1jxoxB586dsXbtWvz222/w9/fHsmXL8Oabb2q1WKLGTOrph7i0ImyJScOzDwZBEASpSyIiksyd09if7N8ajjbsWumDxp2rEydO3HPMQrdu3XDixAkAQP/+/ZGWxnUvpH+junjD1kKGlIJynLhaIHU5RESSOnA+Bxdz6rpWs9i10huNw5Wvry/WrVt31/3r1q2Dn1/dz+ELCgrg7Ozc/OqINGRrKceYrnUL27fEcGI7EbVcSqWIz9i1koTGpwU//vhjREZGYt++fejZsycEQUBMTAwuXryIH3/8EQAQExODiRMnar1YInVM6umHH6LTsO9cDt4uV8DJxkLqkoiI9I5dK+loHK7GjBmDS5cuYc2aNUhKSoIoihg5ciR27dqFwMBAAMCcOXO0XSeR2rr4OiLUywEXskuwMy4TT/IfFSJqYdi1kpZG4aq6uhrDhg3D2rVrsXz5cl3VRNQsgiBgUk8/LNl9Hpuj0zGjbyAXthNRi8KulbQ0WnNlbm6Oc+fO8YuKDN7Yrj6wlJshKbcUcelFUpdDRKQ37FpJT+MF7dOmTbvngnYiQ+JoY46HO3sBALZEc2E7EbUc7FpJT+M1VwqFAv/3f/+HX3/9FT169ICtrW29x1euXKm14oiaY2JPP+yIy8SeM1n49+gOsLPU+ONORGRU2LUyDBp/25w7dw7h4eEAgEuXLtV7jKcLyZD0au2CIDdbXL1eht3xWXi8t7/UJRER6RS7VoZB43B1+PBhXdRBpHW3F7a//8tFbIlJY7giIpNWr2vVL5BdKwlpvObqtitXruDAgQOoqKgAAIiiqLWiiLRlfLgvzGUCEjKKkZhVInU5REQ6czDx767VzP7sWklJ43BVUFCAwYMHo23btnjooYeQnZ0NAHjqqacwf/58rRdI1ByudpYY2sEDALAlhpdkIiLTpFSK+M+hv7tWHJ4sLY3D1bx582Bubo60tDTY2Nio7p84cSL279+v1eKItGFiz7rTgTvjMlFZXStxNURE2seulWHROFwdPHgQH374IXx9fevd36ZNG6SmpmqtMCJteSDEFT5O1iiprMEvZ7OlLoeISKvYtTI8GoersrKyeh2r2/Lz82FpaamVooi0ycxMwMSedRcV38yLORORiWHXyvBoHK4GDBiATZs2qf4WBAFKpRIrVqzAoEGDtFockbZE9vCFmQBEXytE8vWbUpdDRKQV7FoZJo1HMaxYsQIDBw5EbGwsFAoFXnvtNZw/fx6FhYU4fvy4LmokajYvR2sMbOeOqIt5+M+hy1g1uZvUJRERNRu7VoZJ485Vhw4dcObMGfTq1QtDhw5FWVkZxo8fj7i4OAQHB+uiRiKteHFwG5gJwJ6ELOw9kyV1OUREzcKuleFq0vVAPD098fbbb2u7FiKd6urnhOcHhWBV1BW8tescegW6wN3BSuqyiIiahF0rw9WkcFVUVITo6Gjk5eVBqVTWe2zatGlaKYxIF174VxtEXczD+awSvLHjLNZN78HLNhGR0WHXyrBpHK727NmDJ554AmVlZbC3t6/3xSQIAsMVGTQLuRk+ndgVo1YdQ9TFPGyJScekXrwsDhEZl4OJubiYUwo7dq0MksZrrubPn4+ZM2eitLQURUVFuHHjhupWWFioixqJtKqthz1eHdYWAPDu3kSkFZRLXBERkfr+eQ1Bdq0Mj8bhKjMzEy+++OI9Z13p0rJly9C3b1/Y2NjAycmpwW0LCgrg6+sLQRBQVFTU4LbJyckYN24c3Nzc4ODggAkTJiA3N1f1eEpKCmbNmoXWrVvD2toawcHBWLJkCRQKhRbeFUllVv8g9Ap0QZmiFq9uS0CtktfGJCLjcDAxFxeyS2BnKccsdq0Mksbhavjw4YiNjdVFLQ1SKBSIjIzEnDlzGt121qxZ6NKlS6PblZWVYdiwYRAEAVFRUTh+/DgUCgVGjx6tWkt28eJFKJVKrF27FufPn8enn36KNWvW4M0332z2eyLpyMwEfBwZBlsLGaJTCvH1sWtSl0RE1Ch2rYyDxmuuHn74YSxYsACJiYno3LkzzM3N6z0+ZswYrRV3p9u/TtywYUOD261evRpFRUVYvHgx9u3b1+C2x48fR0pKCuLi4uDg4AAAWL9+PVxcXBAVFYUhQ4ZgxIgRGDFihOo5QUFBSEpKwurVq/Hxxx83702RpPxb2eDfozrgjR1nseJAEga0dUM7T3upyyIiui92rYyDxuFq9uzZAIB33nnnrscEQUBtrXQXxk1MTMQ777yDv/76C1evXm10+6qqKgiCUO+yPVZWVjAzM8OxY8cwZMiQez6vuLgYLi4uje67qqpK9XdJSYma74L0aWJPPxxMzEXUxTy8sjUeO5/rBwu5xg1dIiKdY9fKeGj8LaJUKu97kzJYVVVVYfLkyVixYgX8/dX79VefPn1ga2uL119/HeXl5SgrK8OCBQugVCqRnX3vC/wmJydj1apVePbZZxvc9/Lly+Ho6Ki6+fn5afyeSPcEQcAH4zvDycYc57NKsCrqstQlERHdE7tWxkPS/4m+dOlSCILQ4E3d9V0LFy5EaGgopkyZovbru7m5Ydu2bdizZw/s7Ozg6OiI4uJihIeHQyaT3bV9VlYWRowYgcjISDz11FON1lNcXKy6pafzgsGGyt3BCsvGdgYAfHEkGXFpNySuiIioPnatjIva4eqhhx5CcXGx6u9ly5bV+yVeQUEBOnTooNGLz507FxcuXGjw1qlTJ7X2FRUVhW3btkEul0Mul2Pw4MEAAFdXVyxZsuS+zxs2bBiSk5ORl5eH/Px8fPPNN8jMzETr1vX/V0FWVhYGDRqEiIgIfPnll43WY2lpCQcHh3o3MlwPd/HCI129UasUMX9rAioU0nVhiYj+iV0r46L2mqsDBw7UW0P04YcfYvLkyaqxCDU1NUhKStLoxV1dXeHq6qrRc+5n+/btqKioUP0dExODmTNn4ujRo2pd8/B2HVFRUcjLy6u3MD8zMxODBg1C9+7dsX79epiZcU2OKXpnTCecvFqAq/ll+HD/RSwd01HqkoiI2LUyQmqHK1EUG/xb19LS0lBYWIi0tDTU1tYiPj4eABASEgI7O7u7AlR+fj4AIDQ0VBUAMzMzMXjwYGzatAm9evUCUPfrwNDQULi5ueHEiRN46aWXMG/ePLRr1w5AXcdq4MCB8Pf3x8cff4zr16+rXsPT01PH75r0ydHGHB89FobpX0djw58pGNrBA/1CtBP+iYiail0r49OkawtKYfHixdi4caPq727dugEADh8+jIEDB6q1j+rqaiQlJaG8/O+J3ElJSVi4cCEKCwsRGBiIRYsWYd68earHDx48iCtXruDKlSvw9fWttz99B0zSvQfbumFKH398ezINr25LwP6XB8DR2rzxJxIR6YAoivjvra7VjL7sWhkLQVQzIchkMuTk5MDNzQ0AYG9vjzNnzqjWJuXm5sLb21vSXwwaspKSEtWCea6/MmzlihqM/OwoUgvKMT7cBysndJW6JCJqoQ6cz8Ez35yCnaUcR18bBGdbhit9a8r3t0anBWfMmKGaCVVZWYlnn30Wtra2AFBvPRaRMbOxkGPlhDBErjmBHaczMayDB0Z08pK6LCJqYURRxGeH/u5aMVgZD7XD1fTp0+v9fa+RB9OmTWt+RUQGoHuAC555MBirjyTjzZ3n0D3ABW72lo0/kYhISw4m5iKRa62Mktrhav369bqsg8jgvDykDQ5fzMPFnFK8ufMsvpzaHYIgSF0WEbUAldW1WHnwEgB2rYwRZwoQ3YelXIZPJ3aFuUzAr4m5+PFUhtQlEVELIIoi3tp1Dkm5pXC2MWfXyggxXBE1INTLAfOGtgUAvL0nERk3yht5BhFR82w6kYofT2XATABWTQ5n18oIMVwRNeKZAcHoHuCMm1U1eHVbApRKjuAgIt3462oB3t2bCABYODIU/dtw1p4xYrgiaoTMTMAnkWGwNpfh5NVCbPgzReqSiMgEZRVV4LnvTqNGKeKRrt546gGeDjRWDFdEagh0tcWih0MBAB/uv4greaUSV0REpqSyuhbPfHMKBWUKdPBywAfju/AHNEaM4YpITU/09seAtm6oqlHila0JqK5VSl0SEZkAURTx5s6zOJtZDGcbc6yd2h3WFjKpy6JmYLgiUpMgCPjo0S5wsJLjTEYx/nf4itQlEZEJ2PBnCnaczoTMTMD/Hg+Hn4uN1CVRMzFcEWnA09EK747tBAD4POoKzmQUSVsQERm1E8kFeO/nCwCAhSPboy8vFm8SGK6INDQmzBsPd/FCjVLEK1sTUFnN62kSkeYyiyrw/PenUasUMbarN+dZmRCGKyINCYKA9x7pBDd7S1zJu4kVB5KkLomIjEzdAvZYFJYp0NHbAcu5gN2kMFwRNYGzrQU+fLQzAGDdsWv4Mzlf4oqIyFiIoog3d5zFucwSuNhacAG7CWK4Imqif7X3wORefgCABdvOoLSyWuKKiMgYrD+egh1xdQvYP3+8G3yduYDd1DBcETXDooc7wM/FGplFFaqpykRE9/Nncj6W/VK3gP3Nh0LRN5gL2E0RwxVRM9hZyvFJZFcIArA1NgO/JuZKXRIRGaiMG+WY+30capUixnfzwcx+gVKXRDrCcEXUTL1au2D2A0EAgIU7zqDgZpXEFRGRoalQ1E1gLyxToLOPI94f35kL2E0YwxWRFrwytC3aetgh/6YCi3aegyjy4s5EVEcURSzccQbns0rQytYCa6Z2h5U5F7CbMoYrIi2wMpdh5YSukJsJ2H8+B7viM6UuiYgMxLpj17ArPuvWAvZw+DhZS10S6RjDFZGWdPJxxMtD2gAAFv90HllFFRJXRERS+/NKPpbvuwgAeOvhUEQEt5K4ItIHhisiLXr2wWB09XNCaWUNFvyYAKWSpweJWqr0wnLVBPbx4T6Y0TdQ6pJITxiuiLRILjPDJxPCYGVuhuNXCvDNyVSpSyIiCdxewH6jvLpuAfs4LmBvSRiuiLQs2M0OC0eGAgCW77uAq9dvSlwREemTKIp4ffsZJGbXLWBfywXsLQ7DFZEOTO0TgP4hrqisVuKVrQmoqVVKXRIR6cn/Hb2G3QlZkJsJ+OKJcHhzAXuLw3BFpANmZgI+eqwL7K3kiE8vwprfk6UuiYj04NjlfCzfVzeB/d+jOqB3EBewt0QMV0Q64u1kjbfHdAQA/OfQZZzLLJa4IiLSpfTCcsz94TSUIvBYd19MiwiQuiSSCMMVkQ6N6+aDER09UaMUMX9rAiqra6UuiYh0oEJRi6e/OYWi8mqE+TrivbGduIC9BWO4ItIhQRCwbFwnuNpZICm3FJ/+eknqkohIy0RRxGvbz+BCdglc7TiBnRiuiHSulZ0llo/vAgD48uhVRF8rlLgiItKmr45exR7VAvbu8HLkAvaWjuGKSA+GdvBAZHdfiCIwf1s8blbVSF0SEWnB0cvX8cGtCeyLR3dAr9YuEldEhoDhikhPFo/uAB8na6QXVmDZzxekLoeImimtoBxzv4+DUgQiu/tiah8uYKc6DFdEemJvZY6PI8MAAD9Ep+HwxTyJKyKipipX1ODpb2JRXFGNMD8nvMsF7HQHhisiPYoIboWZ/VoDAF7bfgY3yhQSV0REmhJFEQt+PIOLOaVwtbPE2ilcwE71MVwR6dlrI9oh2M0W10ur8NZP56Quh4g0tPaPq/j5TDbkZgJWTwmHp6OV1CWRgWG4ItIzK3MZPp3YFTIzAT+fycbuhCypSyIiNf1x6To+2l+3gH3JmI7oGcgF7HQ3hisiCXTxdcIL/woBAPx71znkFFdKXBERNSa1oAwv/FC3gH1iDz9M6e0vdUlkoBiuiCTy/KAQdPZxRHFFNV7bfgaiKEpdEhHdR7miBs98cwrFFdXo6ueEd8Z25AJ2ui+GKyKJmMvM8OnEMFjIzfDHpev47q80qUsionu4cwG7m70l1kzpDks5F7DT/TFcEUkoxN0er49oDwBY9vMFpOSXSVwREf3Tmt/rFrCbywSsfoIL2KlxDFdEEnuybyD6BLmgoroW87cloFbJ04NEhuJIUh4+OlC3gH3pmI7owQXspAaGKyKJmZkJ+DgyDHaWcpxKvYEv/7gqdUlEBCAlvwwv/hAHUQQm9/LDE705gZ3Uw3BFZAB8nW2weHQHAMDKX5NwIbtE4oqIWrayqroJ7CWVNQj3d8LSMR2lLomMCMMVkYGI7O6LIaEeqK4VMW9LPKpqaqUuiahFqlvAnoBLuTfhZm+J1VzAThpiuCIyEIIgYPn4znCxtcDFnFJ8duiy1CURtUhfHEnGL2dzYC4TsGZKODwcuICdNMNwRWRA3Owt8f64TgCANb8n41RqocQVEbUsh5Py8PHBJADA22M6oXsAF7CT5hiuiAzMiE5eGN/NB0oReGVrAsoVNVKXRNQipOSX4SXVAnZ/PM4J7NREDFdEBmjJmI7wcrRCakE5lv9yUepyiEzezbsWsHeQuiQyYgxXRAbI0docKx4LAwB8czIVv1+6LnFFRKZLFEW8urVuAbs7J7CTFjBcERmo/m1cMT2ibq7Oaz8moLi8WuKKiEzT/w5fwf7zObCQmWHN1O5w5wJ2aiaGKyID9sbIUAS52iK3pAqLd5+TuhwikxN1MRef/HoJAPDOIx0R7u8scUVkChiuiAyYtYUMn0wIg5kA/BSfhZ/PZEtdEpHJuJZfhpc2x0MUgSd6+2NSLy5gJ+1guCIycN38nfH8oBAAwFu7ziKvpFLiioiM382qGjy9KRallTXoEeCMJaM5gZ20h+GKyAi88K826OjtgBvl1Xhjx1mIIi/uTNRUSqWI+VvjcTnvJjwcLPHFlHBYyPl1SNrDTxOREbCQm2HlhK6wkJkh6mIetsSkS10SkdH63+ErOHA+t24B+5TucLfnAnbSLoYrIiPRztMerw5vCwB4d28i0gvLJa6IyPj8diEXKw/VLWB/d2xHdOMCdtIBhisiIzKrfxB6BbqgTFGL+VsTUKvk6UEidSVfv4mXby1gn9LHHxN7cgE76QbDFZERkZkJ+DgyDDYWMkSnFOLrY9ekLonIKJRWVtctYK+qQc9AZywexQXspDsMV0RGxr+VDf49qu7SHCsOJCEpp1TiiogMm1Ip4pWtCUi+XgZPByt88UR3LmAnneKni8gITerph0Ht3KCoVeKVrfFQ1CilLonIYK2KuoJfE3NhIa+bwO5mbyl1SWTiGK6IjJAgCPjw0S5wsjHH+awSfB51WeqSiAzSocRcfHprAft7Yzuhq5+TtAVRi8BwRWSk3B2s8N7YTgCA/x1JRlzaDYkrIjIsyddvYt6WeADAtIgATOjhJ21B1GIwXBEZsVFdvDEmzBu1ShHztyagQlErdUlEBuHOBey9Al1U6xSJ9IHhisjIvfNIR3g4WOJqfhk+3H9R6nKIJKdUipi3pW4Bu5ejFf73RDjMZfy6I/3hp43IyDnZWOCjx8IAABv+TMHxK/kSV0Qkrc9+u4xDF24tYJ/CBeykfwxXRCbgwbZueKJ33UDEV7cloLiiWuKKiKRx8HwOPvut7gcey8Z2QhgXsJMEGK6ITMSbD4UioJUNsosr8fae81KXQ6R3V/Ju4pWtCQCAGX0DEckF7CQRhisiE2FrKccnkWEwE4AdpzOx/1yO1CUR6U3JrQXsN6tq0Lu1CxY9HCp1SdSCMVwRmZAegS545sFgAMCinWeRf7NK4oqIdE+pFDFvczyu5pfBmwvYyQDw00dkYl4e0gbtPe1RUKbAwh1nIYq8uDOZtv/8dhm/XcxTTWB3teMCdpKW0YSrZcuWoW/fvrCxsYGTk1OD2xYUFMDX1xeCIKCoqKjBbZOTkzFu3Di4ubnBwcEBEyZMQG5ubr1txowZA39/f1hZWcHLywtTp05FVlZWM98RkW5YymVYOaErzGUCfk3MxY+nMqQuiUhnDpzPwX9vLWBfPq4zuvg6SVsQEYwoXCkUCkRGRmLOnDmNbjtr1ix06dKl0e3KysowbNgwCIKAqKgoHD9+HAqFAqNHj4ZS+fe12gYNGoStW7ciKSkJ27dvR3JyMh577LFmvR8iXerg7YB5Q9sCAN7ek4iMG+USV0SkfZdzS/HKrQnsM/oG4tHuvtIWRHSLIBrZOYMNGzbg5Zdfvm9HavXq1diyZQsWL16MwYMH48aNG/ftdB08eBAjR47EjRs34ODgAAC4ceMGXFxc8Ouvv2LIkCH3fN7u3bsxduxYVFVVwdzcXK26S0pK4OjoiOLiYtVrEelSrVLEhLUncCr1BiKCWuG7p3rDzEyQuiwirSiuqMbY/x3Htfwy9G7tgm+f6s11VqQTTfn+NqlPYmJiIt555x1s2rQJZmaNv7WqqioIggBLy7/Pz1tZWcHMzAzHjh2753MKCwvx3XffoW/fvg0Gq6qqKpSUlNS7EemTzEzAJ5FhsDaX4cTVAmz4M0Xqkoi0om4Cezyu5ZfBx8kaX3ABOxkYk/k0VlVVYfLkyVixYgX8/f3Vek6fPn1ga2uL119/HeXl5SgrK8OCBQugVCqRnZ1db9vXX38dtra2aNWqFdLS0vDTTz81uO/ly5fD0dFRdfPz47wV0r9AV1u8eesn6R/uv4greaUSV0TUfJ8euoSoi3mwlJth7dTuaMUF7GRgJA1XS5cuhSAIDd5iY2PV2tfChQsRGhqKKVOmqP36bm5u2LZtG/bs2QM7OztV2y88PBwymazetgsWLEBcXBwOHjwImUyGadOmNfgrrIULF6K4uFh1S09PV7suIm2a0tsfA9q6oapGiVe2JqC6Vtn4k4gM1P5z2VgVdQUA8MGjndHJx1HiiojuJpfyxefOnYtJkyY1uE1gYKBa+4qKisLZs2fx448/AoAq+Li6umLRokV4++237/m8YcOGITk5Gfn5+ZDL5XBycoKnpydat25dbztXV1e4urqibdu2CA0NhZ+fH06ePImIiIh77tfS0rLe6UYiqQiCgI8e7YJhn/6OMxnF+OJwMl4a0kbqsog0djm3FPNvTWCf2a81xnXjAnYyTJKGq9uBRRu2b9+OiooK1d8xMTGYOXMmjh49iuDgYLVqAepCWl5eHsaMGXPfbW8Ht6oqDmgk4+DpaIV3x3bCS5vjsSrqMga1d+NP1smoFFdU4+lvTqFMUYuIoFZ486H2UpdEdF+ShitNpKWlobCwEGlpaaitrUV8fDwAICQkBHZ2dncFqPz8fABAaGio6teCmZmZGDx4MDZt2oRevXoBANavX4/Q0FC4ubnhxIkTeOmllzBv3jy0a9cOABAdHY3o6Gj0798fzs7OuHr1KhYvXozg4OD7dq2IDNGYMG8cPJ+Ln89m45WtCdj7Qn9YmcsafyKRxGqVIl7eHKdawP75490g5wJ2MmBGE64WL16MjRs3qv7u1q0bAODw4cMYOHCgWvuorq5GUlISysv/nvmTlJSEhQsXorCwEIGBgVi0aBHmzZunetza2ho7duzAkiVLUFZWBi8vL4wYMQKbN2/maT8yKoIg4N2xnRCdUogreTex4kAS/j2qg9RlETXq018v4XDSdS5gJ6NhdHOujBXnXJGhiLqYi5kbYiEIwPdP9UFEcCupSyK6r31nszHnu9MAgP9M7Iqx3XwkrohamhY/54qIGvev9h6Y1NMPogi8ui0BpZXVUpdEdE9JOaWYv61uAftT/VszWJHRYLgiaoHeGtUBvs7WyCyqwLt7E6Uuh+guxeXVePqbWJQratEvpBXeGMkF7GQ8GK6IWiA7Szk+iQyDIABbYzNwKDG38ScR6UmtUsSLm+OQWlAOHydrrJoczgXsZFT4aSVqoXoHtcLsB4IAAG/sOIOCmxwtQobhk4NJ+P3SdViZm+HLad3hYmshdUlEGmG4ImrBXhnaFm097JB/U4FFO881eNUBIn345Ww2vjiSDAD48NEu6OjNCexkfBiuiFowK3MZVk7oCrmZgP3nc7ArPlPqkqgFS8opxau3FrDPfqA1HunKBexknBiuiFq4Tj6OeGlw3eVwFv90HllFFY08g0j7isoVmL3p7wXsr4/gAnYyXgxXRIQ5A4MR5ueE0soavPbjGSiVPD1I+lOrFPHCD3FIKyyHr7M1PucCdjJy/PQSEeQyM6ycEAYrczMcu5KPb/9KlbokakFWHEjC0cv5dQvYp/aAMxewk5FjuCIiAECwmx3euHUq5v1fLuDq9ZsSV0Qtwd4zWVjze90C9o8eC0MHb17BgowfwxURqUyLCES/kFaorFbila0JqKlVSl0SmbAL2SVYsO0MAOCZAUEYE+YtcUVE2sFwRUQqZmYCVjwWBnsrOeLTi/Dcd6dxIbtE6rLIBBWVK/D0N7GoqK7FA21c8RoXsJMJYbgionq8nazx3thOEATgYGIuRn52FDM3xCAmpVDq0shE3F7Anl5YAT8Xa6ya3A0yM0Hqsoi0Ri51AURkeB7p6oNgNzus+T0Zv5zNRtTFPERdzEOPAGc8NygYg9q5QxD4ZUhN89GBizh6OR/W5jJ8ObUHnGy4gJ1MiyByJLNelJSUwNHREcXFxXBw4IJNMh4p+WVY+8dVbD+VAcWtNVjtPe3x7IPBGNXFiz+ZJ43sScjCCz/EAQA+f7wbRnXhOisybE35/ma40hOGKzJ2uSWV+PrYNXx7MhVliloAgK+zNZ4ZEITIHn6wMpdJXCEZKqVSxLEr+dh0IgW/XcyDKALPPBiEhSNDpS6NqFEMVwaM4YpMRXF5Nb45mYL1x1NQUKYAALjaWeDJfq0xpU8AHK3NJa6QDEVJZTV+jM3AtydTcTW/THX/uG4++DgyjOusyCgwXBkwhisyNRWKWmyNTceXf1xF5q1L5thbyvFEnwDM7B8Id3sriSskqVzMKcGmE6nYFZeJ8ltdTntLOR7t7oupEQEIdrOTuEIi9TFcGTCGKzJV1bVK7D2ThdVHknEpt27wqIXcDJHdffH0gCAEtLKVuELSh+paJX5NzMXGP1Pw17W/f1na1sMO0yICMa6bD2wt+RsqMj4MVwaM4YpMnVIpIupiHr44cgWn04oAAGYCMKqLN559MJiTt01UXmklNken47u/UpFbUgUAkJkJGN7RA9MiAtG7tQt/WUpGjeHKgDFcUUshiiKirxVi9e/JOJJ0XXX/wHZueG5gCHoGOvPL1siJoojTaTew8c9U7DuXjerauq8RVzsLPN7LH5N7+8PL0VriKom0g+HKgDFcUUt0PqsYa36/ip/PZEF561+a7gHOeG5g3awsMy5oNioVilrsTsjExj9TkXjH5P7uAc6YFhGAEZ08YSnnr0bJtDBcGTCGK2rJUvLL8OXRq/gx9u9ZWe087PHswCCM7uLNWVkGLrWgDN+eTMXW2AwUV1QDACzlZnikqzemRQSik4+jxBUS6Q7DlQFjuCIC8koqse74NXx3Mg03q2oA1M3KenpAECZwVpZBUSpF/H75Or45kYrDSXWzqQDAz8UaU/sEILK7H5xtOVmdTB/DlQFjuCL6W3FFNb49mYqvj11TzcpqZWuBmf05K0tqxeXV2HYqHd+eTEVKQbnq/gfbumF63wA82Nad86moRWG4MmAMV0R3q6yuxbbYdKz94yoybtTNyrKzlOOJPv6Y1a813B04K0tfErNK8M3JFOyMy0Rldd2pW3srOSb08MOUPgFo7cqRGtQyMVwZMIYrovurqVVi75lsrD6SjKTcUgB1s7Ie6+6Lpx8IQiC/2HVCUaPEgfM52HQiBTEpN1T3t/e0x7SIQIzt5g0bC86mopaN4cqAMVwRNU6pFHE4KQ9fHEnGqdS6L3szAXiosxfmDAxGR28unNaG3JJKfP9XGr6PTsP10rrZVHIzAcM7eWJ6RCDHZRDdgeHKgDFcEWkm+lohVh+5gsN3zMp6sK0bnhsYjF4cTKkxURQRk3IDm06kYP+5HNTcmo3hZm+Jx3v54/He/vDgaViiuzBcGTCGK6KmScwqwZrfk7H3jllZ4f5OmDMwBIPbc1ZWY8oVNdgVl4VNJ1JwMadUdX/PQGdMiwjE8I6esJBzFAbR/TBcGTCGK6LmSSsox9o/krHtVAYUNXULrtt62OHZB4MxOswb5pyVVU9Kfhm+OZmKrbHpKK2sG3thZW6Gcd18MLVPIC9HRKQmhisDxnBFpB15pZVYfzwF355IRemtWVk+Tn/PyrK2aLmzsmqVIo4k5WHTiVT8funv06kBrWxUs6kcbTjmgkgTDFcGjOGKSLtKKv+elZV/8+9ZWU/2C8TUPoEtKkQUlSuwNTYd35xMRXph3UgLQQAGtXPH1IgAPNjGjadPiZqI4cqAMVwR6UZldS22ncrAl38kq4KFrYUMT/QJwKz+rU16kfa5zGJsOpGCn+KzUHXrVKmDlRwTe9bNpgpoxREWRM3FcGXAGK6IdKumVomfz9bNyrq9cNtCZoZHu/vgmQHBJjMrS1GjxL5z2dh0IlU1rgIAOng5YHrfAIwJ82nRp0aJtI3hyoAxXBHphyjWzcpafSRZNRjTTABGdvbCnAeDjfYiw9nFFfj+rzT8EJ2O/Jt/z6Z6qLMXpkUEoHsAZ1MR6QLDlQFjuCLSv5iUQqw+koyoi3mq+wa0dcOcB4PRJ8jwZ2WJooi/rhVi04kUHDifi9pbsyg8HCzxRO8ATOrlB3d70z3tSWQIGK4MGMMVkXQuZJdg7e/J2HMmWxVQuvk7Yc6DwRgS6mFwi73LqmqwMy4Tm06k4FLuTdX9vVu7YFpEIIZ19ODoCSI9YbgyYAxXRNJLKyjHV0evYktsumpWVhv3ullZY7pKPysr+fpNfHMiFdtPZajGTFibyzAu3AfTIgLQ3pP/dhDpG8OVAWO4IjIc10ursP74NXzzj1lZsx9ojYk9/fW6ILxWKSLqYh42nUjB0cv5qvtbu9piap8APNrdF47WLWesBJGhYbgyYAxXRIanpLIa351Mw7pj11SLxF1sLfBk30BMi9DtrKzCMgW2xKTj25OpyCz6ezbV4PbumBYRiP4hrgZ3upKoJWK4MmAMV0SGq7K6Fj+eysCXf1xFWmE5gLpZWY/39sdTDwRpdVbWmYwibDqRit0JWapTk0425nWzqXoHwM/FRmuvRUTNx3BlwBiuiAzf/WZljQ/3wdMDghDkZtek/VbV1OKXs9nY+Gcq4tOLVPd38nHAtIhAjAnzhpU5Z1MRGSKGKwPGcEVkPERRxJFL17H6cDKiUwoB1J2ye6iTF+YMVH9WVlZRBb77KxWbo9NRUFZ3iR5zmYCHO3thWt9AdPNzMvhxEEQtHcOVAWO4IjJOsbdmZf12x6ysB9q4Ys7AYEQEtborHImiiBPJBdh4IgW/Jubi1uQHeDpYYUoff0zs6Q83e0t9vgUiagaGKwPGcEVk3C7mlGDNkfqzsrr6OWHOwGAMDfVAeXUtdpzOwKYTqbiS9/dsqoigVpgWEYChHTwg52wqIqPDcGXAGK6ITEN64a1ZWTHpqoslB7ayQf5NBW7eGutgYyHDo+G+mBoRgLYe9lKWS0TNxHBlwBiuiExL/s26WVmbTqSitLIuVAW52WJanwCM7+4LByvOpiIyBQxXBozhisg0lVZW49fEXHg4WKFv8N1rsIjIuDXl+1uu45qIiEyavZU5xof7Sl0GERkQrq4kIiIi0iKGKyIiIiItYrgiIiIi0iKGKyIiIiItYrgiIiIi0iKGKyIiIiItYrgiIiIi0iKGKyIiIiItYrgiIiIi0iKGKyIiIiItYrgiIiIi0iKGKyIiIiItYrgiIiIi0iK51AW0FKIoAgBKSkokroSIiIjUdft7+/b3uDoYrvSktLQUAODn5ydxJURERKSp0tJSODo6qrWtIGoSxajJlEolsrKyYG9vD0EQNHpuSUkJ/Pz8kJ6eDgcHBx1VaDx4POrj8aiPx+NvPBb18XjUx+NR3/2OhyiKKC0thbe3N8zM1FtNxc6VnpiZmcHX17dZ+3BwcOB/AHfg8aiPx6M+Ho+/8VjUx+NRH49Hffc6Hup2rG7jgnYiIiIiLWK4IiIiItIihisjYGlpiSVLlsDS0lLqUgwCj0d9PB718Xj8jceiPh6P+ng86tPm8eCCdiIiIiItYueKiIiISIsYroiIiIi0iOGKiIiISIsYroiIiIi0iOHKgGRmZmLKlClo1aoVbGxs0LVrV5w6dUr1+NKlS9G+fXvY2trC2dkZQ4YMwV9//SVhxbrV2PG40zPPPANBEPCf//xHv0XqUWPHY8aMGRAEod6tT58+ElasW+p8Pi5cuIAxY8bA0dER9vb26NOnD9LS0iSqWLcaOx7//Gzcvq1YsULCqnWjsWNx8+ZNzJ07F76+vrC2tkZoaChWr14tYcW61djxyM3NxYwZM+Dt7Q0bGxuMGDECly9flrBi3QkMDLznfwfPP/88gLpp7EuXLoW3tzesra0xcOBAnD9/XuPX4YR2A3Hjxg3069cPgwYNwr59++Du7o7k5GQ4OTmptmnbti0+//xzBAUFoaKiAp9++imGDRuGK1euwM3NTbridUCd43Hbrl278Ndff8Hb21v/heqJusdjxIgRWL9+vepvCwsLPVeqH+ocj+TkZPTv3x+zZs3C22+/DUdHR1y4cAFWVlbSFa4j6hyP7Ozses/Zt28fZs2ahUcffVTP1eqWOsdi3rx5OHz4ML799lsEBgbi4MGDeO655+Dt7Y1HHnlEuuJ1oLHjIYoixo4dC3Nzc/z0009wcHDAypUrMWTIECQmJsLW1lbaN6BlMTExqK2tVf197tw5DB06FJGRkQCAjz76CCtXrsSGDRvQtm1bvPfeexg6dCiSkpJgb2+v/guJZBBef/11sX///ho9p7i4WAQgHjp0SEdVSUfd45GRkSH6+PiI586dEwMCAsRPP/1U98VJQJ3jMX36dPGRRx7RT0ESU+d4TJw4UZwyZYqeKpJWU/79eOSRR8R//etfOqpIOuoci44dO4rvvPNOvfvCw8PFt956S5elSaKx45GUlCQCEM+dO6e6r6amRnRxcRG/+uorfZQoqZdeekkMDg4WlUqlqFQqRU9PT/GDDz5QPV5ZWSk6OjqKa9as0Wi/PC1oIHbv3o0ePXogMjIS7u7u6NatG7766qv7bq9QKPDll1/C0dERYWFheqxUP9Q5HkqlElOnTsWCBQvQsWNHiSrVD3U/H0eOHIG7uzvatm2L2bNnIy8vT4Jqda+x46FUKvHzzz+jbdu2GD58ONzd3dG7d2/s2rVLuqJ1SNN/P3Jzc/Hzzz9j1qxZeqxSP9Q5Fv3798fu3buRmZkJURRx+PBhXLp0CcOHD5eoat1p7HhUVVUBQL2Orkwmg4WFBY4dO6b3evVJoVDg22+/xcyZMyEIAq5du4acnBwMGzZMtY2lpSUefPBB/Pnnn5rtXMshkJrI0tJStLS0FBcuXCiePn1aXLNmjWhlZSVu3Lix3nZ79uwRbW1tRUEQRG9vbzE6OlqiinVLnePx/vvvi0OHDhWVSqUoiqJJd67UOR6bN28W9+7dK549e1bcvXu3GBYWJnbs2FGsrKyUsHLdaOx4ZGdniwBEGxsbceXKlWJcXJy4fPlyURAE8ciRIxJXr33q/vtx24cffig6OzuLFRUVeq5U99Q5FlVVVeK0adNEAKJcLhctLCzETZs2SVi17jR2PBQKhRgQECBGRkaKhYWFYlVVlbh8+XIRgDhs2DCJq9etLVu2iDKZTMzMzBRFURSPHz8uAlD9fdvs2bM1PhYMVwbC3NxcjIiIqHffCy+8IPbp06fefTdv3hQvX74snjhxQpw5c6YYGBgo5ubm6rNUvWjseMTGxooeHh71/iMw5XCl7ufjTllZWaK5ubm4fft2XZend40dj8zMTBGAOHny5HrbjB49Wpw0aZLe6tQXTT8f7dq1E+fOnauP0vROnWOxYsUKsW3btuLu3bvFhIQEcdWqVaKdnZ3466+/6rtcnVPneMTGxophYWEiAFEmk4nDhw8XR44cKY4cOVLf5erVsGHDxFGjRqn+vh2usrKy6m331FNPicOHD9do3zwtaCC8vLzQoUOHeveFhobe9csmW1tbhISEoE+fPli3bh3kcjnWrVunz1L1orHjcfToUeTl5cHf3x9yuRxyuRypqamYP38+AgMDJahYt9T9fPzzOQEBASb5q5/GjoerqyvkcrnGx8xYafL5OHr0KJKSkvDUU0/pqzy9auxYVFRU4M0338TKlSsxevRodOnSBXPnzsXEiRPx8ccfS1GyTqnz2ejevTvi4+NRVFSE7Oxs7N+/HwUFBWjdurW+y9Wb1NRUHDp0qN5/B56engCAnJycetvm5eXBw8NDo/0zXBmIfv36ISkpqd59ly5dQkBAQIPPE0VRdc7clDR2PKZOnYozZ84gPj5edfP29saCBQtw4MABKUrWqaZ8PgoKCpCeng4vLy9dl6d3jR0PCwsL9OzZs0n/TRkjTT4f69atQ/fu3U1yrSbQ+LGorq5GdXU1zMzqf/3JZDIolUq91akvmnw2HB0d4ebmhsuXLyM2Ntbkfjl5p/Xr18Pd3R0PP/yw6r7WrVvD09MTv/76q+o+hUKB33//HX379tXsBbTRWqPmi46OFuVyubhs2TLx8uXL4nfffSfa2NiI3377rSiKdacDFy5cKJ44cUJMSUkRT506Jc6aNUu0tLSs9ysPU9HY8bgXUz4t2NjxKC0tFefPny/++eef4rVr18TDhw+LERERoo+Pj1hSUiJx9dqnzudjx44dorm5ufjll1+Kly9fFletWiXKZDLx6NGjElauG+r+91JcXCza2NiIq1evlqhS3VPnWDz44INix44dxcOHD4tXr14V169fL1pZWYlffPGFhJXrhjrHY+vWreLhw4fF5ORkcdeuXWJAQIA4fvx4CavWrdraWtHf3198/fXX73rsgw8+EB0dHcUdO3aIZ8+eFSdPnix6eXlp/O8ow5UB2bNnj9ipUyfR0tJSbN++vfjll1+qHquoqBDHjRsnent7ixYWFqKXl5c4ZswYk13QLooNH497MeVwJYoNH4/y8nJx2LBhopubm2hubi76+/uL06dPF9PS0iSsWLfU+XysW7dODAkJEa2srMSwsDBx165dElSqH+ocj7Vr14rW1tZiUVGRBBXqT2PHIjs7W5wxY4bo7e0tWllZie3atRM/+eQT1Y9jTE1jx+Ozzz4TfX19Vf92vPXWW2JVVZVE1eregQMHRABiUlLSXY8plUpxyZIloqenp2hpaSkOGDBAPHv2rMavIYiiKGqpy0ZERETU4nHNFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERmBvXv3IigoCD179sSlS5fqPVZaWoqePXuia9eu6Ny5M7766iuJqiQiAODlb4iIjEDbtm3xxRdf4Pz58zhx4gQ2b96seqy2thZVVVWwsbFBeXk5OnXqhJiYGLRq1UrCiolaLnauiKhFGDhwIF5++WWpy7ivgQMHQhAECIKA+Pj4ux53dXVFSEgIgoKC4OjoWO8xmUwGGxsbAEBlZSVqa2tx5/9unjFjhmrfu3bt0uXbICIwXBGRgRs9ejSGDBlyz8dOnDgBQRBw+vRpPVelG7Nnz0Z2djY6dep012NPPvkkgoODMXv2bLz//vt3PV5UVISwsDD4+vritddeg6urq+qxzz77DNnZ2TqtnYj+xnBFRAZt1qxZiIqKQmpq6l2Pff311+jatSvCw8MlqEz7bGxs4OnpCblcXu/+mpoafPbZZ3jttddQWloKZ2fnu57r5OSEhIQEXLt2Dd9//z1yc3NVjzk6OsLT01Pn9RNRHYYrIjJoo0aNgru7OzZs2FDv/vLycmzZsgWzZs0CAFRVVeHFF1+Eu7s7rKys0L9/f8TExNx3v4GBgfjPf/5T776uXbti6dKlqr8HDhyIF154AS+//DKcnZ3h4eGBL7/8EmVlZXjyySdhb2+P4OBg7Nu3r95+RFHERx99hKCgIFhbWyMsLAw//vhjk4/BmjVrEBQUhOeffx7l5eW4fPnyfbf18PBAly5d8McffzT59YioeRiuiMigyeVyTJs2DRs2bKi3jmjbtm1QKBR44oknAACvvfYatm/fjo0bN+L06dMICQnB8OHDUVhY2KzX37hxI1xdXREdHY0XXngBc+bMQWRkJPr27YvTp09j+PDhmDp1KsrLy1XPeeutt7B+/XqsXr0a58+fx7x58zBlyhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg=="},"metadata":{}}],"execution_count":10},{"id":"fed42763-52cf-44c2-961d-6d00918ba6df","cell_type":"markdown","source":"## FluxJobExecutor\nIn analogy to the [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) the [FluxJobExecutor](https://executorlib.readthedocs.io/en/latest/3-hpc-job.html#flux) can be applied to distribute simulation within a given queuing system allocation. The calculation of the bulk modulus with [gpaw](https://gpaw.readthedocs.io) is implemented in the same way.","metadata":{}},{"id":"516a91d4-0be6-47a6-9c9c-f5b0082bfee7","cell_type":"code","source":"from executorlib import FluxJobExecutor","metadata":{"trusted":true},"outputs":[],"execution_count":11},{"id":"21bdd0d42f9806e4","cell_type":"markdown","source":"The for each strained structure a calculation task is submitted to the `FluxJobExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.","metadata":{}},{"id":"2b0c559b-a117-4766-b679-314ab9e65e97","cell_type":"code","source":"future_dict = {}\nwith FluxJobExecutor() as exe:\n for k, v in task_loop_dict.items():\n future_dict[k] = exe.submit(\n evaluate_with_gpaw, \n task_dict=v, \n kpts=(3, 3, 3), \n encut=300,\n resource_dict={\"cores\": 2},\n )\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n result_dict = {\n k: f.result() \n for k, f in tqdm(future_dict.items())\n }\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ3C5brSik jovyan python R 2 1 3.107s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5brSij jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSQ jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSP jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA4 jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA3 jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5XQUsh jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ4Px1bKu jovyan executorl+ CA 2 1 4.656m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"100%|██████████| 7/7 [01:15<00:00, 10.72s/it]\n"},{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ3C5brSik jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5brSij jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSQ jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSP jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA4 jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA3 jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5XQUsh jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ4Px1bKu jovyan executorl+ CA 2 1 4.656m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"Exception ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\n"}],"execution_count":12},{"id":"ca353da1941c1c7c","cell_type":"markdown","source":"The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.","metadata":{}},{"id":"8bb73863-bfde-4e96-9323-5330b2051632","cell_type":"code","source":"fit_dict = analyse_results_for_energy_volume_curve(\n output_dict={\"energy\": result_dict},\n task_dict=task_dict,\n fit_type=\"polynomial\",\n fit_order=3,\n)","metadata":{"trusted":true},"outputs":[],"execution_count":13},{"id":"3d4189b5c74ba2a2","cell_type":"markdown","source":"The final energy volume curve plot summarizes the results of this calculation.","metadata":{}},{"id":"95000e45-dd86-4659-90f4-f2d144477703","cell_type":"code","source":"plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\nplt.xlabel(\"Volume [$\\AA^3$]\")\nplt.ylabel(\"Energy [eV]\")\nplt.legend()","metadata":{"trusted":true},"outputs":[{"execution_count":14,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg=="},"metadata":{}}],"execution_count":14},{"id":"8e67f9a4-d449-420c-9f62-72d106d18636","cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]} \ No newline at end of file From c5da5c1c73623f602b7a0d7d366f3944b8dfe1a9 Mon Sep 17 00:00:00 2001 From: jan-janssen Date: Sat, 4 Oct 2025 10:20:30 +0200 Subject: [PATCH 4/7] look for gpaw files --- .github/workflows/pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index a318d862..69112c75 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -186,6 +186,7 @@ jobs: shell: bash -l {0} timeout-minutes: 20 run: | + ls /home/runner/miniconda3/envs/test/lib/python3.12/site-packages/gpaw cp .ci_support/mpi4pywrapper.py /home/runner/miniconda3/envs/test/lib/python3.12/site-packages/gpaw flux start flux resource list flux start papermill notebooks/5-1-gpaw.ipynb notebooks/5-1-gpaw-out.ipynb -k python3 From 39f74923c2467796695e83c0fd106cd993f4f034 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Sat, 4 Oct 2025 10:28:48 +0200 Subject: [PATCH 5/7] Update 5-1-gpaw.ipynb --- notebooks/5-1-gpaw.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebooks/5-1-gpaw.ipynb b/notebooks/5-1-gpaw.ipynb index 2f7a6248..f7b81c40 100644 --- a/notebooks/5-1-gpaw.ipynb +++ b/notebooks/5-1-gpaw.ipynb @@ -1 +1 @@ -{"metadata":{"kernelspec":{"name":"flux","display_name":"Flux","language":"python"},"language_info":{"name":"python","version":"3.10.16","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":5,"nbformat":4,"cells":[{"id":"745ca7d3-5046-4a8c-a370-d9d05b77a1b7","cell_type":"markdown","source":"# GPAW\nThe [gpaw](https://gpaw.readthedocs.io/index.html) density-functional theory (DFT) simulation code provides a Python interface supporting the [message passing interface (MPI) for Python - mpi4py](https://mpi4py.readthedocs.io) for parallelization. So `executorlib` is used to orchestrate multiple [gpaw](https://gpaw.readthedocs.io/index.html) simulation each using multiple CPU cores for parallelization. These kind of hierarchical workflows are one of the core strength of `executorlib`. While the same could be achieved by writing the whole simulation workflow using [mpi4py](https://mpi4py.readthedocs.io) this would drastically increase the complexity. With `executorlib` the user can quickly up-scale their simulation workflow without the need to address the parallel execution explicitly, rather the parallelization is introduced on a per-function level, by submitting the functions to the `FluxClusterExecutor` or `FluxJobExecutor`.","metadata":{}},{"id":"21852c01-efda-43fe-add9-d08123a82995","cell_type":"code","source":"import subprocess\nfrom ase.build import bulk\nfrom atomistics.workflows import (\n analyse_results_for_energy_volume_curve,\n get_tasks_for_energy_volume_curve,\n)\nimport matplotlib.pyplot as plt\nimport pprint\nfrom tqdm import tqdm\nfrom time import sleep","metadata":{"trusted":true},"outputs":[{"name":"stderr","output_type":"stream","text":"/srv/conda/envs/notebook/lib/python3.10/site-packages/atomistics/workflows/__init__.py:77: UserWarning: PhonopyWorkflow(), QuasiHarmonicWorkflow(), get_band_structure(), get_dynamical_matrix(), get_hesse_matrix(), get_thermal_properties_for_harmonic_approximation(), get_tasks_for_harmonic_approximation(), analyse_results_for_harmonic_approximation(), get_tasks_for_quasi_harmonic_approximation(), analyse_results_for_quasi_harmonic_approximation(), get_thermal_properties_for_quasi_harmonic_approximation(), plot_band_structure() and plot_dos() are not available as the import of the module named 'structuretoolkit' failed.\n raise_warning(module_list=phonopy_workflows, import_error=e)\n"}],"execution_count":1},{"id":"e15eed0da3c6547b","cell_type":"markdown","source":"The only function which is executed using [mpi4py](https://mpi4py.readthedocs.io) is the `evaluate_with_gpaw()` function:","metadata":{}},{"id":"aa435760-390f-4eff-88f4-96b15777de3e","cell_type":"code","source":"def evaluate_with_gpaw(task_dict, kpts, encut):\n import os\n os.environ[\"OMP_NUM_THREADS\"] = \"1\"\n os.environ[\"GPAW_MPI4PY\"] = \"1\"\n\n from mpi4py import MPI\n from gpaw import GPAW, PW\n from gpaw.mpi4pywrapper import MPI4PYWrapper\n\n structure = task_dict[\"calc_energy\"].copy()\n structure.calc = GPAW(\n xc=\"PBE\",\n mode=PW(encut),\n kpts=kpts,\n communicator=MPI4PYWrapper(MPI.COMM_WORLD),\n )\n return structure.get_potential_energy()","metadata":{"trusted":true},"outputs":[],"execution_count":2},{"id":"e9936ca22151d490","cell_type":"markdown","source":"As a first step of the workflow the equilibrium structure of four Aluminium atoms is strained by 5%.","metadata":{}},{"id":"a1d4e9a1-7275-4d9a-b038-db27185f00ae","cell_type":"code","source":"task_dict = get_tasks_for_energy_volume_curve(\n structure=bulk(\"Al\", a=4.05, cubic=True),\n num_points=7,\n vol_range=0.05,\n axes=(\"x\", \"y\", \"z\"),\n)\ntask_dict","metadata":{"trusted":true},"outputs":[{"execution_count":3,"output_type":"execute_result","data":{"text/plain":"{'calc_energy': {np.float64(0.95): Atoms(symbols='Al4', pbc=True, cell=[3.9813426685908118, 3.9813426685908118, 3.9813426685908118]),\n np.float64(0.9666667): Atoms(symbols='Al4', pbc=True, cell=[4.004490529815683, 4.004490529815683, 4.004490529815683]),\n np.float64(0.9833333): Atoms(symbols='Al4', pbc=True, cell=[4.027373829573266, 4.027373829573266, 4.027373829573266]),\n np.float64(1.0): Atoms(symbols='Al4', pbc=True, cell=[4.05, 4.05, 4.05]),\n np.float64(1.0166667): Atoms(symbols='Al4', pbc=True, cell=[4.072376144702493, 4.072376144702493, 4.072376144702493]),\n np.float64(1.0333333): Atoms(symbols='Al4', pbc=True, cell=[4.0945090584006865, 4.0945090584006865, 4.0945090584006865]),\n np.float64(1.05): Atoms(symbols='Al4', pbc=True, cell=[4.1164052451001565, 4.1164052451001565, 4.1164052451001565])}}"},"metadata":{}}],"execution_count":3},{"id":"8bf60b7b0f5af31a","cell_type":"markdown","source":"The resulting dictionary of structures `task_dict` is transformed to simplify the parallel execution:","metadata":{}},{"id":"73ad1043-eacd-4758-a7b4-f64969beabab","cell_type":"code","source":"task_loop_dict = {k: {\"calc_energy\": v} for k, v in task_dict[\"calc_energy\"].items()}","metadata":{"trusted":true},"outputs":[],"execution_count":4},{"id":"af5ba456f3fafd39","cell_type":"markdown","source":"The status of the flux cluster is validated using the `flux resource list` command and the `flux jobs -a` command, just to highlight flux was initialized correctly and has access to the available resources.","metadata":{}},{"id":"8a93aa2b-2bce-4c87-943c-38364a4324ee","cell_type":"code","source":"pprint.pp(subprocess.check_output([\"flux\", \"resource\", \"list\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' STATE NNODES NCORES NGPUS NODELIST',\n ' free 1 24 0 jupyter-jan-janssen-exe-q4mqmd0j',\n ' allocated 0 0 0 ',\n ' down 0 0 0 ',\n '']\n"}],"execution_count":5},{"id":"f7f072d5-ea3b-43f5-9ec1-0ea1036d7e25","cell_type":"code","source":"pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO', '']\n"}],"execution_count":6},{"id":"62c7297b-efae-4950-a513-3b84345ad7b4","cell_type":"markdown","source":"## FluxClusterExecutor\nThe [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) is used in this demonstration primarily because flux can be installed on any workstation for testing. The [SlurmClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#slurm) could be used analogously.","metadata":{}},{"id":"9cd01061-c84a-4d8d-80e1-c269af3d8c29","cell_type":"code","source":"from executorlib import FluxClusterExecutor","metadata":{"trusted":true},"outputs":[],"execution_count":7},{"id":"2670c218fbde5b02","cell_type":"markdown","source":"The for each strained structure a calculation task is submitted to the `FluxClusterExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.","metadata":{}},{"id":"11d7a7f3-5fbf-4377-ac98-71cd29caf433","cell_type":"code","source":"future_dict = {}\nwith FluxClusterExecutor() as exe:\n for k, v in task_loop_dict.items():\n future_dict[k] = exe.submit(\n evaluate_with_gpaw, \n task_dict=v, \n kpts=(3, 3, 3), \n encut=300,\n resource_dict={\"cores\": 2},\n )\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n result_dict = {\n k: f.result() \n for k, f in tqdm(future_dict.items())\n }\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ2gSToFV jovyan executorl+ R 2 1 0.199s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ R 2 1 0.948s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ R 2 1 1.309s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"100%|██████████| 7/7 [04:36<00:00, 39.49s/it] \n"},{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ4Px1bKu jovyan executorl+ R 2 1 4.572m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"}],"execution_count":8},{"id":"8c80e3bcb483b069","cell_type":"markdown","source":"The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.","metadata":{}},{"id":"5a5822c7-5ab6-483b-a3ab-8cef5fcaf269","cell_type":"code","source":"fit_dict = analyse_results_for_energy_volume_curve(\n output_dict={\"energy\": result_dict},\n task_dict=task_dict,\n fit_type=\"polynomial\",\n fit_order=3,\n)","metadata":{"trusted":true},"outputs":[],"execution_count":9},{"id":"571b7c25dcca8bb","cell_type":"markdown","source":"The final energy volume curve plot summarizes the results of this calculation.","metadata":{}},{"id":"d420b4c5-1a2f-4290-ba81-0c7f7bdf7ef3","cell_type":"code","source":"plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\nplt.xlabel(\"Volume [$\\AA^3$]\")\nplt.ylabel(\"Energy [eV]\")\nplt.legend()","metadata":{"trusted":true},"outputs":[{"execution_count":10,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"iVBORw0KGgoAAAANSUhEUgAAAlcAAAG2CAYAAABSy6M+AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXxxJREFUeJzt3Xd8U3XbP/DPadK9S/emLaOsQpkFRLjZCghoGcoSREVxIKIi3oADUVG8vfEW0AcZLoYMAWWIBQUE20JbRqFAoXvRlg660jbn+aMQqUCbtElOkn7er1dev6fJycmV84vkc1/nm+sIoiiKICIiIiKtMJO6ACIiIiJTwnBFREREpEUMV0RERERaxHBFREREpEUMV0RERERaxHBFREREpEUMV0RERERaxHBFREREpEVyqQtoKZRKJbKysmBvbw9BEKQuh4iIiNQgiiJKS0vh7e0NMzP1elIMV3qSlZUFPz8/qcsgIiKiJkhPT4evr69a2zJc6Ym9vT2Auv/PcXBwkLgaIiIiUkdJSQn8/PxU3+PqYLjSk9unAh0cHBiuiIiIjIwmS3q4oJ2IiIhIixiuiIiIiLSI4YqIiIhIi7jmioiIDJooiqipqUFtba3UpZAJkslkkMvlWh2TxHBFREQGS6FQIDs7G+Xl5VKXQibMxsYGXl5esLCw0Mr+GK6IiMggKZVKXLt2DTKZDN7e3rCwsOAQZtIqURShUChw/fp1XLt2DW3atFF7UGhDGK6IiMggKRQKKJVK+Pn5wcbGRupyyERZW1vD3NwcqampUCgUsLKyavY+uaCdiIgMmjY6CUQN0fZnjJ9YIiIiIi1iuCIiIiLSIoYrIiIiIi1iuCIiItKBAQMGQBAE1c3FxQVjx47F9evXdf7agYGB9V779u35559XbbN8+XL07NkT9vb2cHd3x9ixY5GUlNTgfpcuXXrXPj09PTXe5l5ycnLw0ksvISQkBFZWVvDw8ED//v2xZs2aeqM4ZsyYodqvubk5goKC8Oqrr6KsrEzDo6Q7/LWgERNFEbviM7EtNgP/mdQV7vbN/4UDERE1nyiKiI+Px8cff4wnnngCSqUSZ8+eRWRkJN577z189tlnOn39mJiYekNXz507h6FDhyIyMlJ13++//47nn38ePXv2RE1NDRYtWoRhw4YhMTERtra29913x44dcejQIdXfMpmsSdvc6erVq+jXrx+cnJzw/vvvo3PnzqipqcGlS5fw9ddfw9vbG2PGjFFtP2LECKxfvx7V1dU4evQonnrqKZSVlWH16tUNHxg9YbgyYoIgYNOJVMSlFWH7qUzMGRgsdUlERATg8uXLKC0txcCBA1VdG29vbwQHB+ulw+Lm5lbv7w8++ADBwcF48MEHVfft37+/3jbr16+Hu7s7Tp06hQEDBtx333K5vNFOlDrb3Om5556DXC5HbGxsvWDXuXNnPProoxBFsd72lpaWqv0//vjjOHz4MHbt2oXVq1dj//79eO+993Du3DnIZDJERETgs88+Q3Cw/r4jeVrQyE3u6Q8A2BKTdteHj4jI1IiiiHJFjd5vmv77eurUKVhYWKBz584AgKqqKnz11Ve4fPkynn322Uaf//7778POzq7B29GjR9WqRaFQ4Ntvv8XMmTMbHMJaXFwMAHBxcWlwf5cvX4a3tzdat26NSZMm4erVq03a5raCggIcPHgQzz///H07Zo0Nj7W2tkZ1dTUAoKysDK+88gpiYmLw22+/wczMDOPGjYNSqWxwH9rEzpWRe7iLF97Zm4iUgnKcvFqIiOBWUpdERKQzFdW16LD4gN5fN/Gd4bCxUP8r8/Tp06iurlYFlfLycri7u+PAgQPo0aMHAGDv3r2YP38+lEolXn/9dTz11FOq5z/77LOYMGFCg6/h4+OjVi27du1CUVERZsyYcd9tRFHEK6+8gv79+6NTp0733a53797YtGkT2rZti9zcXLz33nvo27cvzp8/j1atWqm9zZ2uXLkCURTRrl27eve7urqisrISAPD888/jww8/vGdN0dHR+P777zF48GAAwKOPPlrv8XXr1sHd3R2JiYkNvjdtYrgycraWcowO88YP0WnYHJPGcEVEZABOnTqFCRMm4L333gMAXL9+HQsXLsQzzzyDhIQEVZg5fPgwHBwcEB4ejvHjx6vCmIuLS6MdJHWtW7cOI0eOhLe39323mTt3Ls6cOYNjx441uK+RI0eq/u/OnTsjIiICwcHB2LhxI1555RW1t7mXf3anoqOjoVQq8cQTT6CqqqreY3v37oWdnR1qampQXV2NRx55BKtWrQIAJCcn49///jdOnjyJ/Px8VccqLS2N4YrUN7mXH36ITsO+czl4u1wBJxvtXHiSiMjQWJvLkPjOcEleVxNxcXF49913ERISAgAICQnBq6++itGjRyM1NRU5OTno2LGjqvv00EMP4cCBA5g8eTKAutOC77//foOvsW/fPjzwwAMNbpOamopDhw5hx44d993mhRdewO7du/HHH3/A19dXk7cJW1tbdO7cGZcvX27yNiEhIRAEARcvXqx3f1BQEIC6U37/NGjQIKxevRrm5ubw9vaGubm56rHRo0fDz88PX331Fby9vaFUKtGpUycoFAqN3ltzMFyZgM4+jujg5YDE7BLsjMvEk/1aS10SEZFOCIKg0ek5KVy9ehVFRUUIDw+/636ZTAYXFxecPn263mk9X19fZGZmqv7W1mnB24vUH3744bseE0URL7zwAnbu3IkjR46gdWvNvzuqqqpw4cKFBkNeY9u0atUKQ4cOxeeff44XXnihwV8q3mZra6sKrncqKCjAhQsXsHbtWtXrNdaN0wXD/oSSWgRBwKReflj803lsjk7HjL6BvHI8EZFETp06BUEQ4OHhgZycHJSVleHo0aNYsmQJnn32WTg5Od1zgfyd/25r47SgUqnE+vXrMX36dMjld3/dP//88/j+++/x008/wd7eHjk5OQAAR0dHWFtb4/PPP8fOnTvx22+/qZ5zu/vm7++PvLw8vPfeeygpKcH06dM12uafvvjiC/Tr1w89evTA0qVL0aVLF5iZmSEmJgYXL15E9+7d1XrPzs7OaNWqFb788kt4eXkhLS0Nb7zxhrqHTGsYrkzEI119sOznC0jKLUV8ehG6+TtLXRIRUYt0+vRpiKKo6qw4OzujTZs2WLlypSpg+Pj41OtUZWRkoHfv3lqt49ChQ0hLS8PMmTPv+fjtmVADBw6sd//69esxY8YM5OfnIzk5ud5jGRkZmDx5MvLz8+Hm5oY+ffrg5MmTCAgI0GibfwoODkZcXBzef/99LFy4EBkZGbC0tESHDh3w6quv4rnnnlPrPZuZmWHz5s148cUX0alTJ7Rr1w7//e9/73qPuiaI/P2+XpSUlMDR0RHFxcVwcHDQyWu8siUeO+IyMbGHHz58rItOXoOISF8qKytx7do1tG7dGlZWpjUkuaamBqGhoThy5IhqQfvJkyfv+Ws60r2GPmtN+f7mnCsTMqlX3cyrPWeycLOqRuJqiIjofuRyOT755BMMGjQI3bp1w4IFCxisTAhPC5qQnoHOCHKzxdXrZdiTkIXJt8IWEREZnjFjxtS7pAuZDnauTIggCJjU0w8AsDk6TeJqiIiIWiaGKxMzPtwX5jIBCRnFSMwqkbocIiKiFofhysS42lliaAcPAHXXGyQiIiL9YrgyQZNuXcx5Z1wmKqtrJa6GiIioZWG4MkH9Q1zh42SNksoa7DuXLXU5RETNwolBpGva/owxXJkgMzMBE28tbP8hOl3iaoiImub29eLKy8slroRM3e3P2J3XKGwOjmIwUZE9fPGfQ5cQfa0QV6/fRJCbndQlERFpRCaTwcnJCXl5eQAAGxsbXtqLtEoURZSXlyMvLw9OTk6QyTS7QPf9MFyZKC9Hawxq547fLuZhS0w6Fj4UKnVJREQa8/T0BABVwCLSBScnJ9VnTRsYrkzYxJ5++O1iHn48lYH5w9rBQs6zwERkXARBgJeXF9zd3VFdXS11OWSCzM3Ntdaxuo3hyoT9q7073O0tkVdahd8u5GJkZy+pSyIiahKZTKb1L0AiXWErw4TJZWZ4rLsvAOCHGC5sJyIi0geGKxN3+1eDRy9fR3ohf3FDRESkawxXJi6glS36hbSCKALbTmVIXQ4REZHJY7hqASbemti+LTYdtUoO4yMiItIlhqsWYHhHDzjbmCO7uBJ/XLoudTlEREQmjeGqBbCUyzA+/NbC9mhezJmIiEiXGK5aiEm3Frb/djEPeSWVEldDRERkuhiuWog2HvboHuCMWqWIH09zYTsREZGuMFy1ILfHMmyJSYeSC9uJiIh0guGqBRnVxQv2lnKkFpTj5NUCqcshIiIySQxXLYiNhRxjunoDADZzYjsREZFOMFy1MJNuzbzafy4HN8oUEldDRERkehiuWpjOvo7o6O0ARa0SO+MypS6HiIjI5BhNuFq2bBn69u0LGxsbODk5NbhtQUEBfH19IQgCioqKGtw2OTkZ48aNg5ubGxwcHDBhwgTk5ubW2+bGjRuYOnUqHB0d4ejoiKlTpza6X0M2qVdd92pzTBpEkQvbiYiItMlowpVCoUBkZCTmzJnT6LazZs1Cly5dGt2urKwMw4YNgyAIiIqKwvHjx6FQKDB69GgolUrVdo8//jji4+Oxf/9+7N+/H/Hx8Zg6dWqz3o+UHunqDStzM1zKvYnTaUVSl0NERGRS5FIXoK63334bALBhw4YGt1u9ejWKioqwePFi7Nu3r8Ftjx8/jpSUFMTFxcHBwQEAsH79eri4uCAqKgpDhgzBhQsXsH//fpw8eRK9e/cGAHz11VeIiIhAUlIS2rVr1/w3p2cOVuZ4uLM3tp/OwJaYNHQPcJa6JCIiIpNhNJ0rdSQmJuKdd97Bpk2bYGbW+FurqqqCIAiwtLRU3WdlZQUzMzMcO3YMAHDixAk4OjqqghUA9OnTB46Ojvjzzz8b3HdJSUm9myGZ1Ktu5tWehGyUVlZLXA0REZHpMJlwVVVVhcmTJ2PFihXw9/dX6zl9+vSBra0tXn/9dZSXl6OsrAwLFiyAUqlEdnY2ACAnJwfu7u53Pdfd3R05OTn33ffy5ctVa7QcHR3h5+fXtDemIz0CnBHiboeK6lrsTsiSuhwiIiKTIWm4Wrp0KQRBaPAWGxur1r4WLlyI0NBQTJkyRe3Xd3Nzw7Zt27Bnzx7Y2dnB0dERxcXFCA8Ph0wmU20nCMJdzxVF8Z7331lPcXGx6paeblhzpQRBUF1vcAtnXhEREWmNpGuu5s6di0mTJjW4TWBgoFr7ioqKwtmzZ/Hjjz8CgOpXcK6urli0aJFqzdY/DRs2DMnJycjPz4dcLoeTkxM8PT3RunVrAICnp+ddvx4EgOvXr8PDw+O+9VhaWtY73WiIxnXzwYf7L+JMRjHOZxWjo7ej1CUREREZPUnDlaurK1xdXbWyr+3bt6OiokL1d0xMDGbOnImjR48iODhYrVqAupCWl5eHMWPGAAAiIiJQXFyM6Oho9OrVCwDw119/obi4GH379tVK7VJpZWeJYR098fOZbGyJScc7jzBcERERNZfRrLlKS0tDfHw80tLSUFtbi/j4eMTHx+PmzZsAgODgYHTq1El1u915Cg0NVa2ZyszMRPv27REdHa3a7/r163Hy5EkkJyfj22+/RWRkJObNm6f6FWBoaChGjBiB2bNn4+TJkzh58iRmz56NUaNGGeUvBf/p9qnBnXGZqFDUSlwNERGR8TOaUQyLFy/Gxo0bVX9369YNAHD48GEMHDhQrX1UV1cjKSkJ5eXlqvuSkpKwcOFCFBYWIjAwEIsWLcK8efPqPe+7777Diy++iGHDhgEAxowZg88//7yZ78gw9At2hZ+LNdILK/DL2Ww82t1X6pKIiIiMmiByRLdelJSUqBbM356pZSg+j7qMjw9eQq9AF2x9NkLqcoiIiAxGU76/jea0IOnOY939YCYA0SmFuJJ3U+pyiIiIjBrDFcHT0Qr/al+3Lm1LTJrE1RARERk3hisCAEzqWTd4dfvpTChqlI1sTURERPfDcEUAgIHt3ODhYInCMgV+Tbx7rhcRERGph+GKAABymRkiu9eNZdjMU4NERERNxnBFKhN61IWrY1fykV5Y3sjWREREdC8MV6Ti38oG/UNcIYrA1lheb5CIiKgpGK6onkm96rpX22IzUFPLhe1ERESaYriieoZ28ICzjTlySirx+6XrUpdDRERkdBiuqB5LuQyPhtddAueHaJ4aJCIi0hTDFd3l9qnBw0l5yC2plLgaIiIi48JwRXcJcbdHjwBn1CpF/HgqQ+pyiIiIjArDFd3TpF51E9u3xKRDqeS1vYmIiNTFcEX39FBnT9hbypFWWI4TVwukLoeIiMhoMFzRPdlYyPFIN28AwA/RnNhORESG68D5HHz/V5rBXBuX4Yru6/bFnA+ez0VhmULiaoiIiO5WU6vE8l8u4M2dZ/HdX6lSlwOA4Yoa0MnHEZ18HKCoVWLHaS5sJyIiw/NTfBZSCsrhYmuhuoyb1BiuqEG3u1ebY9IhilzYTkREhqOmVolVUZcBAE8PCIKtpVziiuowXFGDHunqDWtzGa7k3cTptBtSl0NERKRyZ9dqap8AqctRYbiiBtlbmePhLl4AOLGdiIgMh6F2rQCGK1LD5FsT2/eeyUJJZbXE1RARERlu1wpguCI1hPs7I8TdDpXVSuyOz5K6HCIiauHu7FrNfsCwulYAwxWpQRAETOpZ173aHMOZV0REJK3bXStnG3NMizCsrhXAcEVqGh/uCwuZGc5lluBcZrHU5RARUQtVf61VsMF1rQCGK1KTi60FhnX0AMDuFRERScfQu1YAwxVpYPKtizn/FJeFckWNxNUQEVFLU1OrxOeHrwAw3K4VwHBFGogIagU/F2uUVtXgl7M5UpdDREQtzO6ELFzLLzPorhXAcEUaMDMT/p7Yzos5ExGRHtWttTL8rhXAcEUaeqy7L2RmAmJTb+BybqnU5RARUQthLF0rgOGKNOThYIVB7dwBAFtiOLGdiIh0z5i6VgDDFTXB7Ynt209noKqmVuJqiIjI1BlT1wpguKImeLCtGzwdrHCjvBq/JuZKXQ4REZmwO7tWsw3sGoL3w3BFGpPLzBDZwxcAsJkXcyYiIh2q37UKlLoctTBcUZNM6OEHQQCOXclHWkG51OUQEZEJ+mfXys4IulYAwxU1kZ+LDfqHuAIAtsaye0VERNpnjF0rgOGKmuH2zKttp9JRU6uUuBoiIjIlxtq1AhiuqBmGdvCAi60FckuqcDjputTlEBGRCdlzxji7VgDDFTWDhdwMj4b7AAC28GLORESkJTW1Sqz6zTi7VgDDFTXTxFunBqMu5iGnuFLiaoiIyBTsOZOFq0batQIYrqiZQtzt0CvQBUoR+PEUF7YTEVHzGHvXCmC4Ii2Y2LNuYvuW2HQolaLE1RARkTEz9q4VwHBFWvBQZy/YW8mRXliB48n5UpdDRERGyhS6VgDDFWmBtYUMY7vWLWzfzIs5ExFRE93uWjkZcdcKYLgiLZl062LOB8/noOBmlcTVEBGRsanXtXrAeLtWAMMVaUlHb0d08XVEda2IHaczpS6HiIiMzJ1dq+l9A6Uup1kYrkhrbi9s3xyTBlHkwnYiIlJPrVI0ma4VwHBFWjQmzBvW5jIkXy9DbOoNqcshIiIjsSfBdLpWAMMVaZG9lTlGh3kBADZHc2E7ERE1rlYp4r+/XQZgGl0rgOGKtOz2xPafz2ahuKJa4mqIiMjQmVrXCmC4Ii0L93dCWw87VFYrsTueC9uJiOj+TLFrBTBckZYJgqDqXnHmFRERNcQUu1YAwxXpwPhuPrCQmeF8VgnOZhRLXQ4RERkgU+1aAQxXpAPOthYY0ckTAPBDTJrE1RARkSEy1a4VwHBFOjLp1syr3fFZKFfUSFwNEREZElPuWgEMV6QjfYJaIaCVDW5W1WDvmWypyyEiIgNyZ9dqWkSA1OVoHcMV6YSZmYAJPeq6V1u4sJ2IiG6pVYr4b9TfXSt7K3OJK9I+hivSmcjuvpCZCTiVegOXckulLoeIiAzA3jNZuHrddLtWAMMV6ZC7gxUGt3cHwIntRERU17X67DfT7loBDFekY5N61Z0a3BGXgaqaWomrISIiKbWErhXAcEU69mBbd3g5WqGovBoHzudKXQ4REUmkpXStAIYr0jGZmYDIWwvbN0dz5hURUUvVUrpWAMMV6cGEHr4QBODP5AKkFpRJXQ4REelZS+paAQxXpAe+zjZ4oI0bAI5lICJqiVpS1wpguCI9uT2xfdupDNTUKiWuhoiI9OXOrtVT/VubfNcKYLgiPRkS6oFWtha4XlqFqIt5UpdDRER6crtr5WhtetcQvB+GK9ILC7kZHuvuCwDYzFODREQtQv21Vi2jawUwXJEeTbh1avBIUh6yiyskroaIiHStJXatAIYr0qNgNzv0au0CpQhsi82QuhwiItKhWqWI/7bArhXAcEV6NrnX3xdzVipFiashIiJd2XsmC8ktsGsFMFyRno3s5AUHKzkyiypw7Eq+1OUQEZEOtOSuFWBE4WrZsmXo27cvbGxs4OTk1OC2BQUF8PX1hSAIKCoqanDb5ORkjBs3Dm5ubnBwcMCECROQm1v/Mi2avDY1zMpchnHdfAAAm2M4sZ2IyBS15K4VYEThSqFQIDIyEnPmzGl021mzZqFLly6NbldWVoZhw4ZBEARERUXh+PHjUCgUGD16NJTKv2cxafLa1LiJPf0BAL8m5iL/ZpXE1RARkTa19K4VAMilLkBdb7/9NgBgw4YNDW63evVqFBUVYfHixdi3b1+D2x4/fhwpKSmIi4uDg4MDAGD9+vVwcXFBVFQUhgwZotFrk3o6eDsgzNcRCRnF2HE6A08PCJa6JCIi0pKW3rUCjKhzpY7ExES888472LRpE8zMGn9rVVVVEAQBlpaWqvusrKxgZmaGY8eONauWqqoqlJSU1LvR3yb1qutebY5JhyhyYTsRkSlg16qOyYSrqqoqTJ48GStWrIC/v79az+nTpw9sbW3x+uuvo7y8HGVlZViwYAGUSiWys7ObVc/y5cvh6Oiouvn5+TVrf6ZmdJg3bCxkuHq9DDEpN6Quh4iItIBdqzqShqulS5dCEIQGb7GxsWrta+HChQgNDcWUKVPUfn03Nzds27YNe/bsgZ2dHRwdHVFcXIzw8HDIZLKmvi1VPcXFxapbejqnkt/JzlKO0V28AQCbo7mwnYjI2N3ZtWop1xC8H0nXXM2dOxeTJk1qcJvAwEC19hUVFYWzZ8/ixx9/BADVqSZXV1csWrRItW7qn4YNG4bk5GTk5+dDLpfDyckJnp6eaN26tfpv5B4sLS3rnW6ku03s5Yctsen4+Ww2lozuCEeblvsfIhGRsavXteoXKHU5kpI0XLm6usLV1VUr+9q+fTsqKv6+pEpMTAxmzpyJo0ePIji48QXTt+uIiopCXl4exowZo5W66P66+TmhnYc9knJL8VNCJqZFBEpdEhERNUGtUsSqqCsA6rpWDi24awUY0a8F09LSUFhYiLS0NNTW1iI+Ph4AEBISAjs7u7sCVH5+3YDK0NBQ1WyqzMxMDB48GJs2bUKvXr0A1P06MDQ0FG5ubjhx4gReeuklzJs3D+3atVP7talpBEHApF5+eHtPIn6ITsfUPgEQBEHqsoiISEM/n83Glbyb7FrdYjThavHixdi4caPq727dugEADh8+jIEDB6q1j+rqaiQlJaG8vFx1X1JSEhYuXIjCwkIEBgZi0aJFmDdvntZfm+5tXDcfLN93EReyS3Amoxhhfk5Sl0RERBr451qrlt61AgBB5O/g9aKkpES1YP72TC2q89LmOPwUn4XJvfyxfHxnqcshIiIN7E7Iwos/xMHR2hxHXx9kcuGqKd/fJjOKgYzXpFsT23fHZ6KsqkbiaoiISF3sWt0bwxVJrk+QCwJb2aBMUYufzzRvvhgREekP11rdG8MVSU4QBNX1Bn/gxZyJiIwCu1b3x3BFBuHR7j6QmwmISytCUk6p1OUQEVEj2LW6P7V+LRgeHq7RTgVBwO7du+Hj49Okoqjlcbe3wuBQdxw4n4vNMWlYMrqj1CUREdF93Nm1msWu1V3UClfx8fGYP3++WjOdRFHEBx98gKqqqmYXRy3LpF7+OHA+FzvjMvH6iPawMm/eJYiIiEg3bnetHKzkmMGu1V3UnnO1YMECuLu7q7XtJ5980uSCqOUa0MYN3o5WyCquxIHzOXikKzufRESGpt5aqweC2LW6B7XWXF27dg1ubm5q7zQxMREBAQFNLopaJpmZgMgefgCAzdG80DURkSH6hV2rRqkVrgICApCQkKD2Tv38/CCT8ZQOaW5CTz8IAnDiagFS8sukLoeIiO7ArpV61P61YHh4OLp3747Vq1ejuLhYlzVRC+bjZI0Bbeq6pFti2b0iIjIkv5zNxmV2rRqldrg6fvw4wsPD8cYbb8DLywtTpkzB4cOHdVkbtVCTe9WdGtwWm4HqWqXE1RAREcCulSbUDlcRERH46quvkJOTg9WrVyMjIwNDhgxBcHAwli1bhoyMDF3WSS3Iv9p7wNXOAvk3q/DbhTypyyEiIrBrpQmNh4haW1tj+vTpOHLkCC5duoTJkydj7dq1aN26NR566CFd1EgtjIXcDI929wUAbOHEdiIiybFrpZlmTWgPDg7GG2+8gUWLFsHBwQEHDhzQVl3Uwt2+mPPvl64jq6hC4mqIiFo2dq000+Rw9fvvv2P69Onw9PTEa6+9hvHjx+P48eParI1asNautujd2gVKEdjKhe1ERJJh10pzGoWr9PR0vPvuuwgODsagQYOQnJyMVatWISsrC1999RX69OmjqzqpBZrcq657tS02A7VKUeJqiIhaJnatNKf2hPahQ4fi8OHDcHNzw7Rp0zBz5ky0a9dOl7VRCzeikyccd5sjs6gCRy9fx8B26l0hgIiItENZ7xqC7FqpS+1wZW1tje3bt2PUqFEcEEp6YWUuw7huPtjwZwq2xKQzXBER6dkv59i1agq1Twvu3r0bjzzyiCpYXblyBQcOHEBFRd1iY1HkaRvSvok962Ze/ZqYi+ulvBg4EZG+KJUiPjv0d9fK0ZpdK3VpvKC9oKAAgwcPRtu2bfHQQw8hOzsbAPDUU09h/vz5Wi+QWrZQLweE+TmhRili+2nOUiMi0hd2rZpO43A1b948mJubIy0tDTY2Nqr7J06ciP3792u1OCIAmHyre7UlJp0dUiIiPWDXqnk0DlcHDx7Ehx9+CF9f33r3t2nTBqmpqVorjOi20WHesLWQ4Vp+Gf66Vih1OUREJo9dq+bROFyVlZXV61jdlp+fD0tLS60URXQnW0s5Rod5AwA2R3NiOxGRLrFr1Xwah6sBAwZg06ZNqr8FQYBSqcSKFSswaNAgrRZHdNukWzOvfjmXg+LyaomrISIyXexaNZ/aoxhuW7FiBQYOHIjY2FgoFAq89tprOH/+PAoLCzmhnXQmzNcR7T3tcTGnFDvjMjCjX2upSyIiMjnsWmmHxp2rDh064MyZM+jVqxeGDh2KsrIyjB8/HnFxcQgODtZFjUQQBAGTbi1s38yF7UREOsGulXZo3LkCAE9PT7z99tvaroWoQeO6+eL9fRdxMacUCRnF6OrnJHVJREQm486u1cz+rdm1aga1OldnzpyBUqlUe6fnz59HTU1Nk4siuhdHG3M81MkTABe2ExFp2+2ulb2VHE9y6UWzqBWuunXrhoKCArV3GhERgbQ0fvmR9t1e2L47IQs3qxjgiYi0of41BNm1ai61TguKooh///vf9xzBcC8KhaJZRRHdT+/WLmjtaotr+WXYm5ClCltERNR0+87l4FIuu1baola4GjBgAJKSktTeaUREBKytrZtcFNH9CIKAiT398MG+i/ghJp3hioiomZRKEZ/9dgkAu1baola4OnLkiI7LIFLfo+G++PhAEhLSi3AhuwShXg5Sl0REZLTYtdI+jUcxEEnNzd4SQ0I9ANRdb5CIiJqGXSvdYLgiozSpV93Mqx2nM1BZXStxNURExoldK91guCKj9EAbN/g4WaOksgb7z+VIXQ4RkdFh10p3GK7IKMnMBET28AUA/MCZV0REGmPXSnc0DldlZWW6qINIYxN6+MFMAP66Voir129KXQ4RkdG4s2s1sx+7Vtqmcbjy8PDAzJkzcezYMV3UQ6Q2bydrPNjWDQCwJZYL24mI1HVn12pmf3attE3jcPXDDz+guLgYgwcPRtu2bfHBBx8gKytLF7URNWpiz7o5V9tPZUBRo/4lmoiIWqo7p7Gza6UbGoer0aNHY/v27cjKysKcOXPwww8/ICAgAKNGjcKOHTt4TUHSq8Gh7nC1s0T+TQWiLuZKXQ4RkcHbfz4HSbml7FrpUJMXtLdq1Qrz5s1DQkICVq5ciUOHDuGxxx6Dt7c3Fi9ejPLycm3WSXRP5jIzPNb99sJ2nhokImqIUinis0PsWulak8NVTk4OPvroI4SGhuKNN97AY489ht9++w2ffvopdu7cibFjx2qxTKL7m9SzbubVH5evI+MGQz0R0f2wa6Ufal3+5k47duzA+vXrceDAAXTo0AHPP/88pkyZAicnJ9U2Xbt2Rbdu3bRZJ9F9BbraIiKoFU5cLcC22AzMG9pW6pKIiAwOu1b6o3Hn6sknn4S3tzeOHz+O+Ph4zJ07t16wAoCgoCAsWrRIWzUSNer2xPZtsemoVYoSV0NEZHjYtdIfjTtX2dnZsLGxaXAba2trLFmypMlFEWlqeEdPONmYI6u4En9cvo5B7dylLomIyGCwa6VfGneuampqUFJSctettLQUCoVCFzUSNcrKXIZx3XwAAJs5sZ2IqB52rfRL43Dl5OQEZ2fnu25OTk6wtrZGQEAAlixZAqWSM4dIvybdmnn124U85JVWSlwNEZFhYNdK/zQOVxs2bIC3tzfefPNN7Nq1Czt37sSbb74JHx8frF69Gk8//TT++9//4oMPPtBFvUT31c7THt38nVCjFLH9VKbU5RARGQRV18pSjpm8hqBeaLzmauPGjfjkk08wYcIE1X1jxoxB586dsXbtWvz222/w9/fHsmXL8Oabb2q1WKLGTOrph7i0ImyJScOzDwZBEASpSyIiksyd09if7N8ajjbsWumDxp2rEydO3HPMQrdu3XDixAkAQP/+/ZGWxnUvpH+junjD1kKGlIJynLhaIHU5RESSOnA+Bxdz6rpWs9i10huNw5Wvry/WrVt31/3r1q2Dn1/dz+ELCgrg7Ozc/OqINGRrKceYrnUL27fEcGI7EbVcSqWIz9i1koTGpwU//vhjREZGYt++fejZsycEQUBMTAwuXryIH3/8EQAQExODiRMnar1YInVM6umHH6LTsO9cDt4uV8DJxkLqkoiI9I5dK+loHK7GjBmDS5cuYc2aNUhKSoIoihg5ciR27dqFwMBAAMCcOXO0XSeR2rr4OiLUywEXskuwMy4TT/IfFSJqYdi1kpZG4aq6uhrDhg3D2rVrsXz5cl3VRNQsgiBgUk8/LNl9Hpuj0zGjbyAXthNRi8KulbQ0WnNlbm6Oc+fO8YuKDN7Yrj6wlJshKbcUcelFUpdDRKQ37FpJT+MF7dOmTbvngnYiQ+JoY46HO3sBALZEc2E7EbUc7FpJT+M1VwqFAv/3f/+HX3/9FT169ICtrW29x1euXKm14oiaY2JPP+yIy8SeM1n49+gOsLPU+ONORGRU2LUyDBp/25w7dw7h4eEAgEuXLtV7jKcLyZD0au2CIDdbXL1eht3xWXi8t7/UJRER6RS7VoZB43B1+PBhXdRBpHW3F7a//8tFbIlJY7giIpNWr2vVL5BdKwlpvObqtitXruDAgQOoqKgAAIiiqLWiiLRlfLgvzGUCEjKKkZhVInU5REQ6czDx767VzP7sWklJ43BVUFCAwYMHo23btnjooYeQnZ0NAHjqqacwf/58rRdI1ByudpYY2sEDALAlhpdkIiLTpFSK+M+hv7tWHJ4sLY3D1bx582Bubo60tDTY2Nio7p84cSL279+v1eKItGFiz7rTgTvjMlFZXStxNURE2seulWHROFwdPHgQH374IXx9fevd36ZNG6SmpmqtMCJteSDEFT5O1iiprMEvZ7OlLoeISKvYtTI8GoersrKyeh2r2/Lz82FpaamVooi0ycxMwMSedRcV38yLORORiWHXyvBoHK4GDBiATZs2qf4WBAFKpRIrVqzAoEGDtFockbZE9vCFmQBEXytE8vWbUpdDRKQV7FoZJo1HMaxYsQIDBw5EbGwsFAoFXnvtNZw/fx6FhYU4fvy4LmokajYvR2sMbOeOqIt5+M+hy1g1uZvUJRERNRu7VoZJ485Vhw4dcObMGfTq1QtDhw5FWVkZxo8fj7i4OAQHB+uiRiKteHFwG5gJwJ6ELOw9kyV1OUREzcKuleFq0vVAPD098fbbb2u7FiKd6urnhOcHhWBV1BW8tescegW6wN3BSuqyiIiahF0rw9WkcFVUVITo6Gjk5eVBqVTWe2zatGlaKYxIF174VxtEXczD+awSvLHjLNZN78HLNhGR0WHXyrBpHK727NmDJ554AmVlZbC3t6/3xSQIAsMVGTQLuRk+ndgVo1YdQ9TFPGyJScekXrwsDhEZl4OJubiYUwo7dq0MksZrrubPn4+ZM2eitLQURUVFuHHjhupWWFioixqJtKqthz1eHdYWAPDu3kSkFZRLXBERkfr+eQ1Bdq0Mj8bhKjMzEy+++OI9Z13p0rJly9C3b1/Y2NjAycmpwW0LCgrg6+sLQRBQVFTU4LbJyckYN24c3Nzc4ODggAkTJiA3N1f1eEpKCmbNmoXWrVvD2toawcHBWLJkCRQKhRbeFUllVv8g9Ap0QZmiFq9uS0CtktfGJCLjcDAxFxeyS2BnKccsdq0Mksbhavjw4YiNjdVFLQ1SKBSIjIzEnDlzGt121qxZ6NKlS6PblZWVYdiwYRAEAVFRUTh+/DgUCgVGjx6tWkt28eJFKJVKrF27FufPn8enn36KNWvW4M0332z2eyLpyMwEfBwZBlsLGaJTCvH1sWtSl0RE1Ch2rYyDxmuuHn74YSxYsACJiYno3LkzzM3N6z0+ZswYrRV3p9u/TtywYUOD261evRpFRUVYvHgx9u3b1+C2x48fR0pKCuLi4uDg4AAAWL9+PVxcXBAVFYUhQ4ZgxIgRGDFihOo5QUFBSEpKwurVq/Hxxx83702RpPxb2eDfozrgjR1nseJAEga0dUM7T3upyyIiui92rYyDxuFq9uzZAIB33nnnrscEQUBtrXQXxk1MTMQ777yDv/76C1evXm10+6qqKgiCUO+yPVZWVjAzM8OxY8cwZMiQez6vuLgYLi4uje67qqpK9XdJSYma74L0aWJPPxxMzEXUxTy8sjUeO5/rBwu5xg1dIiKdY9fKeGj8LaJUKu97kzJYVVVVYfLkyVixYgX8/dX79VefPn1ga2uL119/HeXl5SgrK8OCBQugVCqRnX3vC/wmJydj1apVePbZZxvc9/Lly+Ho6Ki6+fn5afyeSPcEQcAH4zvDycYc57NKsCrqstQlERHdE7tWxkPS/4m+dOlSCILQ4E3d9V0LFy5EaGgopkyZovbru7m5Ydu2bdizZw/s7Ozg6OiI4uJihIeHQyaT3bV9VlYWRowYgcjISDz11FON1lNcXKy6pafzgsGGyt3BCsvGdgYAfHEkGXFpNySuiIioPnatjIva4eqhhx5CcXGx6u9ly5bV+yVeQUEBOnTooNGLz507FxcuXGjw1qlTJ7X2FRUVhW3btkEul0Mul2Pw4MEAAFdXVyxZsuS+zxs2bBiSk5ORl5eH/Px8fPPNN8jMzETr1vX/V0FWVhYGDRqEiIgIfPnll43WY2lpCQcHh3o3MlwPd/HCI129UasUMX9rAioU0nVhiYj+iV0r46L2mqsDBw7UW0P04YcfYvLkyaqxCDU1NUhKStLoxV1dXeHq6qrRc+5n+/btqKioUP0dExODmTNn4ujRo2pd8/B2HVFRUcjLy6u3MD8zMxODBg1C9+7dsX79epiZcU2OKXpnTCecvFqAq/ll+HD/RSwd01HqkoiI2LUyQmqHK1EUG/xb19LS0lBYWIi0tDTU1tYiPj4eABASEgI7O7u7AlR+fj4AIDQ0VBUAMzMzMXjwYGzatAm9evUCUPfrwNDQULi5ueHEiRN46aWXMG/ePLRr1w5AXcdq4MCB8Pf3x8cff4zr16+rXsPT01PH75r0ydHGHB89FobpX0djw58pGNrBA/1CtBP+iYiail0r49OkawtKYfHixdi4caPq727dugEADh8+jIEDB6q1j+rqaiQlJaG8/O+J3ElJSVi4cCEKCwsRGBiIRYsWYd68earHDx48iCtXruDKlSvw9fWttz99B0zSvQfbumFKH398ezINr25LwP6XB8DR2rzxJxIR6YAoivjvra7VjL7sWhkLQVQzIchkMuTk5MDNzQ0AYG9vjzNnzqjWJuXm5sLb21vSXwwaspKSEtWCea6/MmzlihqM/OwoUgvKMT7cBysndJW6JCJqoQ6cz8Ez35yCnaUcR18bBGdbhit9a8r3t0anBWfMmKGaCVVZWYlnn30Wtra2AFBvPRaRMbOxkGPlhDBErjmBHaczMayDB0Z08pK6LCJqYURRxGeH/u5aMVgZD7XD1fTp0+v9fa+RB9OmTWt+RUQGoHuAC555MBirjyTjzZ3n0D3ABW72lo0/kYhISw4m5iKRa62Mktrhav369bqsg8jgvDykDQ5fzMPFnFK8ufMsvpzaHYIgSF0WEbUAldW1WHnwEgB2rYwRZwoQ3YelXIZPJ3aFuUzAr4m5+PFUhtQlEVELIIoi3tp1Dkm5pXC2MWfXyggxXBE1INTLAfOGtgUAvL0nERk3yht5BhFR82w6kYofT2XATABWTQ5n18oIMVwRNeKZAcHoHuCMm1U1eHVbApRKjuAgIt3462oB3t2bCABYODIU/dtw1p4xYrgiaoTMTMAnkWGwNpfh5NVCbPgzReqSiMgEZRVV4LnvTqNGKeKRrt546gGeDjRWDFdEagh0tcWih0MBAB/uv4greaUSV0REpqSyuhbPfHMKBWUKdPBywAfju/AHNEaM4YpITU/09seAtm6oqlHila0JqK5VSl0SEZkAURTx5s6zOJtZDGcbc6yd2h3WFjKpy6JmYLgiUpMgCPjo0S5wsJLjTEYx/nf4itQlEZEJ2PBnCnaczoTMTMD/Hg+Hn4uN1CVRMzFcEWnA09EK747tBAD4POoKzmQUSVsQERm1E8kFeO/nCwCAhSPboy8vFm8SGK6INDQmzBsPd/FCjVLEK1sTUFnN62kSkeYyiyrw/PenUasUMbarN+dZmRCGKyINCYKA9x7pBDd7S1zJu4kVB5KkLomIjEzdAvZYFJYp0NHbAcu5gN2kMFwRNYGzrQU+fLQzAGDdsWv4Mzlf4oqIyFiIoog3d5zFucwSuNhacAG7CWK4Imqif7X3wORefgCABdvOoLSyWuKKiMgYrD+egh1xdQvYP3+8G3yduYDd1DBcETXDooc7wM/FGplFFaqpykRE9/Nncj6W/VK3gP3Nh0LRN5gL2E0RwxVRM9hZyvFJZFcIArA1NgO/JuZKXRIRGaiMG+WY+30capUixnfzwcx+gVKXRDrCcEXUTL1au2D2A0EAgIU7zqDgZpXEFRGRoalQ1E1gLyxToLOPI94f35kL2E0YwxWRFrwytC3aetgh/6YCi3aegyjy4s5EVEcURSzccQbns0rQytYCa6Z2h5U5F7CbMoYrIi2wMpdh5YSukJsJ2H8+B7viM6UuiYgMxLpj17ArPuvWAvZw+DhZS10S6RjDFZGWdPJxxMtD2gAAFv90HllFFRJXRERS+/NKPpbvuwgAeOvhUEQEt5K4ItIHhisiLXr2wWB09XNCaWUNFvyYAKWSpweJWqr0wnLVBPbx4T6Y0TdQ6pJITxiuiLRILjPDJxPCYGVuhuNXCvDNyVSpSyIiCdxewH6jvLpuAfs4LmBvSRiuiLQs2M0OC0eGAgCW77uAq9dvSlwREemTKIp4ffsZJGbXLWBfywXsLQ7DFZEOTO0TgP4hrqisVuKVrQmoqVVKXRIR6cn/Hb2G3QlZkJsJ+OKJcHhzAXuLw3BFpANmZgI+eqwL7K3kiE8vwprfk6UuiYj04NjlfCzfVzeB/d+jOqB3EBewt0QMV0Q64u1kjbfHdAQA/OfQZZzLLJa4IiLSpfTCcsz94TSUIvBYd19MiwiQuiSSCMMVkQ6N6+aDER09UaMUMX9rAiqra6UuiYh0oEJRi6e/OYWi8mqE+TrivbGduIC9BWO4ItIhQRCwbFwnuNpZICm3FJ/+eknqkohIy0RRxGvbz+BCdglc7TiBnRiuiHSulZ0llo/vAgD48uhVRF8rlLgiItKmr45exR7VAvbu8HLkAvaWjuGKSA+GdvBAZHdfiCIwf1s8blbVSF0SEWnB0cvX8cGtCeyLR3dAr9YuEldEhoDhikhPFo/uAB8na6QXVmDZzxekLoeImimtoBxzv4+DUgQiu/tiah8uYKc6DFdEemJvZY6PI8MAAD9Ep+HwxTyJKyKipipX1ODpb2JRXFGNMD8nvMsF7HQHhisiPYoIboWZ/VoDAF7bfgY3yhQSV0REmhJFEQt+PIOLOaVwtbPE2ilcwE71MVwR6dlrI9oh2M0W10ur8NZP56Quh4g0tPaPq/j5TDbkZgJWTwmHp6OV1CWRgWG4ItIzK3MZPp3YFTIzAT+fycbuhCypSyIiNf1x6To+2l+3gH3JmI7oGcgF7HQ3hisiCXTxdcIL/woBAPx71znkFFdKXBERNSa1oAwv/FC3gH1iDz9M6e0vdUlkoBiuiCTy/KAQdPZxRHFFNV7bfgaiKEpdEhHdR7miBs98cwrFFdXo6ueEd8Z25AJ2ui+GKyKJmMvM8OnEMFjIzfDHpev47q80qUsionu4cwG7m70l1kzpDks5F7DT/TFcEUkoxN0er49oDwBY9vMFpOSXSVwREf3Tmt/rFrCbywSsfoIL2KlxDFdEEnuybyD6BLmgoroW87cloFbJ04NEhuJIUh4+OlC3gH3pmI7owQXspAaGKyKJmZkJ+DgyDHaWcpxKvYEv/7gqdUlEBCAlvwwv/hAHUQQm9/LDE705gZ3Uw3BFZAB8nW2weHQHAMDKX5NwIbtE4oqIWrayqroJ7CWVNQj3d8LSMR2lLomMCMMVkYGI7O6LIaEeqK4VMW9LPKpqaqUuiahFqlvAnoBLuTfhZm+J1VzAThpiuCIyEIIgYPn4znCxtcDFnFJ8duiy1CURtUhfHEnGL2dzYC4TsGZKODwcuICdNMNwRWRA3Owt8f64TgCANb8n41RqocQVEbUsh5Py8PHBJADA22M6oXsAF7CT5hiuiAzMiE5eGN/NB0oReGVrAsoVNVKXRNQipOSX4SXVAnZ/PM4J7NREDFdEBmjJmI7wcrRCakE5lv9yUepyiEzezbsWsHeQuiQyYgxXRAbI0docKx4LAwB8czIVv1+6LnFFRKZLFEW8urVuAbs7J7CTFjBcERmo/m1cMT2ibq7Oaz8moLi8WuKKiEzT/w5fwf7zObCQmWHN1O5w5wJ2aiaGKyID9sbIUAS52iK3pAqLd5+TuhwikxN1MRef/HoJAPDOIx0R7u8scUVkChiuiAyYtYUMn0wIg5kA/BSfhZ/PZEtdEpHJuJZfhpc2x0MUgSd6+2NSLy5gJ+1guCIycN38nfH8oBAAwFu7ziKvpFLiioiM382qGjy9KRallTXoEeCMJaM5gZ20h+GKyAi88K826OjtgBvl1Xhjx1mIIi/uTNRUSqWI+VvjcTnvJjwcLPHFlHBYyPl1SNrDTxOREbCQm2HlhK6wkJkh6mIetsSkS10SkdH63+ErOHA+t24B+5TucLfnAnbSLoYrIiPRztMerw5vCwB4d28i0gvLJa6IyPj8diEXKw/VLWB/d2xHdOMCdtIBhisiIzKrfxB6BbqgTFGL+VsTUKvk6UEidSVfv4mXby1gn9LHHxN7cgE76QbDFZERkZkJ+DgyDDYWMkSnFOLrY9ekLonIKJRWVtctYK+qQc9AZywexQXspDsMV0RGxr+VDf49qu7SHCsOJCEpp1TiiogMm1Ip4pWtCUi+XgZPByt88UR3LmAnneKni8gITerph0Ht3KCoVeKVrfFQ1CilLonIYK2KuoJfE3NhIa+bwO5mbyl1SWTiGK6IjJAgCPjw0S5wsjHH+awSfB51WeqSiAzSocRcfHprAft7Yzuhq5+TtAVRi8BwRWSk3B2s8N7YTgCA/x1JRlzaDYkrIjIsyddvYt6WeADAtIgATOjhJ21B1GIwXBEZsVFdvDEmzBu1ShHztyagQlErdUlEBuHOBey9Al1U6xSJ9IHhisjIvfNIR3g4WOJqfhk+3H9R6nKIJKdUipi3pW4Bu5ejFf73RDjMZfy6I/3hp43IyDnZWOCjx8IAABv+TMHxK/kSV0Qkrc9+u4xDF24tYJ/CBeykfwxXRCbgwbZueKJ33UDEV7cloLiiWuKKiKRx8HwOPvut7gcey8Z2QhgXsJMEGK6ITMSbD4UioJUNsosr8fae81KXQ6R3V/Ju4pWtCQCAGX0DEckF7CQRhisiE2FrKccnkWEwE4AdpzOx/1yO1CUR6U3JrQXsN6tq0Lu1CxY9HCp1SdSCMVwRmZAegS545sFgAMCinWeRf7NK4oqIdE+pFDFvczyu5pfBmwvYyQDw00dkYl4e0gbtPe1RUKbAwh1nIYq8uDOZtv/8dhm/XcxTTWB3teMCdpKW0YSrZcuWoW/fvrCxsYGTk1OD2xYUFMDX1xeCIKCoqKjBbZOTkzFu3Di4ubnBwcEBEyZMQG5ubr1txowZA39/f1hZWcHLywtTp05FVlZWM98RkW5YymVYOaErzGUCfk3MxY+nMqQuiUhnDpzPwX9vLWBfPq4zuvg6SVsQEYwoXCkUCkRGRmLOnDmNbjtr1ix06dKl0e3KysowbNgwCIKAqKgoHD9+HAqFAqNHj4ZS+fe12gYNGoStW7ciKSkJ27dvR3JyMh577LFmvR8iXerg7YB5Q9sCAN7ek4iMG+USV0SkfZdzS/HKrQnsM/oG4tHuvtIWRHSLIBrZOYMNGzbg5Zdfvm9HavXq1diyZQsWL16MwYMH48aNG/ftdB08eBAjR47EjRs34ODgAAC4ceMGXFxc8Ouvv2LIkCH3fN7u3bsxduxYVFVVwdzcXK26S0pK4OjoiOLiYtVrEelSrVLEhLUncCr1BiKCWuG7p3rDzEyQuiwirSiuqMbY/x3Htfwy9G7tgm+f6s11VqQTTfn+NqlPYmJiIt555x1s2rQJZmaNv7WqqioIggBLy7/Pz1tZWcHMzAzHjh2753MKCwvx3XffoW/fvg0Gq6qqKpSUlNS7EemTzEzAJ5FhsDaX4cTVAmz4M0Xqkoi0om4Cezyu5ZfBx8kaX3ABOxkYk/k0VlVVYfLkyVixYgX8/f3Vek6fPn1ga2uL119/HeXl5SgrK8OCBQugVCqRnZ1db9vXX38dtra2aNWqFdLS0vDTTz81uO/ly5fD0dFRdfPz47wV0r9AV1u8eesn6R/uv4greaUSV0TUfJ8euoSoi3mwlJth7dTuaMUF7GRgJA1XS5cuhSAIDd5iY2PV2tfChQsRGhqKKVOmqP36bm5u2LZtG/bs2QM7OztV2y88PBwymazetgsWLEBcXBwOHjwImUyGadOmNfgrrIULF6K4uFh1S09PV7suIm2a0tsfA9q6oapGiVe2JqC6Vtn4k4gM1P5z2VgVdQUA8MGjndHJx1HiiojuJpfyxefOnYtJkyY1uE1gYKBa+4qKisLZs2fx448/AoAq+Li6umLRokV4++237/m8YcOGITk5Gfn5+ZDL5XBycoKnpydat25dbztXV1e4urqibdu2CA0NhZ+fH06ePImIiIh77tfS0rLe6UYiqQiCgI8e7YJhn/6OMxnF+OJwMl4a0kbqsog0djm3FPNvTWCf2a81xnXjAnYyTJKGq9uBRRu2b9+OiooK1d8xMTGYOXMmjh49iuDgYLVqAepCWl5eHsaMGXPfbW8Ht6oqDmgk4+DpaIV3x3bCS5vjsSrqMga1d+NP1smoFFdU4+lvTqFMUYuIoFZ486H2UpdEdF+ShitNpKWlobCwEGlpaaitrUV8fDwAICQkBHZ2dncFqPz8fABAaGio6teCmZmZGDx4MDZt2oRevXoBANavX4/Q0FC4ubnhxIkTeOmllzBv3jy0a9cOABAdHY3o6Gj0798fzs7OuHr1KhYvXozg4OD7dq2IDNGYMG8cPJ+Ln89m45WtCdj7Qn9YmcsafyKRxGqVIl7eHKdawP75490g5wJ2MmBGE64WL16MjRs3qv7u1q0bAODw4cMYOHCgWvuorq5GUlISysv/nvmTlJSEhQsXorCwEIGBgVi0aBHmzZunetza2ho7duzAkiVLUFZWBi8vL4wYMQKbN2/maT8yKoIg4N2xnRCdUogreTex4kAS/j2qg9RlETXq018v4XDSdS5gJ6NhdHOujBXnXJGhiLqYi5kbYiEIwPdP9UFEcCupSyK6r31nszHnu9MAgP9M7Iqx3XwkrohamhY/54qIGvev9h6Y1NMPogi8ui0BpZXVUpdEdE9JOaWYv61uAftT/VszWJHRYLgiaoHeGtUBvs7WyCyqwLt7E6Uuh+guxeXVePqbWJQratEvpBXeGMkF7GQ8GK6IWiA7Szk+iQyDIABbYzNwKDG38ScR6UmtUsSLm+OQWlAOHydrrJoczgXsZFT4aSVqoXoHtcLsB4IAAG/sOIOCmxwtQobhk4NJ+P3SdViZm+HLad3hYmshdUlEGmG4ImrBXhnaFm097JB/U4FFO881eNUBIn345Ww2vjiSDAD48NEu6OjNCexkfBiuiFowK3MZVk7oCrmZgP3nc7ArPlPqkqgFS8opxau3FrDPfqA1HunKBexknBiuiFq4Tj6OeGlw3eVwFv90HllFFY08g0j7isoVmL3p7wXsr4/gAnYyXgxXRIQ5A4MR5ueE0soavPbjGSiVPD1I+lOrFPHCD3FIKyyHr7M1PucCdjJy/PQSEeQyM6ycEAYrczMcu5KPb/9KlbokakFWHEjC0cv5dQvYp/aAMxewk5FjuCIiAECwmx3euHUq5v1fLuDq9ZsSV0Qtwd4zWVjze90C9o8eC0MHb17BgowfwxURqUyLCES/kFaorFbila0JqKlVSl0SmbAL2SVYsO0MAOCZAUEYE+YtcUVE2sFwRUQqZmYCVjwWBnsrOeLTi/Dcd6dxIbtE6rLIBBWVK/D0N7GoqK7FA21c8RoXsJMJYbgionq8nazx3thOEATgYGIuRn52FDM3xCAmpVDq0shE3F7Anl5YAT8Xa6ya3A0yM0Hqsoi0Ri51AURkeB7p6oNgNzus+T0Zv5zNRtTFPERdzEOPAGc8NygYg9q5QxD4ZUhN89GBizh6OR/W5jJ8ObUHnGy4gJ1MiyByJLNelJSUwNHREcXFxXBw4IJNMh4p+WVY+8dVbD+VAcWtNVjtPe3x7IPBGNXFiz+ZJ43sScjCCz/EAQA+f7wbRnXhOisybE35/ma40hOGKzJ2uSWV+PrYNXx7MhVliloAgK+zNZ4ZEITIHn6wMpdJXCEZKqVSxLEr+dh0IgW/XcyDKALPPBiEhSNDpS6NqFEMVwaM4YpMRXF5Nb45mYL1x1NQUKYAALjaWeDJfq0xpU8AHK3NJa6QDEVJZTV+jM3AtydTcTW/THX/uG4++DgyjOusyCgwXBkwhisyNRWKWmyNTceXf1xF5q1L5thbyvFEnwDM7B8Id3sriSskqVzMKcGmE6nYFZeJ8ltdTntLOR7t7oupEQEIdrOTuEIi9TFcGTCGKzJV1bVK7D2ThdVHknEpt27wqIXcDJHdffH0gCAEtLKVuELSh+paJX5NzMXGP1Pw17W/f1na1sMO0yICMa6bD2wt+RsqMj4MVwaM4YpMnVIpIupiHr44cgWn04oAAGYCMKqLN559MJiTt01UXmklNken47u/UpFbUgUAkJkJGN7RA9MiAtG7tQt/WUpGjeHKgDFcUUshiiKirxVi9e/JOJJ0XXX/wHZueG5gCHoGOvPL1siJoojTaTew8c9U7DuXjerauq8RVzsLPN7LH5N7+8PL0VriKom0g+HKgDFcUUt0PqsYa36/ip/PZEF561+a7gHOeG5g3awsMy5oNioVilrsTsjExj9TkXjH5P7uAc6YFhGAEZ08YSnnr0bJtDBcGTCGK2rJUvLL8OXRq/gx9u9ZWe087PHswCCM7uLNWVkGLrWgDN+eTMXW2AwUV1QDACzlZnikqzemRQSik4+jxBUS6Q7DlQFjuCIC8koqse74NXx3Mg03q2oA1M3KenpAECZwVpZBUSpF/H75Or45kYrDSXWzqQDAz8UaU/sEILK7H5xtOVmdTB/DlQFjuCL6W3FFNb49mYqvj11TzcpqZWuBmf05K0tqxeXV2HYqHd+eTEVKQbnq/gfbumF63wA82Nad86moRWG4MmAMV0R3q6yuxbbYdKz94yoybtTNyrKzlOOJPv6Y1a813B04K0tfErNK8M3JFOyMy0Rldd2pW3srOSb08MOUPgFo7cqRGtQyMVwZMIYrovurqVVi75lsrD6SjKTcUgB1s7Ie6+6Lpx8IQiC/2HVCUaPEgfM52HQiBTEpN1T3t/e0x7SIQIzt5g0bC86mopaN4cqAMVwRNU6pFHE4KQ9fHEnGqdS6L3szAXiosxfmDAxGR28unNaG3JJKfP9XGr6PTsP10rrZVHIzAcM7eWJ6RCDHZRDdgeHKgDFcEWkm+lohVh+5gsN3zMp6sK0bnhsYjF4cTKkxURQRk3IDm06kYP+5HNTcmo3hZm+Jx3v54/He/vDgaViiuzBcGTCGK6KmScwqwZrfk7H3jllZ4f5OmDMwBIPbc1ZWY8oVNdgVl4VNJ1JwMadUdX/PQGdMiwjE8I6esJBzFAbR/TBcGTCGK6LmSSsox9o/krHtVAYUNXULrtt62OHZB4MxOswb5pyVVU9Kfhm+OZmKrbHpKK2sG3thZW6Gcd18MLVPIC9HRKQmhisDxnBFpB15pZVYfzwF355IRemtWVk+Tn/PyrK2aLmzsmqVIo4k5WHTiVT8funv06kBrWxUs6kcbTjmgkgTDFcGjOGKSLtKKv+elZV/8+9ZWU/2C8TUPoEtKkQUlSuwNTYd35xMRXph3UgLQQAGtXPH1IgAPNjGjadPiZqI4cqAMVwR6UZldS22ncrAl38kq4KFrYUMT/QJwKz+rU16kfa5zGJsOpGCn+KzUHXrVKmDlRwTe9bNpgpoxREWRM3FcGXAGK6IdKumVomfz9bNyrq9cNtCZoZHu/vgmQHBJjMrS1GjxL5z2dh0IlU1rgIAOng5YHrfAIwJ82nRp0aJtI3hyoAxXBHphyjWzcpafSRZNRjTTABGdvbCnAeDjfYiw9nFFfj+rzT8EJ2O/Jt/z6Z6qLMXpkUEoHsAZ1MR6QLDlQFjuCLSv5iUQqw+koyoi3mq+wa0dcOcB4PRJ8jwZ2WJooi/rhVi04kUHDifi9pbsyg8HCzxRO8ATOrlB3d70z3tSWQIGK4MGMMVkXQuZJdg7e/J2HMmWxVQuvk7Yc6DwRgS6mFwi73LqmqwMy4Tm06k4FLuTdX9vVu7YFpEIIZ19ODoCSI9YbgyYAxXRNJLKyjHV0evYktsumpWVhv3ullZY7pKPysr+fpNfHMiFdtPZajGTFibyzAu3AfTIgLQ3pP/dhDpG8OVAWO4IjIc10ursP74NXzzj1lZsx9ojYk9/fW6ILxWKSLqYh42nUjB0cv5qvtbu9piap8APNrdF47WLWesBJGhYbgyYAxXRIanpLIa351Mw7pj11SLxF1sLfBk30BMi9DtrKzCMgW2xKTj25OpyCz6ezbV4PbumBYRiP4hrgZ3upKoJWK4MmAMV0SGq7K6Fj+eysCXf1xFWmE5gLpZWY/39sdTDwRpdVbWmYwibDqRit0JWapTk0425nWzqXoHwM/FRmuvRUTNx3BlwBiuiAzf/WZljQ/3wdMDghDkZtek/VbV1OKXs9nY+Gcq4tOLVPd38nHAtIhAjAnzhpU5Z1MRGSKGKwPGcEVkPERRxJFL17H6cDKiUwoB1J2ye6iTF+YMVH9WVlZRBb77KxWbo9NRUFZ3iR5zmYCHO3thWt9AdPNzMvhxEEQtHcOVAWO4IjJOsbdmZf12x6ysB9q4Ys7AYEQEtborHImiiBPJBdh4IgW/Jubi1uQHeDpYYUoff0zs6Q83e0t9vgUiagaGKwPGcEVk3C7mlGDNkfqzsrr6OWHOwGAMDfVAeXUtdpzOwKYTqbiS9/dsqoigVpgWEYChHTwg52wqIqPDcGXAGK6ITEN64a1ZWTHpqoslB7ayQf5NBW7eGutgYyHDo+G+mBoRgLYe9lKWS0TNxHBlwBiuiExL/s26WVmbTqSitLIuVAW52WJanwCM7+4LByvOpiIyBQxXBozhisg0lVZW49fEXHg4WKFv8N1rsIjIuDXl+1uu45qIiEyavZU5xof7Sl0GERkQrq4kIiIi0iKGKyIiIiItYrgiIiIi0iKGKyIiIiItYrgiIiIi0iKGKyIiIiItYrgiIiIi0iKGKyIiIiItYrgiIiIi0iKGKyIiIiItYrgiIiIi0iKGKyIiIiItYrgiIiIi0iK51AW0FKIoAgBKSkokroSIiIjUdft7+/b3uDoYrvSktLQUAODn5ydxJURERKSp0tJSODo6qrWtIGoSxajJlEolsrKyYG9vD0EQNHpuSUkJ/Pz8kJ6eDgcHBx1VaDx4POrj8aiPx+NvPBb18XjUx+NR3/2OhyiKKC0thbe3N8zM1FtNxc6VnpiZmcHX17dZ+3BwcOB/AHfg8aiPx6M+Ho+/8VjUx+NRH49Hffc6Hup2rG7jgnYiIiIiLWK4IiIiItIihisjYGlpiSVLlsDS0lLqUgwCj0d9PB718Xj8jceiPh6P+ng86tPm8eCCdiIiIiItYueKiIiISIsYroiIiIi0iOGKiIiISIsYroiIiIi0iOHKgGRmZmLKlClo1aoVbGxs0LVrV5w6dUr1+NKlS9G+fXvY2trC2dkZQ4YMwV9//SVhxbrV2PG40zPPPANBEPCf//xHv0XqUWPHY8aMGRAEod6tT58+ElasW+p8Pi5cuIAxY8bA0dER9vb26NOnD9LS0iSqWLcaOx7//Gzcvq1YsULCqnWjsWNx8+ZNzJ07F76+vrC2tkZoaChWr14tYcW61djxyM3NxYwZM+Dt7Q0bGxuMGDECly9flrBi3QkMDLznfwfPP/88gLpp7EuXLoW3tzesra0xcOBAnD9/XuPX4YR2A3Hjxg3069cPgwYNwr59++Du7o7k5GQ4OTmptmnbti0+//xzBAUFoaKiAp9++imGDRuGK1euwM3NTbridUCd43Hbrl278Ndff8Hb21v/heqJusdjxIgRWL9+vepvCwsLPVeqH+ocj+TkZPTv3x+zZs3C22+/DUdHR1y4cAFWVlbSFa4j6hyP7Ozses/Zt28fZs2ahUcffVTP1eqWOsdi3rx5OHz4ML799lsEBgbi4MGDeO655+Dt7Y1HHnlEuuJ1oLHjIYoixo4dC3Nzc/z0009wcHDAypUrMWTIECQmJsLW1lbaN6BlMTExqK2tVf197tw5DB06FJGRkQCAjz76CCtXrsSGDRvQtm1bvPfeexg6dCiSkpJgb2+v/guJZBBef/11sX///ho9p7i4WAQgHjp0SEdVSUfd45GRkSH6+PiI586dEwMCAsRPP/1U98VJQJ3jMX36dPGRRx7RT0ESU+d4TJw4UZwyZYqeKpJWU/79eOSRR8R//etfOqpIOuoci44dO4rvvPNOvfvCw8PFt956S5elSaKx45GUlCQCEM+dO6e6r6amRnRxcRG/+uorfZQoqZdeekkMDg4WlUqlqFQqRU9PT/GDDz5QPV5ZWSk6OjqKa9as0Wi/PC1oIHbv3o0ePXogMjIS7u7u6NatG7766qv7bq9QKPDll1/C0dERYWFheqxUP9Q5HkqlElOnTsWCBQvQsWNHiSrVD3U/H0eOHIG7uzvatm2L2bNnIy8vT4Jqda+x46FUKvHzzz+jbdu2GD58ONzd3dG7d2/s2rVLuqJ1SNN/P3Jzc/Hzzz9j1qxZeqxSP9Q5Fv3798fu3buRmZkJURRx+PBhXLp0CcOHD5eoat1p7HhUVVUBQL2Orkwmg4WFBY4dO6b3evVJoVDg22+/xcyZMyEIAq5du4acnBwMGzZMtY2lpSUefPBB/Pnnn5rtXMshkJrI0tJStLS0FBcuXCiePn1aXLNmjWhlZSVu3Lix3nZ79uwRbW1tRUEQRG9vbzE6OlqiinVLnePx/vvvi0OHDhWVSqUoiqJJd67UOR6bN28W9+7dK549e1bcvXu3GBYWJnbs2FGsrKyUsHLdaOx4ZGdniwBEGxsbceXKlWJcXJy4fPlyURAE8ciRIxJXr33q/vtx24cffig6OzuLFRUVeq5U99Q5FlVVVeK0adNEAKJcLhctLCzETZs2SVi17jR2PBQKhRgQECBGRkaKhYWFYlVVlbh8+XIRgDhs2DCJq9etLVu2iDKZTMzMzBRFURSPHz8uAlD9fdvs2bM1PhYMVwbC3NxcjIiIqHffCy+8IPbp06fefTdv3hQvX74snjhxQpw5c6YYGBgo5ubm6rNUvWjseMTGxooeHh71/iMw5XCl7ufjTllZWaK5ubm4fft2XZend40dj8zMTBGAOHny5HrbjB49Wpw0aZLe6tQXTT8f7dq1E+fOnauP0vROnWOxYsUKsW3btuLu3bvFhIQEcdWqVaKdnZ3466+/6rtcnVPneMTGxophYWEiAFEmk4nDhw8XR44cKY4cOVLf5erVsGHDxFGjRqn+vh2usrKy6m331FNPicOHD9do3zwtaCC8vLzQoUOHeveFhobe9csmW1tbhISEoE+fPli3bh3kcjnWrVunz1L1orHjcfToUeTl5cHf3x9yuRxyuRypqamYP38+AgMDJahYt9T9fPzzOQEBASb5q5/GjoerqyvkcrnGx8xYafL5OHr0KJKSkvDUU0/pqzy9auxYVFRU4M0338TKlSsxevRodOnSBXPnzsXEiRPx8ccfS1GyTqnz2ejevTvi4+NRVFSE7Oxs7N+/HwUFBWjdurW+y9Wb1NRUHDp0qN5/B56engCAnJycetvm5eXBw8NDo/0zXBmIfv36ISkpqd59ly5dQkBAQIPPE0VRdc7clDR2PKZOnYozZ84gPj5edfP29saCBQtw4MABKUrWqaZ8PgoKCpCeng4vLy9dl6d3jR0PCwsL9OzZs0n/TRkjTT4f69atQ/fu3U1yrSbQ+LGorq5GdXU1zMzqf/3JZDIolUq91akvmnw2HB0d4ebmhsuXLyM2Ntbkfjl5p/Xr18Pd3R0PP/yw6r7WrVvD09MTv/76q+o+hUKB33//HX379tXsBbTRWqPmi46OFuVyubhs2TLx8uXL4nfffSfa2NiI3377rSiKdacDFy5cKJ44cUJMSUkRT506Jc6aNUu0tLSs9ysPU9HY8bgXUz4t2NjxKC0tFefPny/++eef4rVr18TDhw+LERERoo+Pj1hSUiJx9dqnzudjx44dorm5ufjll1+Kly9fFletWiXKZDLx6NGjElauG+r+91JcXCza2NiIq1evlqhS3VPnWDz44INix44dxcOHD4tXr14V169fL1pZWYlffPGFhJXrhjrHY+vWreLhw4fF5ORkcdeuXWJAQIA4fvx4CavWrdraWtHf3198/fXX73rsgw8+EB0dHcUdO3aIZ8+eFSdPnix6eXlp/O8ow5UB2bNnj9ipUyfR0tJSbN++vfjll1+qHquoqBDHjRsnent7ixYWFqKXl5c4ZswYk13QLooNH497MeVwJYoNH4/y8nJx2LBhopubm2hubi76+/uL06dPF9PS0iSsWLfU+XysW7dODAkJEa2srMSwsDBx165dElSqH+ocj7Vr14rW1tZiUVGRBBXqT2PHIjs7W5wxY4bo7e0tWllZie3atRM/+eQT1Y9jTE1jx+Ozzz4TfX19Vf92vPXWW2JVVZVE1eregQMHRABiUlLSXY8plUpxyZIloqenp2hpaSkOGDBAPHv2rMavIYiiKGqpy0ZERETU4nHNFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERmBvXv3IigoCD179sSlS5fqPVZaWoqePXuia9eu6Ny5M7766iuJqiQiAODlb4iIjEDbtm3xxRdf4Pz58zhx4gQ2b96seqy2thZVVVWwsbFBeXk5OnXqhJiYGLRq1UrCiolaLnauiKhFGDhwIF5++WWpy7ivgQMHQhAECIKA+Pj4ux53dXVFSEgIgoKC4OjoWO8xmUwGGxsbAEBlZSVqa2tx5/9unjFjhmrfu3bt0uXbICIwXBGRgRs9ejSGDBlyz8dOnDgBQRBw+vRpPVelG7Nnz0Z2djY6dep012NPPvkkgoODMXv2bLz//vt3PV5UVISwsDD4+vritddeg6urq+qxzz77DNnZ2TqtnYj+xnBFRAZt1qxZiIqKQmpq6l2Pff311+jatSvCw8MlqEz7bGxs4OnpCblcXu/+mpoafPbZZ3jttddQWloKZ2fnu57r5OSEhIQEXLt2Dd9//z1yc3NVjzk6OsLT01Pn9RNRHYYrIjJoo0aNgru7OzZs2FDv/vLycmzZsgWzZs0CAFRVVeHFF1+Eu7s7rKys0L9/f8TExNx3v4GBgfjPf/5T776uXbti6dKlqr8HDhyIF154AS+//DKcnZ3h4eGBL7/8EmVlZXjyySdhb2+P4OBg7Nu3r95+RFHERx99hKCgIFhbWyMsLAw//vhjk4/BmjVrEBQUhOeffx7l5eW4fPnyfbf18PBAly5d8McffzT59YioeRiuiMigyeVyTJs2DRs2bKi3jmjbtm1QKBR44oknAACvvfYatm/fjo0bN+L06dMICQnB8OHDUVhY2KzX37hxI1xdXREdHY0XXngBc+bMQWRkJPr27YvTp09j+PDhmDp1KsrLy1XPeeutt7B+/XqsXr0a58+fx7x58zBlyhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg=="},"metadata":{}}],"execution_count":10},{"id":"fed42763-52cf-44c2-961d-6d00918ba6df","cell_type":"markdown","source":"## FluxJobExecutor\nIn analogy to the [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) the [FluxJobExecutor](https://executorlib.readthedocs.io/en/latest/3-hpc-job.html#flux) can be applied to distribute simulation within a given queuing system allocation. The calculation of the bulk modulus with [gpaw](https://gpaw.readthedocs.io) is implemented in the same way.","metadata":{}},{"id":"516a91d4-0be6-47a6-9c9c-f5b0082bfee7","cell_type":"code","source":"from executorlib import FluxJobExecutor","metadata":{"trusted":true},"outputs":[],"execution_count":11},{"id":"21bdd0d42f9806e4","cell_type":"markdown","source":"The for each strained structure a calculation task is submitted to the `FluxJobExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.","metadata":{}},{"id":"2b0c559b-a117-4766-b679-314ab9e65e97","cell_type":"code","source":"future_dict = {}\nwith FluxJobExecutor() as exe:\n for k, v in task_loop_dict.items():\n future_dict[k] = exe.submit(\n evaluate_with_gpaw, \n task_dict=v, \n kpts=(3, 3, 3), \n encut=300,\n resource_dict={\"cores\": 2},\n )\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n result_dict = {\n k: f.result() \n for k, f in tqdm(future_dict.items())\n }\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ3C5brSik jovyan python R 2 1 3.107s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5brSij jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSQ jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSP jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA4 jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA3 jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5XQUsh jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ4Px1bKu jovyan executorl+ CA 2 1 4.656m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"100%|██████████| 7/7 [01:15<00:00, 10.72s/it]\n"},{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ3C5brSik jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5brSij jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSQ jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSP jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA4 jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA3 jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5XQUsh jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ4Px1bKu jovyan executorl+ CA 2 1 4.656m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"Exception ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\n"}],"execution_count":12},{"id":"ca353da1941c1c7c","cell_type":"markdown","source":"The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.","metadata":{}},{"id":"8bb73863-bfde-4e96-9323-5330b2051632","cell_type":"code","source":"fit_dict = analyse_results_for_energy_volume_curve(\n output_dict={\"energy\": result_dict},\n task_dict=task_dict,\n fit_type=\"polynomial\",\n fit_order=3,\n)","metadata":{"trusted":true},"outputs":[],"execution_count":13},{"id":"3d4189b5c74ba2a2","cell_type":"markdown","source":"The final energy volume curve plot summarizes the results of this calculation.","metadata":{}},{"id":"95000e45-dd86-4659-90f4-f2d144477703","cell_type":"code","source":"plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\nplt.xlabel(\"Volume [$\\AA^3$]\")\nplt.ylabel(\"Energy [eV]\")\nplt.legend()","metadata":{"trusted":true},"outputs":[{"execution_count":14,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg=="},"metadata":{}}],"execution_count":14},{"id":"8e67f9a4-d449-420c-9f62-72d106d18636","cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]} \ No newline at end of file +{"metadata":{"kernelspec":{"name":"flux","display_name":"Flux","language":"python"},"language_info":{"name":"python","version":"3.10.16","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":5,"nbformat":4,"cells":[{"id":"745ca7d3-5046-4a8c-a370-d9d05b77a1b7","cell_type":"markdown","source":"# GPAW\nThe [gpaw](https://gpaw.readthedocs.io/index.html) density-functional theory (DFT) simulation code provides a Python interface supporting the [message passing interface (MPI) for Python - mpi4py](https://mpi4py.readthedocs.io) for parallelization. So `executorlib` is used to orchestrate multiple [gpaw](https://gpaw.readthedocs.io/index.html) simulation each using multiple CPU cores for parallelization. These kind of hierarchical workflows are one of the core strength of `executorlib`. While the same could be achieved by writing the whole simulation workflow using [mpi4py](https://mpi4py.readthedocs.io) this would drastically increase the complexity. With `executorlib` the user can quickly up-scale their simulation workflow without the need to address the parallel execution explicitly, rather the parallelization is introduced on a per-function level, by submitting the functions to the `FluxClusterExecutor` or `FluxJobExecutor`.","metadata":{}},{"id":"21852c01-efda-43fe-add9-d08123a82995","cell_type":"code","source":"import subprocess\nfrom ase.build import bulk\nfrom atomistics.workflows import (\n analyse_results_for_energy_volume_curve,\n get_tasks_for_energy_volume_curve,\n)\nimport matplotlib.pyplot as plt\nimport pprint\nfrom tqdm import tqdm\nfrom time import sleep","metadata":{"trusted":true},"outputs":[{"name":"stderr","output_type":"stream","text":"/srv/conda/envs/notebook/lib/python3.10/site-packages/atomistics/workflows/__init__.py:77: UserWarning: PhonopyWorkflow(), QuasiHarmonicWorkflow(), get_band_structure(), get_dynamical_matrix(), get_hesse_matrix(), get_thermal_properties_for_harmonic_approximation(), get_tasks_for_harmonic_approximation(), analyse_results_for_harmonic_approximation(), get_tasks_for_quasi_harmonic_approximation(), analyse_results_for_quasi_harmonic_approximation(), get_thermal_properties_for_quasi_harmonic_approximation(), plot_band_structure() and plot_dos() are not available as the import of the module named 'structuretoolkit' failed.\n raise_warning(module_list=phonopy_workflows, import_error=e)\n"}],"execution_count":1},{"id":"e15eed0da3c6547b","cell_type":"markdown","source":"The only function which is executed using [mpi4py](https://mpi4py.readthedocs.io) is the `evaluate_with_gpaw()` function:","metadata":{}},{"id":"aa435760-390f-4eff-88f4-96b15777de3e","cell_type":"code","source":"def evaluate_with_gpaw(task_dict, kpts, encut):\n import os\n os.environ[\"OMP_NUM_THREADS\"] = \"1\"\n os.environ[\"GPAW_MPI4PY\"] = \"1\"\n\n from mpi4py import MPI\n from gpaw import GPAW, PW\n from gpaw.mpi4pywrapper import MPI4PYWrapper\n\n structure = task_dict[\"calc_energy\"].copy()\n structure.calc = GPAW(\n xc=\"PBE\",\n mode=PW(encut),\n kpts=kpts,\n communicator=MPI4PYWrapper(MPI.COMM_WORLD),\n )\n return structure.get_potential_energy()","metadata":{"trusted":true},"outputs":[],"execution_count":2},{"id":"e9936ca22151d490","cell_type":"markdown","source":"As a first step of the workflow the equilibrium structure of four Aluminium atoms is strained by 5%.","metadata":{}},{"id":"a1d4e9a1-7275-4d9a-b038-db27185f00ae","cell_type":"code","source":"task_dict = get_tasks_for_energy_volume_curve(\n structure=bulk(\"Al\", a=4.05),\n num_points=7,\n vol_range=0.05,\n axes=(\"x\", \"y\", \"z\"),\n)\ntask_dict","metadata":{"trusted":true},"outputs":[{"execution_count":3,"output_type":"execute_result","data":{"text/plain":"{'calc_energy': {np.float64(0.95): Atoms(symbols='Al4', pbc=True, cell=[3.9813426685908118, 3.9813426685908118, 3.9813426685908118]),\n np.float64(0.9666667): Atoms(symbols='Al4', pbc=True, cell=[4.004490529815683, 4.004490529815683, 4.004490529815683]),\n np.float64(0.9833333): Atoms(symbols='Al4', pbc=True, cell=[4.027373829573266, 4.027373829573266, 4.027373829573266]),\n np.float64(1.0): Atoms(symbols='Al4', pbc=True, cell=[4.05, 4.05, 4.05]),\n np.float64(1.0166667): Atoms(symbols='Al4', pbc=True, cell=[4.072376144702493, 4.072376144702493, 4.072376144702493]),\n np.float64(1.0333333): Atoms(symbols='Al4', pbc=True, cell=[4.0945090584006865, 4.0945090584006865, 4.0945090584006865]),\n np.float64(1.05): Atoms(symbols='Al4', pbc=True, cell=[4.1164052451001565, 4.1164052451001565, 4.1164052451001565])}}"},"metadata":{}}],"execution_count":3},{"id":"8bf60b7b0f5af31a","cell_type":"markdown","source":"The resulting dictionary of structures `task_dict` is transformed to simplify the parallel execution:","metadata":{}},{"id":"73ad1043-eacd-4758-a7b4-f64969beabab","cell_type":"code","source":"task_loop_dict = {k: {\"calc_energy\": v} for k, v in task_dict[\"calc_energy\"].items()}","metadata":{"trusted":true},"outputs":[],"execution_count":4},{"id":"af5ba456f3fafd39","cell_type":"markdown","source":"The status of the flux cluster is validated using the `flux resource list` command and the `flux jobs -a` command, just to highlight flux was initialized correctly and has access to the available resources.","metadata":{}},{"id":"8a93aa2b-2bce-4c87-943c-38364a4324ee","cell_type":"code","source":"pprint.pp(subprocess.check_output([\"flux\", \"resource\", \"list\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' STATE NNODES NCORES NGPUS NODELIST',\n ' free 1 24 0 jupyter-jan-janssen-exe-q4mqmd0j',\n ' allocated 0 0 0 ',\n ' down 0 0 0 ',\n '']\n"}],"execution_count":5},{"id":"f7f072d5-ea3b-43f5-9ec1-0ea1036d7e25","cell_type":"code","source":"pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO', '']\n"}],"execution_count":6},{"id":"62c7297b-efae-4950-a513-3b84345ad7b4","cell_type":"markdown","source":"## FluxClusterExecutor\nThe [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) is used in this demonstration primarily because flux can be installed on any workstation for testing. The [SlurmClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#slurm) could be used analogously.","metadata":{}},{"id":"9cd01061-c84a-4d8d-80e1-c269af3d8c29","cell_type":"code","source":"from executorlib import FluxClusterExecutor","metadata":{"trusted":true},"outputs":[],"execution_count":7},{"id":"2670c218fbde5b02","cell_type":"markdown","source":"The for each strained structure a calculation task is submitted to the `FluxClusterExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.","metadata":{}},{"id":"11d7a7f3-5fbf-4377-ac98-71cd29caf433","cell_type":"code","source":"future_dict = {}\nwith FluxClusterExecutor() as exe:\n for k, v in task_loop_dict.items():\n future_dict[k] = exe.submit(\n evaluate_with_gpaw, \n task_dict=v, \n kpts=(3, 3, 3), \n encut=300,\n resource_dict={\"cores\": 2},\n )\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n result_dict = {\n k: f.result() \n for k, f in tqdm(future_dict.items())\n }\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ2gSToFV jovyan executorl+ R 2 1 0.199s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ R 2 1 0.948s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ R 2 1 1.309s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"100%|██████████| 7/7 [04:36<00:00, 39.49s/it] \n"},{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ4Px1bKu jovyan executorl+ R 2 1 4.572m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"}],"execution_count":8},{"id":"8c80e3bcb483b069","cell_type":"markdown","source":"The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.","metadata":{}},{"id":"5a5822c7-5ab6-483b-a3ab-8cef5fcaf269","cell_type":"code","source":"fit_dict = analyse_results_for_energy_volume_curve(\n output_dict={\"energy\": result_dict},\n task_dict=task_dict,\n fit_type=\"polynomial\",\n fit_order=3,\n)","metadata":{"trusted":true},"outputs":[],"execution_count":9},{"id":"571b7c25dcca8bb","cell_type":"markdown","source":"The final energy volume curve plot summarizes the results of this calculation.","metadata":{}},{"id":"d420b4c5-1a2f-4290-ba81-0c7f7bdf7ef3","cell_type":"code","source":"plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\nplt.xlabel(\"Volume [$\\AA^3$]\")\nplt.ylabel(\"Energy [eV]\")\nplt.legend()","metadata":{"trusted":true},"outputs":[{"execution_count":10,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg=="},"metadata":{}}],"execution_count":10},{"id":"fed42763-52cf-44c2-961d-6d00918ba6df","cell_type":"markdown","source":"## FluxJobExecutor\nIn analogy to the [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) the [FluxJobExecutor](https://executorlib.readthedocs.io/en/latest/3-hpc-job.html#flux) can be applied to distribute simulation within a given queuing system allocation. The calculation of the bulk modulus with [gpaw](https://gpaw.readthedocs.io) is implemented in the same way.","metadata":{}},{"id":"516a91d4-0be6-47a6-9c9c-f5b0082bfee7","cell_type":"code","source":"from executorlib import FluxJobExecutor","metadata":{"trusted":true},"outputs":[],"execution_count":11},{"id":"21bdd0d42f9806e4","cell_type":"markdown","source":"The for each strained structure a calculation task is submitted to the `FluxJobExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.","metadata":{}},{"id":"2b0c559b-a117-4766-b679-314ab9e65e97","cell_type":"code","source":"future_dict = {}\nwith FluxJobExecutor() as exe:\n for k, v in task_loop_dict.items():\n future_dict[k] = exe.submit(\n evaluate_with_gpaw, \n task_dict=v, \n kpts=(3, 3, 3), \n encut=300,\n resource_dict={\"cores\": 2},\n )\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n result_dict = {\n k: f.result() \n for k, f in tqdm(future_dict.items())\n }\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ3C5brSik jovyan python R 2 1 3.107s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5brSij jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSQ jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSP jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA4 jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA3 jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5XQUsh jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ4Px1bKu jovyan executorl+ CA 2 1 4.656m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"100%|██████████| 7/7 [01:15<00:00, 10.72s/it]\n"},{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ3C5brSik jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5brSij jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSQ jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSP jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA4 jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA3 jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5XQUsh jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ4Px1bKu jovyan executorl+ CA 2 1 4.656m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"Exception ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\n"}],"execution_count":12},{"id":"ca353da1941c1c7c","cell_type":"markdown","source":"The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.","metadata":{}},{"id":"8bb73863-bfde-4e96-9323-5330b2051632","cell_type":"code","source":"fit_dict = analyse_results_for_energy_volume_curve(\n output_dict={\"energy\": result_dict},\n task_dict=task_dict,\n fit_type=\"polynomial\",\n fit_order=3,\n)","metadata":{"trusted":true},"outputs":[],"execution_count":13},{"id":"3d4189b5c74ba2a2","cell_type":"markdown","source":"The final energy volume curve plot summarizes the results of this calculation.","metadata":{}},{"id":"95000e45-dd86-4659-90f4-f2d144477703","cell_type":"code","source":"plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\nplt.xlabel(\"Volume [$\\AA^3$]\")\nplt.ylabel(\"Energy [eV]\")\nplt.legend()","metadata":{"trusted":true},"outputs":[{"execution_count":14,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg=="},"metadata":{}}],"execution_count":14},{"id":"8e67f9a4-d449-420c-9f62-72d106d18636","cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]} From 43256cf6071f892279480e5799024f3d90ff1253 Mon Sep 17 00:00:00 2001 From: jan-janssen Date: Sat, 4 Oct 2025 10:29:52 +0200 Subject: [PATCH 6/7] execute notebook --- notebooks/5-1-gpaw.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebooks/5-1-gpaw.ipynb b/notebooks/5-1-gpaw.ipynb index f7b81c40..1dd02f37 100644 --- a/notebooks/5-1-gpaw.ipynb +++ b/notebooks/5-1-gpaw.ipynb @@ -1 +1 @@ -{"metadata":{"kernelspec":{"name":"flux","display_name":"Flux","language":"python"},"language_info":{"name":"python","version":"3.10.16","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":5,"nbformat":4,"cells":[{"id":"745ca7d3-5046-4a8c-a370-d9d05b77a1b7","cell_type":"markdown","source":"# GPAW\nThe [gpaw](https://gpaw.readthedocs.io/index.html) density-functional theory (DFT) simulation code provides a Python interface supporting the [message passing interface (MPI) for Python - mpi4py](https://mpi4py.readthedocs.io) for parallelization. So `executorlib` is used to orchestrate multiple [gpaw](https://gpaw.readthedocs.io/index.html) simulation each using multiple CPU cores for parallelization. These kind of hierarchical workflows are one of the core strength of `executorlib`. While the same could be achieved by writing the whole simulation workflow using [mpi4py](https://mpi4py.readthedocs.io) this would drastically increase the complexity. With `executorlib` the user can quickly up-scale their simulation workflow without the need to address the parallel execution explicitly, rather the parallelization is introduced on a per-function level, by submitting the functions to the `FluxClusterExecutor` or `FluxJobExecutor`.","metadata":{}},{"id":"21852c01-efda-43fe-add9-d08123a82995","cell_type":"code","source":"import subprocess\nfrom ase.build import bulk\nfrom atomistics.workflows import (\n analyse_results_for_energy_volume_curve,\n get_tasks_for_energy_volume_curve,\n)\nimport matplotlib.pyplot as plt\nimport pprint\nfrom tqdm import tqdm\nfrom time import sleep","metadata":{"trusted":true},"outputs":[{"name":"stderr","output_type":"stream","text":"/srv/conda/envs/notebook/lib/python3.10/site-packages/atomistics/workflows/__init__.py:77: UserWarning: PhonopyWorkflow(), QuasiHarmonicWorkflow(), get_band_structure(), get_dynamical_matrix(), get_hesse_matrix(), get_thermal_properties_for_harmonic_approximation(), get_tasks_for_harmonic_approximation(), analyse_results_for_harmonic_approximation(), get_tasks_for_quasi_harmonic_approximation(), analyse_results_for_quasi_harmonic_approximation(), get_thermal_properties_for_quasi_harmonic_approximation(), plot_band_structure() and plot_dos() are not available as the import of the module named 'structuretoolkit' failed.\n raise_warning(module_list=phonopy_workflows, import_error=e)\n"}],"execution_count":1},{"id":"e15eed0da3c6547b","cell_type":"markdown","source":"The only function which is executed using [mpi4py](https://mpi4py.readthedocs.io) is the `evaluate_with_gpaw()` function:","metadata":{}},{"id":"aa435760-390f-4eff-88f4-96b15777de3e","cell_type":"code","source":"def evaluate_with_gpaw(task_dict, kpts, encut):\n import os\n os.environ[\"OMP_NUM_THREADS\"] = \"1\"\n os.environ[\"GPAW_MPI4PY\"] = \"1\"\n\n from mpi4py import MPI\n from gpaw import GPAW, PW\n from gpaw.mpi4pywrapper import MPI4PYWrapper\n\n structure = task_dict[\"calc_energy\"].copy()\n structure.calc = GPAW(\n xc=\"PBE\",\n mode=PW(encut),\n kpts=kpts,\n communicator=MPI4PYWrapper(MPI.COMM_WORLD),\n )\n return structure.get_potential_energy()","metadata":{"trusted":true},"outputs":[],"execution_count":2},{"id":"e9936ca22151d490","cell_type":"markdown","source":"As a first step of the workflow the equilibrium structure of four Aluminium atoms is strained by 5%.","metadata":{}},{"id":"a1d4e9a1-7275-4d9a-b038-db27185f00ae","cell_type":"code","source":"task_dict = get_tasks_for_energy_volume_curve(\n structure=bulk(\"Al\", a=4.05),\n num_points=7,\n vol_range=0.05,\n axes=(\"x\", \"y\", \"z\"),\n)\ntask_dict","metadata":{"trusted":true},"outputs":[{"execution_count":3,"output_type":"execute_result","data":{"text/plain":"{'calc_energy': {np.float64(0.95): Atoms(symbols='Al4', pbc=True, cell=[3.9813426685908118, 3.9813426685908118, 3.9813426685908118]),\n np.float64(0.9666667): Atoms(symbols='Al4', pbc=True, cell=[4.004490529815683, 4.004490529815683, 4.004490529815683]),\n np.float64(0.9833333): Atoms(symbols='Al4', pbc=True, cell=[4.027373829573266, 4.027373829573266, 4.027373829573266]),\n np.float64(1.0): Atoms(symbols='Al4', pbc=True, cell=[4.05, 4.05, 4.05]),\n np.float64(1.0166667): Atoms(symbols='Al4', pbc=True, cell=[4.072376144702493, 4.072376144702493, 4.072376144702493]),\n np.float64(1.0333333): Atoms(symbols='Al4', pbc=True, cell=[4.0945090584006865, 4.0945090584006865, 4.0945090584006865]),\n np.float64(1.05): Atoms(symbols='Al4', pbc=True, cell=[4.1164052451001565, 4.1164052451001565, 4.1164052451001565])}}"},"metadata":{}}],"execution_count":3},{"id":"8bf60b7b0f5af31a","cell_type":"markdown","source":"The resulting dictionary of structures `task_dict` is transformed to simplify the parallel execution:","metadata":{}},{"id":"73ad1043-eacd-4758-a7b4-f64969beabab","cell_type":"code","source":"task_loop_dict = {k: {\"calc_energy\": v} for k, v in task_dict[\"calc_energy\"].items()}","metadata":{"trusted":true},"outputs":[],"execution_count":4},{"id":"af5ba456f3fafd39","cell_type":"markdown","source":"The status of the flux cluster is validated using the `flux resource list` command and the `flux jobs -a` command, just to highlight flux was initialized correctly and has access to the available resources.","metadata":{}},{"id":"8a93aa2b-2bce-4c87-943c-38364a4324ee","cell_type":"code","source":"pprint.pp(subprocess.check_output([\"flux\", \"resource\", \"list\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' STATE NNODES NCORES NGPUS NODELIST',\n ' free 1 24 0 jupyter-jan-janssen-exe-q4mqmd0j',\n ' allocated 0 0 0 ',\n ' down 0 0 0 ',\n '']\n"}],"execution_count":5},{"id":"f7f072d5-ea3b-43f5-9ec1-0ea1036d7e25","cell_type":"code","source":"pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO', '']\n"}],"execution_count":6},{"id":"62c7297b-efae-4950-a513-3b84345ad7b4","cell_type":"markdown","source":"## FluxClusterExecutor\nThe [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) is used in this demonstration primarily because flux can be installed on any workstation for testing. The [SlurmClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#slurm) could be used analogously.","metadata":{}},{"id":"9cd01061-c84a-4d8d-80e1-c269af3d8c29","cell_type":"code","source":"from executorlib import FluxClusterExecutor","metadata":{"trusted":true},"outputs":[],"execution_count":7},{"id":"2670c218fbde5b02","cell_type":"markdown","source":"The for each strained structure a calculation task is submitted to the `FluxClusterExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.","metadata":{}},{"id":"11d7a7f3-5fbf-4377-ac98-71cd29caf433","cell_type":"code","source":"future_dict = {}\nwith FluxClusterExecutor() as exe:\n for k, v in task_loop_dict.items():\n future_dict[k] = exe.submit(\n evaluate_with_gpaw, \n task_dict=v, \n kpts=(3, 3, 3), \n encut=300,\n resource_dict={\"cores\": 2},\n )\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n result_dict = {\n k: f.result() \n for k, f in tqdm(future_dict.items())\n }\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ2gSToFV jovyan executorl+ R 2 1 0.199s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ R 2 1 0.948s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ R 2 1 1.309s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"100%|██████████| 7/7 [04:36<00:00, 39.49s/it] \n"},{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ4Px1bKu jovyan executorl+ R 2 1 4.572m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"}],"execution_count":8},{"id":"8c80e3bcb483b069","cell_type":"markdown","source":"The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.","metadata":{}},{"id":"5a5822c7-5ab6-483b-a3ab-8cef5fcaf269","cell_type":"code","source":"fit_dict = analyse_results_for_energy_volume_curve(\n output_dict={\"energy\": result_dict},\n task_dict=task_dict,\n fit_type=\"polynomial\",\n fit_order=3,\n)","metadata":{"trusted":true},"outputs":[],"execution_count":9},{"id":"571b7c25dcca8bb","cell_type":"markdown","source":"The final energy volume curve plot summarizes the results of this calculation.","metadata":{}},{"id":"d420b4c5-1a2f-4290-ba81-0c7f7bdf7ef3","cell_type":"code","source":"plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\nplt.xlabel(\"Volume [$\\AA^3$]\")\nplt.ylabel(\"Energy [eV]\")\nplt.legend()","metadata":{"trusted":true},"outputs":[{"execution_count":10,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg=="},"metadata":{}}],"execution_count":10},{"id":"fed42763-52cf-44c2-961d-6d00918ba6df","cell_type":"markdown","source":"## FluxJobExecutor\nIn analogy to the [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) the [FluxJobExecutor](https://executorlib.readthedocs.io/en/latest/3-hpc-job.html#flux) can be applied to distribute simulation within a given queuing system allocation. The calculation of the bulk modulus with [gpaw](https://gpaw.readthedocs.io) is implemented in the same way.","metadata":{}},{"id":"516a91d4-0be6-47a6-9c9c-f5b0082bfee7","cell_type":"code","source":"from executorlib import FluxJobExecutor","metadata":{"trusted":true},"outputs":[],"execution_count":11},{"id":"21bdd0d42f9806e4","cell_type":"markdown","source":"The for each strained structure a calculation task is submitted to the `FluxJobExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.","metadata":{}},{"id":"2b0c559b-a117-4766-b679-314ab9e65e97","cell_type":"code","source":"future_dict = {}\nwith FluxJobExecutor() as exe:\n for k, v in task_loop_dict.items():\n future_dict[k] = exe.submit(\n evaluate_with_gpaw, \n task_dict=v, \n kpts=(3, 3, 3), \n encut=300,\n resource_dict={\"cores\": 2},\n )\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n result_dict = {\n k: f.result() \n for k, f in tqdm(future_dict.items())\n }\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ3C5brSik jovyan python R 2 1 3.107s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5brSij jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSQ jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSP jovyan python R 2 1 3.200s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA4 jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA3 jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5XQUsh jovyan python R 2 1 3.201s '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ4Px1bKu jovyan executorl+ CA 2 1 4.656m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"100%|██████████| 7/7 [01:15<00:00, 10.72s/it]\n"},{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ3C5brSik jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5brSij jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSQ jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5aNTSP jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA4 jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5YtUA3 jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3C5XQUsh jovyan python R 2 1 1.329m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ4Px1bKu jovyan executorl+ CA 2 1 4.656m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3jUnECw jovyan executorl+ F 2 1 4.575m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ5EJzAWK jovyan executorl+ F 2 1 4.513m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2gSToFV jovyan executorl+ F 2 1 4.405m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2DdGndm jovyan executorl+ F 2 1 4.273m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ3AcE9oV jovyan executorl+ F 2 1 4.213m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n ' ƒ2NrUKNF jovyan executorl+ F 2 1 4.194m '\n 'jupyter-jan-janssen-exe-q4mqmd0j',\n '']\n"},{"name":"stderr","output_type":"stream","text":"Exception ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-q4mqmd0j exited and exit-timeout=30s has expired\n"}],"execution_count":12},{"id":"ca353da1941c1c7c","cell_type":"markdown","source":"The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.","metadata":{}},{"id":"8bb73863-bfde-4e96-9323-5330b2051632","cell_type":"code","source":"fit_dict = analyse_results_for_energy_volume_curve(\n output_dict={\"energy\": result_dict},\n task_dict=task_dict,\n fit_type=\"polynomial\",\n fit_order=3,\n)","metadata":{"trusted":true},"outputs":[],"execution_count":13},{"id":"3d4189b5c74ba2a2","cell_type":"markdown","source":"The final energy volume curve plot summarizes the results of this calculation.","metadata":{}},{"id":"95000e45-dd86-4659-90f4-f2d144477703","cell_type":"code","source":"plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\nplt.xlabel(\"Volume [$\\AA^3$]\")\nplt.ylabel(\"Energy [eV]\")\nplt.legend()","metadata":{"trusted":true},"outputs":[{"execution_count":14,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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yhT8/vvvGr/+jRs38O677+LDDz+Er68vHB0d71qTlZubi5KSEgBASUkJ/vjjD7Rr165Z75uImo7hiogM3syZM5GSkoIjR46o7vv6668xfvx4ODs7o6ysDKtXr8aKFSswcuRIdOjQAV999RWsra2xbt26Zr12WFgY3nrrLbRp0wYLFy6EtbU1XF1dMXv2bLRp0waLFy9GQUEBzpw5AwAoKyvDypUr8fXXX2P48OEICgrCjBkzMGXKFKxdu1bj11+8eDHGjRuH0NBQAECHDh2QkJBQb5uMjAwMGDAAYWFh6N+/P+bOnYsuXbo0630TUdPJG9+EiEha7du3R9++ffH1119j0KBBSE5OxtGjR3Hw4EEAQHJyMqqrq9GvXz/Vc8zNzdGrVy9cuHChWa99Z0iRyWRo1aoVOnfurLrPw8MDAJCXlwcASExMRGVlJYYOHVpvPwqFAt26ddPotRMTE/Htt9/Wew+dOnW6q3PVvXv3e/7CkIikwXBFREZh1qxZmDt3Lv73v/9h/fr1CAgIwODBgwFAdbpQEIR6zxFF8a77bjMzM8M/x/xVV1fftZ25uXm9vwVBqHff7f0rlcp6/+/PP/8MHx+fes+1tLRs+E3+w7x581BUVARfX1/VfUqlEl5eXhrth4j0i6cFicgoTJgwATKZDN9//z02btyIJ598UhVsQkJCYGFhgWPHjqm2r66uRmxsrOp02j+5ubnVG09QUlKCa9euNbvODh06wNLSEmlpaQgJCal38/PzU3s/e/fuxalTpxAXF4f4+HjVbd26dcjKysL169ebXSsR6QY7V0RkFOzs7DBx4kS8+eabKC4uxowZM1SP2draYs6cOViwYAFcXFzg7++Pjz76COXl5apfE/7Tv/71L2zYsAGjR4+Gs7Mz/v3vf0MmkzW7Tnt7e7z66quYN28elEol+vfvj5KSEvz555+ws7PD9OnTG91HdXU15s+fjwULFqBr1671HnNwcAAAJCQk3Hf+FxFJi+GKiIzGrFmzsG7dOgwbNgz+/v71Hvvggw+gVCoxdepUlJaWokePHjhw4MA9Z0IBwMKFC3H16lWMGjUKjo6OePfdd7XSuQKAd999F+7u7li+fDmuXr0KJycnhIeH480331Tr+atWrUJRURHmzp1712N+fn6wsbFBfHw8wxWRgeK1BYmIDMDAgQPRtWvXu2ZvaZMgCNi5cyfGjh2rs9cgIq65IiIyGF988QXs7Oxw9uxZre732WefhZ2dnVb3SUT3x84VEZEByMzMREVFBQDA398fFhYWWtt3Xl6easiol5cXbG1ttbZvIrobwxURERGRFvG0IBEREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEWMVwRERERaRHDFREREZEW/T9ADZZVSMuqKgAAAABJRU5ErkJggg=="},"metadata":{}}],"execution_count":14},{"id":"8e67f9a4-d449-420c-9f62-72d106d18636","cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]} +{"metadata":{"kernelspec":{"name":"flux","display_name":"Flux","language":"python"},"language_info":{"name":"python","version":"3.10.16","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":5,"nbformat":4,"cells":[{"id":"745ca7d3-5046-4a8c-a370-d9d05b77a1b7","cell_type":"markdown","source":"# GPAW\nThe [gpaw](https://gpaw.readthedocs.io/index.html) density-functional theory (DFT) simulation code provides a Python interface supporting the [message passing interface (MPI) for Python - mpi4py](https://mpi4py.readthedocs.io) for parallelization. So `executorlib` is used to orchestrate multiple [gpaw](https://gpaw.readthedocs.io/index.html) simulation each using multiple CPU cores for parallelization. These kind of hierarchical workflows are one of the core strength of `executorlib`. While the same could be achieved by writing the whole simulation workflow using [mpi4py](https://mpi4py.readthedocs.io) this would drastically increase the complexity. With `executorlib` the user can quickly up-scale their simulation workflow without the need to address the parallel execution explicitly, rather the parallelization is introduced on a per-function level, by submitting the functions to the `FluxClusterExecutor` or `FluxJobExecutor`.","metadata":{}},{"id":"21852c01-efda-43fe-add9-d08123a82995","cell_type":"code","source":"import subprocess\nfrom ase.build import bulk\nfrom atomistics.workflows import (\n analyse_results_for_energy_volume_curve,\n get_tasks_for_energy_volume_curve,\n)\nimport matplotlib.pyplot as plt\nimport pprint\nfrom tqdm import tqdm\nfrom time import sleep","metadata":{"trusted":true},"outputs":[{"name":"stderr","output_type":"stream","text":"/srv/conda/envs/notebook/lib/python3.10/site-packages/atomistics/workflows/__init__.py:77: UserWarning: PhonopyWorkflow(), QuasiHarmonicWorkflow(), get_band_structure(), get_dynamical_matrix(), get_hesse_matrix(), get_thermal_properties_for_harmonic_approximation(), get_tasks_for_harmonic_approximation(), analyse_results_for_harmonic_approximation(), get_tasks_for_quasi_harmonic_approximation(), analyse_results_for_quasi_harmonic_approximation(), get_thermal_properties_for_quasi_harmonic_approximation(), plot_band_structure() and plot_dos() are not available as the import of the module named 'structuretoolkit' failed.\n raise_warning(module_list=phonopy_workflows, import_error=e)\n"}],"execution_count":1},{"id":"e15eed0da3c6547b","cell_type":"markdown","source":"The only function which is executed using [mpi4py](https://mpi4py.readthedocs.io) is the `evaluate_with_gpaw()` function:","metadata":{}},{"id":"aa435760-390f-4eff-88f4-96b15777de3e","cell_type":"code","source":"def evaluate_with_gpaw(task_dict, kpts, encut):\n import os\n os.environ[\"OMP_NUM_THREADS\"] = \"1\"\n os.environ[\"GPAW_MPI4PY\"] = \"1\"\n\n from mpi4py import MPI\n from gpaw import GPAW, PW\n from gpaw.mpi4pywrapper import MPI4PYWrapper\n\n structure = task_dict[\"calc_energy\"].copy()\n structure.calc = GPAW(\n xc=\"PBE\",\n mode=PW(encut),\n kpts=kpts,\n communicator=MPI4PYWrapper(MPI.COMM_WORLD),\n )\n return structure.get_potential_energy()","metadata":{"trusted":true},"outputs":[],"execution_count":2},{"id":"e9936ca22151d490","cell_type":"markdown","source":"As a first step of the workflow the equilibrium structure of four Aluminium atoms is strained by 5%.","metadata":{}},{"id":"a1d4e9a1-7275-4d9a-b038-db27185f00ae","cell_type":"code","source":"task_dict = get_tasks_for_energy_volume_curve(\n structure=bulk(\"Al\", a=4.05),\n num_points=7,\n vol_range=0.05,\n axes=(\"x\", \"y\", \"z\"),\n)\ntask_dict","metadata":{"trusted":true},"outputs":[{"execution_count":3,"output_type":"execute_result","data":{"text/plain":"{'calc_energy': {np.float64(0.95): Atoms(symbols='Al', pbc=True, cell=[[0.0, 1.9906713342954059, 1.9906713342954059], [1.9906713342954059, 0.0, 1.9906713342954059], [1.9906713342954059, 1.9906713342954059, 0.0]]),\n np.float64(0.9666667): Atoms(symbols='Al', pbc=True, cell=[[0.0, 2.0022452649078417, 2.0022452649078417], [2.0022452649078417, 0.0, 2.0022452649078417], [2.0022452649078417, 2.0022452649078417, 0.0]]),\n np.float64(0.9833333): Atoms(symbols='Al', pbc=True, cell=[[0.0, 2.013686914786633, 2.013686914786633], [2.013686914786633, 0.0, 2.013686914786633], [2.013686914786633, 2.013686914786633, 0.0]]),\n np.float64(1.0): Atoms(symbols='Al', pbc=True, cell=[[0.0, 2.025, 2.025], [2.025, 0.0, 2.025], [2.025, 2.025, 0.0]]),\n np.float64(1.0166667): Atoms(symbols='Al', pbc=True, cell=[[0.0, 2.0361880723512464, 2.0361880723512464], [2.0361880723512464, 0.0, 2.0361880723512464], [2.0361880723512464, 2.0361880723512464, 0.0]]),\n np.float64(1.0333333): Atoms(symbols='Al', pbc=True, cell=[[0.0, 2.0472545292003432, 2.0472545292003432], [2.0472545292003432, 0.0, 2.0472545292003432], [2.0472545292003432, 2.0472545292003432, 0.0]]),\n np.float64(1.05): Atoms(symbols='Al', pbc=True, cell=[[0.0, 2.0582026225500782, 2.0582026225500782], [2.0582026225500782, 0.0, 2.0582026225500782], [2.0582026225500782, 2.0582026225500782, 0.0]])}}"},"metadata":{}}],"execution_count":3},{"id":"8bf60b7b0f5af31a","cell_type":"markdown","source":"The resulting dictionary of structures `task_dict` is transformed to simplify the parallel execution:","metadata":{}},{"id":"73ad1043-eacd-4758-a7b4-f64969beabab","cell_type":"code","source":"task_loop_dict = {k: {\"calc_energy\": v} for k, v in task_dict[\"calc_energy\"].items()}","metadata":{"trusted":true},"outputs":[],"execution_count":4},{"id":"af5ba456f3fafd39","cell_type":"markdown","source":"The status of the flux cluster is validated using the `flux resource list` command and the `flux jobs -a` command, just to highlight flux was initialized correctly and has access to the available resources.","metadata":{}},{"id":"8a93aa2b-2bce-4c87-943c-38364a4324ee","cell_type":"code","source":"pprint.pp(subprocess.check_output([\"flux\", \"resource\", \"list\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' STATE NNODES NCORES NGPUS NODELIST',\n ' free 1 24 0 jupyter-jan-janssen-exe-bq7jl2p3',\n ' allocated 0 0 0 ',\n ' down 0 0 0 ',\n '']\n"}],"execution_count":5},{"id":"f7f072d5-ea3b-43f5-9ec1-0ea1036d7e25","cell_type":"code","source":"pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO', '']\n"}],"execution_count":6},{"id":"62c7297b-efae-4950-a513-3b84345ad7b4","cell_type":"markdown","source":"## FluxClusterExecutor\nThe [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) is used in this demonstration primarily because flux can be installed on any workstation for testing. The [SlurmClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#slurm) could be used analogously.","metadata":{}},{"id":"9cd01061-c84a-4d8d-80e1-c269af3d8c29","cell_type":"code","source":"from executorlib import FluxClusterExecutor","metadata":{"trusted":true},"outputs":[],"execution_count":7},{"id":"2670c218fbde5b02","cell_type":"markdown","source":"The for each strained structure a calculation task is submitted to the `FluxClusterExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.","metadata":{}},{"id":"11d7a7f3-5fbf-4377-ac98-71cd29caf433","cell_type":"code","source":"future_dict = {}\nwith FluxClusterExecutor() as exe:\n for k, v in task_loop_dict.items():\n future_dict[k] = exe.submit(\n evaluate_with_gpaw, \n task_dict=v, \n kpts=(3, 3, 3), \n encut=300,\n resource_dict={\"cores\": 2},\n )\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n result_dict = {\n k: f.result() \n for k, f in tqdm(future_dict.items())\n }\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ2jy4695 jovyan executorl+ R 2 1 0.694s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ2SXxXwu jovyan executorl+ R 2 1 1.406s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ2JH6XvX jovyan executorl+ R 2 1 1.767s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n '']\n"},{"name":"stderr","output_type":"stream","text":"100%|██████████| 7/7 [01:10<00:00, 10.11s/it]\n"},{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒ5ug76VM jovyan executorl+ R 2 1 1.127m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ4iiCWB1 jovyan executorl+ R 2 1 1.172m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ3t4v4to jovyan executorl+ R 2 1 1.205m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ3PybgBq jovyan executorl+ R 2 1 1.223m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ2jy4695 jovyan executorl+ R 2 1 1.248m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ2SXxXwu jovyan executorl+ F 2 1 1.248m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ2JH6XvX jovyan executorl+ F 2 1 1.254m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n '']\n"}],"execution_count":8},{"id":"8c80e3bcb483b069","cell_type":"markdown","source":"The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.","metadata":{}},{"id":"5a5822c7-5ab6-483b-a3ab-8cef5fcaf269","cell_type":"code","source":"fit_dict = analyse_results_for_energy_volume_curve(\n output_dict={\"energy\": result_dict},\n task_dict=task_dict,\n fit_type=\"polynomial\",\n fit_order=3,\n)","metadata":{"trusted":true},"outputs":[],"execution_count":9},{"id":"571b7c25dcca8bb","cell_type":"markdown","source":"The final energy volume curve plot summarizes the results of this calculation.","metadata":{}},{"id":"d420b4c5-1a2f-4290-ba81-0c7f7bdf7ef3","cell_type":"code","source":"plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\nplt.xlabel(\"Volume [$\\AA^3$]\")\nplt.ylabel(\"Energy [eV]\")\nplt.legend()","metadata":{"trusted":true},"outputs":[{"execution_count":10,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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"},"metadata":{}}],"execution_count":10},{"id":"fed42763-52cf-44c2-961d-6d00918ba6df","cell_type":"markdown","source":"## FluxJobExecutor\nIn analogy to the [FluxClusterExecutor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html#flux) the [FluxJobExecutor](https://executorlib.readthedocs.io/en/latest/3-hpc-job.html#flux) can be applied to distribute simulation within a given queuing system allocation. The calculation of the bulk modulus with [gpaw](https://gpaw.readthedocs.io) is implemented in the same way.","metadata":{}},{"id":"516a91d4-0be6-47a6-9c9c-f5b0082bfee7","cell_type":"code","source":"from executorlib import FluxJobExecutor","metadata":{"trusted":true},"outputs":[],"execution_count":11},{"id":"21bdd0d42f9806e4","cell_type":"markdown","source":"The for each strained structure a calculation task is submitted to the `FluxJobExecutor`. After the successful submission the current status of the flux queue is printed using `flux jobs -a`. Finally, the results are collected by gathering the [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html#future-objects) objects.","metadata":{}},{"id":"2b0c559b-a117-4766-b679-314ab9e65e97","cell_type":"code","source":"future_dict = {}\nwith FluxJobExecutor() as exe:\n for k, v in task_loop_dict.items():\n future_dict[k] = exe.submit(\n evaluate_with_gpaw, \n task_dict=v, \n kpts=(3, 3, 3), \n encut=300,\n resource_dict={\"cores\": 2},\n )\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))\n result_dict = {\n k: f.result() \n for k, f in tqdm(future_dict.items())\n }\n sleep(1)\n pprint.pp(subprocess.check_output([\"flux\", \"jobs\", \"-a\"], universal_newlines=True).split(\"\\n\"))","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒe43yvxQ jovyan python R 2 1 4.126s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe43yvxP jovyan python R 2 1 4.127s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe42Vwg4 jovyan python R 2 1 4.127s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe42Vwg3 jovyan python R 2 1 4.127s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe411xPi jovyan python R 2 1 4.219s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe411xPh jovyan python R 2 1 4.220s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe3yXy7M jovyan python R 2 1 4.221s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ5ug76VM jovyan executorl+ F 2 1 1.187m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ4iiCWB1 jovyan executorl+ F 2 1 1.213m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ3PybgBq jovyan executorl+ F 2 1 1.258m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ3t4v4to jovyan executorl+ F 2 1 1.237m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ2jy4695 jovyan executorl+ F 2 1 1.263m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ2SXxXwu jovyan executorl+ F 2 1 1.248m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ2JH6XvX jovyan executorl+ F 2 1 1.254m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n '']\n"},{"name":"stderr","output_type":"stream","text":"100%|██████████| 7/7 [00:23<00:00, 3.35s/it]\n"},{"name":"stdout","output_type":"stream","text":"[' JOBID USER NAME ST NTASKS NNODES TIME INFO',\n ' ƒe43yvxQ jovyan python R 2 1 29.27s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe43yvxP jovyan python R 2 1 29.27s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe42Vwg4 jovyan python R 2 1 29.27s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe42Vwg3 jovyan python R 2 1 29.27s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe411xPi jovyan python R 2 1 29.27s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe411xPh jovyan python R 2 1 29.27s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒe3yXy7M jovyan python R 2 1 29.27s '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ5ug76VM jovyan executorl+ F 2 1 1.187m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ4iiCWB1 jovyan executorl+ F 2 1 1.213m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ3PybgBq jovyan executorl+ F 2 1 1.258m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ3t4v4to jovyan executorl+ F 2 1 1.237m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ2jy4695 jovyan executorl+ F 2 1 1.263m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ2SXxXwu jovyan executorl+ F 2 1 1.248m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n ' ƒ2JH6XvX jovyan executorl+ F 2 1 1.254m '\n 'jupyter-jan-janssen-exe-bq7jl2p3',\n '']\n"},{"name":"stderr","output_type":"stream","text":"Exception ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-bq7jl2p3 exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-bq7jl2p3 exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-bq7jl2p3 exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-bq7jl2p3 exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 1 on host jupyter-jan-janssen-exe-bq7jl2p3 exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-bq7jl2p3 exited and exit-timeout=30s has expired\nException ignored in: \nTraceback (most recent call last):\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 179, in __del__\n self.shutdown(wait=True)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/standalone/interactive/communication.py\", line 158, in shutdown\n self._spawner.shutdown(wait=wait)\n File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/executorlib/task_scheduler/interactive/spawner_flux.py\", line 150, in shutdown\n self._future.result()\n File \"/srv/conda/envs/notebook/lib/flux/python3.10/flux/job/executor.py\", line 331, in result\n return super().result(*args, **kwargs)\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n return self.__get_result()\n File \"/srv/conda/envs/notebook/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n raise self._exception\nflux.job.event.JobException: job.exception: type=exec: rank 0 on host jupyter-jan-janssen-exe-bq7jl2p3 exited and exit-timeout=30s has expired\n"}],"execution_count":12},{"id":"ca353da1941c1c7c","cell_type":"markdown","source":"The resulting energies for the different volumes are fitted using a 3rd order polynomial to derive the bulk modulus as second derivative multiplied by the equilibrium volume.","metadata":{}},{"id":"8bb73863-bfde-4e96-9323-5330b2051632","cell_type":"code","source":"fit_dict = analyse_results_for_energy_volume_curve(\n output_dict={\"energy\": result_dict},\n task_dict=task_dict,\n fit_type=\"polynomial\",\n fit_order=3,\n)","metadata":{"trusted":true},"outputs":[],"execution_count":13},{"id":"3d4189b5c74ba2a2","cell_type":"markdown","source":"The final energy volume curve plot summarizes the results of this calculation.","metadata":{}},{"id":"95000e45-dd86-4659-90f4-f2d144477703","cell_type":"code","source":"plt.plot(fit_dict[\"volume\"], fit_dict[\"energy\"], label=\"$B_0$= %0.2f GPa\" % fit_dict[\"bulkmodul_eq\"])\nplt.xlabel(\"Volume [$\\AA^3$]\")\nplt.ylabel(\"Energy [eV]\")\nplt.legend()","metadata":{"trusted":true},"outputs":[{"execution_count":14,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"iVBORw0KGgoAAAANSUhEUgAAAmsAAAG2CAYAAAAgBMGIAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcMdJREFUeJzt3Xl4TGf/BvB7MplMFtlkZJNEImQTJPaEFkUSa9FausRSUlqpUhRdRHkVRTdt0ZbQVqkWrWoRlLZIxJLYBQmCJCKJLBKZLHN+f/iZGlkkkTiz3J/rmus15zznme8573TmzjPnPEciCIIAIiIiItJKRmIXQERERERVY1gjIiIi0mIMa0RERERajGGNiIiISIsxrBERERFpMYY1IiIiIi3GsEZERESkxRjWiIiIiLSYsdgF0H9UKhXS0tJgaWkJiUQidjlERERUA4IgoKCgAM7OzjAyqv9xMIY1LZKWlgZXV1exyyAiIqI6uHbtGlxcXOq9X4Y1LWJpaQng3v/ZVlZWIldDRERENZGfnw9XV1f193h9Y1jTIvd/+rSysmJYIyIi0jENdQoTLzAgIiIi0mIMa0RERERajGGNiIiISIvxnDUdU15ejtLSUrHLID0klUphbGzMaWOIiLQMw5oOuXPnDq5fvw5BEMQuhfSUubk5nJycYGJiInYpRET0/xjWdER5eTmuX78Oc3NzNGnShKMfVK8EQUBJSQlu3bqFy5cvo2XLlg0ysSMREdUew5qOKC0thSAIaNKkCczMzMQuh/SQmZkZZDIZrl69ipKSEpiamopdEhERQYcuMBg0aBDc3NxgamoKJycnhIeHIy0trdpttmzZgtDQUCgUCkgkEiQmJlZo06NHD0gkEo3HyJEjNdrcvn0b4eHhsLa2hrW1NcLDw5Gbm6vRJjU1FQMHDoSFhQUUCgUmT56MkpKSx93tCjiiRg2Jo2lERNpHZz6Ze/bsiU2bNiEpKQmbN29GcnIynn/++Wq3KSwsRNeuXbFo0aJq20VERCA9PV39WLVqlcb6F198EYmJidi5cyd27tyJxMREhIeHq9eXl5ejf//+KCwsxIEDB7Bx40Zs3rwZ06ZNq/sOExEREUGHfgadOnWq+t/NmjXDrFmzMHjwYJSWlkImk1W6zf1AdeXKlWr7Njc3h6OjY6Xrzp07h507dyIuLg6dO3cGAHzzzTcICgpCUlISvL29ERMTg7Nnz+LatWtwdnYGACxbtgxjxozBggULeDcCIiIiqjOdGVl7UE5ODtavX4/g4OAqg1ptrF+/HgqFAq1atcL06dNRUFCgXhcbGwtra2t1UAOALl26wNraGocOHVK38ff3Vwc1AAgNDYVSqcSxY8eqfF2lUon8/HyNBxEREdGDdCqszZw5ExYWFrCzs0Nqaip+++23x+7zpZdewoYNG7B//368//772Lx5M4YOHapen5GRAXt7+wrb2dvbIyMjQ93GwcFBY72trS1MTEzUbSqzcOFC9Xlw1tbWcHV1fez90VZPP/20xnmBjRs3xuDBg3Hr1q0Gf+2ysjK899578PDwgJmZGZo3b4558+ZBpVKp26xYsQJt2rRR35c1KCgIO3bsqLLPhQsXomPHjrC0tIS9vT0GDx6MpKQkjTbu7u4VzoeUSCSYNGlStfVmZGTgzTffRIsWLWBqagoHBwd069YNK1euRFFRkbrdmDFj1H3KZDI0b94c06dPR2FhYR2PFBERaSNRw9rcuXMr/TJ78HH06FF1+xkzZiAhIQExMTGQSqUYNWrUY885FhERgd69e8Pf3x8jR47EL7/8gj179uD48ePqNpWd1C8IgsbymrR52OzZs5GXl6d+XLt27bH2RVsJgoDExEQsXboU6enpuHHjBjZs2IC//voL//vf/xr89RcvXoyVK1fiiy++wLlz5/DRRx9hyZIlWL58ubqNi4sLFi1ahKNHj+Lo0aN45pln8Oyzz+LMmTOV9vn3339j0qRJiIuLw+7du1FWVoaQkBCNoHTkyBGNcyF3794NABg2bFiVtaakpCAwMBAxMTH48MMPkZCQgD179mDq1Kn4/fffsWfPHo32YWFhSE9PR0pKCv73v//hq6++wvTp0x/ncBER6aWFf57Doh3nkVekexPLi3rOWmRkZIUrLx/m7u6u/rdCoYBCoYCXlxd8fX3h6uqKuLg4BAUF1VtN7dq1g0wmw8WLF9GuXTs4Ojri5s2bFdrdunVLPZrm6OiIw4cPa6y/ffs2SktLK4y4PUgul0Mul9db7drq4sWLKCgoQI8ePdTnBjo7O8PT0/OJjALFxsbi2WefRf/+/QHce09t2LBB4w+BgQMHamyzYMECrFixAnFxcWjVqlWFPnfu3KnxPDo6Gvb29jh27BiefvppAECTJk002ixatAienp7o3r17lbW+/vrrMDY2xtGjR2FhYaFe3rp1azz33HMV/jiRy+XqY/riiy9i3759+PXXX7FixQrs3LkT//vf/3D69GlIpVIEBQXhs88+g6enZ5WvT0Skj1Kzi7Dm4GWUlgt42kuBYE+F2CXViqhh7X74qov7X1pKpbI+S8KZM2dQWloKJycnAEBQUBDy8vIQHx+PTp06AQAOHz6MvLw8BAcHq9ssWLAA6enp6u1iYmIgl8vRvn37eq3vPkEQcLe0vEH6fhQzmbRWU4gcO3YMJiYmaN26NYB7/5999913uHjxIr755ptHbv/hhx/iww8/rLbNjh078NRTT1W67v5PiBcuXICXlxdOnDiBAwcO4NNPP620fXl5OX7++WcUFhbW+A+BvLw8AEDjxo0rXV9SUoIffvgBb731VpXHLjs7Wz2i9mBQe9CjjruZmZn6dmSFhYV466230Lp1axQWFmLOnDkYMmQIEhMTOUUHERmUT/ZcQGm5gKda6l5QA3TkatD4+HjEx8ejW7dusLW1RUpKCubMmQNPT0+NL1MfHx8sXLgQQ4YMAXDvQoTU1FT1fGz3zylydHSEo6MjkpOTsX79evTr1w8KhQJnz57FtGnTEBgYiK5duwIAfH19ERYWhoiICPWUHq+++ioGDBgAb29vAEBISAj8/PwQHh6OJUuWICcnB9OnT0dERESDXQl6t7QcfnN2NUjfj3J2XijMTWr+1jl+/DhKS0vVQaaoqAj29vbYtWsXOnToAADYvn07pk2bBpVKhZkzZ2L8+PHq7SdOnIjhw4dX+xpNmzatct3MmTORl5cHHx8fSKVSlJeXY8GCBXjhhRc02p06dQpBQUEoLi5Go0aNsHXrVvj5+T1y/wRBwFtvvYVu3brB39+/0ja//vorcnNzMWbMmCr7uXTpEgRBUL+v7lMoFCguLgYATJo0CYsXL650+/j4ePz444/o1asXAOC5557TWL969WrY29vj7NmzVdZJRKRvzqXn49fEGwCAt0N9RK6mbnQirJmZmWHLli2IiopCYWEhnJycEBYWho0bN2r8jJiUlKQe4QCAbdu2YezYsern939yjYqKwty5c2FiYoK9e/fis88+w507d+Dq6or+/fsjKioKUqlUvd369esxefJkhISEALg3Qe8XX3yhXi+VSvHHH3/g9ddfR9euXWFmZoYXX3wRS5cubbBjokuOHTuG4cOHq89Pu3XrFmbPno0JEybgxIkT6rCzb98+WFlZoV27dhg6dKg63DVu3LjKEaua+Omnn/DDDz/gxx9/RKtWrZCYmIgpU6bA2dkZo0ePVrfz9vZGYmIicnNzsXnzZowePRp///33IwNbZGQkTp48iQMHDlTZZvXq1ejbt6/GFcNVeXj0LD4+HiqVCi+99FKFkeTt27ejUaNGKCsrQ2lpKZ599ln1uXjJycl4//33ERcXh6ysLPUFFampqQxrRGQwlu5KgiAA/ds4obWLtdjl1I1AWiMvL08AIOTl5VVYd/fuXeHs2bPC3bt3BUEQBJVKJRQqS0V5qFSqWu2XjY2NsHz5co1lv//+uwBASE5OFg4ePCgMHjxYvW7y5MnCjz/+qH6+YMECwcLCotrHP//8U+Xru7i4CF988YXGsvnz5wve3t7V1t2rVy/h1VdfrbZNZGSk4OLiIqSkpFTZ5sqVK4KRkZHw66+/VttXVlaWIJFIhIULF1a6vnv37sKbb76pfj569Gihd+/ewsWLF4UrV64IJSUlGu19fX2FkJAQYc+ePcLZs2eF06dPCwCErVu3VlnDw+8zIiJdFn85W2g2c7vQfPYfQnJmQYO9TnXf3/VBJ0bWqCKJRFKrnyLFkpKSgtzcXLRr167CcqlUisaNG+P48eMaP2O6uLjgxo0b6ueP+zNoUVFRhXO0pFKpxtQdlREEocpzIgVBwBtvvIGtW7di//798PDwqLKf+xcf3L/AoSp2dnbo06cPvvjiC7zxxhtVnrf2IAsLC7Ro0aLC8uzsbJw7dw6rVq1Sn8tX3cgfEZG+EQQBH+08DwAY3sEVzZs0ErmiutP+b3vSaceOHYNEIoGDgwMyMjJQWFiIf//9F1FRUZg4cSJsbGwqnX7lwZ8CH/dn0IEDB2LBggVwc3NDq1atkJCQgI8//hivvPKKus0777yDvn37wtXVFQUFBdi4cSP279+vvurziy++wNatW7F3714A984d+/HHH/Hbb7/B0tJSPZ+etbU1zMzM1P2qVCpER0dj9OjRMDZ+9H9uX331Fbp27YoOHTpg7ty5aNOmDYyMjHDkyBGcP3++xhes2Nraws7ODl9//TWcnJyQmpqKWbNm1fiYERHpuv1Jt3Dkym3IjY3wZq+WYpfzWBjWqEEdP34cgiCoR39sbW3RsmVLfPzxx+rzxZo2baoxknb9+nWNO0Y8ruXLl+P999/H66+/jszMTDg7O2PChAmYM2eOus3NmzcRHh6O9PR0WFtbo02bNti5cyf69OkDAMjKykJycrK6/YoVKwAAPXr00Hit6OhojYsI9uzZg9TUVI1gWB1PT08kJCTgww8/xOzZs3H9+nXI5XL4+flh+vTpeP3112vUj5GRETZu3IjJkyfD398f3t7e+PzzzyvUS0Skj1QqAYv/f1RtTFd3OFqbilzR45EIlQ1rkCjy8/NhbW2NvLy8CleRFhcX4/Lly/Dw8ICpqW6/6R5WVlYGX19f7N+/X32BQVxcHOzs7MQuzeDo8/uMiAzHb4k38ObGRFiaGuPft3vCxtykQV+vuu/v+sCRNRKdsbExli1bhp49e0KlUuHtt99mUCMiojopKVNhWcwFAMDE7p4NHtSeBIY10gqDBg3CoEGDxC6DiIh03E9HUpGaUwRFIznGdnUXu5x6wWnMiYiISC8UlZThs72XAABv9mqhE7Mm1ATDGhEREemF6INXkHVHCbfG5hjR0U3scuoNwxoRERHpvNuFJVi5/95V+9NCvGBirD8RR3/2hIiIiAzWyr+TUaAsg4+jJQa2efSt/XQJw5qO4Uwr1JD4/iIiXZSRV4y1h64AAGaG+cDISFL9BjqGYU1H3L+xfElJiciVkD4rKioCAMhkMpErISKquc/2XoSyTIWO7rbo4d1E7HLqnX5cJmEAjI2NYW5ujlu3bkEmk1W41yXR4xAEAUVFRcjMzISNjY36jwMiIm2XcusONh29BgB4O8xH43aF+oJhTUdIJBI4OTnh8uXLuHr1qtjlkJ6ysbGBo6Oj2GUQEdXYst0XUK4S0MvHHh3d634faW3GsKZDTExM0LJlS/4USg1CJpNxRI2IdMqp63n442Q6JBJgeqi32OU0GIY1HWNkZMR7NhIREQH4aNe9m7UPDmgKX6f6vyentuCJT0RERKRzDl3Kwr8XsyCTSjC1t5fY5TQohjUiIiLSKYIgYPGuJADAi53c4GZnLnJFDYthjYiIiHRKzNmbOHEtF+YmUkQ+01LschocwxoRERHpjHKVgCX/P6o2rpsHmljKRa6o4TGsERERkc7Ycvw6LmXegY25DBFPNxe7nCeCYY2IiIh0QnFpOT7dcxEA8HoPT1iZGsbdVhjWiIiISCesP5yKG7l34WhlilFB7mKX88QwrBEREZHWKyguxZf7LgEApvRuCVOZ4UzizbBGREREWu/bfy8jp7AEzRUWeL69i9jlPFEMa0RERKTVsu4o8e2/KQDu3VbKWGpY8cWw9paIiIh0zpf7LqGwpBytm1qjr7+j2OU8cQxrREREpLWu3y7C+rhUAMDMMB9IJBKRK3ryGNaIiIhIa3265yJKylUI9rRDt5YKscsRBcMaERERaaULNwuw5fh1AMDbYT4iVyMehjUiIiLSSkt3JUElAGGtHBHgaiN2OaJhWCMiIiKtczz1NmLO3oSRBJge6iV2OaJiWCMiIiKtIggCFu84DwB4vr0LWthbilyRuBjWiIiISKv8czELhy/nwMTYCG/2NuxRNYBhjYiIiLSISiXgo533RtVGdWmGpjZmIlckPoY1IiIi0hp/nErHmbR8NJIb4/WeLcQuRyvoTFgbNGgQ3NzcYGpqCicnJ4SHhyMtLa3abbZs2YLQ0FAoFApIJBIkJiZWaNOjRw9IJBKNx8iRI9Xrr1y5gnHjxsHDwwNmZmbw9PREVFQUSkpKNPp5uA+JRIKVK1fWy74TEREZgtJyFT7efQEA8OrTzdHYwkTkirSDsdgF1FTPnj3xzjvvwMnJCTdu3MD06dPx/PPP49ChQ1VuU1hYiK5du2LYsGGIiIiosl1ERATmzZunfm5m9t+Q6/nz56FSqbBq1Sq0aNECp0+fRkREBAoLC7F06VKNfqKjoxEWFqZ+bm1tXZddJSIiMkg/H72Oy1mFsLMwwSvdPMQuR2voTFibOnWq+t/NmjXDrFmzMHjwYJSWlkImk1W6TXh4OIB7o2PVMTc3h6Nj5fcaCwsL0whgzZs3R1JSElasWFEhrNnY2FTZDxEREVXtbkk5Ptt7b1Qt8pkWaCTXmYjS4HTmZ9AH5eTkYP369QgODq4yqNXG+vXroVAo0KpVK0yfPh0FBQXVts/Ly0Pjxo0rLI+MjIRCoUDHjh2xcuVKqFSqavtRKpXIz8/XeBARERmidbFXcDNfiaY2Znixs5vY5WgVnYqtM2fOxBdffIGioiJ06dIF27dvf+w+X3rpJXh4eMDR0RGnT5/G7NmzceLECezevbvS9snJyVi+fDmWLVumsXz+/Pno1asXzMzMsHfvXkybNg1ZWVl47733qnzthQsX4oMPPnjsfSAiItJleUWl+GrfJQDAW328IDeWilyRdpEIgiCI9eJz5859ZFg5cuQIOnToAADIyspCTk4Orl69ig8++ADW1tbYvn07JBJJtX1cuXIFHh4eSEhIQEBAQLVtjx07hg4dOuDYsWNo166dxrq0tDR0794d3bt3x7ffflttP8uWLcO8efOQl5dXZRulUgmlUql+np+fD1dXV+Tl5cHKyqra/omIiPTFRzvP46v9yfByaIQdbz4NqVH13+vaJj8/H9bW1g32/S3qyFpkZKTGlZeVcXd3V/9boVBAoVDAy8sLvr6+cHV1RVxcHIKCguqtpnbt2kEmk+HixYsaYS0tLQ09e/ZEUFAQvv7660f206VLF+Tn5+PmzZtwcHCotI1cLodcLq+32omIiHRNZn4x1hy8DACYEeqjc0HtSRA1rN0PX3Vxf0DwwZGp+nDmzBmUlpbCyclJvezGjRvo2bMn2rdvj+joaBgZPfpUv4SEBJiamsLGxqZe6yMiItInn/91EcWlKrRzs0FvX3uxy9FKOnHOWnx8POLj49GtWzfY2toiJSUFc+bMgaenp8aomo+PDxYuXIghQ4YAuHchQmpqqno+tqSkJACAo6MjHB0dkZycjPXr16Nfv35QKBQ4e/Yspk2bhsDAQHTt2hXAvRG1Hj16wM3NDUuXLsWtW7fUr3f/ys/ff/8dGRkZCAoKgpmZGfbt24d3330Xr776KkfOiIiIqnA1uxAb468BAGaG+TzytCZDpRNhzczMDFu2bEFUVBQKCwvh5OSEsLAwbNy4USMMJSUlaZwjtm3bNowdO1b9/P5PrlFRUZg7dy5MTEywd+9efPbZZ7hz5w5cXV3Rv39/REVFQSq9d3JjTEwMLl26hEuXLsHFxUWjrvujezKZDF999RXeeustqFQqNG/eHPPmzcOkSZMa7JgQERHpuo93X0CZSkAP7ybo3NxO7HK0lqgXGJCmhj5BkYiISFucSctD/88PAAC2v9EN/k11dyL5hv7+1sl51oiIiEi3Ld1179SkgW2ddTqoPQkMa0RERPREHU7Jxr6kWzA2kmBaHy+xy9F6DGtERET0xAiCgI/+f1RtREdXuCssRK5I+zGsERER0ROz91wmjl29DVOZESb3ail2OTqBYY2IiIieiHKVgCX/P6o2tqsHHKxMRa5INzCsERER0RPxW+INJN0sgJWpMSY+7Sl2OTqDYY2IiIgaXEmZCh/vvgAAeK1HC1iby0SuSHcwrBEREVGD2xCfiuu378LeUo4xwe5il6NTGNaIiIioQRUqy7D8r4sAgMm9WsLMRCpyRbqFYY2IiIga1JoDl5F1pwTN7MwxoqOr2OXoHIY1IiIiajA5hSX4+p8UAMC0EG/IpIwetcUjRkRERA1mxf5LKFCWwc/JCgNaO4ldjk5iWCMiIqIGkZZ7F+tirwIA3g7zhpGRROSKdBPDGhERETWIz/ZcREmZCp09GqO7VxOxy9FZDGtERERU7y5l3sHPx64BAN4O84FEwlG1umJYIyIionr38e4kqASgj58D2jezFbscncawRkRERPXqxLVc/HkqAxIJMD3EW+xydB7DGhEREdWr+zdrHxLYFN6OliJXo/sY1oiIiKjeHLiYhQOXsiCTSjC1t5fY5egFhjUiIiKqF4Ig4KNd5wEAL3VuBtfG5iJXpB8Y1oiIiKhe7DydgZPX82BuIkXkMy3ELkdvMKwRERHRYysrV2FJzL1z1cY/1RyKRnKRK9IfDGtERET02DYfv46UW4WwNZch4ikPscvRKwxrRERE9FiKS8vx6Z6LAIBJPVvA0lQmckX6hWGNiIiIHssPcVeRnlcMZ2tTvNylmdjl6B2GNSIiIqqz/OJSfLnvEgBgSm8vmMqkIlekfxjWiIiIqM6+/ScFt4tK4dnEAkPbNRW7HL3EsEZERER1cqtAiW8PXAYAzAj1hrGUsaIh8KgSERFRnXy57xKKSsrR1sUaoa0cxS5HbzGsERERUa1dyynC+sNXAQAzw3wgkUhErkh/MawRERFRrX2y+wJKywU81VKB4BYKscvRawxrREREVCvnM/KxNfEGgHvnqlHDYlgjIiKiWlm66wIEAejf2gltXGzELkfvMawRERFRjR27moM9525CaiTBWyFeYpdjEBjWiIiIqEYEQcDiHfdu1j6svQs8mzQSuSLDoDNhbdCgQXBzc4OpqSmcnJwQHh6OtLS0arfZsmULQkNDoVAoIJFIkJiYWKFNjx49IJFINB4jR47UaOPu7l6hzaxZszTapKamYuDAgbCwsIBCocDkyZNRUlLy2PtNRESkLfZfuIX4KzkwMTbCm71bil2OwTAWu4Ca6tmzJ9555x04OTnhxo0bmD59Op5//nkcOnSoym0KCwvRtWtXDBs2DBEREVW2i4iIwLx589TPzczMKrSZN2+eRh+NGv3310R5eTn69++PJk2a4MCBA8jOzsbo0aMhCAKWL19e210lIiLSOiqVgI923htVGxPsDifrit+V1DB0JqxNnTpV/e9mzZph1qxZGDx4MEpLSyGTySrdJjw8HABw5cqVavs2NzeHo2P1k/lZWlpW2SYmJgZnz57FtWvX4OzsDABYtmwZxowZgwULFsDKyqravomIiLTd7yfTcC49H5ZyY7zW3VPscgyKzvwM+qCcnBysX78ewcHBVQa12li/fj0UCgVatWqF6dOno6CgoEKbxYsXw87ODgEBAViwYIHGT5yxsbHw9/dXBzUACA0NhVKpxLFjxx67PiIiIjGVlKmwLOYCAGBC9+awtTARuSLDojMjawAwc+ZMfPHFFygqKkKXLl2wffv2x+7zpZdegoeHBxwdHXH69GnMnj0bJ06cwO7du9Vt3nzzTbRr1w62traIj4/H7NmzcfnyZXz77bcAgIyMDDg4OGj0a2trCxMTE2RkZFT52kqlEkqlUv08Pz//sfeHiIiovv109BpSc4qgaCTH2K4eYpdjcEQdWZs7d26FE/cffhw9elTdfsaMGUhISEBMTAykUilGjRoFQRAeq4aIiAj07t0b/v7+GDlyJH755Rfs2bMHx48fV7eZOnUqunfvjjZt2mD8+PFYuXIlVq9ejezsbHWbym6zIQhCtbffWLhwIaytrdUPV1fXx9oXIiKi+na3pByf770IAJjcqwUs5Do1zqMXRD3ikZGRFa68fJi7u7v63wqFAgqFAl5eXvD19YWrqyvi4uIQFBRUbzW1a9cOMpkMFy9eRLt27Spt06VLFwDApUuXYGdnB0dHRxw+fFijze3bt1FaWlphxO1Bs2fPxltvvaV+np+fz8BGRERaJfrQZdwqUMK1sRlGdnQTuxyDJGpYux++6uL+iNqDPyPWhzNnzqC0tBROTk5VtklISAAAdZugoCAsWLAA6enp6mUxMTGQy+Vo3759lf3I5XLI5fJ6rJ6IiKj+5BWVYuX+ZADAW328YGKsk6e66zydGMuMj49HfHw8unXrBltbW6SkpGDOnDnw9PTUGFXz8fHBwoULMWTIEAD3LkRITU1Vz8eWlHTvkmNHR0c4OjoiOTkZ69evR79+/aBQKHD27FlMmzYNgYGB6Nq1K4B7Fw/ExcWhZ8+esLa2xpEjRzB16lT1vG8AEBISAj8/P4SHh2PJkiXIycnB9OnTERERwStBiYhIZ634Oxn5xWXwcbTEoLZNxS7HYOlERDYzM8OWLVvQq1cveHt745VXXoG/vz/+/vtvjZGppKQk5OXlqZ9v27YNgYGB6N+/PwBg5MiRCAwMxMqVKwEAJiYm2Lt3L0JDQ+Ht7Y3JkycjJCQEe/bsgVQqBXBv9Ounn35Cjx494Ofnhzlz5iAiIgIbNmxQv45UKsUff/wBU1NTdO3aFcOHD8fgwYOxdOnSJ3F4iIiI6l1GXjGiD14GcO9m7VKjqs/BpoYlER73DH2qN/n5+bC2tkZeXh5H5IiISFTvbD2FHw+nokMzW/w8MajaC+YMXUN/f+vEyBoRERE9OZezCvHTkWsAgJl9fRjURMawRkRERBqWxSShXCXgGR97dHRvLHY5Bo9hjYiIiNRO38jD9pPpkEjunatG4mNYIyIiIrUlu+7NnPBsW2f4OvH8aW3AsEZEREQAgNjkbPx94RaMjSSY2sdL7HLo/zGsEREREQRBwEe7zgMAXujkhmZ2FiJXRPcxrBERERF2n72JhNRcmMmkeOOZFmKXQw9gWCMiIjJw5SpBfa7aK93cYW9lKnJF9CCGNSIiIgO3NeEGLmbegbWZDK8+7Sl2OfQQhjUiIiIDpiwrxye7LwAAXu/hCWszmcgV0cMY1oiIiAzY+rhU3Mi9CwcrOUYHu4tdDlWCYY2IiMhA3VGW4Yt9lwAAU3p7wVQmFbkiqgzDGhERkYFa/e9l5BSWoLnCAsPau4hdDlWBYY2IiMgAZd9R4pt/UwAAb4V4wVjKSKCt+P8MERGRAfpqfzLuKMvg39QK/fydxC6HqsGwRkREZGBu5N7F97FXAQBvh/rAyEgickVUHYY1IiIiA/Pp7gsoKVchqLkdnmqpELscegSGNSIiIgNy8WYBNh+/DgB4O8wbEglH1bQdwxoREZEBWRqTBJUAhLZyQKCbrdjlUA0wrBERERmIhNTb2HXmJowkwPQQb7HLoRpiWCMiIjIAgiDgo533btb+XDsXtHSwFLkiqimGNSIiIgNw4FIWYlOyYSI1wpQ+XmKXQ7XAsEZERKTnVKr/RtVe7tIMTW3MRK6IaoNhjYiISM/tOJ2BUzfyYGEixaSenmKXQ7XEsEZERKTHSstVWBpzb1Qt4unmsGskF7kiqi2GNSIiIj32y7HruJxViMYWJhj/VHOxy6E6YFgjIiLSU8Wl5fh0zwUAQGTPFmgkNxa5IqoLhjUiIiI9te7QFdzMV6KpjRle6uImdjlURwxrREREeijvbim+2p8MAJjaxwtyY6nIFVFdMawRERHpoW/+SUHe3VK0tG+EIYFNxS6HHgPDGhERkZ7JLCjG6gOXAQDTQ70hNeLN2nUZwxoREZGe+eKvS7hbWo4AVxuE+DmIXQ49phpdFtKuXbtadSqRSLBt2zY0bcphVyIioicpNbsIPx5OBQDMDPOBRMJRNV1Xo7CWmJiIadOmoVGjRo9sKwgCFi1aBKVS+djFERERUe18vDsJZSoBT3s1QZCnndjlUD2o8YQrM2bMgL29fY3aLlu2rM4FERERUd2cTcvHbyfSAABvh3qLXA3VlxqFtcuXL6NJkyY17vTs2bNwdnauc1FERERUe0tjkiAIwIA2TvBvai12OVRPanSBQbNmzXDixIkad+rq6gqptH7ncxk0aBDc3NxgamoKJycnhIeHIy0trdpttmzZgtDQUCgUCkgkEiQmJlZo06NHD0gkEo3HyJEj1ev3799fYf39x5EjR9TtKlu/cuXKett/IiKi6hy5koO/zmdCaiTBtBCOqumTGl8N2q5dO7Rv3x4rVqxAXl5eQ9ZUqZ49e2LTpk1ISkrC5s2bkZycjOeff77abQoLC9G1a1csWrSo2nYRERFIT09XP1atWqVeFxwcrLEuPT0d48ePh7u7Ozp06KDRT3R0tEa70aNH132HiYiIakgQBCzecR4AMKKjKzwUFiJXRPWpxuesHTx4EGvWrMGsWbMwbdo0DB06FOPGjUPPnj0bsj61qVOnqv/drFkzzJo1C4MHD0ZpaSlkMlml24SHhwMArly5Um3f5ubmcHR0rHSdiYmJxrrS0lJs27YNkZGRFa6wsbGxqbIfIiKihrIvKRNHr96G3NgIb/ZqKXY5VM9qPLIWFBSEb775BhkZGVixYgWuX7+O3r17w9PTEwsWLMD169cbsk4NOTk5WL9+PYKDg6sMarWxfv16KBQKtGrVCtOnT0dBQUGVbbdt24asrCyMGTOmwrrIyEgoFAp07NgRK1euhEqlqvZ1lUol8vPzNR5ERES1oVIJ+GhnEgBgTFd3OFiZilwR1bdaT4prZmaG0aNHY//+/bhw4QJeeOEFrFq1Ch4eHujXr19D1Kg2c+ZMWFhYwM7ODqmpqfjtt98eu8+XXnoJGzZswP79+/H+++9j8+bNGDp0aJXtV69ejdDQULi6umosnz9/Pn7++Wfs2bMHI0eOxLRp0/Dhhx9W+9oLFy6EtbW1+vFwn0RERI+y7UQazmcUwNLUGK919xS7HGoAEkEQhMfp4M6dO1i/fj3eeecd5Obmory8vMbbzp07Fx988EG1bY4cOaI+NywrKws5OTm4evUqPvjgA1hbW2P79u2PnPDvypUr8PDwQEJCAgICAqpte+zYMXTo0AHHjh2rMBnw9evX0axZM2zatAnPPfdctf0sW7YM8+bNq/b8PqVSqTEfXX5+PlxdXZGXlwcrK6tq+yciIiopU6HXx/txLecuZoR6Y1LPFmKXZJDy8/NhbW3dYN/fNT5n7WF///031qxZg82bN0MqlWL48OEYN25crfqIjIzUuPKyMu7u7up/KxQKKBQKeHl5wdfXF66uroiLi0NQUFBddqFS7dq1g0wmw8WLFyuEtejoaNjZ2WHQoEGP7KdLly7Iz8/HzZs34eBQ+a0+5HI55HJ5vdRNRESGZ+ORVFzLuYsmlnKM7eoudjnUQGoV1q5du4a1a9di7dq1uHz5MoKDg7F8+XIMHz4cFha1v/Lkfviqi/sDgvV9p4QzZ86gtLQUTk5OFV4vOjoao0aNqtF5cgkJCTA1NYWNjU291kdERAQAuUUl+HzvJQDA5F4tYW5S5/EX0nI1/n+2T58+2LdvH5o0aYJRo0bhlVdegbf3k5nHJT4+HvHx8ejWrRtsbW2RkpKCOXPmwNPTU2NUzcfHBwsXLsSQIUMA3LsQITU1VT0fW1LSvRMwHR0d4ejoiOTkZKxfvx79+vWDQqHA2bNnMW3aNAQGBqJr164aNfz111+4fPlypaOHv//+OzIyMhAUFAQzMzPs27cP7777Ll599VWOnBERUb0TBAEzN59E1h0lmissMKIDz3nWZzUOa2ZmZti8eTMGDBhQ7xPe1uS1t2zZgqioKBQWFsLJyQlhYWHYuHGjRhhKSkrSOEds27ZtGDt2rPr5/Z9co6KiMHfuXJiYmGDv3r347LPPcOfOHbi6uqJ///6IioqqsI+rV69GcHAwfH19K9Qnk8nw1Vdf4a233oJKpULz5s0xb948TJo0qb4PBREREdYfTsWuMzchk0rw2chAmBjX+npB0iF1vsDg0qVLSE5OxtNPPw0zMzMIgvDIE/2peg19giIREem+pIwCDPriAJRlKrzbzxcRTzcXuySD19Df37WO4tnZ2ejVqxe8vLzQr18/pKenAwDGjx+PadOm1XuBREREdE9xaTkmb0iAskyFp72aYFw3D7FLoieg1mFt6tSpkMlkSE1Nhbm5uXr5iBEjsHPnznotjoiIiP6z4I9zSLpZAEUjEywb1hZGRvxFyxDU+tKRmJgY7Nq1Cy4uLhrLW7ZsiatXr9ZbYURERPSfXWcy8H3cve/ZZcMD0MSSF7AZilqPrBUWFmqMqN2XlZXFKx+JiIgaQHreXczcfBIAEPGUB7p7NRG5InqSah3Wnn76aXz33Xfq5xKJBCqVCkuWLHliN3UnIiIyFOUqAVM2JiK3qBStm1pjRqiP2CXRE1brn0GXLFmCHj164OjRoygpKcHbb7+NM2fOICcnBwcPHmyIGomIiAzWV/su4fDlHJibSPH5C5ymwxDV+v9xPz8/nDx5Ep06dUKfPn1QWFiIoUOHIiEhAZ6evIEsERFRfTl2NQef7r0IAJj3rD88FLW/WxDpvjrdm8LR0fGRN2AnIiKiusu7W4rJGxJRrhLwbIAznmvXVOySSCQ1Glk7efIkVCpVjTs9c+YMysrK6lwUERGRIRMEAe9sPYUbuXfh2tgM/xvsz4nnDViNwlpgYCCys7Nr3GlQUBBSU1PrXBQREZEh+/nodfxxMh3GRhJ8PjIQlqYysUsiEdXoZ1BBEPD+++9XOmVHZUpKSh6rKCIiIkN1KfMOoradAQC8FeKFQDdbkSsisdUorD399NNISkqqcadBQUEwMzOrc1FERESGSFl273ZSd0vL0bWFHSY+zQv3qIZhbf/+/Q1cBhERES3ekYSz6fmwNZfh4+EBvJ0UAajD1B1ERERU//46fxNrDl4GACwd1hYOVqYiV0TagmGNiIhIZJn5xZj+873bSY0JdkcvXweRKyJtwrBGREQkIpVKwFubTiCnsAS+TlaY1Ze3kyJNDGtEREQi+vrfFBy4lAVTmRGWvxAAU5lU7JJIy9Q6rBUWFjZEHURERAYn8Voulu66N9vC3IGt0MLeUuSKSBvVOqw5ODjglVdewYEDBxqiHiIiIoNQUFyKyRsSUKYS0L+1E0Z0dBW7JNJStQ5rGzZsQF5eHnr16gUvLy8sWrQIaWlpDVEbERGR3prz2xmk5hShqY0ZPhzamreToirVOqwNHDgQmzdvRlpaGl577TVs2LABzZo1w4ABA7BlyxbeE5SIiOgRthy/jq0JN2AkAT4bGQBrM95OiqpW5wsM7OzsMHXqVJw4cQIff/wx9uzZg+effx7Ozs6YM2cOioqK6rNOIiIivXAlqxDv/3oaADCltxc6uDcWuSLSdjW6g0FlMjIy8N133yE6Ohqpqal4/vnnMW7cOKSlpWHRokWIi4tDTExMfdZKRESk00rKVJi8MQGFJeXo5NEYk3q2ELsk0gG1DmtbtmxBdHQ0du3aBT8/P0yaNAkvv/wybGxs1G0CAgIQGBhYn3USERHpvGUxSTh5PQ/WZjJ8OiIAUt5Oimqg1mFt7NixGDlyJA4ePIiOHTtW2qZ58+Z49913H7s4IiIiffHPhVtY9U8KAGDxc23gbGMmckWkK2od1tLT02Fubl5tGzMzM0RFRdW5KCIiIn2SdUeJtzadAAC81NkNYf6OIldEuqTWYa2srAz5+fkVlkskEsjlcpiYmNRLYURERPpApRIwbdMJZN1RwsuhEd4f4Cd2SaRjah3WbGxsqp0LxsXFBWPGjEFUVBSMjHg3KyIiMmxrDl7G3xduQW5shOUvtOPtpKjWah3W1q5di3fffRdjxoxBp06dIAgCjhw5gnXr1uG9997DrVu3sHTpUsjlcrzzzjsNUTMREZFOOH0jD4t3ngcAvNffF96OvJ0U1V6tw9q6deuwbNkyDB8+XL1s0KBBaN26NVatWoW9e/fCzc0NCxYsYFgjIiKDVagsw+QNCSgtF9DHzwEvd2kmdkmko2r9O2VsbGyl03IEBgYiNjYWANCtWzekpqY+fnVEREQ6au62M0jJKoSjlSk+eq4NbydFdVbrsObi4oLVq1dXWL569Wq4ut67CW12djZsbW0fvzoiIiIdtO1EGn4+dh0SCfDpyADYWvDiO6q7Wv8MunTpUgwbNgw7duxAx44dIZFIcOTIEZw/fx6//PILAODIkSMYMWJEvRdLRESk7a7lFOHdLacAAJE9W6BLczuRKyJdJxEEQajtRlevXsXKlSuRlJQEQRDg4+ODCRMmwN3dvQFKNBz5+fmwtrZGXl4erKysxC6HiIhqqbRcheGrYpGQmot2bjbYNCEIxlLOjKDvGvr7u1Yja6WlpQgJCcGqVauwcOHCei+GiIhIl3265wISUnNhaWqMz0YGMqhRvajVu0gmk+H06dM8SZKIiOghh5Kz8NX+ZADAwqGt4dq4+rv9ENVUrSP/qFGjKr3AoKENGjQIbm5uMDU1hZOTE8LDw5GWllbtNlu2bEFoaCgUCgUkEgkSExMrbRcbG4tnnnkGFhYWsLGxQY8ePXD37l31+tu3byM8PBzW1tawtrZGeHg4cnNzNfpITU3FwIEDYWFhAYVCgcmTJ6OkpORxd5uIiHRATmEJpv6UCEEARnRwxYA2zmKXRHqk1hcYlJSU4Ntvv8Xu3bvRoUMHWFhYaKz/+OOP6624B/Xs2RPvvPMOnJyccOPGDUyfPh3PP/88Dh06VOU2hYWF6Nq1K4YNG4aIiIhK28TGxiIsLAyzZ8/G8uXLYWJighMnTmjcfeHFF1/E9evXsXPnTgDAq6++ivDwcPz+++8AgPLycvTv3x9NmjTBgQMHkJ2djdGjR0MQBCxfvrwejwIREWkbQRDw9i8ncDNfieZNLBA1iLeTovpV6wsMevbsWXVnEgn++uuvxy6qJrZt24bBgwdDqVRCJpNV2/bKlSvw8PBAQkICAgICNNZ16dIFffr0wfz58yvd9ty5c/Dz80NcXBw6d+4MAIiLi0NQUBDOnz8Pb29v7NixAwMGDMC1a9fg7Hzvr6mNGzdizJgxyMzMrPHJhrzAgIhI93wXewVzfjsDE6kRtk4KRitna7FLoidMqy4wAIB9+/bVexG1lZOTg/Xr1yM4OPiRQa06mZmZOHz4MF566SUEBwcjOTkZPj4+WLBgAbp16wbg3sibtbW1OqgB9wKetbU1Dh06BG9vb8TGxsLf318d1AAgNDQUSqUSx44dqzLgKpVKKJVK9fP8/Pw67wsRET1559Lz8b8/zgEAZvX1YVCjBlHny1QuXbqEXbt2qc/tqsMMILU2c+ZMWFhYwM7ODqmpqfjtt98eq7+UlBQAwNy5cxEREYGdO3eiXbt26NWrFy5evAgAyMjIgL29fYVt7e3tkZGRoW7j4OCgsd7W1hYmJibqNpVZuHCh+jw4a2tr9aTCRESk/e6WlOONDQkoKVPhGR97jO3qLnZJpKdqHdays7PRq1cveHl5oV+/fkhPTwcAjB8/HtOmTatVX3PnzoVEIqn2cfToUXX7GTNmICEhATExMZBKpRg1atRjhUSVSgUAmDBhAsaOHYvAwEB88skn8Pb2xpo1a9TtKrv6VRAEjeU1afOw2bNnIy8vT/24du1anfeFiIierPl/nMWlzDtoYinHkud5OylqOLX+GXTq1KmQyWRITU2Fr6+vevmIESMwdepULFu2rMZ9RUZGYuTIkdW2eXCiXYVCAYVCAS8vL/j6+sLV1VV9/lhdODk5AQD8/DRPBvX19VXf29TR0RE3b96ssO2tW7fUo2mOjo44fPiwxvrbt2+jtLS0wojbg+RyOeRyeZ1qJyIi8ew4lY4fD6dCIgE+GR4Au0b8LKeGU+uwFhMTg127dsHFxUVjecuWLXH16tVa9XU/fNXF/RG1B8/5qi13d3c4OzsjKSlJY/mFCxfQt29fAEBQUBDy8vIQHx+PTp06AQAOHz6MvLw8BAcHq9ssWLAA6enp6gAYExMDuVyO9u3b17k+IiLSPjdy72Lm5pMAgAlPe6Jby7p9jxHVVK3DWmFhIczNK070l5WV1WCjRPHx8YiPj0e3bt1ga2uLlJQUzJkzB56enhqjaj4+Pli4cCGGDBkC4N6FCKmpqer52O6HMkdHRzg6OkIikWDGjBmIiopC27ZtERAQgHXr1mnc59TX1xdhYWGIiIjAqlWrANybumPAgAHw9vYGAISEhMDPzw/h4eFYsmQJcnJyMH36dERERPCqTiIiPVJWrsLUjYnILy5DW1cbTAvxErskMgC1Pmft6aefxnfffad+LpFIoFKpsGTJkmqn9XgcZmZm2LJlC3r16gVvb2+88sor8Pf3x99//60REJOSkpCXl6d+vm3bNgQGBqJ///4AgJEjRyIwMBArV65Ut5kyZQpmz56NqVOnom3btti7dy92794NT09PdZv169ejdevWCAkJQUhICNq0aYPvv/9evV4qleKPP/6AqakpunbtiuHDh2Pw4MFYunRpgxwPIiISxxf7LiH+Sg4ayY3x+cgAyHg7KXoCaj3P2tmzZ9GjRw+0b98ef/31FwYNGoQzZ84gJycHBw8e1Ag5VDucZ42ISHvFX87ByK9joRKAT0cEYHBgU7FLIi3R0N/ftf6TwM/PDydPnkSnTp3Qp08fFBYWYujQoUhISGBQIyIivZRXVIopGxOgEoCh7ZoyqNETVetz1oB753x98MEH9V0LERGR1hEEAbO2nERaXjHc7cwx71l/sUsiA1OnsJabm4v4+HhkZmaq5yq7b9SoUfVSGBERkTbYEH8NO05nwNhIgs9fCEQjeZ2+OonqrNbvuN9//x0vvfQSCgsLYWlpWWFiWIY1IiLSFxdvFmDe9jMAgLfDvNHGxUbcgsgg1fqctWnTpuGVV15BQUEBcnNzcfv2bfUjJyenIWokIiJ64opL791OqrhUhadaKjC+W3OxSyIDVeuwduPGDUyePLnSudaIiIj0xcI/z+F8RgHsLEywbHhbGBnxdlIkjlqHtdDQUI37dRIREemb3WdvYl3svbvyLB3eFvaWpiJXRIas1ues9e/fHzNmzMDZs2fRunVryGQyjfWDBg2qt+KIiIietIy8Yrz9ywkAwPhuHujpbS9yRWToaj0prpFR1YNxEokE5eXlj12UoeKkuERE4ipXCXj528OITclGK2crbHk9GHJjqdhlkZZr6O/vWo+sPTxVBxERkb5Y+XcyYlOyYW4ixfIXAhnUSCvwpmZEREQAjqfexse7LwAAPhjUCs2bNBK5IqJ7ahzW+vXrp3GT9AULFiA3N1f9PDs7G35+fvVaHBER0ZOQX1yKyRsSUK4SMLCtM55v7yJ2SURqNQ5ru3btglKpVD9fvHixxrxqZWVlSEpKqt/qiIiIGpggCHh362lcv30XLrZmWDDEX2PCdyKx1TisPXwdQi2vSyAiItJKvxy7jt9PpEH6/7eTsjKVPXojoieI56wREZHBSr51B1Hb7t1O6q0+XmjnZityRUQV1TisSSSSCsPCHCYmIiJdpSwrx+QNCSgqKUdQcztM7O4pdklElarx1B2CIGDMmDGQy+UAgOLiYkycOBEWFhYAoHE+GxERkbb7aGcSzqTlw9Zchk9GBEDK20mRlqpxWBs9erTG85dffrlCm1GjRj1+RURERA1sX1ImVh+4DABY8nxbOFrzdlKkvWoc1qKjoxuyDiIioicis6AY0zfdu53U6KBm6O3nIHJFRNXjBQZERGQwVCoB0zadQHZhCXwcLTG7n6/YJRE9EsMaEREZjG8PpODfi1kwlRlh+QuBMJXxdlKk/RjWiIjIIJy4louPdt6bvH3OgFZo6WApckVENcOwRkREeu+OsgyTNyagTCWgr78jXujkKnZJRDXGsEZERHpvzm+ncTW7CM7Wplg0tA3nCSWdwrBGRER6bWvCdWw5fgNGEuCzFwJhbc7bSZFuYVgjIiK9dTW7EO9tPQ0AmNyrJTq6Nxa5IqLaY1gjIiK9VFKmwuQNCSgsKUcn98aI7NlC7JKI6oRhjYiI9NLHuy/gxPU8WJka45ORATCW8iuPdBPfuUREpHcOXMzCyr+TAQCLn2uDpjZmIldEVHcMa0REpFey7ygxdVMiAODFzm7o29pJ3IKIHhPDGhER6Q1BEDD95xO4VaBES/tGeL+/n9glET02hjUiItIb0QevYF/SLZgYG2H5i4EwM+HtpEj3MawREZFeOH0jD4t2nAcAvNffFz6OViJXRFQ/GNaIiEjnFZXcu51USbkKvX0dEN6lmdglEdUbhjUiItJ5H2w7i5RbhXCwkuOj53k7KdIvDGtERKTTtp9Mw09Hr0EiAT4ZEYDGFiZil0RUr3QmrA0aNAhubm4wNTWFk5MTwsPDkZaWVu02W7ZsQWhoKBQKBSQSCRITEyttFxsbi2eeeQYWFhawsbFBjx49cPfuXQDAlStXMG7cOHh4eMDMzAyenp6IiopCSUmJRh8SiaTCY+XKlfWy70REVLlrOUWYveUUAGBSjxYI9lSIXBFR/dOZsNazZ09s2rQJSUlJ2Lx5M5KTk/H8889Xu01hYSG6du2KRYsWVdkmNjYWYWFhCAkJQXx8PI4cOYLIyEgYGd07NOfPn4dKpcKqVatw5swZfPLJJ1i5ciXeeeedCn1FR0cjPT1d/Rg9evTj7TQREVWprFyFNzcmoKC4DIFuNnizd0uxSyJqEBJBEASxi6iLbdu2YfDgwVAqlZDJZNW2vXLlCjw8PJCQkICAgACNdV26dEGfPn0wf/78Gr/2kiVLsGLFCqSkpKiXSSQSbN26FYMHD67NbmjIz8+HtbU18vLyYGXFq5iIiKqzLCYJy/+6BEu5Mf588ym4NjYXuyQyUA39/a0zI2sPysnJwfr16xEcHPzIoFadzMxMHD58GPb29ggODoaDgwO6d++OAwcOVLtdXl4eGjduXGF5ZGQkFAoFOnbsiJUrV0KlUlXbj1KpRH5+vsaDiIgeLTY5G1/suwQA+HBoawY10ms6FdZmzpwJCwsL2NnZITU1Fb/99ttj9Xd/ZGzu3LmIiIjAzp070a5dO/Tq1QsXL16sdJvk5GQsX74cEydO1Fg+f/58/Pzzz9izZw9GjhyJadOm4cMPP6z29RcuXAhra2v1w9XV9bH2h4jIENwuLMHUnxIhCMCw9i4Y2NZZ7JKIGpSoYW3u3LmVnpj/4OPo0aPq9jNmzEBCQgJiYmIglUoxatQoPM6vuPdHviZMmICxY8ciMDAQn3zyCby9vbFmzZoK7dPS0hAWFoZhw4Zh/PjxGuvee+89BAUFISAgANOmTcO8efOwZMmSal9/9uzZyMvLUz+uXbtW530hIjIEgiDg7c0nkZFfjOYKC8wd1ErskoganLGYLx4ZGYmRI0dW28bd3V39b4VCAYVCAS8vL/j6+sLV1RVxcXEICgqq0+s7Od27ua+fn+a943x9fZGamqqxLC0tDT179kRQUBC+/vrrR/bdpUsX5Ofn4+bNm3BwcKi0jVwuh1wur1PtRESG6IfDqdh99iZMpEb4/IVAWMhF/RojeiJEfZffD191cX9ETalU1vn13d3d4ezsjKSkJI3lFy5cQN++fdXPb9y4gZ49e6J9+/aIjo5WXylanYSEBJiamsLGxqbO9RER0X/OZ+Rj/vazAICZfX3g39Ra5IqIngyd+JMkPj4e8fHx6NatG2xtbZGSkoI5c+bA09NTY1TNx8cHCxcuxJAhQwDcuxAhNTVVPR/b/VDm6OgIR0dHSCQSzJgxA1FRUWjbti0CAgKwbt06nD9/Hr/88guAeyNqPXr0gJubG5YuXYpbt26pX8/R0REA8PvvvyMjIwNBQUEwMzPDvn378O677+LVV1/lyBkRUT24W1KOyRsSUFKmQg/vJnilq7vYJRE9MToR1szMzLBlyxZERUWhsLAQTk5OCAsLw8aNGzXCUFJSEvLy8tTPt23bhrFjx6qf3//JNSoqCnPnzgUATJkyBcXFxZg6dSpycnLQtm1b7N69G56engCAmJgYXLp0CZcuXYKLi4tGXfdH92QyGb766iu89dZbUKlUaN68OebNm4dJkyY1yPEgIjI0//vjLC7cvANFIzmWDmvL20mRQdHZedb0EedZIyKqaOfpDEz84RgA4PtxnfBUyyYiV0SkifOsERGRwUrLvYuZm08CACY83ZxBjQwSwxoREWmlcpWAKT8lIu9uKdq4WGNaiLfYJRGJgmHNQJSr+Gs3EemWL/ddQvzlHFiYSPH5yECYGPMriwwT3/kG4PvYKwhffRiFyjKxSyEiqpGjV3Lw6Z4LAID5g/3hrrAQuSIi8TCs6bmcwhJ8tDMJh5Kz8fLqw8grKhW7JCKiauUVleLNjYlQCcCQwKYY2s7l0RsR6TGGNT3X2MIEP4zvDGszGRJSczHi61jcKqj7RMJERA1JEAS8s/UUbuTeRTM7c8x7lreTImJYMwBtXW3w04QuUDSS43xGAUasikVa7l2xyyIi0lBarsLMzSfxx6l0GBtJ8PnIQFiaysQui0h0DGsGwsfRCj9PDEJTGzOkZBVi2MpYXMkqFLssIiIAwB1lGcatO4pNR6/DSAJ8OKQ12rraiF0WkVZgWDMgHgoLbJoYBA+FBW7k3sWwVbFIyigQuywiMnA384sxfGUs/rlwC2YyKb4Z1QHDO7qKXRaR1mBYMzBNbcywaUIQfBwtcatAiRFfx+Lk9VyxyyIiA3XhZgGGfnUIZ9PzoWhkgp8mdEEvXwexyyLSKgxrBqiJpRwbX+2Ctq42yC0qxYvfHEb85RyxyyIiAxObnI3nVhzCjdy7aK6wwJbXuqKNi43YZRFpHYY1A2VjboL14zujS/PGuKMsw6g1h7E/KVPssojIQPyWeAOj18SjoLgMHZrZYvNrwXCzMxe7LCKtxLBmwBrJjbF2bCf09G6C4lIVIr47ih2n0sUui4j0mCAIWLE/GW9uTERJuQr9Wjvih/GdYWthInZpRFqLYc3AmcqkWBXeAf1bO6G0XMCkH49j87HrYpdFRHqorFyF9387jcU7zwMAxnXzwBcvtIOpTCpyZUTazVjsAkh8JsZG+PyFQFjIpdh09Dqm/XwCRSVlCA9yF7s0ItITRSVlmLwhAXvOZUIiAd7v74dXunmIXRaRTmBYIwCA1EiCRUPbwNzEGGsPXcH7v53BHWU5XuvhKXZpRKTjbhUoMX7dEZy4nge5sRE+GxmAMH8nscsi0hkMa6RmZCRB1EA/WJoaY/lfl7B453ncUZZieog3JBKJ2OURkQ5KuXUHo6PjcS3nLmzNZfh2dAe0b9ZY7LKIdArDGmmQSCSYFuINC7kxFu04jy/3JaNQWY45A/xgZMTARkQ1d/RKDsZ/dxS5RaVwa2yOtWM7onmTRmKXRaRzGNaoUhO7e8JCbow5v53G2kNXcEdZhsXPtYGUgY2IamDHqXS8+VMiSspUaOtqg9WjO0DRSC52WUQ6iVeDUpXCuzTDx8PbQmokwS/HrmPyhgSUlKnELouItNzqA5fx+o/HUVKmQm9fe2yI6MygRvQYOLJG1RoS6AIzmTHe2HAcf5xKR2FJGVa+3J6X2hNRBSqVgP/9cQ5rDl4GcO8PvrmDWnFEnugxcWSNHinM3xHfju4IU5kR9ifd+v9Zx0vFLouItEhxaTkm/XhcHdRm9fXBvGcZ1IjqA8Ma1Uh3ryb4flxnWMqNcfhyDl7+9jByi0rELouItMDtwhK89O1h7DidARPpvak5Jnb35FXkRPWEYY1qrKN7Y/wY0QW25jKcuJ6HEavikFlQLHZZRCSi1OwiPLfiEI5dvQ0rU2N8N64Tng1oKnZZRHqFYY1qpbWLNX6aEAR7SzmSbhZgxKo43Mi9K3ZZRCSCE9dyMXTFQaRkFaKpjRk2vxaMLs3txC6LSO8wrFGteTlY4ueJQWhqY4bLWYUYtuIQLmcVil0WET1Be8/dxMiv45B1pwStnK2w5fVgtHSwFLssIr3EsEZ10szOAr+8FoTmTSyQlleMYStjcS49X+yyiOgJ+CHuKiK+O4q7peXo7tUEP00IgoOVqdhlEekthjWqMydrM2yaEARfJytk3VFi5NdxSLyWK3ZZRNRAVCoBi3eex3u/noZKAEZ0cMW3ozugkZyzQBE1JIY1eiyKRnJsjOiCdm42yLtbipe+iUNscrbYZRFRPVOWlWPqpkSs2J8MAHirjxcWPdcaMim/RogaGv8ro8dmbS7D9+M6I9jTDoUl5RgTHY995zPFLouI6kne3VKMXhOP3xLTYGwkwdJhbTG5V0tOzUH0hDCsUb2wkBtjzZiO6O1rD2WZCq9+fxR/nEwXuywiekw3cu/i+RWHEJeSg0ZyY0SP7Yjn27uIXRaRQWFYo3pjKpNixcvtMbCtM0rLBbyx4Tg2Hb0mdllEVEdn0vIw5MuDuJh5Bw5WcmyaEISnWjYRuywig8OzQqleyaRG+HREACxMpNh45Bre/uUkipRlGNPVQ+zSiKgW/r5wC6//cAyFJeXwdrBE9NiOcLYxE7ssIoPEkTWqd1IjCRYObY1x3e4FtLm/n8WX+y5BEASRKyOimth09BpeWXsEhSXlCGpuh00TgxjUiETEkTVqEBKJBO/190UjuTE+23sRS3YloaC4DDPDvHlSMpGWEgQBn+65iM/2XgQADAlsisXPtYGJMf+uJxITwxo1GIlEgql9vNBIbowFf57Dyr+TUagswweDWsHIiIGNSJuUlqvwzpZT+PnYdQDApJ6emB7CP66ItIHO/Lk0aNAguLm5wdTUFE5OTggPD0daWlq122zZsgWhoaFQKBSQSCRITEystF1sbCyeeeYZWFhYwMbGBj169MDdu//d79Ld3R0SiUTjMWvWLI0+UlNTMXDgQFhYWEChUGDy5MkoKSl57P3WBxFPN8eHQ1pDIgG+j7uK6T+fQFm5SuyyiOj/FRSX4pW1R/DzseswkgAfDmmNGaE+DGpEWkJnwlrPnj2xadMmJCUlYfPmzUhOTsbzzz9f7TaFhYXo2rUrFi1aVGWb2NhYhIWFISQkBPHx8Thy5AgiIyNhZKR5aObNm4f09HT147333lOvKy8vR//+/VFYWIgDBw5g48aN2Lx5M6ZNm/Z4O61HXuzshk9HBEBqJMGWhBuI/DEByrJyscsiMng384sxfFUc/r2YBTOZFN+O7oAXO7uJXRYRPUAi6OhZ39u2bcPgwYOhVCohk8mqbXvlyhV4eHggISEBAQEBGuu6dOmCPn36YP78+VVu7+7ujilTpmDKlCmVrt+xYwcGDBiAa9euwdnZGQCwceNGjBkzBpmZmbCysqrRPuXn58Pa2hp5eXk13kbXxJzJQOSPCSgpV+FpryZY9XJ7mJlIxS6LyCBduFmAMWvikZZXDEUjE6wZ0xFtXGzELotI5zT097fOjKw9KCcnB+vXr0dwcPAjg1p1MjMzcfjwYdjb2yM4OBgODg7o3r07Dhw4UKHt4sWLYWdnh4CAACxYsEDjJ87Y2Fj4+/urgxoAhIaGQqlU4tixY1W+vlKpRH5+vsZD34W0csSaMR1hJpPinwu3MGrNYeQXl4pdFpHBOZSchedWHEJaXjGaN7HA1te7MqgRaSmdCmszZ86EhYUF7OzskJqait9+++2x+ktJSQEAzJ07FxEREdi5cyfatWuHXr164eLFi+p2b775JjZu3Ih9+/YhMjISn376KV5//XX1+oyMDDg4OGj0bWtrCxMTE2RkZFT5+gsXLoS1tbX64erq+lj7oyu6tVTgh/GdYGlqjCNXbuOlbw7jdiHP7yN6Un5LvIHRa+JRUFyGju622DwxGK6NzcUui4iqIGpYmzt3boUT9x9+HD16VN1+xowZSEhIQExMDKRSKUaNGvVYc3epVPdOcp8wYQLGjh2LwMBAfPLJJ/D29saaNWvU7aZOnYru3bujTZs2GD9+PFauXInVq1cjO/u/G5ZXdiKuIAjVnqA7e/Zs5OXlqR/XrhnObP/tmzXGhoguaGxhglM38jDi61hk5heLXRaRXhMEAV/uu4Q3NyaitFxA/9ZO+H5cZ9hamIhdGhFVQ9SpOyIjIzFy5Mhq27i7u6v/rVAooFAo4OXlBV9fX7i6uiIuLg5BQUF1en0nJycAgJ+fn8ZyX19fpKamVrldly5dAACXLl2CnZ0dHB0dcfjwYY02t2/fRmlpaYURtwfJ5XLI5fI61a4P/JtaY9OELnjp28O4cPMOhq2KxQ/jOvMvfKIGUFauQtS2M1h/+N5n2/huHninny+n0SHSAaKGtfvhqy7uj6gplco6v767uzucnZ2RlJSksfzChQvo27dvldslJCQA+C/sBQUFYcGCBUhPT1cvi4mJgVwuR/v27etcnyFoYW+JXyYG48Vv43A1uwjDV8Xih/Gd4dmkkdilEemNopIyvPFjAvaez4REAswZ4IexvAUckc7QiXPW4uPj8cUXXyAxMRFXr17Fvn378OKLL8LT01NjVM3Hxwdbt25VP8/JyUFiYiLOnj0LAEhKSkJiYqL6PDKJRIIZM2bg888/xy+//IJLly7h/fffx/nz5zFu3DgA9y4e+OSTT5CYmIjLly9j06ZNmDBhgnreNwAICQmBn58fwsPDkZCQgL1792L69OmIiIjQ26s665NrY3P8PCEYLewbIT2vGMNXxuJsmv5fbEH0JNwqUGLk13HYez4TcmMjrHipPYMaka4RdMDJkyeFnj17Co0bNxbkcrng7u4uTJw4Ubh+/bpGOwBCdHS0+nl0dLQAoMIjKipKY7uFCxcKLi4ugrm5uRAUFCT8+++/6nXHjh0TOnfuLFhbWwumpqaCt7e3EBUVJRQWFmr0cfXqVaF///6CmZmZ0LhxYyEyMlIoLi6u1X7m5eUJAIS8vLxabacvsgqKhX6f/SM0m7ldaB21Uzh2NUfskoh02qXMAqHb4r1Cs5nbhYAPdglHr/C/KaKG0NDf3zo7z5o+MoR51h4l724pxq09gqNXb8PcRIpvR3VAcIu6/VROZMiOXsnB+O+OIreoFM3szLF2bCd4KCzELotIL3GeNTIo1mYyfDeuE7q1UKCopBxj1h7B3nM3xS6LSKf8eSodL357GLlFpWjraoPNrwUzqBHpMIY10jrmJsb4dnQH9PFzQEmZChO+P4bfT1R/H1giuufbf1Mw6cfjKClTobevAzZGdIGikeFedU6kDxjWSCuZyqT46qV2GBzgjDKVgMkbE7AxvurpVIgMXblKwAe/n8H//jgHQQBGBTXDqnDezo1IH4g6dQdRdWRSI3w8PADmcmP8eDgVs7acQmFJOcZ145VsRA8qLi3HlI2J2Hnm3pXus/v64NWnm1c7KTcR6Q6GNdJqRkYSLBjsj0ZyY3z9Twrmbz+LO8VlmNyrBb+IiADkFJYg4rujOHb1NkykRlg6vC0GtXV+9IZEpDMY1kjrSSQSzO7rg0ZyY3y8+wI+2XMBhSVlmN3Xh4GNDNrV7EKMiT6Cy1mFsDI1xjejOqBzczuxyyKiesawRjpBIpFgcq+WsJAbY/72s/j6nxTcUZZh/rP+kPJ2OWSAEq/lYtzaI8guLEFTGzOsHdsRLR0sxS6LiBoAwxrplHHdPNBILsWsLafw4+FUFCrLsHRYW8ikvFaGDMfuszfxxobjKC5VoZWzFaLHdIS9lanYZRFRA+E3HOmcER3d8PnIQBgbSfBbYhpeX38cxaXlYpdF9ER8H3sFE74/iuJSFbp7NcGmCUEMakR6jmGNdNLAts5YFd4eJsZG2H32JsavO4qikjKxyyJqMCqVgEU7zuP9385AJQAjOrji29EdYCHnDyRE+o5hjXRWL18HrB3TEeYmUhy4lIXw1fHIu1sqdllE9U5ZVo4pPyVi5d/JAIBpfbyw6LnW/PmfyEDwv3TSacEtFPhhfGdYmRrj2NXbePGbOGTfUYpdFlG9ySsqxajV8dh2Ig3GRhIsG9YWb/RqySuhiQwIwxrpvHZuttj4ahDsLExwJi0fI76OQ0ZesdhlET2267eL8PzKQzh8OQeN5MaIHtsRz7V3EbssInrCGNZIL/g5W2HTxCA4WZviUuYdDFt1CKnZRWKXRVRnp2/kYehXh3Ax8w4crUzx88QgPNWyidhlEZEIGNZIb3g2aYRNE4LQzM4c13LuYtiqQ7iUWSB2WUS19veFWxixKhaZBUp4O1hi66Rg+DpZiV0WEYmEYY30imtjc/w8IQheDo1wM1+J4avicPpGnthlEdXYT0dS8craIygsKUewpx1+fi0ITtZmYpdFRCJiWCO9Y29lio2vBqF1U2vkFJbghW/icPRKjthlEVVLEAR8vPsCZm4+hXKVgKGBTbF2bCdYmcrELo2IRMawRnqpsYUJfozojE7ujVFQXIbw1fE4cDFL7LKIKlVarsKMX07i870XAQCRPVtg2fC2MDHmRzQRMayRHrM0lWHdK53wVEsF7paW45W1RxBzJkPssog0FBSX4pW1R/DLseuQGknw4ZDWmB7qzak5iEiNYY30mpmJFN+O7oCwVo4oKVfhtfXH8VviDbHLIgIAZOQVY9jKWPx7MQvmJlJ8O6oDXuzsJnZZRKRlGNZI78mNpfjixUAMDWyKcpWAKT8l4sfDqWKXRQYuKaMAQ746iPMZBVA0kuOnV4PQ08de7LKISAvxpnJkEIylRlg6rC0s5Mb4Pu4q3tl6CoXKMkQ83Vzs0sgAHbqUhQk/HENBcRmaN7HAurGd4NrYXOyyiEhLcWSNDIaRkQTznm2Fid09AQAL/jyHj3dfgCAIIldGhmRrwnWMjo5HQXEZOrrbYstrwQxqRFQtjqyRQZFIJJjV1weWpsZYsisJn++9iEJlGd7r78sTuqlBCYKAr/YnY8muJABA/zZOWDasLUxlUpErIyJtx7BGBmlSzxawMJFi7u9nsfrAZRQqy7BgSGtIjRjYqP7lFJZgya4kbIi/d65kxFMemN3XF0Z8vxFRDTCskcEa09UD5nJjzNp8EhuPXMMdZRk+GREAmZRnB9Djy7qjRMyZm/jzVDpiU7JRrhIgkQBRA/wwpquH2OURkQ5hWCODNryDKyxMjDHlpwRsP5mOuyXl+PKldvxpiuoks6AYu87cxI5T6YhLyYbqgdMhfZ2sMD3EC718HcQrkIh0EsMaGbz+bZxgbiLFxB+OYe/5TIyNPoJpIV4IdLPlz6L0SDfzi7HzdAb+PJWO+Cs5ePB6ldZNrdG3tSP6+jvBQ2EhXpFEpNMkAi+F0xr5+fmwtrZGXl4erKysxC7H4MQmZ2P8uns30AYAG3MZuns1QU9ve3T3agJbCxORKyRtkZ53FztOZWDH6XQcvXpbI6C1dbFGv9ZO6OvvBDc7XuVJZAga+vubYU2LMKyJ72xaPlb8nYy/kzKRX1ymXm4kAQLdbNHTuwl6+tjDz8mKV48amBu5d7HjVDr+PJWO46m5GusC3WzQv7UTwvwd4WLLgEZkaBjWDAjDmvYoK1ch4Vou/jqfiX3nM3E+o0BjvaOVKXr6NEEPb3t0a6GAhZxnFOijazlF2HE6HX+cysCJa7ka6zo0s0Xf1k7o6+8IZxszcQokIq3AsGZAGNa0V1ruXexLuhfcDl7Kxt3ScvU6E6kROnk0Rk8fezzjY89zk3Tc1exC/Pn/P3GevJ6nXi6RAB3dG6OfvyPC/J3gaG0qYpVEpE0Y1gwIw5puKC4tx+HLOdh3PhN/nc9Eak6Rxnp3O3N1cOvk0RhyY15Zqu0uZxXiz///ifNMWr56uZEE6Oxhh36tHRHayhH2VgxoRFQRw5oBYVjTPYIgICWrEPvOZ2JfUibiL+egtPy//6TMTaTo2kKBZ3zs0dPbnqMxWuRS5h3sOJWOP06la/zMLTWSIKi5Hfq2dkSInyOaWMpFrJKIdAHDmgFhWNN9BcWlOHgpWx3eMguUGut9nazwjM+9K0w5NciTd+FmgXoE7cLNO+rlUiMJgj3t0L+1E/r4OcCuEQMaEdUcw5oBYVjTL4Ig4Exa/r2fS5MykXgtV2OKB04N0vAEQUDSzQL8eTIdf57OwKXM/wKaTCpB1xYK9PO/F9B4/ImorhjW/t+gQYOQmJiIzMxM2Nraonfv3li8eDGcnZ2r3GbLli1YtWoVjh07huzsbCQkJCAgIKBCu9jYWLz77rs4fPgwZDIZAgICsGPHDpiZmWH//v3o2bNnpf3Hx8ejY8eOAFDpNA4rVqzAxIkTa7yPDGv6LfuOEv9cvIW/zt/i1CANSBAEnE3Px5+n0rHjVAZSsgrV60ykRniqpQJ9Wzuhj68DrM1lIlZKRPqCYe3/ffLJJwgKCoKTkxNu3LiB6dOnAwAOHTpU5Tbff/89Ll++DGdnZ0RERFQa1mJjYxEWFobZs2dj4MCBMDExwYkTJzBw4EDI5XKUlJQgJydHY5v3338fe/bsQUpKivoLVSKRIDo6GmFhYep21tbWMDOr+SX9DGuGg1OD1C9BEHD6Rj7+PJ2OHafScSX7v4s+TIyN0N2rCfq1dkQvXwdYmTKgEVH9YlirwrZt2zB48GAolUrIZNV/+F65cgUeHh6VhrUuXbqgT58+mD9/fo1et7S0FC4uLoiMjMT777+vXi6RSLB161YMHjy4truixrBmuP6bGuQWDl7K4tQgNSAIAk5cz7s3Ue3pdFzLuateJzc2Qg/vJujX2gnP+NjDkgGNiBoQw1olcnJy8Nprr+HGjRs4cODAI9tXFdYyMzPh4OCAzz//HBs2bEBycjJ8fHywYMECdOvWrdK+Nm/ejOHDh+PKlStwdXVVL5dIJGjatCmKi4vh4eGBcePG4dVXX4WRkVGVdSmVSiiV/52Anp+fD1dXV4Y1A/fg1CD7kjJxNZtTg9ynUglIvJ6LP0+mY8fpDNzI/S+gmcqM8IyPPfq1dkJPb3uORhLRE9PQYU2nPs1mzpyJL774AkVFRejSpQu2b9/+WP2lpKQAAObOnYulS5ciICAA3333HXr16oXTp0+jZcuWFbZZvXo1QkNDNYIaAMyfPx+9evWCmZkZ9u7di2nTpiErKwvvvfdela+/cOFCfPDBB4+1D6R/TGVSdPdqgu5eTRAl+FWYGuRKdhGiD15B9MErBjE1iEol4HjqbfxxKh07T2cgPa9Yvc7cRKoOaD28m8DcRKc+0oiIakTUkbW5c+c+MqwcOXIEHTp0AABkZWUhJycHV69exQcffABra2ts3779kSdiVzWydujQIXTt2hWzZ8/Ghx9+qF7epk0b9O/fHwsXLtTo5/r162jWrBk2bdqE5557rtrXXLZsGebNm4e8vLwq23BkjWrLUKYGKVcJOHol595FAqczNPazkdwYvXzt0df/XkAzlRnOyCIRaSe9HlmLjIzEyJEjq23j7u6u/rdCoYBCoYCXlxd8fX3h6uqKuLg4BAUF1en1nZycAAB+fn4ay319fZGamlqhfXR0NOzs7DBo0KBH9t2lSxfk5+fj5s2bcHBwqLSNXC6HXM75nKjmLE1lCPN3RJi/Y6VTg5xLz8e59Hx8uS9Z56YGKVcJOHw5GztOZWDnmQzceiCgWcqN0cfPAX1bO+GplgoGNCIyKKKGtfvhqy7uDwg+ODJVW+7u7nB2dkZSUpLG8gsXLqBv374VXi86OhqjRo165AUNAJCQkABTU1PY2NjUuT6i6kgkEvg3tYZ/U2u80aslcgpL8PeFTPx1/hb+uXALuUWl+C0xDb8lpmnt1CBl5SrEpeTgz9PpiDmTgaw7Jep1VqbGCGnliH6tHdG1hcKgzs0jInqQTpzgER8fj/j4eHTr1g22trZISUnBnDlz4OnpqTGq5uPjg4ULF2LIkCEA7l2IkJqairS0NABQhzJHR0c4OjpCIpFgxowZiIqKQtu2bREQEIB169bh/Pnz+OWXXzRq+Ouvv3D58mWMGzeuQn2///47MjIyEBQUBDMzM+zbtw/vvvsuXn31VY6c0RPT2MIEQwJdMCTQpdKpQY5dvY1jV29jacwFUacGKS1XITY5G3+eSseuMxm4XVSqXmdjLkOInwP6tXZCsKcCJsZVX6BDRGQodOJq0FOnTuHNN9/EiRMnUFhYCCcnJ4SFheG9995D06ZN1e3uz3U2ZswYAMDatWsxduzYCv1FRUVh7ty56ueLFi3Cl19+iZycHLRt2xYfffRRhatBX3zxRVy9ehUHDx6s0N/OnTsxe/ZsXLp0CSqVCs2bN8f48eMxadIkGBvX/EuQU3dQQxF7apCSMhUOJmdhx6l0xJy9idwHAlpjCxOEtnJAX38nBHnaQSZlQCMi3cKpOwwIwxo9CU9qahBlWTkOXMzCn6cysPtshsYdGxSNTBDayhH9Wjuhs0djGDOgEZEOY1gzIAxr9KQJglBhapDS8v8+Emo7NUhxaTn+uXALO05nYM/ZmyhQ/hfQmljKEfb/Aa2TR2OdvVKViOhhDGsGhGGNxHZHWYYDF7NqNTVIcWk59ifdwp+n0rH33E0Ulvz3E6uDlRx9/Z3Qr7UT2jfT3alEiIiqw7BmQBjWSJtUNjXIg58WNuYy+Dtb43jqbRQ9ENCcrE3R198J/ds4ItDVFkYMaESk5xjWDAjDGmmzh6cGybv730UCTW3M0K+1I/q2dkKAiw0DGhEZFL2eFJeIdEdlU4OcuZGHQDdbtHGx1op524iI9BHDGhHVmrHUCB3dG6Oje2OxSyEi0nu8Xp6IiIhIizGsEREREWkxhjUiIiIiLcawRkRERKTFGNaIiIiItBjDGhEREZEWY1gjIiIi0mIMa0RERERajGGNiIiISIsxrBERERFpMYY1IiIiIi3GsEZERESkxRjWiIiIiLSYsdgF0H8EQQAA5Ofni1wJERER1dT97+373+P1jWFNixQUFAAAXF1dRa6EiIiIaqugoADW1tb13q9EaKgYSLWmUqmQlpYGS0tLSCSSWm2bn58PV1dXXLt2DVZWVg1Uoe7g8dDE4/EfHgtNPB6aeDw08Xhoqup4CIKAgoICODs7w8io/s8w48iaFjEyMoKLi8tj9WFlZcX/oB7A46GJx+M/PBaaeDw08Xho4vHQVNnxaIgRtft4gQERERGRFmNYIyIiItJiDGt6Qi6XIyoqCnK5XOxStAKPhyYej//wWGji8dDE46GJx0OTWMeDFxgQERERaTGOrBERERFpMYY1IiIiIi3GsEZERESkxRjWiIiIiLQYw5rI/vnnHwwcOBDOzs6QSCT49ddfNdaPGTMGEolE49GlS5dq++zRo0eFbSQSCfr3769uM3fu3ArrHR0dG2IXa+VRxwMAzp07h0GDBsHa2hqWlpbo0qULUlNTq+138+bN8PPzg1wuh5+fH7Zu3VqhzVdffQUPDw+Ympqiffv2+Pfff+trt+qsIY7HN998g6eeegq2trawtbVF7969ER8fr9HGkN4fa9eurfS/l+LiYo12hvL+0OfPj8r2SyKRYMmSJdX2q6+fH3U5Hvr8+VGX4/GkPj8Y1kRWWFiItm3b4osvvqiyTVhYGNLT09WPP//8s9o+t2zZotH+9OnTkEqlGDZsmEa7Vq1aabQ7depUvezT43jU8UhOTka3bt3g4+OD/fv348SJE3j//fdhampaZZ+xsbEYMWIEwsPDceLECYSHh2P48OE4fPiwus1PP/2EKVOm4N1330VCQgKeeuop9O3b95EhsKE1xPHYv38/XnjhBezbtw+xsbFwc3NDSEgIbty4odHOUN4fwL3ZyB/c1/T0dI1tDOn9oc+fHw//f7xmzRpIJBI899xzVfapz58fdTke+vz5UZfjATyhzw+BtAYAYevWrRrLRo8eLTz77LOP1e8nn3wiWFpaCnfu3FEvi4qKEtq2bftY/Ta0yo7HiBEjhJdffrlW/QwfPlwICwvTWBYaGiqMHDlS/bxTp07CxIkTNdr4+PgIs2bNql3RDai+jsfDysrKBEtLS2HdunXqZYb0/oiOjhasra2rbWPI7w99+vx42LPPPis888wz1bbR58+Ph9XkeDxMnz4/HlaT4/GkPj84sqYD9u/fD3t7e3h5eSEiIgKZmZm12n716tUYOXIkLCwsNJZfvHgRzs7O8PDwwMiRI5GSklKfZdc7lUqFP/74A15eXggNDYW9vT06d+5c6U8/D4qNjUVISIjGstDQUBw6dAgAUFJSgmPHjlVoExISom6jjep6PB5WVFSE0tJSNG7cWGO5obw/AODOnTto1qwZXFxcMGDAACQkJKjXGfr7Q18+Px528+ZN/PHHHxg3bly17fT18+NhNT0eD9OXz4+H1eZ4PInPD4Y1Lde3b1+sX78ef/31F5YtW4YjR47gmWeegVKprNH28fHxOH36NMaPH6+xvHPnzvjuu++wa9cufPPNN8jIyEBwcDCys7MbYjfqRWZmJu7cuYNFixYhLCwMMTExGDJkCIYOHYq///67yu0yMjLg4OCgsczBwQEZGRkAgKysLJSXl1fbRhvV9Xg8bNasWWjatCl69+6tXmZI7w8fHx+sXbsW27Ztw4YNG2BqaoquXbvi4sWLAAz7/aFPnx8PW7duHSwtLTF06NBq2+nr58fDano8HqYvnx8Pq+nxeGKfHzUeg6MGhxoMy6alpQkymUzYvHlzjfp89dVXBX9//0e2u3PnjuDg4CAsW7asRv0+CQ8fjxs3bggAhBdeeEGj3cCBAzV+kniYTCYTfvzxR41lP/zwgyCXyzX6PXTokEab//3vf4K3t/dj7kX9qa/j8aDFixcLtra2wokTJ6ptp8/vj4eVl5cLbdu2Fd544w2Nfg3x/aFPnx8P8/b2FiIjIx/Zj75+fjyspsfjQfr0+fGwuhwPQWi4zw+OrOkYJycnNGvWTJ3aq1NUVISNGzdW+Ku4MhYWFmjdunWN+hWLQqGAsbEx/Pz8NJb7+vpWe6Kmo6Njhb9gMjMz1X/pKBQKSKXSattoo7oej/uWLl2KDz/8EDExMWjTpk21bfX5/fEwIyMjdOzYUb2vhvr+0LfPjwf9+++/SEpKqtG+6evnx4Nqczzu07fPjwfV5Xjc11CfHwxrOiY7OxvXrl2Dk5PTI9tu2rQJSqUSL7/88iPbKpVKnDt3rkb9isXExAQdO3ZEUlKSxvILFy6gWbNmVW4XFBSE3bt3ayyLiYlBcHCwut/27dtXaLN79251G21U1+MBAEuWLMH8+fOxc+dOdOjQ4ZGvpc/vj4cJgoDExET1vhri+wPQv8+PB61evRrt27dH27ZtH9lWXz8/HlSb4wHo5+fHg2p7PB7UYJ8ftR7jo3pVUFAgJCQkCAkJCQIA4eOPPxYSEhKEq1evCgUFBcK0adOEQ4cOCZcvXxb27dsnBAUFCU2bNhXy8/PVfYSHh1d6VUm3bt2EESNGVPq606ZNE/bv3y+kpKQIcXFxwoABAwRLS0vhypUrDbavNVHd8RAEQdiyZYsgk8mEr7/+Wrh48aKwfPlyQSqVCv/++6+6j4ePx8GDBwWpVCosWrRIOHfunLBo0SLB2NhYiIuLU7fZuHGjIJPJhNWrVwtnz54VpkyZIlhYWOjl8Vi8eLFgYmIi/PLLL0J6err6UVBQoG5jSO+PuXPnCjt37hSSk5OFhIQEYezYsYKxsbFw+PBhdRtDen/cp4+fH4IgCHl5eYK5ubmwYsWKSvswpM8PQaj98dDnzw9BqP3xeFKfHwxrItu3b58AoMJj9OjRQlFRkRASEiI0adJEkMlkgpubmzB69GghNTVVo4/u3bsLo0eP1liWlJQkABBiYmIqfd0RI0YITk5OgkwmE5ydnYWhQ4cKZ86caajdrLHqjsd9q1evFlq0aCGYmpoKbdu2FX799VeNPio7Hj///LPg7e0tyGQywcfHp9Jz/r788kuhWbNmgomJidCuXTvh77//bohdrJWGOB7NmjWrtM+oqCh1G0N6f0yZMkVwc3MTTExMhCZNmgghISEVzi8RBMN5fwiCfn9+rFq1SjAzMxNyc3Mr7cPQPj9qezz0/fOjtsfjSX1+SARBEGo+DkdERERETxLPWSMiIiLSYgxrRERERFqMYY2IiIhIizGsEREREWkxhjUiIiIiLcawRkRERKTFGNaIiIiItBjDGhEREZEWY1gjIiIi0mIMa0REemD79u1o3rw5OnbsiAsXLmisKygoQMeOHREQEIDWrVvjm2++EalKIqoL3m6KiEgPeHl54auvvsKZM2cQGxuLjRs3qteVl5dDqVTC3NwcRUVF8Pf3x5EjR2BnZydixURUUxxZIyIC0KNHD0yZMkXsMqrUo0cPSCQSSCQSJCYmVlivUCjQokULNG/eHNbW1hrrpFIpzM3NAQDFxcUoLy/Hg3+njxkzRt33r7/+2pC7QUR1wLBGRDpt4MCB6N27d6XrYmNjIZFIcPz48SdcVcOIiIhAeno6/P39K6wbO3YsPD09ERERgQ8//LDC+tzcXLRt2xYuLi54++23oVAo1Os+++wzpKenN2jtRFR3DGtEpNPGjRuHv/76C1evXq2wbs2aNQgICEC7du1EqKz+mZubw9HREcbGxhrLy8rK8Nlnn+Htt99GQUEBbG1tK2xrY2ODEydO4PLly/jxxx9x8+ZN9Tpra2s4Ojo2eP1EVDcMa0Sk0wYMGAB7e3usXbtWY3lRURF++uknjBs3DgCgVCoxefJk2Nvbw9TUFN26dcORI0eq7Nfd3R2ffvqpxrKAgADMnTtX/bxHjx544403MGXKFNja2sLBwQFff/01CgsLMXbsWFhaWsLT0xM7duzQ6EcQBHz00Udo3rw5zMzM0LZtW/zyyy91PgYrV65E8+bNMWnSJBQVFeHixYtVtnVwcECbNm3wzz//1Pn1iOjJYlgjIp1mbGyMUaNGYe3atRrnYf38888oKSnBSy+9BAB4++23sXnzZqxbtw7Hjx9HixYtEBoaipycnMd6/XXr1kGhUCA+Ph5vvPEGXnvtNQwbNgzBwcE4fvw4QkNDER4ejqKiIvU27733HqKjo7FixQqcOXMGU6dOxcsvv4y///671q9/+/ZtzJ8/H4sXL4aLiwusra0rnNN28+ZN5OfnAwDy8/Pxzz//wNvb+7H2m4ieHIY1ItJ5r7zyCq5cuYL9+/erl61ZswZDhw6Fra0tCgsLsWLFCixZsgR9+/aFn58fvvnmG5iZmWH16tWP9dpt27bFe++9h5YtW2L27NkwMzODQqFAREQEWrZsiTlz5iA7OxsnT54EABQWFuLjjz/GmjVrEBoaiubNm2PMmDF4+eWXsWrVqlq//pw5czBkyBD4+voCAPz8/HDixAmNNtevX8fTTz+Ntm3bolu3boiMjESbNm0ea7+J6MkxfnQTIiLt5uPjg+DgYKxZswY9e/ZEcnIy/v33X8TExAAAkpOTUVpaiq5du6q3kclk6NSpE86dO/dYr/1g6JFKpbCzs0Pr1q3VyxwcHAAAmZmZAICzZ8+iuLgYffr00einpKQEgYGBtXrts2fP4ocfftDYB39//woja+3bt6/0ClIi0g0Ma0SkF8aNG4fIyEh8+eWXiI6ORrNmzdCrVy8AUP88KpFINLYRBKHCsvuMjIzw8DSUpaWlFdrJZDKN5xKJRGPZ/f5VKpXG//7xxx9o2rSpxrZyubz6nXzI1KlTkZubCxcXF/UylUoFJyenWvVDRNqNP4MSkV4YPnw4pFIpfvzxR6xbtw5jx45VB6UWLVrAxMQEBw4cULcvLS3F0aNH1T8fPqxJkyYa01nk5+fj8uXLj12nn58f5HI5UlNT0aJFC42Hq6trjfvZvn07jh07hoSEBCQmJqofq1evRlpaGm7duvXYtRKRduDIGhHphUaNGmHEiBF45513kJeXhzFjxqjXWVhY4LXXXsOMGTPQuHFjuLm54aOPPkJRUZH6atGHPfPMM1i7di0GDhwIW1tbvP/++5BKpY9dp6WlJaZPn46pU6dCpVKhW7duyM/Px6FDh9CoUSOMHj36kX2UlpZi2rRpmDFjBgICAjTWWVlZAQBOnDhR5fxzRKRbGNaISG+MGzcOq1evRkhICNzc3DTWLVq0CCqVCuHh4SgoKECHDh2wa9euSuckA4DZs2cjJSUFAwYMgLW1NebPn18vI2sAMH/+fNjb22PhwoVISUmBjY0N2rVrh3feeadG2y9fvhy5ubmIjIyssM7V1RXm5uZITExkWCPSE7w3KBGRDujRowcCAgIqzP1WnyQSCbZu3YrBgwc32GsQUe3xnDUiIh3x1VdfoVGjRjh16lS99jtx4kQ0atSoXvskovrDkTUiIh1w48YN3L17FwDg5uYGExOTeus7MzNTPWmuk5MTLCws6q1vInp8DGtEREREWow/gxIRERFpMYY1IiIiIi3GsEZERESkxRjWiIiIiLQYwxoRERGRFmNYIyIiItJiDGtEREREWoxhjYiIiEiLMawRERERaTGGNSIiIiItxrBGREREpMX+D4rgy6ESPrDNAAAAAElFTkSuQmCC"},"metadata":{}}],"execution_count":14},{"id":"8e67f9a4-d449-420c-9f62-72d106d18636","cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]} \ No newline at end of file From 1f2ab00e0af1230ac01508f8855c9307142fed6e Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Sat, 4 Oct 2025 10:36:49 +0200 Subject: [PATCH 7/7] Update pipeline.yml --- .github/workflows/pipeline.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index 69112c75..8defa8e7 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -179,14 +179,11 @@ jobs: channels: conda-forge conda-remove-defaults: "true" environment-file: .ci_support/environment-integration.yml - - name: Install - shell: bash -l {0} - run: pip install . --no-deps --no-build-isolation - name: Notebooks shell: bash -l {0} timeout-minutes: 20 run: | - ls /home/runner/miniconda3/envs/test/lib/python3.12/site-packages/gpaw + pip install . --no-deps --no-build-isolation cp .ci_support/mpi4pywrapper.py /home/runner/miniconda3/envs/test/lib/python3.12/site-packages/gpaw flux start flux resource list flux start papermill notebooks/5-1-gpaw.ipynb notebooks/5-1-gpaw-out.ipynb -k python3