diff --git a/.gitignore b/.gitignore index ab61b080cdcb95a93a50ce52fc9ed6dabbeb5610..585e8b8d628b491ecb338f7fe1c67e7eadcffab2 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ __pycache__ .cache _build /.idea -.cache _local_tmp -**/.vscode \ No newline at end of file +**/.vscode +doc/bibtex.json +/html_doc \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 326f51cd724137fc0817595e5d67bc5cdc53f845..c21ecabd4157b3ef72804de7ed05f0f7e5609363 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,6 +18,8 @@ tests-and-coverage: - echo "backend:template" > ~/.config/matplotlib/matplotlibrc - mkdir public - pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils + - env + - pip list - py.test -v -n $NUM_CORES --cov-report html --cov-report term --cov=. -m "not longrun" tags: - docker @@ -76,6 +78,8 @@ ubuntu: - mkdir -p ~/.config/matplotlib - echo "backend:template" > ~/.config/matplotlib/matplotlibrc - pip3 install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils + - env + - pip3 list - pytest-3 -v -m "not longrun" tags: - docker diff --git a/doc/notebooks/02_tutorial_boundary_setup.ipynb b/doc/notebooks/02_tutorial_boundary_setup.ipynb index 8a404c6ffbf0538492a70d4f1d710ec59a5893bc..05c2b34ea5064183b1fd4803d5d3da57eae0f41f 100644 --- a/doc/notebooks/02_tutorial_boundary_setup.ipynb +++ b/doc/notebooks/02_tutorial_boundary_setup.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -61,7 +61,7 @@ "2" ] }, - "execution_count": 8, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -87,17 +87,19 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { - "image/png": "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aac959hjjz1xxYoVz3x0m6985Sufc8IJJxy3aNGiEz72sY8d9ejyuXPnPv+ee+6Zdcstt8xeuHDhCeecc86xixYtOuHFL37xcx988MGa6p9v2Lfuz0ryxKqaleTQJP805PYAAABgWn3zm9889Mtf/vKRN9544/euvPLK29euXfukJHnrW9/67FWrVm249dZbv3fCCSdsft/73veziJ89e/a2NWvW3PK2t71t4uyzz170x3/8x3d+//vfX/eFL3zhqI0bN85Mkssuu+yOdevW3XzDDTd871Of+tTRjy7f0Z133nnIihUrNt1+++3rDj/88Ec++9nPHjHV+QcO/dba3Uk+luTOJPck+VFr7a8G3R4AAAAcCL7xjW88+YwzznjgsMMO23bkkUduO+200x546KGHZvz4xz+e+epXv/rBJHnnO99537e+9a0nP/qa173udQ8kydKlSzcvWrRo87HHHvvTJz7xiW3evHlb1q9fPztJPvrRjx69ZMmS408++eTjNm7c+IR169YdsvO+586du+VFL3rR5iQ56aSTHr7jjjvmTHX+Yd66f0SS1yZ5dpJnJnlSVb15F+str6o1VbVmYmJi0N0BAADAflM1tXfMH3LIIS1JZsyYkTlz5vzsjgEzZszI1q1b68orrzzs6quvPmzNmjXfv+WWW7533HHHbd68efPPNfns2bN/9tqZM2e2rVu37te37r8yyT+01iZaaz9NckWSF+28UmttdWttvLU2PjY2NsTuAAAAYN879dRTH/yLv/iLpz744IP1wx/+cMZVV1311Cc96UnbnvKUpzzyta997clJcvHFFz/tlFNOeXBvt/nAAw/MPPzwwx857LDDtl1//fWHPPpxgH1hmAsa3JnkhVV1aJLNSV6RZM1IpgIAAIBp8pKXvOTh173udfefeOKJJ8ydO3fLsmXLHkyST3/60/9w/vnnH7tixYoZ8+fP33L55ZffsbfbPOuss360evXqscWLFx//nOc851+WLl360L6av1pre15rdy+uujDJG5JsTXJ9kne01rbsbv3x8fG2Zo3/CwD2rdWrV49kO6vWzx3JdgCGsXLh3SPZzvLly0eyHYDHUlXXtdbGh93O2rVr71i6dOm9jz7u/fZ6g1i7du1RS5cuXbCr54b6i2qtfTjJh4fZBgAAADyWgz3K97dhb68HAAAAHECEPgAAAHRE6AMAAEBHhD4AAAB0ROgDAABAR4Q+AAAA7KSqTn7nO9/5rEcff+hDHzr6Pe95zzMf6zVr166ds2zZsiXPe97zjl+4cOEJ55577rFJcuWVVx728pe/fFGSXHbZZYevXLnymH05+8juQwgAAAD7wqWXXrp0y5YtI+vXOXPmbD3vvPMe85Z9s2fPbl/96lePuOeeezY+4xnP2Lo3233Xu941f8WKFT9485vf/ECSXHvttU/ceZ03velNP0ryo4EG30vO6AMAAHBAG2Xk7+32Zs6c2d7ylrdMrFq16uidn7v11ltnn3LKKYsXL158/CmnnLL4tttum50kmzZtesKxxx77k0fXW7Zs2eadX/uHf/iHT3vLW94yP0nOOuusBW984xvnn3zyyUsWLFhw4uWXX374cH+y7YQ+AAAA7MLv/M7vbLriiiuOvO+++2buuPw3f/M357/xjW+879Zbb/3eG97whvvOP//8eUnyrne96wdnnHHG4pe+9KXPvfDCC59+7733ztz1lv/VXXfdNefaa6+95c///M9vu+CCC459+OGHa9i5hT4AAADswpFHHrnt7LPPvu8jH/nI03dcfv311z9p+fLl9yfJ+eeff/9111335CR597vffd+NN9647vWvf/3911xzzWEveMELnrd58+bHDPezzjrr/pkzZ+b5z3/+lnnz5m254YYbDhl2bqEPAAAAu/GBD3zgB5/73OeOeuihh/aqnxcsWPDTCy644L6vf/3rfz9r1qysWbPm5z6nv6OqeszHgxD6AAAAsBtHH330I7/6q7/6w8997nNHPbrspJNOeuiiiy46Ikk+9alPHTk+Pv5gknzxi198ypYtWypJ7rzzzlkPPPDAzB0/s78rV1xxxRGPPPJI1q1bN+euu+6as3Tp0n8ZdmZX3QcAAIDH8MEPfnDjpZdeOvbo409+8pN3nnfeeQs+8YlPHPO0pz1t62c/+9k7kuRrX/vaU9773vfOnzNnzrYkufDCCzfMnz9/63e/+93dbnvRokVbli1btuS+++57wsc//vF/PPTQQ9uw8wp9AAAADmhz5szZOurb6+1pnYcffvj6R7+eN2/e1s2bN//s8ZIlS37yrW9969adX3PRRRdtSLJh5+Vnnnnmj88888wfJ8mKFSvuS3Lfo8+95CUvefDiiy++a+p/it0T+gAAABzQ9nTPe/4toQ8AAADT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\n", + "image/png": "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xx134sc+9rGjHl2/cOHCF9xzzz3zbrnllvlLly498eyzzz72uOOOO/ElL3nJcx988MGa6Z9v2Jfuz0vyxKqal+TQJP845P4AAABgVn3jG9849Etf+tKRN95443evvPLK29etW/ekJHn729/+7DVr1my89dZbv3viiSdu+cAHPvDTiJ8/f/72iYmJW97xjndMnnXWWcf90R/90Z3f+9731v/xH//xUZs2bZqbJJdddtkd69evv/mGG2747qc+9amjH12/szvvvPOQVatWbb799tvXH3744Y989rOfPWKm8w8c+q21u5N8LMmdSe5J8sPW2l8Nuj8AAAA4EHz9619/8umnn/7AYYcdtv3II4/c/trXvvaBhx56aM6PfvSjua973eseTJJ3v/vd933zm9988qPPeeMb3/hAkixfvnzLcccdt+XYY4/9yROf+MS2aNGirRs2bJifJL/7u7979LJly0445ZRTnr9p06YnrF+//pBdj71w4cKtL37xi7ckycknn/zwHXfcsWCm8w/z0v0jkrwhybOTPDPJk6rqrbvZbmVVTVTVxOTk5KCHAwAAgP2mamavmD/kkENaksyZMycLFiz46ScGzJkzJ9u2basrr7zysKuvvvqwiYmJ791yyy3fff7zn79ly5YtP9Pk8+fP/+lz586d27Zt27ZfX7r/6iR/31qbbK39JMkVSV6860attbWttfHW2vjY2NgQhwMAAIB975WvfOWDf/EXf/HUBx98sH7wgx/Mueqqq576pCc9aftTnvKUR7761a8+OUkuvvjip5166qkPTnefDzzwwNzDDz/8kcMOO2z79ddff8ijbwfYF4a5ocGdSV5UVYcm2ZLkVUkmRjIVAAAAzJKXvvSlD7/xjW+8/6STTjpx4cKFW1esWPFgknz605/++/POO+/YVatWzVm8ePHWyy+//I7p7vPMM8/84dq1a8eOP/74E57znOf88/Llyx/aV/NXa23vW+3pyVUXJnlzkm1Jrk/yrtba1j1tPz4+3iYm/FsAsG+tXbt2JPtZs2HhSPYDMIzVS+8eyX5Wrlw5kv0APJaquq61Nj7sftatW3fH8uXL7310ufeP1xvEunXrjlq+fPmS3T021F9Ua+0jST4yzD4AAADgsRzsUb6/DfvxegAAAMABROgDAABAR4Q+AAAAdEToAwAAQEeEPgAAAHRE6AMAAMAuquqUd7/73c96dPmCCy44+n3ve98zH+s569atW7BixYplz3ve805YunTpieecc86xSXLllVce9opXvOK4JLnssssOX7169TH7cvaRfQ4hAAAA7AuXXnrp8q1bt46sXxcsWLDt3HPPfcyP7Js/f377yle+csQ999yz6RnPeMa26ez3Pe95z+JVq1Z9/61vfesDSXLttdc+cddtfvVXf/WHSX440ODT5Io+AAAAB7RRRv509zd37tz2tre9bXLNmjVH7/rYrbfeOv/UU089/vjjjz/h1FNPPf62226bnySbN29+wrHHHvvjR7dbsWLFll2f+wd/8AdPe9vb3rY4Sc4888wlb3nLWxafcsopy5YsWXLS5Zdffvhwf7IdhD4AAADsxm/91m9tvuKKK46877775u68/td//dcXv+Utb7nv1ltv/e6b3/zm+84777xFSfKe97zn+6effvrxL3vZy5574YUXPv3ee++du/s9/4u77rprwbXXXnvLn//5n992/vnnH/vwww/XsHMLfQAAANiNI488cvtZZ51130c/+tGn77z++uuvf9LKlSvvT5Lzzjvv/uuuu+7JSfLe9773vhtvvHH9m970pvuvueaaw174whc+b8uWLY8Z7meeeeb9c+fOzQte8IKtixYt2nrDDTccMuzcQh8AAAD24EMf+tD3P/e5zx310EMPTauflyxZ8pPzzz//vq997Wv/b968eZmYmPiZ9+nvrKoec3kQQh8AAAD24Oijj37kl3/5l3/wuc997qhH15188skPXXTRRUckyac+9akjx8fHH0ySL3zhC0/ZunVrJcmdd94574EHHpi783v2d+eKK6444pFHHsn69esX3HXXXQuWL1/+z8PO7K77AAAA8Bg+/OEPb7r00kvHHl3+5Cc/eee555675BOf+MQxT3va07Z99rOfvSNJvvrVrz7l/e9//+IFCxZsT5ILL7xw4+LFi7d95zvf2eO+jzvuuK0rVqxYdt999z3h4x//+D8ceuihbdh5hT4AAAAHtAULFmwb9cfr7W2bhx9++PpHv1+0aNG2LVu2/HR52bJlP/7mN795667PueiiizYm2bjr+jPOOONHZ5xxxo+SZNWqVfclue/Rx1760pc+ePHFF9818z/Fngl9AAAADmh7+8x7/jWhDwAAALPgi1/84h37Yr9uxgcAAAAdEfoAAAAcaLZv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\n", "text/plain": [ - "<matplotlib.figure.Figure at 0x7f360ea22c88>" + "<Figure size 1152x432 with 1 Axes>" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -114,17 +116,19 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { - "image/png": "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dc178+77u+YlyfLS0a55V277bte8JLl86YmueTu3zP/T4tETj3XN25oTXfM2whs24Pf7s6/c0TXv+9+6uGte0v+x7HNPfKRrHsA0HBEFAABgKEUUAACAoRRRAAAAhlJEAQAAGEoRBQAAYChFFAAAgKHOWkSr6qaqOlJVdz3juour6taq+ubk60UbOyYAAACL4lyOiH4oyb5Trnt3kj9urV2Z5I8nlwEAAOCszlpEW2tfSPLwKVdfn+TDk+8/nOTnOs8FAADAglrve0Rf0lo7nCSTry/uNxIAAACLbMNPVlRV+6tqtapW19bWNnpzAAAAzLn1FtEHq2pXkky+HjnTHVtrN7bWVlprK8vLy+vcHAAAAItivUX0M0nePvn+7Ul+v884AAAALLpz+fiWm5PcluTqqjpYVe9I8htJrq2qbya5dnIZAAAAzmrpbHdord1whpve1HkWAAAANoENP1kRAAAAPJMiCgAAwFCKKAAAAEMpogAAAAyliAIAADDUWc+aC/B8s2XXS7rmPbq3///Z7d79cNe8V20/3DUvSS7fdqRv3tITXfOSZOeWzfc01vvvvBHr8nT6/u4c3X5+17wk+cru3V3zHtn70q55SXJR58cygHniiCgAAABDKaIAAAAMpYgCAAAwlCIKAADAUIooAAAAQymiAAAADKWIAgAAMJQiCgAAwFCKKAAAAEMpogAAAAyliAIAADCUIgoAAMBQiigAAABDKaIAAAAMpYgCAAAwlCIKAADAUIooAAAAQymiAAAADKWIAgAAMNTSrAcA6K2d1/eh7dgLW9e8JFk+//Humb1dUMe65u3cMv9POTu2/PVZj3BWj534y655G7EuvX93NkLvfXBtAx4nej+WAcwTR0QBAAAYShEFAABgKEUUAACAoRRRAAAAhlJEAQAAGEoRBQAAYKipimhV/dOq+mpV3VVVN1fV/J/3HgAAgJladxGtqkuT/JMkK621VyfZmuStvQYDAABgMU370tylJOdX1VKS7UkOTT8SAAAAi2zdRbS19kCS30zy7SSHkzzSWvt8r8EAAABYTNO8NPeiJNcn2Ztkd5ILquoXTnO//VW1WlWra2tr658UAACAhTDNS3N/Msl9rbW11tpTST6V5G+deqfW2o2ttZXW2sry8vIUmwMAAGARTFNEv53kb1bV9qqqJG9KcqDPWAAAACyqad4j+sUk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\n", + "image/png": "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\n", "text/plain": [ - "<matplotlib.figure.Figure at 0x7f360d3a2208>" + "<Figure size 1152x432 with 1 Axes>" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -139,14 +143,16 @@ "source": [ "## Boundary Setup\n", "\n", - "Now instead of creating a periodic, force driven channel, we want to drive the flow with a velocity bounce back boundary condition (UBB) at the inlet and a pressure boundary at the outlet. We want the inflow velocity boundary set up to already prescribe the correct, parabolic flow profile. That means we need a different velocity value at each cell.\n", + "Now instead of creating a periodic, force driven channel, we want to drive the flow with a velocity bounce back boundary condition (UBB) at the inlet and a outflow boundary at the outlet. We want the inflow velocity boundary set up to already prescribe the correct, parabolic flow profile. That means we need a different velocity value at each cell. The outflow boundary condition takes the following form:\n", + "$$ f_{\\overline{1}jkxyzt} = f_{\\overline{1}jk(x - \\Delta x)yz(t - \\Delta t)} \\left(c \\theta^{\\frac{1}{2}} -u \\right) \\frac{\\Delta t}{\\Delta x} + \\left(1 - \\left(c \\theta^{\\frac{1}{2}} -u \\right) \\frac{\\Delta t}{\\Delta x} \\right) f_{\\overline{1}jk(x - \\Delta x)yzt}$$\n", + "More information on the outflow condition can be found in appendix F in https://doi.org/10.1016/j.camwa.2015.05.001\n", "\n", - "Again, we set up a scenario, but this time without external force and without periodicity. " + "Again, we set up a scenario, but this time without external force and without periodicity." ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -169,16 +175,16 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "512" + "4" ] }, - "execution_count": 24, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -201,7 +207,9 @@ " \n", " \n", "inflow = UBB(velocity_info_callback, dim=sc2.method.dim)\n", - "outflow = FixedDensity(1.0)\n", + "\n", + "stencil = get_stencil('D3Q27')\n", + "outflow = ExtrapolationOutflow(stencil[4], sc2.method)\n", "\n", "sc2.boundary_handling.set_boundary(inflow, make_slice[0, :, :])\n", "sc2.boundary_handling.set_boundary(outflow, make_slice[-1, :, :])" @@ -216,16 +224,16 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "32" + "8" ] }, - "execution_count": 25, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -243,17 +251,19 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { - "image/png": "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NkoyjLZ2e9ddd90h5eXlIz/2sY9VLFu2rKsk/eUvf9ln1KhRwyoqKoafcsopg6urq0skacyYMUMvueSS/pWVlUMHDRo0Ys6cOd1PPfXUwQMHDhx51VVXHVq/zU9+8pODR4wYceSQIUNG3HHHHb3rl/fr1++otWvXlr722mtdBg0aNGLChAkDhwwZMmLs2LFHbNu2zUkeez7kcsruJyX9LSKqI2KXpMckfSyZsgAAAACg8Pz5z3/u/vjjjx/4yiuvLJ41a9brCxYs2FeSJk2adPitt966aunSpYtHjBix47rrrns/bHbp0qW2qqrqtYsvvrj6c5/73JB77rnnzVdffXXRz3/+897r1q0rkaSHHnpoxaJFi5bMnz9/8dSpU/vUL2/ozTff7HbVVVetf/311xf16tVr94MPPnjA3jvy7OQSSN+U9FHb3W1b0smSliRTFgAAAAAUnj/+8Y89Tj/99M09e/asPfDAA2tPPfXUze+++26nd955p+SMM87YJkmXXnrpxueee65H/Ws+85nPbJakUaNG7RgyZMiOgQMH7tpnn32if//+O5cvX95Fkm6//fY+Q4cOHT569Ogj161b13nRokUf+oSTfv367fzYxz62Q5KOOeaY7StWrOi6d446e7lcQ/q87UckvSipRtJLkqYlVRgAAAAAFKK6+brW69atW0hSp06d1LVr1/fvENypUyfV1NR41qxZPefMmdOzqqrq1Z49e9aOGTNm6I4dOz40udilS5f3X1tSUhJNjWlvciowIr4dEcMiYmREfDEidiZVGAAAAAAUmpNOOmnbr3/96/23bdvmt99+u9Ps2bP333fffWv322+/3b/97W97SNJ999130HHHHbettdvcvHlzSa9evXb37Nmz9qWXXupWfxpwMUj0Al8AAAAA6MjGjRu3/TOf+cymkSNHjujXr9/OMWPGbJOk+++//2+XX375wKuuuqrTgAEDds6cOXNFa7d57rnnbpk2bVpZRUXF8MGDB/991KhR7+ar/r3NEXvvM2MrKyujqqpqr+1v8UWtnyo/ve+sPFYCAAAAtB9vDP1jq8fGxXfksZIPsz0vIiqzff2CBQtWjBo1akP982L/2JdCsGDBgt6jRo0qb2odM6QAAAAAihbhsX1r9xe5AgAAAACKE4EUAAAAAJAKAikAAAAAIBUEUgAAAABAKgikAAAAAIBUEEgBAAAAIEG2R1966aWH1T+/6aab+lx99dWH7uk1CxYs6DpmzJihw4YNGz5o0KAR559//kBJmjVrVs8TTzxxiCQ99NBDvW688cZD8lv93sXHvgAAAAAoWg888MConTt3JpZ7unbtWnPRRRft8aNkunTpEr/5zW8OWLt27bq+ffvWtGa7V1xxxYCrrrrqrQsvvHCzJL3wwgv7NB7zhS98YYukLVkV3k4xQwoAAACgaCUZRlu7vZKSkpg4cWL1rbfe2qfxuqVLl3Y57rjjKioqKoYfd9xxFcuWLesiSevXr+88cODA9+rHjRkzZkfj1/7oRz86aOLEiQMk6dxzzy2/4IILBowePXpoeXn5yJkzZ/bK7cjSQSAFAAAAgIR9/etfX//YY48duHHjxpKGyy+77LIBF1xwwcalS5cuPu+88zZefvnl/SXpiiuueOv000+vOP7444+4+eabD96wYUNJ01v+HytXruz6wgsvvParX/1q2Ve/+tWB27dvd76OJ18IpAAAAACQsAMPPLD2c5/73Mbbbrvt4IbLX3rppX0nT568SZIuv/zyTfPmzeshSV/5ylc2vvLKK4s++9nPbpo7d27PY489dtiOHTv2GDDPPffcTSUlJTrqqKN29u/ff+f8+fO75e+I8iOnQGp7f9uP2H7V9hLbxyVVGAAAAAAUshtuuOGtn/3sZ73ffffdVuWu8vLyXV/96lc3PvXUU38tLS1VVVXVh64jbcj2Hp8XglxnSH8o6bcRMUzSKElLci8JAAAAAApfnz59dp911llv/+xnP+tdv+yYY45599577z1AkqZOnXpgZWXlNkl65JFH9tu5c6cl6c033yzdvHlzScNrSpvy2GOPHbB7924tWrSo68qVK7uOGjXq7/k8nnzI+gJf2/tJOl7SJEmKiPck7fEbBgAAAAAdyTe/+c11DzzwQFn987vvvvvNiy66qPyHP/zhIQcddFDNgw8+uEKSfvvb3+537bXXDujatWutJN18882rBgwYUPPyyy83u+0hQ4bsHDNmzNCNGzd2/sEPfvBG9+7dI9/Hk7Rc7jg1SFK1pPttj5I0T9JXIuLdhoNsT5Y0WZIGDBiQw+4AAAAAoG26du1ak/THvrQ0Zvv27S/VP+7fv3/Njh073n8+dOjQ95577rmljV9z7733rpK0qvHyM888850zzzzzHUm66qqrNkraWL9u3Lhx2+67776VbT+K9iOXN6ZU0j9I+nJEPG/7h5Kul/TPDQdFxDRJ0ySpsrKy4BI7AAAAgMLV0meGIl25BNJVklZFxPOZ54+oLpACAAAAAPLo0UcfXZF2DUnI+qZGEbFO0krbQzOLTpa0OJGqAAAAAABFL9dzqb8s6SHbXSQtl3Rx7iUBAAAAADqCnAJpRMyXVJlQLQAAAACADiTXzyEFAAAAACArid3+GAAAAAAgvfbaa13OPPPMI5YtW7aoftnVV199aI8ePXYvWrRon+eee65nz549d+/cudOf/exnN915551rJWnMmDFD169f37lbt2617733nr/0pS+9de21125I70jyj0AKAAAAoGi9dkXvUbu3bUws95T0OKhm6I835PRRMrfccsuqiy+++O3t27e7oqJi5KWXXrpx2LBh70nSgw8+uPz444/f/tZbb5UcccQRR1155ZUbu3XrVrQfn8kpuwAAAACKVpJhNOntbd++vZMk9ezZs7bxuq1bt5bss88+taWlpUUbRiUCKQAAAADsVd/61rcOGzZs2PABAwZ85NOf/vSmfv361dSvmzhx4qCKiorhRx111Mhrr712TWlpcZ/USiAFAAAAgATZ3uPyW265ZdWrr766eO3atQvmzp3bc/bs2fvWj3nwwQeXL126dPHy5ctfvuuuuw5ZunRpl71TdToIpAAAAACQoD59+tRs2bKlpOGyTZs2lfTu3bum4bJevXrVjh079p05c+b0aLyNQw89tGbkyJHb586du2/jdcWEQAoAAAAACerVq1ftwQcfvOuXv/xlT0l66623Sv70pz/1Oumkk7Y1HLdr1y7Nmzevx5AhQ3Y23sY777zTadGiRd2HDh36oXXFpLhPSAYAAACAFDzwwAN/+9KXvjTguuuu6y9J11133ZoRI0bslOquIb399tv77tq1y+PGjds6ceLEzfWvmzhx4qD6j32ZMGHCho9//OPb0zqGvYFACgAAAKBolfQ4qCbpj31pzbjRo0f//fnnn1/aePmjjz66ornXvPDCC6/lUFpBIpACAAAAKFq5fmYo8otrSAEAAAAAqSCQAgAAAABSkXMgtV1i+yXbs5IoCAAAAADQMSQxQ/oVSUsS2A4AAAAAoAPJKZDaPkzSGZLuTaYcAAAAAEBHkesM6Q8kfUNSbXMDbE+2XWW7qrq6OsfdAQAAAED7VlJSMnrYsGHD6/+99tprXebOndt90qRJ/ZPYfr9+/Y5au3ZtacN9DRkyZMTQoUOHf+c73+mze/fuJHbzvu9+97tld91110GS9KMf/eigFStWdE5q21l/7IvtMyWtj4h5tj/R3LiImCZpmiRVVlZGtvsDAAAAgLbq/bObRm3cuT2xj7s8qGv3mg0X/MseP0qma9euta+++urihsuGDh363vHHH789qTqa2tfq1atLP/e5zw3asmVLyfe///01Se3jG9/4xvsziz/96U97H3300TvKy8t3JbHtXGZIx0o62/YKSQ9LOsn2T5MoCgAAAACSkGQYzWV7s2bN6nniiScOkaRJkyb1v/baa/tK0qOPPrpfZWXl0N27d2vNmjWlp5122uCRI0ceOXLkyCOffPLJfSVp3bp1JWPHjj3iyCOPHH7BBRcMjGh6nq9fv341995774r777//4NraWtXU1GjKlCmHjRw58siKiorh3/ve93rX1zJmzJih48ePH3T44YePOPvssw+vra076fVLX/pSv8GDB4+oqKgYPnny5MMk6eqrrz70pptu6nP//fcfsHDhwu4TJ04cNGzYsOEPP/xwr1NOOWVw/f4ff/zx/U499dTBTRbXjKzfnIi4QdINkpSZIb02Ii7MdnsAAAAAUAx27tzZadiwYcMlqX///jtnz57914br//3f/331Mcccc+QJJ5yw7Zprrhnw61//ellJSYmmTJnS/+qrr37rtNNO27Zs2bIup5122hHLly9fdP311x963HHHbbvjjjvWPvzww71mzpzZu7l9Dx8+/L3a2lqtXr269Oc///n+vXr12r1w4cIlO3bs8LHHHjvsrLPO2ipJS5Ys2Wf+/PnLy8vLd40ePXrY7Nmzexx99NE7fvOb3xywfPnyhZ06ddKGDRtKGm774osvfvvuu+8++I477lh5/PHHb6+trdUNN9xw2Jo1a0oPPfTQmunTpx80adKkDW35XiX61wIAAAAA6OiaOmW3oZ49e9befffdKz71qU8Nu/nmm1eOGDFipyQ988wz+y1btmyf+nHbtm0refvttzs999xzPR977LHXJWnChAlbpkyZsseLROtnUH//+9/v9+qrr3Z/4oknDpCkd955p2Tx4sXdunTpEkcdddS7gwcP3iVJI0aM2P7Xv/61y0knnbSta9eutRMmTBh4xhlnbDnvvPO27Gk/nTp10uc///mN99xzz4FXXHHFxhdffLHHY4899rdWfpskJRRII+JPkv6UxLYAAAAAoNjNnz9/n169etWsWbPm/RsERYSqqqqW9OjR40Pn5Hbq1LqrLRcvXtylpKRE/fr1q4kI33nnnW+ee+65WxuOmTVrVs+uXbu+v4+SkhLV1NS4c+fOmj9//pInnnhiv4cffviAu+++++Dnnntu6Z72d/nll28844wzhnTr1i3OOuustzt3btv9jpL4HFIAAAAAQCstXbq0y49//OND5s2bt/ipp57q9Yc//GFfSRo3btzW22+//eD6cX/5y1/2kaSPfvSj70yfPv0gSfrFL36x39atW0ua2u6aNWtKL7300oEXX3zx+k6dOumUU07Zcvfdd5ft3LnTkvTyyy933bp1a7MZcMuWLZ02bdpUct555235yU9+snLJkiXdG4/p0aPH7i1btry///Ly8l19+vTZdeedd/a99NJL23S6rkQgBQAAAIC9pra2VpMmTSr/13/915Xl5eW77rnnnhWXXXbZwO3bt3vatGkrX3zxxX0rKiqGDx48eMRdd91VJkm33XbbmmeeeabH8OHDj/zd737Xq2/fvu/Vb6/+etUhQ4aMOPHEEytOPvnkrXfccccaSfra1762YdiwYX8/6qijjjziiCNGXHrppQN37drl5mrbvHlzyfjx44+oqKgY/vGPf3zoLbfcsrLxmIkTJ2748pe/PHDYsGHDt23bZkmaMGHCxr59+743evTov7f1++Hm7tCUD5WVlVFVVbXX9rf4oma/1x9yet9ZeawEAAAAaD/eGPrHVo+Ni+/IYyUfZnteRFRm+/oFCxasGDVq1PszdWl87EtHM3HixAHHHHPM9q997WtNzpAuWLCg96hRo8qbWsdNjQAAAAAULcJjfo0YMeLIffbZp3bq1Kkfmk1tDQIpAAAAACArixYtWpLL67mGFAAAAACQCgIpAAAAgGJSW1tb2/qbySCvMu9FbXPrCaQAAAAAisnC6urqXoTS9NXW1rq6urqXpIXNjeEaUgAAAABFo6am5p/WrVt377p160aKCbi01UpaWFNT80/NDSCQAgAAACgao0ePXi/p7LTrQOvwFwMAAAAAQCoIpAAAAACAVBBIAQAAAACpyDqQ2u5v+4+2l9heZPsrSRYGAAAAAChuudzUqEbSNRHxou2ekubZnh0R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\n", + "image/png": "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9BlP7/AxJfX19TrllFMGf+1rX1s3ZcqUN+rq6nTWWWcNmDJlSt9p06at2tm2b7/99v1uueWWtY3Td911V+Xjjz++dNiwYdtvv/32fdI6hpZcdNFF73z3u999J8l7GakEAAAAULLSDJRt2d6jjz5aUV5eXj9lypQNklRWVqY77rhj5QMPPNBr06ZNXZqPOB5zzDGDH3vssYpLLrmkb21tbZdhw4YNHz9+/IFnnXVW/1WrVpWPHz9+8I033ti76T6WLFnS7YgjjhgyZMiQ4UccccSQpUuXdqurq9MBBxxwaH19vdavX9+1S5cuox9//PEekjR69OihCxcuLE/z+9AUoRIAAAAAUrJgwYLdRo0atbXpvL333rt+v/322/7KK6/sMNj95Cc/WV1eXl7/2muvvfLII4+8ef/996/o3bv3h7Nnz15yww03rGu67kUXXdT/rLPO2rBkyZJXTj/99A0XX3xxv7KyMh144IEfvPjii7vOmjWrx/Dhw7c+9dRTPbZt2+a1a9d2GzlyZO3pp58+YM6cOd1b2v8dd9zRp/HU10996lND2nPMnP4KAAAAACmJCNmOHcxPZR8vvfTS7o8//vgbknTxxRdvvPHGGw+QpCOPPHLTk08+WfHmm2+WX3XVVWvuuuuuyjlz5mweNWrUFkl64IEH3trRNjn9FQAAAAAKwKGHHrpt3rx5uzedt3Hjxi5r167tdsghh9SWlZVFfX39X5fV1tamlsmOPvrozU8//XSPF198cffTTjvtvffff7/rk08+WTFu3LhNae2jJYRKAAAAAEjJ+PHjN33wwQddfvSjH+0jSXV1dbrkkkv6nXbaaesrKirqDzrooO2LFi3q/tFHH+n111/f5eWXX/5rAC0rK4va2tpWhzMPP/zwLXfeeedekjRt2rS9q6qqNkvS0UcfveXFF1/s0aVLl+jevXuMGDFi67333lt5zDHHbM7V8UqESgAAAABITZcuXfTb3/729YceemivAQMGjDzwwANHlpeX199+++2rJen444/f3K9fv9qhQ4eOmDJlSr/hw4f/9frLs88+u+aQQw4ZPn78+AN3to+f/vSnK37xi1/0GjJkyPCZM2fu85Of/GSlJO22226x7777bq+qqtoiSUcdddTmLVu2dBkzZsw2SWrrNZXDhg0bvnjx4m5tPWZHfOx035ypqqqK6urqDtvfKxPbfs7yifs9lsNKAAAAgMJRccg1bV53wcQFOazk42zPjYiqpO+fP3/+8lGjRq1vnO7oR4qUsvnz5/caNWrUwObzuVEPAAAAgJLVWQNgR+L0VwAAAABAYoRKAAAAAEBiWYdK211tv2SbixIBAAAAoJNJY6RyiqRXU9gOAAAAAKDIZBUqbR8g6YuS7kynHAAAAABAMcl2pPI2Sd+UVL+jFWxPsl1tu7qmpibL3QEAAABAYbM9+oILLjigcfr666/vc8UVV+y/s/fMnz+/fMyYMUOHDRs2fNCgQSPOPPPMAZL02GOPVRxzzDGDJem+++7ree211+6b2+rbL/EjRWyfJGldRMy1ffSO1ouI6ZKmSw3PqUy6PwAAAABor3vuuWdUbW1tao9SLC8vr5s4ceJOH1PSrVu3+P3vf7/XmjVr1u633351bdnu17/+9f6XXXbZO+ecc867kvTCCy/s1nyds88++z1J7yUqPIeyGakcK2m87eWSfiXpWNu/TKUqAAAAAEhBmoGyrdvr2rVrTJgwoebmm2/u03zZkiVLuh1xxBFDhgwZMvyII44YsnTp0m6StG7dul0GDBiwvXG9MWPGbGv+3ttvv32fCRMm9JekU089deBZZ53Vf/To0UMHDhw4cubMmT2zO7LkEofKiPhWRBwQEQMlnSHpvyPinNQqAwAAAIAiddVVV6176KGH9t6wYUPXpvMvuuii/medddaGJUuWvHL66advuPjii/tJ0te//vV3TjzxxCGf+cxnDr7xxht7r1+/vmvLW/6blStXlr/wwguLH3300aWXX375gK1btzpXx7MzPKcSAAAAAFK2995715922mkbbrnllt5N57/00ku7T5o0aaMkXXzxxRvnzp3bQ5KmTJmyYcGCBYu+8pWvbJwzZ07FJz/5yWHbtm3baUg89dRTN3bt2lWHHnpobb9+/WrnzZu3a+6OaMdSCZUR8VREnJTGtgAAAACgFHzrW9965/777++1ZcuWNuWugQMHfnj55ZdvePLJJ98oKytTdXX1x66rbMr2Tqc7CiOVAAAAAJADffr0+ehLX/rSX+6///5ejfMOP/zwLXfeeedekjRt2rS9q6qqNkvSgw8+uEdtba0lacWKFWXvvvtu16bXWLbkoYce2uujjz7SokWLyleuXFk+atSoD3J5PDuS6kWrAAAAAIC/ue6669bec889lY3T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\n", "text/plain": [ - "<matplotlib.figure.Figure at 0x7f36003d6668>" + "<Figure size 1008x576 with 4 Axes>" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -261,7 +271,7 @@ "plt.rc('figure', figsize=(14, 8))\n", "\n", "plt.subplot(231)\n", - "plt.boundary_handling(sc2.boundary_handling, make_slice[-1, :, :], show_legend=False)\n", + "plt.boundary_handling(sc2.boundary_handling, make_slice[0, :, :], show_legend=False)\n", "plt.title('Inflow')\n", "\n", "plt.subplot(232)\n", @@ -269,7 +279,7 @@ "plt.title('Middle')\n", "\n", "plt.subplot(233)\n", - "plt.boundary_handling(sc2.boundary_handling, make_slice[0, :, :], show_legend=False)\n", + "plt.boundary_handling(sc2.boundary_handling, make_slice[-1, :, :], show_legend=False)\n", "plt.title('Outflow')\n", "\n", "plt.subplot(212)\n", @@ -286,17 +296,19 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "<matplotlib.figure.Figure at 0x7f36003bbd30>" + "<Figure size 1008x576 with 2 Axes>" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -315,7 +327,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -324,17 +336,19 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwQAAAHSCAYAAABSAwz5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3df4xd5Z3n+c+nblXZxgZsYkMc2wx02j3bdGvaYSzCTHZ70k0yY5jROlkpEkhLUBTJQQtSImU17cn80elZ9QhF+bEbDYJxOp6AJhOEJslgsd4wNJtsNtKSYLppYkNoPDQNBRUb89O/q+re7/5Rx51LpXzPt7jn1r2c835JR3XvOc95znPPufdWPfV9nvN1RAgAAABAM40NuwEAAAAAhocOAQAAANBgdAgAAACABqNDAAAAADQYHQIAAACgwegQAAAAAA02PuwGdFu/fn1cccUVw24GAAAAluDxxx8/FhEbht2OxfyzP1gdr77Wrrzex588+1BE7Ki84iEYqQ7BFVdcoQMHDgy7GQAAAFgC23877Dacz6uvtfWzhy6vvN7WxmfXV17pkIxUhwAAAACoUkjqqDPsZow05hAAAAAADUaEAAAAADUWagcRgl6IEAAAAAANRoQAAAAAtTU/hyCG3YyRRocAAAAAtcak4t4YMgQAAAA0GBECAAAA1FYo1A6GDPVChAAAAABoMCIEAAAAqDUmFfdGhwAAAAC1FZLadAh6YsgQAAAA0GB0CAAAAFBrHUXlS4btHbafsX3Y9u5Fttv214vtT9q+uli/0vbPbP+V7UO2/6Rrny/afsn2E8VyQ7/nhyFDAAAAQMVstyTdKemjkqYkPWZ7X0Q81VXseklbi+WDku4qfp6V9IcRccL2hKSf2P6/IuLRYr+vRcSXq2orHQIAAADUVkjDuu3oNZIOR8RzkmT7Pkk7JXV3CHZKujciQtKjttfa3hgR05JOFGUmimVgL4IhQwAAAKi1zgCWhE2SXux6PlWsS5Wx3bL9hKSjkh6OiJ92lbu9GGK01/a6XHPOjw4BAAAAsHTrbR/oWnYt2O5F9ln4X/7zlomIdkRsk7RZ0jW2f7fYfpek90vaJmla0lfe8SsoMGQIAAAAtRWKQd129FhEbO+xfUrSlq7nmyW9vNQyEfGG7R9J2iHpYEQcObfN9jckPbj0pr8dEQIAAACgeo9J2mr7StuTkm6UtG9BmX2SPlncbehaSW9GxLTtDbbXSpLtVZI+IukXxfONXft/XNLBfhtKhAAAAAD1FVJ7CHOKI2LO9u2SHpLUkrQ3Ig7ZvrXYfrek/ZJukHRY0ilJnyp23yjpnuJORWOS7o+Ic5GAL9nepvmhRc9L+ky/baVDAAAAAAxAROzX/B/93evu7nockm5bZL8nJX3gPHXeXHEz6RAAAACgvkLpuwI1Fh0CAAAA1JjVXvRmPjiHScUAAABAgxEhAAAAQG2FpM5QEhW/exAhAAAAABqMCAEAAABqjTkEvdEhAAAAQG2F6BCUYcgQAAAA0GBECAAAAFBrnSBC0AsRAgAAAKDBiBAAAACgtphDUI4OAQAAAGorZLUZFNMTZwcAAABoMCIEAAAAqDUmFfdGhAAAAABoMCIEAAAAqC0mFZejQwAAAIAas9rBoJheODsAAABAgxEhAAAAQG2FpA7/A++JswMAAAA0WN8dAttbbP/Q9tO2D9n+bLH+i7Zfsv1EsdzQf3MBAACApWnLlS91UsWQoTlJn4+Iv7B9oaTHbT9cbPtaRHy5gmMAAAAAGIC+OwQRMS1punh83PbTkjb1Wy8AAADQrwjuMlSm0rNj+wpJH5D002LV7baftL3X9rrz7LPL9gHbB1555ZUqmwMAAACoI1e+1EllHQLbayR9V9LnIuItSXdJer+kbZqPIHxlsf0iYk9EbI+I7Rs2bKiqOQAAAAASKrntqO0JzXcGvh0R35OkiDjStf0bkh6s4lgAAABA1nymYoYM9VLFXYYs6ZuSno6Ir3at39hV7OOSDvZ7LAAAAADVqiJC8CFJN0v6ue0ninVfkHST7W2a75g9L+kzFRwLAAAAWAImFZep4i5DP5EWnVmxv9+6AQAAgH6QqbgcZwcAAABosEomFQMAAACjqh31uk1o1YgQAAAAAA1GhAAAAAC1FTK3HS1BhwAAAAC11uEuQz1xdgAAAIAGI0IAAACA2iJTcTnODgAAANBgRAgAAABQWyFz29ESRAgAAACABiNCAAAAgFrr8D/wnugQAAAAoLYipDa3He2JswMAAAAMgO0dtp+xfdj27kW22/bXi+1P2r66WL/S9s9s/5XtQ7b/pGufS2w/bPvZ4ue6fttJhwAAAAA1ZnUGsJQe1W5JulPS9ZKuknST7asWFLte0tZi2SXprmL9WUl/GBG/J2mbpB22ry227Zb0SERslfRI8bwvdAgAAACA6l0j6XBEPBcRM5Luk7RzQZmdku6NeY9KWmt7Y/H8RFFmoliia597isf3SPpYvw1lDgEAAABqKzS0OQSbJL3Y9XxK0gcTZTZJmi4iDI9L+k1Jd0bET4syl0XEtCRFxLTtS/ttKB0CAAAA1NqAMhWvt32g6/meiNjT9XyxcUWx4Pl5y0REW9I222slfd/270bEwb5afB50CAAAAIClOxYR23tsn5K0pev5ZkkvL7VMRLxh+0eSdkg6KOlIMaxo2vZGSUffYfv/DnMIAAAAUFshqxPVLwmPSdpq+0rbk5JulLRvQZl9kj5Z3G3oWklvFn/obygiA7K9StJHJP2ia59bise3SHqgvzNEhAAAAACoXETM2b5d0kOSWpL2RsQh27cW2++WtF/SDZIOSzol6VPF7hsl3VPMIxiTdH9EPFhsu0PS/bY/LekFSZ/ot610CAAAAFBrA5pDUCoi9mv+j/7udXd3PQ5Jty2y35OSPnCeOl+VdF2V7aRDAAAAgNoKSR0yFffE2QEAAAAajAgBAAAAasxqJzILNxkRAgAAAKDBiBAAAACgtphDUI6zAwAAADQYEQIAAADUGnMIeqNDAAAAgNqKMEOGSnB2AAAAgAYjQgAAAIBaaxMh6ImzAwAAADQYEQIAAADUVkjqMKm4JzoEAAAAqDEzZKgEZwcAAABoMCIEAAAAqK35TMUMGeqFCAEAAADQYEQIAAAAUGtt/gfeEx0CAAAA1FbIDBkqQXcJAAAAaLC+OwS2t9j+oe2nbR+y/dli/SW2H7b9bPFzXf/NBQAAAJamo7HKlzqp4tXMSfp8RPy2pGsl3Wb7Kkm7JT0SEVslPVI8BwAAADBC+p5DEBHTkqaLx8dtPy1pk6Sdkj5cFLtH0o8k/VG/xwMAAACyIqQ2cwh6qjTeYfsKSR+Q9FNJlxWdhXOdhkvPs88u2wdsH3jllVeqbA4AAACAEpV1CGyvkfRdSZ+LiLey+0XEnojYHhHbN2zYUFVzAAAAAEnzicmqXuqkktuO2p7QfGfg2xHxvWL1EdsbI2La9kZJR6s4FgAAAJA1f9vRek0CrloVdxmypG9Kejoivtq1aZ+kW4rHt0h6oN9jAQAAAKhWFRGCD0m6WdLPbT9RrPuCpDsk3W/705JekPSJCo4FAAAALElb9RriU7Uq7jL0E+m8Z/m6fusHAAAAMDiVzCEAAAAARlFItZsEXDU6BAAAAKgxJhWX4ewAAAAADUaEAAAAALXWYVJxT0QIAAAAgAYjQgAAAIDaipDaTCruiQ4BAAAAao1Jxb1xdgAAAIAGI0IAAACA2gqZPAQliBAAAAAADUaEAAAAALXGbUd7I0IAAAAANBgRAgAAANRWSMwhKEGEAAAAALXWibHKlwzbO2w/Y/uw7d2LbLftrxfbn7R9dbF+i+0f2n7a9iHbn+3a54u2X7L9RLHc0O/5IUIAAAAAVMx2S9Kdkj4qaUrSY7b3RcRTXcWul7S1WD4o6a7i55ykz0fEX9i+UNLjth/u2vdrEfHlqtpKhwAAAAD1FUO77eg1kg5HxHOSZPs+STsldXcIdkq6NyJC0qO219reGBHTkqYlKSKO235a0qYF+1aGIUMAAABA9TZJerHr+VSxbkllbF8h6QOSftq1+vZiiNFe2+v6bSgdAgAAANRWaP62o1UvktbbPtC17Fpw6MXCErGUMrbXSPqupM9FxFvF6rskvV/SNs1HEb6y9LPydgwZAgAAQK0NaMjQsYjY3mP7lKQtXc83S3o5W8b2hOY7A9+OiO+dKxARR849tv0NSQ++o9Z3IUIAAAAAVO8xSVttX2l7UtKNkvYtKLNP0ieLuw1dK+nNiJi2bUnflPR0RHy1ewfbG7ueflzSwX4bSoQAAAAAtTWsPAQRMWf7dkkPSWpJ2hsRh2zfWmy/W9J+STdIOizplKRPFbt/SNLNkn5u+4li3RciYr+kL9nepvmX9rykz/TbVjoEAAAAwAAUf8DvX7Du7q7HIem2Rfb7iRafX6CIuLniZtIhAAAAQL2Rqbg3OgQAAACordDQ8hC8azCpGAAAAGgwIgQAAACotc7iw/FRIEIAAAAANBgRAgAAANRXMKm4DBECAAAAoMGIEAAAAKC2hpWY7N2EDgEAAABqjQ5BbwwZAgAAABqMCAEAAABqi8Rk5YgQAAAAAA1GhAAAAAC1FkQIeqJDAAAAgFojU3FvDBkCAAAAGmykIgR//cy0rvsn/7a0XOvUTKq+sRNnS8t01qzI1fXW6VS5WL0yVc5nZ8vrarVydUWkyoWXv3ecbZuy5TJVTeTOm6o+HxW+hmxd2dfaWTmRKzeZ+B9B8mWOzXZyBZOvtbOi/LXOXJz7SjuzNnfezl6ce4/MrS4vM7sm9zrbKyt8H0lqzeRew9jZ8nJjc7ljjpV/vUmSJk7kyq14o/y9tOLN3Ptt/GQ7Va51NlfO7fLjul3tNa30u2aUjwlUJMhUXIoIAQAAANBglXQIbO+1fdT2wa51X7T9ku0niuWGKo4FAAAALEWEK1/qpKohQ9+S9O8k3btg/dci4ssVHQMAAABYIvIQlKkkQhARP5b0WhV1AQAAAFg+g55DcLvtJ4shResGfCwAAADg1zBkqLdBdgjukvR+SdskTUv6ymKFbO+yfcD2gZnZkwNsDgAAAICFBnbb0Yg4cu6x7W9IevA85fZI2iNJF124ifuaAQAAoDIhbjtaZmARAtsbu55+XNLB85UFAAAAMByVRAhsf0fShyWttz0l6Y8lfdj2Ns13zJ6X9JkqjgUAAACkBbn1ylTSIYiImxZZ/c0l1zNmza0ub9Lki6/mKkxkkBxLvkN8PDe/IS7IZT72mfJsy3HhqlRdmku+y1sVhsuSWX7TH8BOsm2ZRLpjycDXeK5cZzKX1badyKQrSZ2J8tfqir+42ityr3VuVXm59mTumJ3xZJbf5Nv8zHvK6zu9OZdK97LLX0mV237JL1Plfmv1kdIyV644mqpr0/jrqXLtZID3qTObUuX+8sTlpWUOv7UhVdfUq2tT5U5PX5Aqd8FUdRm0nfy+zGbadi6hcc6w/mLhLyU0QEcMGeqFTMUAAABAgw1sUjEAAAAwbCHV7jahVSNCAAAAADQYEQIAAADUmLntaAk6BAAAAKg15s73xpAhAAAAoMGIEAAAAKDWmFTcGxECAAAAoMGIEAAAAKC2IogQlBmpDkG0rNk1iaDFmbO5+i65uLRM54Jc2tXWXC4d5dnLVqfKTSay6c5syKVwbZ3KZWdtr8xl0h3LZPLMfq4qnsQTY+UHzmbl7axIZtJdmatvdlUye3PiMrRyb3G1ZnInuDORq+/sReWvdfaiXF3ZDMTtlbnXMLd2trTMRZedSNX1m2uPpcptXPlmqlzG8XbuhJwcO1XZMSXpVCeXPf31mfKswa+fyr2G2dO5N1zrbO4zM5b4inMusXA+CzgzEIFa4S5DvTFkCAAAAGiwkYoQAAAAAFUj6NcbEQIAAACgwYgQAAAAoNaYVNwbHQIAAADUVsh0CEowZAgAAABoMDoEAAAAqLUYwJJhe4ftZ2wftr17ke22/fVi+5O2ry7Wb7H9Q9tP2z5k+7Nd+1xi+2HbzxY/172DU/I2dAgAAACAitluSbpT0vWSrpJ0k+2rFhS7XtLWYtkl6a5i/Zykz0fEb0u6VtJtXfvulvRIRGyV9EjxvC8jNYeg05JOX1LeR7l4Ipf05sRvre23SX9n5UQuqdfp9+RO6fjx8nJnL84dc2UmkZik9qpcfTpbnuGnM17tWLxMwjFJ6kwkEpNNVpcgTJI6rWpf61h5fi1NnsxlWWqdzpWbuyDX959ZU/5eSp+PZAao8dPJ5FSz5Z+Z48msaY+dzX2H/PWaDalyk63yxIVrV55O1fWbF76SKnfxeK6+vzn1nlS5F94q/wfTiVO5JGfRyX6ek99diSSCme8GKf+5V/J9Hu3ycq46QyOApRlepuJrJB2OiOckyfZ9knZKeqqrzE5J90ZESHrU9lrbGyNiWtK0JEXEcdtPS9pU7LtT0oeL/e+R9CNJf9RPQ4kQAAAAAEu33vaBrmXXgu2bJL3Y9XyqWLekMravkPQBST8tVl1WdBhU/Ly0nxchjViEAAAAAKjcYAJ1xyJie4/ti4UlFrakZxnbayR9V9LnIuKtpTcxhw4BAAAAam1IQ4amJG3per5Z0svZMrYnNN8Z+HZEfK+rzJFzw4psb5R0tN+GMmQIAAAAqN5jkrbavtL2pKQbJe1bUGafpE8Wdxu6VtKbxR/6lvRNSU9HxFcX2eeW4vEtkh7ot6FECAAAAFBrMYS5/RExZ/t2SQ9JaknaGxGHbN9abL9b0n5JN0g6LOmUpE8Vu39I0s2Sfm77iWLdFyJiv6Q7JN1v+9OSXpD0iX7bSocAAAAAGIDiD/j9C9bd3fU4JN22yH4/0eLzCxQRr0q6rsp20iEAAABAbYWGNofgXYMOAQAAAOorJNEh6IlJxQAAAECDjVSEIMals5eU9+DizNlUfW9tKX95q47lMr1OrMqdqmwWzNapmdIyY+2VqbrGTyVS3yqfybN1aq60jFckX2hyEk8kMx870cOPVq6f21l8aN6vGUvORMpmWx5rl9c3frI8860krfzlyVS5GM+dk7G51aVlOpO5z8LZ5PutvSKZrXZleTmvLf9cSdLm97yRKnfZquOpcpn30oXjue+trauOpMpdMZnLaLx+/ESq3Jl2efbm2XbuffRmO/f90BnPlYvEYTNlJCmczECcLMf/HIF3h2FMKn43IUIAAAAANNhIRQgAAACAyhEh6IkOAQAAAGrM3GWoBEOGAAAAgAYjQgAAAIB6Y8hQT0QIAAAAgAYjQgAAAID6CjIVlyFCAAAAADQYEQIAAADUG3MIehqpDkG0pNkLy69YnDmTqu/0e8vrWvVqqiq1V2bTYOaKeTaRiTZZ19iZ8szCkuQ15ZlIJcmdxDXIRt6S5dqTufPbXlleYXsymWE0l6RarZnchRibS5ZLXPqJ47ns02NvnUqVi1UrcuVa5edu5sJUVTq7IZdtOVbmyo1NlpfbcEkus/DvrJ1Olbt0Mlff0cRJ6WRT6VasnfwQnpqbLC1zZib3HdKeSWbGbmczlCcKZb97k+lKqy43FKPcNmDZMWSoF4YMAQAAAA1WSYfA9l7bR20f7Fp3ie2HbT9b/FxXxbEAAACAJYkBLDVSVYTgW5J2LFi3W9IjEbFV0iPFcwAAAAAjpJIOQUT8WNJrC1bvlHRP8fgeSR+r4lgAAADAkhAh6GmQk4ovi4hpSYqIaduXDvBYAAAAwK8LLeFuKM009EnFtnfZPmD7QPvkyWE3BwAAAGiUQXYIjtjeKEnFz6OLFYqIPRGxPSK2t1avHmBzAAAA0EQR1S91MsgOwT5JtxSPb5H0wACPBQAAAOAdqGQOge3vSPqwpPW2pyT9saQ7JN1v+9OSXpD0iSqOBQAAACxJzf6jX7VKOgQRcdN5Nl23pHostcuTZUqzuSyuM+vLM/jOrUiegotbqWJzq3KTVjoryjN+ZjPuxkSubZ1kNmAlkt9ms/xms3h22smsoJ3yc9JJZNuVJOVOm7IJZtOJaGcylSXrOp3L2u3ZXDbr8ZMXlZZpnc2dOM8m37+t3IlLJNDWiTO5jMy/PFP+OiXpdOoLSZo+XV7fXCf3OsczqawltZT7EB6bzaWWPjlb/lpnZ5Mfmrnca/VcMlNx4pRkv5PSn61sfQDeHZhU3NPQJxUDAAAAGJ5B3nYUAAAAGDozZKgnIgQAAABAgxEhAAAAQH3VMLNw1YgQAAAAAA1GhAAAAAA1Zu4yVIIOAQAAAOqNIUM9MWQIAAAAaDAiBAAAAKg3IgQ9jV6HYCxxxSbKs/ymJYeUpTPz5pKMpjL4tmaT2XtP5zI3j5/OnbfWqUR9TmahTZ7fsWR24c6K8nJjyazH2S+H1kyyYPa1Jq7r2JlcZuFIZu128no5ce6q/iykM8ImslQnE2NrPPkiVrUyaaWlC8Zz5TI2rXg9VW7ril+myl0wdjZV7oU160rLnJzJZW5+I/nBn01mKp47Xv6rqp1LUq3ORPK7azxZLvEazF8iAEbc6HUIAAAAgCrRL++JDgEAAADqK8RdhkowqRgAAABoMCIEAAAAqDUzZKgnIgQAAABAgxEhAAAAQL0RIeiJCAEAAADQYHQIAAAAgAGwvcP2M7YP2969yHbb/nqx/UnbV3dt22v7qO2DC/b5ou2XbD9RLDf02046BAAAAKg1R/VL6THtlqQ7JV0v6SpJN9m+akGx6yVtLZZdku7q2vYtSTvOU/3XImJbsexf0slYxEjNIXBHap1OZH2czGXcnXit/OWN5RK9avJ4Lu1qZ7yVKufZ8vrGkhly3cllXfVsMiVsoj63s+lqkxlyK8x+m60rK31ngmS5TKbizPtDkjSbzGg8nvuoZ85dOht3O5sdOZkRdoT/fTFW4e0rWsk3Urpcsm0TiYvfGkt+12Qyzkvp7N4pVY8PZrwxgP5dI+lwRDwnSbbvk7RT0lNdZXZKujciQtKjttfa3hgR0xHxY9tXLEdDR/hXLAAAAFCBcPWLtN72ga5l14KjbpL0YtfzqWLdUsss5vZiiNFe2+uWeDZ+DR0CAAAAYOmORcT2rmXPgu2LxUEXxh8zZRa6S9L7JW2TNC3pK6nW9jBSQ4YAAACASoWGNQxwStKWruebJb38Dsq8TUQcOffY9jckPdhfM4kQAAAAoO5iAEu5xyRttX2l7UlJN0rat6DMPkmfLO42dK2kNyNiuleltjd2Pf24pIPnK5tFhAAAAACoWETM2b5d0kOSWpL2RsQh27cW2++WtF/SDZIOSzol6VPn9rf9HUkf1vxchSlJfxwR35T0JdvbNN8teV7SZ/ptKx0CAAAA1FqFN4NbkuKWoPsXrLu763FIuu08+950nvU3V9lGiSFDAAAAQKMRIQAAAEC9kVukp5HqELgtTb6RSEw2kUtMtnqqvK5WMlnXxMlcAqiza3OJySKRsMuRe/d2VuTOR4znAkKdleX1dZJ1pWUTFFX4gc4muuqMZ5OrJRuXyW6YTDYXyfdI9vRm3nPpJHLZBHHZa5qI945lE2IldZJvkrlOdZ+HN9urUuVemsvddvpvz67P1Xfq4tIyb5y4IFXXzInJVLnW8dz35fipRJmzuWufTvjYTpZLfgYBDBkf1Z4YMgQAAAA02EhFCAAAAIAqOYY3qfjdgggBAAAA0GBECAAAAFBvkZ1N10x0CAAAAFBvDBnqiSFDAAAAQIMRIQAAAECtMam4NyIEAAAAQIMRIQAAAEC9ESHoaaQ6BGNtaeVriSu2IpcF8+LnZ/ts0a+Mv346VW7Fmtwp9dmZ0jITJ3LZkcdmcuXGT+YCQp5tp8plRCt3zLGZXFrbKt+w2QyjY7PZcrnX0DpZ/r70WydTdUU7d608njtznYny65XN8Jz97o3xZEbYVeWv9T2rEyltJf3G6mOpcpdNvJUq957JE6lyGf9g1YupclsmXk2VayfvrHHJiveVljkyeWGqrrPJbPLRSr5Lxrg7yNuQHRlAxUaqQwAAAABUisRkpQbeIbD9vKTjktqS5iJi+6CPCQAAAPwdOgQ9LVeE4A8iIhejBwAAALBsGDIEAACAeiNC0NNy3HY0JP1X24/b3rUMxwMAAACQtBwRgg9FxMu2L5X0sO1fRMSPz20sOgm7JGly9bplaA4AAACahEnFvQ08QhARLxc/j0r6vqRrFmzfExHbI2L7+KrVg24OAAAAgC4D7RDYXm37wnOPJf1TSQcHeUwAAAAAeYMeMnSZpO/bPnes/xQRPxjwMQEAAIBfYchQTwPtEETEc5J+L1vec9LK18uzvUYyU/Hk6+XZgNsrk5mFk9l7s1lts68hVddEq7K6JClcnhXUnWR22U4y63Hy/Hqu/LVm29Zp5bKfVj3uMFVfMsOzV6zIHXQsV1/rdPl1SGUTl9LZZWdP5j6DMxeXv4aXxtem6npicnOq3OWrX0+VG3f5eXvvZC7r8dpWLkv1hc5lYr+odSZ33MnybOyrV5R/p0rSyYnc+7JdYYw6870lSapD0uPsayWjMYAkbjsKAACA+iJTcSk6BAAAAKg3OgQ9LUceAgAAAAAjiggBAAAA6o0IQU9ECAAAAIAGI0IAAACA2rKYVFyGCAEAAADQYEQIAAAAUG9ECHqiQwAAAID6Ig9BqZHqELgdmnxzrrRcTE6k6ht/M5Ohc2WqrmjlsgGPzZZnWpakzgXlr6EznhvRNbcml/U4kvW5nfjUDGmwWSSy37Ync43L1CXlv0Q8l7z2k4lsy2vX5A564epUsdl1q1LlTm0szzA7mzukIps4tvwjL0lqnSmvcOat3Gfh+ZWXpMqdmMll3L1gojyD7+kLcm27oHU2Ve7F1qlUub8+/d5UuedPlJ+T42dy52NuNvl9mbz2iUTQ6QzljfovIRmNASSNVIcAAAAAqBz93p6YVAwAAAA0GBECAAAA1BsRgp7oEAAAAKDWmFTcG0OGAAAAgAYjQgAAAIB6I0LQExECAAAAoMGIEAAAAKC+QkQIShAhAAAAQK05ql9Sx7V32H7G9mHbuxfZbttfL7Y/afvqrm17bR+1fXDBPpfYftj2s8XPdf2en5GKELjd0cRb5Vk6x06eTtUXx0+Ulhk/e1GqLs/mUmpOJLMBK5HVdqLq3uyZ3GtIZdxNZuV1J1dO7eATEm0AABPgSURBVGS5TH1jyUzFE8m3fyuX7TObCVrJl5o65opcRtjORHV9fyfbH7mmaW5N7o0+c2n5+/eyTa+n6tq+4cVUud9e/XKq3KaJ8uNeMf5qqq7N47nP6Wwyu+wlrfLvQUl6a648m/WbZ3OZ3Y+/mcuMPTab+2xlkje3ZnLnI5tNPp35OFtuGMhADAyV7ZakOyV9VNKUpMds74uIp7qKXS9pa7F8UNJdxU9J+pakfyfp3gVV75b0SETcUXQydkv6o37aSoQAAAAA9RYDWMpdI+lwRDwXETOS7pO0c0GZnZLujXmPSlpre6MkRcSPJb22SL07Jd1TPL5H0sdSremBDgEAAABQvU2SukPSU8W6pZZZ6LKImJak4uelfbZztIYMAQAAAFUbUGKy9bYPdD3fExF7ug+7yD4LW5IpM3B0CAAAAIClOxYR23tsn5K0pev5ZkkLJ6dlyix0xPbGiJguhhcdzTb4fBgyBAAAgHobzhyCxyRttX2l7UlJN0rat6DMPkmfLO42dK2kN88NB+phn6Rbise3SHog1Zoe6BAAAACgvgbRGUh0CCJiTtLtkh6S9LSk+yPikO1bbd9aFNsv6TlJhyV9Q9L/cm5/29+R9P9J+vu2p2x/uth0h6SP2n5W83cwumOpp2QhhgwBAAAAAxAR+zX/R3/3uru7Hoek286z703nWf+qpOsqbCYdAgAAANSXtfjMXfzKSHUI3AmNnZopLzjXTlZYPiLKySRn2WRXPnkmVy6R6CzOVnt5nE3+ldFOXoPktYqzicxDkjQzW17XTOI9JCnmcgmgsuXSnPhaauWyeo2tWZ0qt3Ld2lS5ibcuLK/rohWpumYvyr2G0+ty5U6emigtc0S5ZI0Hk8m/Vo/n3pfvHX+ztMzFY+XvXUla31qTKjcbuc/WpvE3UuX+3qpjpWVeviCXyPHVVbn35dzkZKpcJ5EcMMaSv+6T5SJZnTP1tUkQBmC0jVSHAAAAAKgc/fKe6BAAAACg1gaUh6A2uMsQAAAA0GBECAAAAFBvRAh6IkIAAAAANBgRAgAAANQbEYKe6BAAAACgvoJJxWUYMgQAAAA0GBECAAAA1BsRgp5Gq0NgKxIZgWNdLpOnOuXlsu8Pd5JZfjNZaCV1VuQydFYp/VojUTJTRpKy2ZFX5bLfZrItp9ovpduWzXysZLblSGSpzmbG1njyI5x8/44dL8+0veJ0LuPu5LHcZ+GCydxruPhvyj8zM4dydZ1auzFV7gdr35cqt++if1xaZvbi3DVor85+1+Te557JvZfGzpSXayUTio+fyl37VeUJniVJK18rPyeTx3OZm8dmcufXnRr89ZD8fZSS/V4F8K40Wh0CAAAAoGLMIeht4HMIbO+w/Yztw7Z3D/p4AAAAAPIG2iGw3ZJ0p6TrJV0l6SbbVw3ymAAAAMDbxACWGhn0kKFrJB2OiOckyfZ9knZKemrAxwUAAAAkMWSozKCHDG2S9GLX86liHQAAAIARMOgIwWK3OHhbH832Lkm7JGnlxEUDbg4AAAAapYZDfKo26AjBlKQtXc83S3q5u0BE7ImI7RGxfXJ89YCbAwAAAKDboDsEj0naavtK25OSbpS0b8DHBAAAAH6FScU9DXTIUETM2b5d0kOSWpL2RsShQR4TAAAAOMdiUnGZgScmi4j9kvZnym696n166MD/NuAWAQAAoEr2nwy7CegDmYoBAABQb0QIehp4pmIAAAAAo4sIAQAAAGrNQYigFzoEAAAAqK8a3hWoagwZAgAAABqMCAEAAABqjduO9kaEAAAAAGgwIgQAAACoNyIEPdEhAAAAQK0xZKg3hgwBAAAADUaEAAAAAPVGhKAnIgQAAABAgxEhAAAAQH0FcwjKECEAAAAAGowIAQAAAOqNCEFPdAgAAABQWxZDhsowZAgAAABoMCIEAAAAqLcgRNALEQIAAACgwegQAAAAoNYc1S+p49o7bD9j+7Dt3Ytst+2vF9uftH112b62v2j7JdtPFMsN/Z4fhgwBAACgvkJDucuQ7ZakOyV9VNKUpMds74uIp7qKXS9pa7F8UNJdkj6Y2PdrEfHlqtpKhAAAAACo3jWSDkfEcxExI+k+STsXlNkp6d6Y96iktbY3JvetDB0CAAAA1Jo71S8JmyS92PV8qliXKVO27+3FEKO9ttclT8N50SEAAAAAlm697QNdy64F273IPgsHL52vTK9975L0fknbJE1L+soS2rwo5hAAAACg3gYzh+BYRGzvsX1K0pau55slvZwsM3m+fSPiyLmVtr8h6cElt3wBIgQAAACotSHdZegxSVttX2l7UtKNkvYtKLNP0ieLuw1dK+nNiJjutW8xx+Ccj0s62NfJERECAAAAoHIRMWf7dkkPSWpJ2hsRh2zfWmy/W9J+STdIOizplKRP9dq3qPpLtrdpPu7xvKTP9NtWOgQAAACor9DQMhVHxH7N/9Hfve7ursch6bbsvsX6mytuJkOGAAAAgCYjQgAAAIBay2YWbioiBAAAAECDESEAAABAvREh6IkOAQAAAGrLYshQGYYMAQAAAA1GhAAAAAD1FTG0246+WxAhAAAAABqMCAEAAABqjTkEvdEhAAAAQL3RIeiJIUMAAABAgxEhAAAAQK0xZKi3gUUIbH/R9ku2nyiWGwZ1LAAAAADvzKAjBF+LiC8P+BgAAADA4kJShxBBLwwZAgAAQL3RH+hp0JOKb7f9pO29ttctVsD2LtsHbB945ZVXBtwcAAAAAN366hDY/nPbBxdZdkq6S9L7JW2TNC3pK4vVERF7ImJ7RGzfsGFDP80BAAAAfo2j+qVO+hoyFBEfyZSz/Q1JD/ZzLAAAAADVG9gcAtsbI2K6ePpxSQcHdSwAAADgvKJm/9Kv2CAnFX/J9jbNT+N4XtJnBngsAAAAAO/AwDoEEXHzoOoGAAAAsuo25r9q3HYUAAAA9RXitqMlBn3bUQAAAAAjjAgBAAAAasuSzKTinogQAAAAAA1GhAAAAAD11hl2A0YbHQIAAADUGkOGemPIEAAAANBgRAgAAABQX9x2tBQRAgAAAKDBiBAAAACgxkJiDkFPdAgAAABQa6Y/0BNDhgAAAIAGI0IAAACAemPIUE9ECAAAAIAGI0IAAACA+grJZCruiQgBAAAA0GBECAAAAFBvzCHoiQ4BAAAA6o3+QE8MGQIAAAAajAgBAAAAas0MGeqJCAEAAAAwALZ32H7G9mHbuxfZbttfL7Y/afvqsn1tX2L7YdvPFj/X9dtOOgQAAACot4jqlxK2W5LulHS9pKsk3WT7qgXFrpe0tVh2Sborse9uSY9ExFZJjxTP+0KHAAAAAPUVkjoDWMpdI+lwRDwXETOS7pO0c0GZnZLujXmPSlpre2PJvjsl3VM8vkfSx7Kn4nzoEAAAAADV2yTpxa7nU8W6TJle+14WEdOSVPy8tN+GMqkYAAAAtWXFoCYVr7d9oOv5nojY87ZD/7qFDTlfmcy+laFDAAAAACzdsYjY3mP7lKQtXc83S3o5WWayx75HbG+MiOlieNHRd9L4bgwZAgAAQL0NYVKxpMckbbV9pe1JSTdK2regzD5JnyzuNnStpDeLYUC99t0n6Zbi8S2SHujv5BAhAAAAQN0NIQ9BRMzZvl3SQ5JakvZGxCHbtxbb75a0X9INkg5LOiXpU732Laq+Q9L9tj8t6QVJn+i3rXQIAAAAgAGIiP2a/6O/e93dXY9D0m3ZfYv1r0q6rsp20iEAAABAfZ277SjOizkEAAAAQIMRIQAAAECtDei2o7VBhAAAAABoMCIEAAAAqDciBD3RIQAAAECNpfMGNBZDhgAAAIAGI0IAAACA+goRIShBhAAAAABoMCIEAAAAqDcSk/VEhwAAAAC1Rh6C3voaMmT7E7YP2e7Y3r5g27+yfdj2M7b/WX/NBAAAADAI/UYIDkr6nyT9++6Vtq+SdKOk35H0Pkl/bvu3IqLd5/EAAACApSFC0FNfEYKIeDoinllk005J90XE2Yj4G0mHJV3Tz7EAAAAAVG9Qcwg2SXq06/lUse7X2N4laZckXX755QNqDgAAABopJHWIEPRS2iGw/eeS3rvIpn8dEQ+cb7dF1i16JSJij6Q9krR9+3auFgAAACpEpuIypR2CiPjIO6h3StKWruebJb38DuoBAAAAMECDSky2T9KNtlfYvlLSVkk/G9CxAAAAgPOLqH6pkX5vO/px21OS/pGk/9P2Q5IUEYck3S/pKUk/kHQbdxgCAAAARk9fk4oj4vuSvn+ebX8q6U/7qR8AAADoW83+o1+1QQ0ZAgAAAPAuMKjbjgIAAADDx21HS9EhAAAAQI2FFJ1hN2KkMWQIAAAAaDAiBAAAAKg3JhX3RIQAAAAAaDAiBAAAAKgvJhWXokMAAACAemPIUE8MGQIAAAAajAgBAAAA6o0IQU9ECAAAAIAGI0IAAACAGgsiBCXoEAAAAKC+QlKHTMW9MGQIAAAAaDAiBAAAAKg3hgz1RIQAAAAAaDAiBAAAAKg3IgQ9ESEAAAAAGowIAQAAAGospA4Rgl7oEAAAAKC+QorgtqO9MGQIAAAAaDA6BAAAAKi3TlS/9MH2JbYftv1s8XPdecrtsP2M7cO2d5ftb/sK26dtP1Esd2faQ4cAAAAAWF67JT0SEVslPVI8fxvbLUl3Srpe0lWSbrJ9VWL//xYR24rl1kxj6BAAAACg3iKqX/qzU9I9xeN7JH1skTLXSDocEc9FxIyk+4r9svun0SEAAABAfUVInU71S38ui4jp+ebFtKRLFymzSdKLXc+ninVl+19p+y9t/z+2/4dMY7jLEAAAALB0620f6Hq+JyL2nHti+88lvXeR/f51sn4vsq4sNDEt6fKIeNX2P5T0X2z/TkS81WsnOgQAAACot8FkKj4WEdvPf8j4yPm22T5ie2NETNveKOnoIsWmJG3per5Z0svF40X3j4izks4Wjx+3/d8k/Zak7o7Lr2HIEAAAALC89km6pXh8i6QHFinzmKSttq+0PSnpxmK/8+5ve0MxGVm2f0PSVknPlTWGCAEAAABqLfof81+1OyTdb/vTkl6Q9AlJsv0+SX8WETdExJzt2yU9JKklaW9EHOq1v6Tfl/RvbM9Jaku6NSJeK2sMHQIAAADUWCV3BapURLwq6bpF1r8s6Yau5/sl7V/C/t+V9N2ltochQwAAAECDESEAAABAfYX6zixcd0QIAAAAgAYjQgAAAIB6i5GbVDxSiBAAAAAADUaEAAAAALUVkoI5BD3RIQAAAEB9RTBkqARDhgAAAIAGI0IAAACAWmPIUG9ECAAAAIAGI0IAAACAemMOQU+OGJ0Qiu1XJP3tgtXrJR0bQnPwdlyH0cB1GD6uwWjgOgwf12A0jMp1+HsRsWHYjViM7R9o/jxV7VhE7BhAvctupDoEi7F9ICK2D7sdTcd1GA1ch+HjGowGrsPwcQ1GA9cBVWAOAQAAANBgdAgAAACABns3dAj2DLsBkMR1GBVch+HjGowGrsPwcQ1GA9cBfRv5OQQAAAAABufdECEAAAAAMCAj3SGwvcP2M7YP29497PY0he29to/aPti17hLbD9t+tvi5bphtrDvbW2z/0PbTtg/Z/myxnuuwjGyvtP0z239VXIc/KdZzHZaZ7Zbtv7T9YPGca7DMbD9v++e2n7B9oFjHdVhGttfa/s+2f1H8fvhHXANUYWQ7BLZbku6UdL2kqyTdZPuq4baqMb4laeF9dXdLeiQitkp6pHiOwZmT9PmI+G1J10q6rXj/cx2W11lJfxgRvydpm6Qdtq8V12EYPivp6a7nXIPh+IOI2NZ1m0uuw/L6PyT9ICL+O0m/p/nPBNcAfRvZDoGkayQdjojnImJG0n2Sdg65TY0QET+W9NqC1Tsl3VM8vkfSx5a1UQ0TEdMR8RfF4+Oa/9LfJK7Dsop5J4qnE8US4josK9ubJf1zSX/WtZprMBq4DsvE9kWSfl/SNyUpImYi4g1xDVCBUe4QbJL0YtfzqWIdhuOyiJiW5v9YlXTpkNvTGLavkPQBST8V12HZFUNVnpB0VNLDEcF1WH7/u6R/KanTtY5rsPxC0n+1/bjtXcU6rsPy+Q1Jr0j6D8XwuT+zvVpcA1RglDsEXmQdt0RCo9heI+m7kj4XEW8Nuz1NFBHtiNgmabOka2z/7rDb1CS2/4WkoxHx+LDbAn0oIq7W/FDe22z//rAb1DDjkq6WdFdEfEDSSTE8CBUZ5Q7BlKQtXc83S3p5SG2BdMT2Rkkqfh4dcntqz/aE5jsD346I7xWruQ5DUoTmf6T5+TVch+XzIUn/o+3nNT909A9t/0dxDZZdRLxc/Dwq6fuaH9rLdVg+U5KmiiilJP1nzXcQuAbo2yh3CB6TtNX2lbYnJd0oad+Q29Rk+yTdUjy+RdIDQ2xL7dm25seJPh0RX+3axHVYRrY32F5bPF4l6SOSfiGuw7KJiH8VEZsj4grN/x74vyPifxbXYFnZXm37wnOPJf1TSQfFdVg2EfFLSS/a/vvFquskPSWuASow0onJbN+g+bGjLUl7I+JPh9ykRrD9HUkflrRe0hFJfyzpv0i6X9Llkl6Q9ImIWDjxGBWx/d9L+n8l/Vy/Gjf9Bc3PI+A6LBPb/0Dzk/Ramv8Hyv0R8W9sv0dch2Vn+8OS/teI+Bdcg+Vl+zc0HxWQ5oeu/KeI+FOuw/KyvU3zk+snJT0n6VMqvpvENUAfRrpDAAAAAGCwRnnIEAAAAIABo0MAAAAANBgdAgAAAKDB6BAAAAAADUaHAAAAAGgwOgQAAABAg9EhAAAAABqMDgEAAADQYP8/aeN8RowG9mYAAAAASUVORK5CYII=\n", "text/plain": [ - "<matplotlib.figure.Figure at 0x7f36003190b8>" + "<Figure size 1008x576 with 2 Axes>" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -361,7 +375,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.8.2" } }, "nbformat": 4, diff --git a/doc/sphinx/api.rst b/doc/sphinx/api.rst index 3c2052ed7c02490d7099ec5d796aa95ed1807033..1d06eb1dbbc4cfdf64c8442ae0f6c54d62da26c0 100644 --- a/doc/sphinx/api.rst +++ b/doc/sphinx/api.rst @@ -13,5 +13,6 @@ API Reference continuous_distribution_measures.rst moments.rst cumulants.rst + boundary_conditions.rst forcemodels.rst zbibliography.rst diff --git a/doc/sphinx/boundary_conditions.rst b/doc/sphinx/boundary_conditions.rst new file mode 100644 index 0000000000000000000000000000000000000000..e91f2dd1f2889a0be94da15a1f2fc65062b0ce92 --- /dev/null +++ b/doc/sphinx/boundary_conditions.rst @@ -0,0 +1,6 @@ +******************* +Boundary Conditions +******************* + +.. automodule:: lbmpy.boundaries.boundaryconditions + :members: diff --git a/doc/sphinx/lbmpy.bib b/doc/sphinx/lbmpy.bib index bceb010e1ee47c31a8109031f90491bcd5b818d0..891d6bf83ee1cc80b47a24b58455e4c2d87cfe4a 100644 --- a/doc/sphinx/lbmpy.bib +++ b/doc/sphinx/lbmpy.bib @@ -75,4 +75,12 @@ pages = {1--11}, title = {{Ternary free-energy lattice Boltzmann model with tunable surface tensions and contact angles}}, volume = {033305}, year = {2016} +} + +@article{geier2015, +author = {Geier, Martin and Sch{\"{o}}nherr, Martin and Pasquali, Andrea and Krafczyk, Manfred}, +title = {{The cumulant lattice Boltzmann equation in three dimensions: Theory and validation}}, +journal = {Computers \& Mathematics with Applications}, +year = {2015}, +doi = {10.1016/j.camwa.2015.05.001} } \ No newline at end of file diff --git a/lbmpy/advanced_streaming/utility.py b/lbmpy/advanced_streaming/utility.py index aa4b65c04d5268118d1029bc820612f83d69e011..b93eaa4341896699fc5e592b757fe3644d02c1d7 100644 --- a/lbmpy/advanced_streaming/utility.py +++ b/lbmpy/advanced_streaming/utility.py @@ -80,12 +80,14 @@ class AccessPdfValues: """Allows to access values from a PDF array correctly depending on the streaming pattern.""" - def __init__(self, pdf_field, stencil, + def __init__(self, stencil, streaming_pattern='pull', timestep=Timestep.BOTH, streaming_dir='out', accessor=None): if streaming_dir not in ['in', 'out']: raise ValueError('Invalid streaming direction.', streaming_dir) + pdf_field = ps.Field.create_generic('pdfs', len(stencil[0]), index_shape=(len(stencil),)) + if accessor is None: accessor = get_accessor(streaming_pattern, timestep) self.accs = accessor.read(pdf_field, stencil) \ diff --git a/lbmpy/boundaries/__init__.py b/lbmpy/boundaries/__init__.py index b013519e38da30878e118ffaff6e202881028f8c..8fb94c542018a430a693a4d0c5b1d03beea7b4d4 100644 --- a/lbmpy/boundaries/__init__.py +++ b/lbmpy/boundaries/__init__.py @@ -1,5 +1,6 @@ from lbmpy.boundaries.boundaryconditions import ( - UBB, FixedDensity, NeumannByCopy, NoSlip, StreamInConstant) + UBB, FixedDensity, SimpleExtrapolationOutflow, ExtrapolationOutflow, NeumannByCopy, NoSlip, StreamInConstant) from lbmpy.boundaries.boundaryhandling import LatticeBoltzmannBoundaryHandling -__all__ = ['NoSlip', 'UBB', 'FixedDensity', 'NeumannByCopy', 'LatticeBoltzmannBoundaryHandling', 'StreamInConstant'] +__all__ = ['NoSlip', 'UBB', 'SimpleExtrapolationOutflow', 'ExtrapolationOutflow', 'FixedDensity', 'NeumannByCopy', + 'LatticeBoltzmannBoundaryHandling', 'StreamInConstant'] diff --git a/lbmpy/boundaries/boundaryconditions.py b/lbmpy/boundaries/boundaryconditions.py index ddf82effa543ae31cf72407a3a27a30d4ff3000e..546c87e068b0de9ec1369cae44b9ab7dd6dd1834 100644 --- a/lbmpy/boundaries/boundaryconditions.py +++ b/lbmpy/boundaries/boundaryconditions.py @@ -1,3 +1,5 @@ +from lbmpy.advanced_streaming.utility import AccessPdfValues, Timestep +from pystencils.simp.assignment_collection import AssignmentCollection import sympy as sp from pystencils import Assignment, Field from lbmpy.boundaries.boundaryhandling import LbmWeightInfo @@ -5,10 +7,15 @@ from pystencils.data_types import create_type from pystencils.sympyextensions import get_symmetric_part from lbmpy.simplificationfactory import create_simplification_strategy from lbmpy.advanced_streaming.indexing import NeighbourOffsetArrays +from pystencils.stencil import offset_to_direction_string, direction_string_to_offset class LbBoundary: - """Base class that all boundaries should derive from""" + """Base class that all boundaries should derive from. + + Args: + name: optional name of the boundary. + """ inner_or_boundary = True single_link = False @@ -52,7 +59,11 @@ class LbBoundary: return None def get_additional_code_nodes(self, lb_method): - """Return a list of code nodes that will be added in the generated code before the index field loop.""" + """Return a list of code nodes that will be added in the generated code before the index field loop. + + Args: + lb_method: lattice Boltzmann method. See :func:`lbmpy.creationfunctions.create_lb_method` + """ return [] @property @@ -70,16 +81,18 @@ class LbBoundary: class NoSlip(LbBoundary): - - def __init__(self, name=None): - """Set an optional name here, to mark boundaries, for example for force evaluations""" - super(NoSlip, self).__init__(name) - """ No-Slip, (half-way) simple bounce back boundary condition, enforcing zero velocity at obstacle. Extended for use with any streaming pattern. + + Args: + name: optional name of the boundary. """ + def __init__(self, name=None): + """Set an optional name here, to mark boundaries, for example for force evaluations""" + super(NoSlip, self).__init__(name) + def __call__(self, f_out, f_in, dir_symbol, inv_dir, lb_method, index_field): return Assignment(f_in(inv_dir[dir_symbol]), f_out(dir_symbol)) @@ -95,16 +108,20 @@ class NoSlip(LbBoundary): class UBB(LbBoundary): - """Velocity bounce back boundary condition, enforcing specified velocity at obstacle""" + """Velocity bounce back boundary condition, enforcing specified velocity at obstacle + + Args: + velocity: can either be a constant, an access into a field, or a callback function. + The callback functions gets a numpy record array with members, 'x','y','z', 'dir' (direction) + and 'velocity' which has to be set to the desired velocity of the corresponding link + adapt_velocity_to_force: adapts the velocity to the correct equilibrium when the lattice Boltzmann method holds + a forcing term. If no forcing term is set and adapt_velocity_to_force is set to True + it has no effect. + dim: number of spatial dimensions + name: optional name of the boundary. + """ def __init__(self, velocity, adapt_velocity_to_force=False, dim=None, name=None): - """ - Args: - velocity: can either be a constant, an access into a field, or a callback function. - The callback functions gets a numpy record array with members, 'x','y','z', 'dir' (direction) - and 'velocity' which has to be set to the desired velocity of the corresponding link - adapt_velocity_to_force: - """ super(UBB, self).__init__(name) self._velocity = velocity self._adaptVelocityToForce = adapt_velocity_to_force @@ -116,6 +133,8 @@ class UBB(LbBoundary): @property def additional_data(self): + """ In case of the UBB boundary additional data is a velocity vector. This vector is added to each cell to + realize velocity profiles for the inlet.""" if callable(self._velocity): return [('vel_%d' % (i,), create_type("double")) for i in range(self.dim)] else: @@ -123,10 +142,22 @@ class UBB(LbBoundary): @property def additional_data_init_callback(self): + """Initialise additional data of the boundary. For an example see + `tutorial 02 <https://pycodegen.pages.i10git.cs.fau.de/lbmpy/notebooks/02_tutorial_boundary_setup.html>`_ + or lbmpy.geometry.add_pipe_inflow_boundary""" if callable(self._velocity): return self._velocity def get_additional_code_nodes(self, lb_method): + """Return a list of code nodes that will be added in the generated code before the index field loop. + + Args: + lb_method: Lattice Boltzmann method. See :func:`lbmpy.creationfunctions.create_lb_method` + + Returns: + list containing LbmWeightInfo and NeighbourOffsetArrays + + """ return [LbmWeightInfo(lb_method), NeighbourOffsetArrays(lb_method.stencil)] def __call__(self, f_out, f_in, dir_symbol, inv_dir, lb_method, index_field): @@ -174,7 +205,197 @@ class UBB(LbBoundary): # end class UBB +class SimpleExtrapolationOutflow(LbBoundary): + r""" + Simple Outflow boundary condition :cite:`geier2015`, equation F.1 (listed below). + This boundary condition extrapolates missing populations from the last layer of + fluid cells onto the boundary by copying them in the normal direction. + + .. math :: + f_{\overline{1}jkxyzt} = f_{\overline{1}jk(x - \Delta x)yzt} + + + Args: + normal_direction: direction vector normal to the outflow + stencil: stencil used for the lattice Boltzmann method + name: optional name of the boundary. + """ + + # We need each fluid cell only once, the direction of the outflow is given + # in the constructor. + single_link = True + + def __init__(self, normal_direction, stencil, name=None): + if isinstance(normal_direction, str): + normal_direction = direction_string_to_offset(normal_direction, dim=len(stencil[0])) + + if name is None: + name = f"Simple Outflow: {offset_to_direction_string(normal_direction)}" + + self.normal_direction = normal_direction + super(SimpleExtrapolationOutflow, self).__init__(name) + + def __call__(self, f_out, f_in, dir_symbol, inv_dir, lb_method, index_field): + stencil = lb_method.stencil + + boundary_assignments = [] + for i, stencil_dir in enumerate(stencil): + if all(n == 0 or n == -s for s, n in zip(stencil_dir, self.normal_direction)): + asm = Assignment(f_out[self.normal_direction](i), f_out.center(i)) + boundary_assignments.append(asm) + + print(boundary_assignments) + return boundary_assignments +# end class SimpleExtrapolationOutflow + + +class ExtrapolationOutflow(LbBoundary): + r""" + Outflow boundary condition :cite:`geier2015`, equation F.2, with u neglected (listed below). + This boundary condition interpolates missing on the boundary in normal direction. For this interpolation, the + PDF values of the last time step are used. They are interpolated between fluid cell and boundary cell. + To get the PDF values from the last time step an index array is used which stores them. + + .. math :: + f_{\overline{1}jkxyzt} = f_{\overline{1}jk(x - \Delta x)yz(t - \Delta t)} c \theta^{\frac{1}{2}} + \frac{\Delta t}{\Delta x} + \left(1 - c \theta^{\frac{1}{2}} \frac{\Delta t}{\Delta x} \right) + f_{\overline{1}jk(x - \Delta x)yzt} + + + Args: + normal_direction: direction vector normal to the outflow + lb_method: the lattice boltzman method to be used in the simulation + dt: lattice time step size + dx: lattice spacing distance + name: optional name of the boundary. + streaming_pattern: Streaming pattern to be used in the simulation + zeroth_timestep: for in-place patterns, whether the initial setup corresponds to an even or odd time step + initial_density: floating point constant or callback taking spatial coordinates (x, y [,z]) as + positional arguments, specifying the initial density on boundary nodes + initial_velocity: tuple of floating point constants or callback taking spatial coordinates (x, y [,z]) as + positional arguments, specifying the initial velocity on boundary nodes + """ + + # We need each fluid cell only once, the direction of the outflow is given + # in the constructor. + single_link = True + + def __init__(self, normal_direction, lb_method, dt=1, dx=1, name=None, + streaming_pattern='pull', zeroth_timestep=Timestep.BOTH, + initial_density=None, initial_velocity=None): + + self.lb_method = lb_method + self.stencil = lb_method.stencil + self.dim = len(self.stencil[0]) + if isinstance(normal_direction, str): + normal_direction = direction_string_to_offset(normal_direction, dim=self.dim) + + if name is None: + name = f"Outflow: {offset_to_direction_string(normal_direction)}" + + self.normal_direction = normal_direction + self.streaming_pattern = streaming_pattern + self.zeroth_timestep = zeroth_timestep + self.dx = sp.Number(dx) + self.dt = sp.Number(dt) + self.c = sp.sqrt(sp.Rational(1, 3)) * (self.dx / self.dt) + + self.initial_density = initial_density + self.initial_velocity = initial_velocity + self.equilibrium_calculation = None + + if initial_density and initial_velocity: + equilibrium = lb_method.get_equilibrium(conserved_quantity_equations=AssignmentCollection([])) + rho = lb_method.zeroth_order_equilibrium_moment_symbol + u_vec = lb_method.first_order_equilibrium_moment_symbols + eq_lambda = equilibrium.lambdify((rho,) + u_vec) + post_pdf_symbols = lb_method.post_collision_pdf_symbols + + def calc_eq_pdfs(density, velocity, j): + return eq_lambda(density, *velocity)[post_pdf_symbols[j]] + + self.equilibrium_calculation = calc_eq_pdfs + + super(ExtrapolationOutflow, self).__init__(name) + + def init_callback(self, boundary_data, **_): + dim = boundary_data.dim + coord_names = ['x', 'y', 'z'][:dim] + pdf_acc = AccessPdfValues(self.stencil, streaming_pattern=self.streaming_pattern, + timestep=self.zeroth_timestep, streaming_dir='out') + + def get_boundary_cell_pdfs(fluid_cell, boundary_cell, j): + if self.equilibrium_calculation is not None: + density = self.initial_density( + *boundary_cell) if callable(self.initial_density) else self.initial_density + velocity = self.initial_velocity( + *boundary_cell) if callable(self.initial_velocity) else self.initial_velocity + return self.equilibrium_calculation(density, velocity, j) + else: + return pdf_acc.read_pdf(boundary_data.pdf_array, fluid_cell, j) + + for entry in boundary_data.index_array: + fluid_cell = tuple(entry[c] for c in coord_names) + boundary_cell = tuple(f + o for f, o in zip(fluid_cell, self.normal_direction)) + + # Initial fluid cell PDF values + for j, stencil_dir in enumerate(self.stencil): + if all(n == 0 or n == -s for s, n in zip(stencil_dir, self.normal_direction)): + entry[f'pdf_{j}'] = pdf_acc.read_pdf(boundary_data.pdf_array, fluid_cell, j) + entry[f'pdf_nd_{j}'] = get_boundary_cell_pdfs(fluid_cell, boundary_cell, j) + + @property + def additional_data(self): + """Used internally only. For the ExtrapolationOutflow information of the precious PDF values is needed. This + information is added to the boundary""" + data = [] + for i, stencil_dir in enumerate(self.stencil): + if all(n == 0 or n == -s for s, n in zip(stencil_dir, self.normal_direction)): + data.append((f'pdf_{i}', create_type("double"))) + data.append((f'pdf_nd_{i}', create_type("double"))) + return data + + @property + def additional_data_init_callback(self): + """The initialisation of the additional data is implemented internally for this class. + Thus no callback can be provided""" + if callable(self.init_callback): + return self.init_callback + + def __call__(self, f_out, f_in, dir_symbol, inv_dir, lb_method, index_field): + subexpressions = [] + boundary_assignments = [] + dtdx = sp.Rational(self.dt, self.dx) + + for i, stencil_dir in enumerate(self.stencil): + if all(n == 0 or n == -s for s, n in zip(stencil_dir, self.normal_direction)): + + interpolated_pdf_sym = sp.Symbol(f'pdf_inter_{i}') + interpolated_pdf_asm = Assignment(interpolated_pdf_sym, (index_field[0](f'pdf_{i}') * (self.c * dtdx)) + + ((sp.Number(1) - self.c * dtdx) * index_field[0](f'pdf_nd_{i}'))) + subexpressions.append(interpolated_pdf_asm) + + asm = Assignment(f_out[self.normal_direction](i), interpolated_pdf_sym) + boundary_assignments.append(asm) + + asm = Assignment(index_field[0](f'pdf_{i}'), f_out.center(i)) + boundary_assignments.append(asm) + + asm = Assignment(index_field[0](f'pdf_nd_{i}'), interpolated_pdf_sym) + boundary_assignments.append(asm) + + return AssignmentCollection(boundary_assignments, subexpressions=subexpressions) +# end class ExtrapolationOutflow + + class FixedDensity(LbBoundary): + """Boundary condition that fixes the density/pressure at the obstacle. + + Args: + density: value of the density which should be set. + name: optional name of the boundary. + + """ def __init__(self, density, name=None): if name is None: @@ -183,7 +404,6 @@ class FixedDensity(LbBoundary): self._density = density def __call__(self, f_out, f_in, dir_symbol, inv_dir, lb_method, index_field): - """Boundary condition that fixes the density/pressure at the obstacle""" def remove_asymmetric_part_of_main_assignments(assignment_collection, degrees_of_freedom): new_main_assignments = [Assignment(a.lhs, get_symmetric_part(a.rhs, degrees_of_freedom)) @@ -222,8 +442,18 @@ class FixedDensity(LbBoundary): class NeumannByCopy(LbBoundary): + """Neumann boundary condition which is implemented by coping the PDF values to achieve similar values at the fluid + and the boundary node""" def get_additional_code_nodes(self, lb_method): + """Return a list of code nodes that will be added in the generated code before the index field loop. + + Args: + lb_method: Lattice Boltzmann method. See :func:`lbmpy.creationfunctions.create_lb_method` + + Returns: + list containing NeighbourOffsetArrays + """ return [NeighbourOffsetArrays(lb_method.stencil)] def __call__(self, f_out, f_in, dir_symbol, inv_dir, lb_method, index_field): @@ -241,11 +471,27 @@ class NeumannByCopy(LbBoundary): class StreamInConstant(LbBoundary): + """Boundary condition that takes a constant and overrides the boundary PDFs with this value. This is used for + debugging mainly. + + Args: + constant: value which should be set for the PDFs at the boundary cell. + name: optional name of the boundary. + + """ def __init__(self, constant, name=None): super(StreamInConstant, self).__init__(name) self._constant = constant def get_additional_code_nodes(self, lb_method): + """Return a list of code nodes that will be added in the generated code before the index field loop. + + Args: + lb_method: Lattice Boltzmann method. See :func:`lbmpy.creationfunctions.create_lb_method` + + Returns: + list containing NeighbourOffsetArrays + """ return [NeighbourOffsetArrays(lb_method.stencil)] def __call__(self, f_out, f_in, dir_symbol, inv_dir, lb_method, index_field): diff --git a/lbmpy/boundaries/boundaryhandling.py b/lbmpy/boundaries/boundaryhandling.py index b8a52fcf43b301ef47f5ca747b67ca0a00d36efc..7ebfad53bcd4789a1d92c6bac7bfe8f084128a5b 100644 --- a/lbmpy/boundaries/boundaryhandling.py +++ b/lbmpy/boundaries/boundaryhandling.py @@ -107,7 +107,7 @@ class LatticeBoltzmannBoundaryHandling(BoundaryHandling): pdf_array = b[self._field_name] if boundary_obj in obj_to_ind_list: ind_arr = obj_to_ind_list[boundary_obj] - acc = AccessPdfValues(dh.fields[self._field_name], self._lb_method.stencil, + acc = AccessPdfValues(self._lb_method.stencil, streaming_pattern=self._streaming_pattern, timestep=prev_timestep, streaming_dir='out') values = 2 * acc.collect_from_index_list(pdf_array, ind_arr) @@ -131,10 +131,10 @@ class LatticeBoltzmannBoundaryHandling(BoundaryHandling): ind_arr = obj_to_ind_list[boundary_obj] inverse_ind_arr = ind_arr.copy() inverse_ind_arr['dir'] = inv_direction[inverse_ind_arr['dir']] - acc_out = AccessPdfValues(dh.fields[self._field_name], self._lb_method.stencil, + acc_out = AccessPdfValues(self._lb_method.stencil, streaming_pattern=self._streaming_pattern, timestep=prev_timestep, streaming_dir='out') - acc_in = AccessPdfValues(dh.fields[self._field_name], self._lb_method.stencil, + acc_in = AccessPdfValues(self._lb_method.stencil, streaming_pattern=self._streaming_pattern, timestep=prev_timestep.next(), streaming_dir='in') acc_fluid = acc_out if boundary_obj.inner_or_boundary else acc_in diff --git a/lbmpy_tests/advanced_streaming/test_advanced_streaming_noslip.py b/lbmpy_tests/advanced_streaming/test_advanced_streaming_noslip.py index afbf31ea97ab145abfd497f1ca18c54260e53ea3..834d30d3b6208183cf1437d040408e276718b2c0 100644 --- a/lbmpy_tests/advanced_streaming/test_advanced_streaming_noslip.py +++ b/lbmpy_tests/advanced_streaming/test_advanced_streaming_noslip.py @@ -31,8 +31,8 @@ def test_advanced_streaming_noslip_single_cell(stencil, streaming_pattern, prev_ dim = len(stencil[0]) pdf_field = ps.fields(f'pdfs({q}): [{dim}D]') - prev_pdf_access = AccessPdfValues(pdf_field, stencil, streaming_pattern, prev_timestep, 'out') - next_pdf_access = AccessPdfValues(pdf_field, stencil, streaming_pattern, prev_timestep.next(), 'in') + prev_pdf_access = AccessPdfValues(stencil, streaming_pattern, prev_timestep, 'out') + next_pdf_access = AccessPdfValues(stencil, streaming_pattern, prev_timestep.next(), 'in') pdfs = np.zeros((3,) * dim + (q,)) pos = (1,) * dim diff --git a/lbmpy_tests/test_extrapolation_outflow.py b/lbmpy_tests/test_extrapolation_outflow.py new file mode 100644 index 0000000000000000000000000000000000000000..e44f216cd058d321e78d686891bd6f8446e805fc --- /dev/null +++ b/lbmpy_tests/test_extrapolation_outflow.py @@ -0,0 +1,140 @@ +from lbmpy.stencils import get_stencil +from lbmpy.advanced_streaming.utility import AccessPdfValues, get_timesteps +import pytest +import numpy as np +import sympy as sp + +from pystencils.datahandling import create_data_handling +from lbmpy.boundaries import LatticeBoltzmannBoundaryHandling, SimpleExtrapolationOutflow, ExtrapolationOutflow +from lbmpy.creationfunctions import create_lb_method +from lbmpy.advanced_streaming.utility import streaming_patterns +from pystencils.slicing import get_ghost_region_slice + + +@pytest.mark.parametrize('stencil', ['D2Q9', 'D3Q27']) +@pytest.mark.parametrize('streaming_pattern', streaming_patterns) +def test_pdf_simple_extrapolation(stencil, streaming_pattern): + stencil = get_stencil(stencil) + dim = len(stencil[0]) + values_per_cell = len(stencil) + + # Field contains exactly one fluid cell + domain_size = (1,) * dim + for timestep in get_timesteps(streaming_pattern): + dh = create_data_handling(domain_size, default_target='cpu') + lb_method = create_lb_method(stencil=stencil) + pdf_field = dh.add_array('f', values_per_cell=values_per_cell) + dh.fill(pdf_field.name, np.nan, ghost_layers=True) + bh = LatticeBoltzmannBoundaryHandling(lb_method, dh, pdf_field.name, streaming_pattern, target='cpu') + + # Set up outflows in all directions + for normal_dir in stencil[1:]: + boundary_obj = SimpleExtrapolationOutflow(normal_dir, stencil) + boundary_slice = get_ghost_region_slice(normal_dir) + bh.set_boundary(boundary_obj, boundary_slice) + + pdf_arr = dh.cpu_arrays[pdf_field.name] + + # Set up the domain with artificial PDF values + center = (1,) * dim + out_access = AccessPdfValues(stencil, streaming_pattern, timestep, 'out') + for q in range(values_per_cell): + out_access.write_pdf(pdf_arr, center, q, q) + + # Do boundary handling + bh(prev_timestep=timestep) + + center = np.array(center) + # Check PDF values + in_access = AccessPdfValues(stencil, streaming_pattern, timestep.next(), 'in') + + # Inbound in center cell + for q, streaming_dir in enumerate(stencil): + f = in_access.read_pdf(pdf_arr, center, q) + assert f == q + + # Outbound in neighbors + for normal_dir in stencil[1:]: + for q, streaming_dir in enumerate(stencil): + neighbor = center + np.array(normal_dir) + if all(n == 0 or n == -s for s, n in zip(streaming_dir, normal_dir)): + f = out_access.read_pdf(pdf_arr, neighbor, q) + assert f == q + + +def test_extrapolation_outflow_initialization_by_copy(): + stencil = get_stencil('D2Q9') + values_per_cell = len(stencil) + domain_size = (1, 5) + + streaming_pattern = 'esotwist' + zeroth_timestep = 'even' + + pdf_acc = AccessPdfValues(stencil, streaming_pattern=streaming_pattern, + timestep=zeroth_timestep, streaming_dir='out') + + dh = create_data_handling(domain_size, default_target='cpu') + lb_method = create_lb_method(stencil=stencil) + pdf_field = dh.add_array('f', values_per_cell=values_per_cell) + dh.fill(pdf_field.name, np.nan, ghost_layers=True) + pdf_arr = dh.cpu_arrays[pdf_field.name] + bh = LatticeBoltzmannBoundaryHandling(lb_method, dh, pdf_field.name, + streaming_pattern=streaming_pattern, target='cpu') + + for y in range(1, 6): + for j in range(values_per_cell): + pdf_acc.write_pdf(pdf_arr, (1, y), j, j) + + normal_dir = (1, 0) + outflow = ExtrapolationOutflow(normal_dir, lb_method, streaming_pattern=streaming_pattern, + zeroth_timestep=zeroth_timestep) + boundary_slice = get_ghost_region_slice(normal_dir) + bh.set_boundary(outflow, boundary_slice) + bh.prepare() + + blocks = list(dh.iterate()) + index_list = blocks[0][bh._index_array_name].boundary_object_to_index_list[outflow] + assert len(index_list) == 5 + for entry in index_list: + for j, stencil_dir in enumerate(stencil): + if all(n == 0 or n == -s for s, n in zip(stencil_dir, normal_dir)): + assert entry[f'pdf_{j}'] == j + assert entry[f'pdf_nd_{j}'] == j + + +def test_extrapolation_outflow_initialization_by_callback(): + stencil = get_stencil('D2Q9') + values_per_cell = len(stencil) + domain_size = (1, 5) + + streaming_pattern = 'esotwist' + zeroth_timestep = 'even' + + dh = create_data_handling(domain_size, default_target='cpu') + lb_method = create_lb_method(stencil=stencil) + pdf_field = dh.add_array('f', values_per_cell=values_per_cell) + dh.fill(pdf_field.name, np.nan, ghost_layers=True) + bh = LatticeBoltzmannBoundaryHandling(lb_method, dh, pdf_field.name, + streaming_pattern=streaming_pattern, target='cpu') + + normal_dir = (1, 0) + density_callback = lambda x, y: 1 + velocity_callback = lambda x, y: (0, 0) + outflow = ExtrapolationOutflow(normal_dir, lb_method, + streaming_pattern=streaming_pattern, + zeroth_timestep=zeroth_timestep, + initial_density=density_callback, + initial_velocity=velocity_callback) + boundary_slice = get_ghost_region_slice(normal_dir) + bh.set_boundary(outflow, boundary_slice) + bh.prepare() + + weights = [w.evalf() for w in lb_method.weights] + + blocks = list(dh.iterate()) + index_list = blocks[0][bh._index_array_name].boundary_object_to_index_list[outflow] + assert len(index_list) == 5 + for entry in index_list: + for j, stencil_dir in enumerate(stencil): + if all(n == 0 or n == -s for s, n in zip(stencil_dir, normal_dir)): + assert entry[f'pdf_nd_{j}'] == weights[j]