{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "nbsphinx": "hidden" }, "outputs": [], "source": [ "from lbmpy.session import *\n", "from lbmpy.cumulants import *\n", "from lbmpy.moments import *\n", "from lbmpy.continuous_distribution_measures import continuous_moment\n", "from lbmpy.stencils import LBStencil" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Demo: Moments, Cumulants and Maxwellian Equilibrium\n", "\n", "## 1) Moments & Cumulants\n", "\n", "\n", "### Moments\n", "\n", "The *moments* and *cumulants* modules contain functions to calculate moments and cumulants of functions on a discrete velocity space defined by a stencil. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left( f_{0}, \\ f_{1}, \\ f_{2}, \\ f_{3}, \\ f_{4}, \\ f_{5}, \\ f_{6}, \\ f_{7}, \\ f_{8}\\right)$" ], "text/plain": [ "(f₀, f₁, f₂, f₃, f₄, f₅, f₆, f₇, f₈)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stencil = LBStencil(Stencil.D2Q9)\n", "pdfs = sp.symbols(\"f:9\")\n", "pdfs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Discrete moments are computed by following formula:\n", "\n", "$$ \\sum_{d \\in S} d_1^{m_1} d_2^{m_2} \\; f_d $$ \n", "\n", "with $S$ being the stencil, $d_i$ the direction components, $f_d$ the function values for each direction and $m_j$ the components of the moment tuple.\n", "\n", "Lets compute the first moment in the first direction, i.e. $(m_1, m_2) = (1,0)$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(3, 3))\n", "stencil.plot()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle - f_{3} + f_{4} - f_{5} + f_{6} - f_{7} + f_{8}$" ], "text/plain": [ "-f₃ + f₄ - f₅ + f₆ - f₇ + f₈" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "discrete_moment(pdfs, (1, 0), stencil)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We get contributions of all directions that have a non-zero x-component, weighted with the sign of the direction. \n", "\n", "For the second order moment, the direction components are squared, so all contributions come in with a positive sign." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPEAAAASCAYAAACKGzglAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFWklEQVR4Ae2b61UUMRiGB44F4NoBduClAqUDoAOxAz3+4x9HOgArUOgA7ADsADoQtwN8n5jMyWbz7c5eZrIjk3NCrpM8+11ymdGtx8fHygrHx8dnahv79hOVQ956pHj9wNyNCvom577xosWmzNuWyjXAV7WNFL8rHim+V9zoMDB3o56+yblvvGhxEWbTiTUOjosD48g3iteKawuCfK/IHOsMA3MizUHOTiD/tV08S3TuiihemR3Fa+U5Qq/Vgd0k/8ZnjrWEgdkUIzJ+snJ+CnZh7cR7Uvy9d2DTOjasYWDuRiF9k3PfeNHiQswTO7GclmMHA7ATP6h84dOPSjcyDMzdqKVvcu4bL1pcljl14nONda7BeGXN2+hTBt/kIMaBuQMF9U3OfeNFhcsyTx2nNdCut4k27sGtmNvA3IpYpwbtm5wt3qh+6jeWrojYGvvfxE7sf8ArUg32K/5BfnB3zFY9jv5Wkd16ol/8DHm1862Z59LAW2/ac0f1X6o/SB+YUc4yp/015q3i67Q+LatPMWbNjWyRyZXnoszV5tKXs0lJ5gAkBj5L/vblscqckszQAbNlF581N3JFz/cxoOpNe+6AFxSLudL8XHd5SfnCp19Vd59zYpxz4oepTEBBvOxyilH6SeWfis8VzaB+OSetVL+vh3aVruPIbjHXXJoHXiegutLIqG9JZowLZcGLHi7FM9MZ1KcqzMz8t8L4oJQFGDlTnsmtfm3L2bILZMzGkm4u8GaZVF91wMs0WWbNjT1gC843leLMvLPayzkxCsitRieqjwOrwUNcUTBvMTsk/WCUlVuYCiK7BSUnZ5jeidlq2zhmsbLA3wRmUkVekJYOll2wGW3FcCqfKZoOHPdtOW8xI09sIjgxJ50RLDknfqP61GErPZAaFTspytuEkGUGTNysWAhm5q5A346DyQyHuFl4YA/f6qkuHSxmTg4HYmaHQ9YwN77TtfijLN4JuxUr5c8tciwytMXM9epKrKeKXAeQOdeBaps/IagBJWA4qcOGLpX6fFLkqMTKVdwxxDCP+Uh91nFkr2WwaqYB8xfNwYqLI3xT//1V51z1eYtZ9dgLkZ3CLTpKuathZMWCxQuQ2upTmfLIFucYF4P1E4vBtGW1YcMsNPgfX49eKnX+N+HEamAVrdRorqJqY7B3invKc04vHUxm8aGgmS+ECsHPYmYXY1cL/9iGUxF3n9LBYh55sDsxc4zGGTA2FnmMslSweGse8bHofFRq2nvduZuMySxG2rgv82IWm8aZp3diNbCazjV6PRwUxYrrJtZzpUKWWVwY0EhpveqWAszMm2Wmn3jTXTfcgThelwxZ5ki+NwFOdWFXK8mc5Q2MPj1Uap46k75dFGcxcyJjcWehPBAMfQ+Vf7WtP/uKYaV/o4bvKa3adxT/KMYOGxTFM8sEng9jLPS8OOYya8AdRY4cLDTcedw9yJdTR2k6f9vMcFyIMZbzyMMtuxh1wQxb4PS4LumUWXJrYhcxHy+y7uKKJfOtyli/iw3pIWZTHacHjtO7vNjCuDm6YfSV0qmdWHW8CWOQWCmsssD/UFw4aLxVjjBNmFlh61VW8yEI7mlL/7/otpm9EFFMLGcWnPrTgu/TOOmIGX2wOzidak4WIWxqKR0v+5zmnGsX6hOHeLGM6xfKr8DLPHOZNT6y5FTJZorPhYBNnwQnxoGDIkKHNEVJXzRI+JjvzufJoOkzbZVhbcLs5hcjzsvxg8DOzIuMqcXqX3Nrf5syc58McuYzXiVWZF8iNGIWH/9Ulzsa/bGPl4rc3boOjXgjKBbL+hoQ1XeZbcqMDWC74eSAbfCWevwXct0eBlky/AYAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle f_{3} + f_{4} + f_{5} + f_{6} + f_{7} + f_{8}$" ], "text/plain": [ "f₃ + f₄ + f₅ + f₆ + f₇ + f₈" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "discrete_moment(pdfs, (2, 0), stencil)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can specify the moments not only as exponent tuples but also as polynomials in the $d_i$'s. \n", "The symbols for the $d_i$ are provided by the *moments* module as ``MOMENT_SYMBOLS``" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAAASCAYAAABb2Wt8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFpklEQVR4Ae2c63ETMRSFFyYFBNNB6IBHBZAOEjoAOgjDr+RfBjoAKuDRQaCDQAekA4I7MOcT0o5QJFvrlVaGWc3Iet979ujqSlo7ubVarbpa4ezs7K1kL638c5VdvpbK0XJnzKMpzBIw85xF06hOuRzfHqVlzWABeK3mheIHxeeKTxR3OsyYp5memef6PA/huJoT0GOy8HEAOIJLxS+KxYIe8okiOkqGqphLAvVkVcU889wz/a/xnI13r3/EghkMR+L2Fb8ozxWgqAOwUJFPLBImwlwEqxMyEeaZ53/MnofaRa2TwKEM9co6AGezu57OmKeZoZnn+jwP4rjoSUCLniMIADgJXKv8yaYvlO5kmDFPMy0zz/V53ppjvh0oHU9PT1eKJ6Xl+vIk/6ikDslalZTnY62VnwKzdMw8T2AbJXkeahfFrwPyRgfW59V4D1DFnc6Yq9B6Q+j/xLP3LDees2WFhyt7/e1pEC9+vioOecl2rHHfEw97n/qwXWWcg7kmKCX/SJHfDqTkqNnI4bcGjAsD3zqgJ3bV+K7643DAmnIUc9hfMr8pPgjrw7L6lOY0VEE5ilm64RZOLuikQJmr2WdTSnyovTnPwsDXyj8txKXK7xJwTbXam/EsAC+lH27h7coAsh+qT9q02mrzHLULoEk313U4u2vT16q72tPHUhUbDVt9cgOL+y9S7EAmmJeFZmKVnqiM87lj26OJ+sUWeaf6Iw04UPomOnBYZQpzL0V6wGsI7isTGfUtzWlMUwozhslkg5d5+Cw8axeT+nTq05Rn6f8mGM+U4sDhmfJa3OrXmmc2p3CDAnOUS9V3whxtU30pe47aheRjD9iCWZtKcQa8szvc00fpwATGPOF5oAhvdB3UtSqmMBs8IoyJjjm2VnjRuw7zY2GOzUFLvEnMwsoGcekwkyrygnkXQopnNrRbPkCV3ypGF7nfr3I+hRc+sQnnBDhpLcBSwwk8lNxwwXdSGBolno/J34UQxQww4cZjQuzaXYm+E4ckZnAIN44L7O63GlS3DinMnFy4YnKKgWswZ99pKz9UCvNftiu8lF9WxpIjPoWX6+GFcL5R5CoD51xNutt8lAoSzCRieOGC71Woz4kiRz28ZvOFlYH5ufqUuHL0HIzNZGB+JR14fBbSe/U/Gqtz7PgUZtVjL0R2KuO0lHJXxUibhhRmQKmtPxkqD78ssGVLwNKfXH9qw4ZxUqw//mDonlKz/oo6AQnGi3cSnvTiagPMY8VD5bmntA5JzMLH5K59odYI/DrM7KLsqu7HWpzKuPu1DinMCwvshzBzDWAhYaxsEhh1y5DC3GMSRhzXC6VJm+87188k8Qofbbwv4P0fNo0zKH8SkGC8+cZFI+VuovH4BrjGtQpRzMKFAS6U9h6/FcCI3ihm+glvuOu7OyDXg5Yhitnj99KBU53bUXcSs8Np06dKkyffoG/tYpRjq5QToflWj1R19H2q/P3RJwEJOVJ0O81DCf5glfaJ2vcVfyn6C95NNGO2CYx3MgaNF46NmCVwX5EjE46K+565A9pyuNAG6d+mcyZmRH9SX5/nhdW3rTOrzTPwwOZwWrgm2RazL2NQfgDPTi4vAn+4woh0K55z8KoPG9q1j011nFy4DhyUeDHI4uDoyaLplN44CaiON5GA8CcVL8+Df1QcHCRvzPErBzPevffw0geR3FNb/V+EjZgtiUyszzMOq/9qyPbJTmrzbIHwbOxOZk6lEyeGTY2ZYyt6cJLLsxPsO1xXNzgd8awb8Uo2XHKqZTNmzbmATZ+XcgI4ADeRTkGYMsmvBML9GMTcTwJQ4ZhaZbDmYDb6hZHFz/GJwMmAl0A3nN2f5mqfuZi5Tzue+Rq2E1a4bxGyMAvfO0XuqPTHPu4plvztypBnz8LsCcTh9lcZr36qbC5ebADbdacWbINvCZa/AQNIzP4f/lydAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle - f_{3} + f_{4} - f_{5} + f_{6} - f_{7} + f_{8}$" ], "text/plain": [ "-f₃ + f₄ - f₅ + f₆ - f₇ + f₈" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x, y, z = MOMENT_SYMBOLS\n", "discrete_moment(pdfs, x, stencil)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The same works also for sums:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKwAAAASCAYAAADG8TXdAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEhElEQVRoBe2a0VHcMBCGD4YCCOkAOghQQaADSAeBDsjwxhtDOuBSAQMdhBKADkIHEDog32ekG59t+ZzDNr6Z2xkhayWv91+tVisdK6+vr6MUnZ2dXdL3EvrPacfn1Csfzh+yzui2iYF+BCPtUD/bhv8QeLXVEttotJqyEMa5oG+DckU5ouxRBk1D1hnddNZL6uNQtmnrqPe0Z9qWMYOdD3TrDVvSYTGkTqqz6rR3lFtKa+QkUfxGmzRknXW44zxY8Btt3bWu8/zE8xIbhlmrMo7OBH+dcsuzBm3VWcM3lW9phRZAZ236Bz0/BZtG3Nr2AN4m5TEy8zX8oc9Hb9hSEXYfgz0WDJu34RCfh66zjlln07rFu8QWPG4t73k4qNuOxnHFPNN2q7Ke2srgDYYWRWf0PEwY7Yt8+ksHryW2ssWKDjtmyBhDeXXgrcDP8ivD4qDjwukcLYjuOqsHlnhzELuyeoltyhxZo5QSYCQNKHWRt75JbvnvIuocTOAOdoP+ycCwxDbtLFMRNnTVbVHmWd8oXs14LTOTGOddrilGkbx9GNFflW48wE9toUU5tit1Rob6noYX4kL8Dv8l8Cor+jvXOXzDnHYWzhQ28Wi73wGEbdO3m9CurBYBW1QcXb1ZeQrtF9rjKofdZUDptMpgDRcdr+6AEOS/VbxX5ZAj+AeM8GScjC5TguoblTrzykX++zzriPeUrTpx+Xfy4+C3ojNyPCtsUHtemEUpbDqock4ozpeR2vSolhjT6Xy0hG2EHOfJ4GLw0vdsj1cr0NlZdQDwRZ2r5MwVMvpmVeqMEkfoHBeZOrliXSSO/xDi2zr9FvUksvKsTjpgFaWwOfYr761QlFeZB1cJ7IqHDq1gQ47zdEed+WGos8VdFWF3GHzeFaiO5KZ0Npr4o8cgCMPrfLvURedyolPRMYUtw4QsF6Q7Xrwzz/h9/2kZmzvHITJdxNpMbNmZasphwwDBlyIsvEFSnc70FZ1ABzZv7B1f0NNDlsY3NcmTv/qVUqPwTt18mJ/r/M+UX4y/otTmsPmPtvUc9GwFG7LEazGiXlF0VFM7f8Iu5bDZVknHwtwQAKaRzmBynJGs0WGRcW2Th6OYdxZlpxZQEluYo8k80XZXNM9bKQrvod0mto2gr78KZnahdlH+FfNUhIWpV/e+QoOC81YzdQaojmJetM3zy7wfes97fLf2oJeQncSGPH/Ozc9VdraAZ7SeOHJCbqtsvtcaNmS5A6rfJJWj7Q2BvL1VHgRuOJfMlwzDfZCOM5fz/I/OjNVZ/Re+fYrA6w44s3DPrfMswbEf/ZrOxzVjswgc3o2Rad5D8ZCwiSHiiaaxfjTCGnn06nU51PlVK6sT4jvviQKNdOYbOqv5og4bJ9c8tnjoaYTxnTo3+gaDGmFjnPl53jlNd7zayvNgNaOBYdMG3qJkPhLmTh/NUgI7ddY4iMcyMdjJd7L3KEYpxz9Rlw4L8LumRjqjhDmd2KwnhM7iGCo1xeaiOwXLE/VnwfA8uSqzPUBqhA0c/nvACSXzMXCYcmRnj38wEpTiPUpCywAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle f_{1} + f_{2} + 2 f_{5} + 2 f_{6}$" ], "text/plain": [ "f₁ + f₂ + 2⋅f₅ + 2⋅f₆" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "discrete_moment(pdfs, x**2 * y + y**2, stencil)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here the advantage of the polynomial representation becomes visible. \n", "To compute the same moment with exponent tuples takes two calls:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKwAAAASCAYAAADG8TXdAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEhElEQVRoBe2a0VHcMBCGD4YCCOkAOghQQaADSAeBDsjwxhtDOuBSAQMdhBKADkIHEDog32ekG59t+ZzDNr6Z2xkhayWv91+tVisdK6+vr6MUnZ2dXdL3EvrPacfn1Csfzh+yzui2iYF+BCPtUD/bhv8QeLXVEttotJqyEMa5oG+DckU5ouxRBk1D1hnddNZL6uNQtmnrqPe0Z9qWMYOdD3TrDVvSYTGkTqqz6rR3lFtKa+QkUfxGmzRknXW44zxY8Btt3bWu8/zE8xIbhlmrMo7OBH+dcsuzBm3VWcM3lW9phRZAZ236Bz0/BZtG3Nr2AN4m5TEy8zX8oc9Hb9hSEXYfgz0WDJu34RCfh66zjlln07rFu8QWPG4t73k4qNuOxnHFPNN2q7Ke2srgDYYWRWf0PEwY7Yt8+ksHryW2ssWKDjtmyBhDeXXgrcDP8ivD4qDjwukcLYjuOqsHlnhzELuyeoltyhxZo5QSYCQNKHWRt75JbvnvIuocTOAOdoP+ycCwxDbtLFMRNnTVbVHmWd8oXs14LTOTGOddrilGkbx9GNFflW48wE9toUU5tit1Rob6noYX4kL8Dv8l8Cor+jvXOXzDnHYWzhQ28Wi73wGEbdO3m9CurBYBW1QcXb1ZeQrtF9rjKofdZUDptMpgDRcdr+6AEOS/VbxX5ZAj+AeM8GScjC5TguoblTrzykX++zzriPeUrTpx+Xfy4+C3ojNyPCtsUHtemEUpbDqock4ozpeR2vSolhjT6Xy0hG2EHOfJ4GLw0vdsj1cr0NlZdQDwRZ2r5MwVMvpmVeqMEkfoHBeZOrliXSSO/xDi2zr9FvUksvKsTjpgFaWwOfYr761QlFeZB1cJ7IqHDq1gQ47zdEed+WGos8VdFWF3GHzeFaiO5KZ0Npr4o8cgCMPrfLvURedyolPRMYUtw4QsF6Q7Xrwzz/h9/2kZmzvHITJdxNpMbNmZasphwwDBlyIsvEFSnc70FZ1ABzZv7B1f0NNDlsY3NcmTv/qVUqPwTt18mJ/r/M+UX4y/otTmsPmPtvUc9GwFG7LEazGiXlF0VFM7f8Iu5bDZVknHwtwQAKaRzmBynJGs0WGRcW2Th6OYdxZlpxZQEluYo8k80XZXNM9bKQrvod0mto2gr78KZnahdlH+FfNUhIWpV/e+QoOC81YzdQaojmJetM3zy7wfes97fLf2oJeQncSGPH/Ozc9VdraAZ7SeOHJCbqtsvtcaNmS5A6rfJJWj7Q2BvL1VHgRuOJfMlwzDfZCOM5fz/I/OjNVZ/Re+fYrA6w44s3DPrfMswbEf/ZrOxzVjswgc3o2Rad5D8ZCwiSHiiaaxfjTCGnn06nU51PlVK6sT4jvviQKNdOYbOqv5og4bJ9c8tnjoaYTxnTo3+gaDGmFjnPl53jlNd7zayvNgNaOBYdMG3qJkPhLmTh/NUgI7ddY4iMcyMdjJd7L3KEYpxz9Rlw4L8LumRjqjhDmd2KwnhM7iGCo1xeaiOwXLE/VnwfA8uSqzPUBqhA0c/nvACSXzMXCYcmRnj38wEpTiPUpCywAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle f_{1} + f_{2} + 2 f_{5} + 2 f_{6}$" ], "text/plain": [ "f₁ + f₂ + 2⋅f₅ + 2⋅f₆" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "discrete_moment(pdfs, (2, 1), stencil) + discrete_moment(pdfs, (0, 2), stencil)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cumulants\n", "\n", "Cumulants are an alternative to the moment represenation, see the [Wikipedia article](https://en.wikipedia.org/wiki/Cumulant). Cumulants can be calculated directly using the cumulant generating function, or can be calculated by moments." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\frac{f_{3} + f_{4} + f_{5} + f_{6} + f_{7} + f_{8} - \\frac{\\left(f_{3} - f_{4} + f_{5} - f_{6} + f_{7} - f_{8}\\right)^{2}}{f_{0} + f_{1} + f_{2} + f_{3} + f_{4} + f_{5} + f_{6} + f_{7} + f_{8}}}{f_{0} + f_{1} + f_{2} + f_{3} + f_{4} + f_{5} + f_{6} + f_{7} + f_{8}}$" ], "text/plain": [ " 2 \n", " (f₃ - f₄ + f₅ - f₆ + f₇ - f₈) \n", "f₃ + f₄ + f₅ + f₆ + f₇ + f₈ - ──────────────────────────────────────────\n", " f₀ + f₁ + f₂ + f₃ + f₄ + f₅ + f₆ + f₇ + f₈\n", "────────────────────────────────────────────────────────────────────────\n", " f₀ + f₁ + f₂ + f₃ + f₄ + f₅ + f₆ + f₇ + f₈ " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "discrete_cumulant(pdfs, (2, 0), stencil)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\frac{m_{2 0}}{m_{0 0}} - \\frac{m_{1 0}^{2}}{m_{0 0}^{2}}$" ], "text/plain": [ " 2\n", "m₂ ₀ m₁ ₀ \n", "──── - ─────\n", "m₀ ₀ 2\n", " m₀ ₀ " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cumulant_as_function_of_raw_moments((2,0))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAI8AAAAYCAYAAADDAK5oAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFAUlEQVRoBe2a7XEUORCGF8oBLEcGXAYQAnsZwGWAyeAo/vmfCzI4MriCDCCD48jgyIArZ+B7HqGWNfsxO2O0M3jtrpJbHz3dUs+rbq3G9y4vLxdD6OzsbInc6yz7KPMX9F8Mef5O5vg8cDJiSW8AysuQp/4n9X8ov0bfHb9dHrg/YrmnAGZVyb+h/oi+x1XfXfUWeWBM5DHqfJ7aN4BTkH6jmB6XtN9OPYdjs9fKp4MjDwbfUerzjWD6St+XQzkX3f+i+yNcwAjcOHMdyuTR623p0zGRpziWCZiqnlGelM7GFWx4phKcn7Lqr/Cn1unzwK59+6x/oM9675jjt5nwUVOfjgZPfnGmkifU60jU+r38jsLnoTTbiij3nv6nYR/uwT2A3DcW6m4rb+rTUeDhJbnLX8F/0/u5LU+7vvEbWaJvQy+27PegXgPXtv3S1rE1+e+Se/7yzCrre7dH9KYMN/XpYPDgSIFj2BM88QvLc8+rA3nOKKPNAiDsGvGcw3+UmmwrK6B2jalvLOnsAOXYZ39GeX3QzKeDwYNRU4OOlBfihZa7n9LZpmLKEqguVtL2eaotFr9kHsz2BUXg7BoL2dvMm/p0Azx5d/vTWPKFfKbvC+VB6mn0B32C4TUlbHnZKFi0uYAbcbYCM48pFuTBOkWo4DEAL2NV36RV5hTXDdotPm09CexM6tMCHgy7wz9SfIEfXBjcFCFa0xnHvhaE3hV6km7qKZ3ATYWCaUgafI78H8gKGCNNOVhb7xljeDpiHkft0wIeXCpw/MmbgJNd7Ok8UkXu+jFWOfQl9focIqCcw17iOUGz9bKwb2yv4vYCvT5lrhEptBzpufO9EBmjlmSEfkh7Y3PRFyCd1Kf3/DCKcaPAKeUB9ZQ2qB+E0K9DBUrthIe0vQyMO52D2N6lNK/fOa1TnJ88S62TqbyOeJ3xrLPXp8pQSmrOz6zg6Xsh3OfLrTrt5Dd4JxPQnsWnJ3nFRphPTKIXOIy7U5QV4XGvklWkNLd3lyCsA4xwWyNHUTZhhbmUF1ibpd+LSH/6X2euQ3x6iu73lNg0+s++xxSjsu10MQpfKEdxkzmndMazH5rFp/eZhICw9KYM5DyTpJ2Q5WFXxLhj3+CemXS2i9yl8++rJ4+vxroH+ZSVC9qt3wvRYSpSTw0SmunA7btYp8l9Kngu8iyCdybFuKhewA3TgmJ9MSHvLokdpLx1Q3Dk8pDzedPUBiHrTr/xxDrCl8E7a2I8fNr3vXDZeeiqYQqNdBq9s/j0JFv3BtX83blJZZEC4q8ss5Mht2+X1IBTZydN8LyOst9yLDTKp/jAaDLke6HAWQfWLD5N4GHinmH8Zy8n4ZdsyQme03eRWv1/1hcT0hu7BH3uNg+BHVu0O4AKBTeVux7XuL5O1rPhU2TcfPqj/l64y+/6ut6MC56fxacReZxA/euH+TWhbbtEW9c5gDaZ0JRKhvgUGYHjOXHjeyF9AshxD881rbcXyE7u0wKeembXqA/eJdfQPecjrmvX2n54XrxwgeE1ieAxbUlG4NjI59RXlAQWZKyXfz+hPis1AQ+L8hPA4F0y64pHGGdN5QfAiMfGiPqdcEmRF8JuSuHwt5RIfV4Sev/zogjOXGkCnryGn3qXzOznreYBxt7vhchEFNqqY87OdMM8ZAIswhDrjjB0GmLNsd7rlFxL3UOfFLvEcHywsP/d1N3fuTzwPx3gh7pEZvNrAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle c_{1 0}^{2} e^{c_{0 0}} + c_{2 0} e^{c_{0 0}}$" ], "text/plain": [ " 2 c₀ ₀ c₀ ₀\n", "c₁ ₀ ⋅ℯ + c₂ ₀⋅ℯ " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "raw_moment_as_function_of_cumulants((2,0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2) Using Moments to derive discrete LBM equilibrium\n", "\n", "For full stencils i.e. *D2Q9* and *D3Q27* a LBM equilibrium can be derived using the following strategy:\n", "\n", "- calculate all moments or cumulants up to second order of the continuous Maxwell-Boltzmann distribution\n", "- for full stencils there are as many moments/cumulants as stencil directions, so we can determine the pdf values from them" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we obtain the continuous Maxwellian equilibrium as *sympy* expression. We fix the speed of sound to $\\frac{1}{3}$" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\frac{3 \\rho e^{- \\frac{3 \\left(- u_{0} + v_{0}\\right)^{2}}{2} - \\frac{3 \\left(- u_{1} + v_{1}\\right)^{2}}{2}}}{2 \\pi}$" ], "text/plain": [ " 2 2\n", " 3⋅(-u₀ + v₀) 3⋅(-u₁ + v₁) \n", " - ───────────── - ─────────────\n", " 2 2 \n", "3⋅ρ⋅ℯ \n", "────────────────────────────────────\n", " 2⋅π " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from lbmpy.maxwellian_equilibrium import continuous_maxwellian_equilibrium, discrete_maxwellian_equilibrium\n", "\n", "dim = len(stencil[0])\n", "maxwellian = continuous_maxwellian_equilibrium(dim=dim, c_s_sq=sp.Rational(1,3))\n", "maxwellian" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we get all moment exponent tuples up to order 2 and calculate these moments of the continuous Maxwellian equilibrium:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left( \\left( 0, \\ 0\\right), \\ \\left( 0, \\ 1\\right), \\ \\left( 0, \\ 2\\right), \\ \\left( 1, \\ 0\\right), \\ \\left( 1, \\ 1\\right), \\ \\left( 1, \\ 2\\right), \\ \\left( 2, \\ 0\\right), \\ \\left( 2, \\ 1\\right), \\ \\left( 2, \\ 2\\right)\\right)$" ], "text/plain": [ "((0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2))" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "moments = moments_up_to_component_order(2, dim=dim)\n", "moments" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ \\rho, \\ \\rho u_{1}, \\ \\frac{\\rho \\left(9 u_{1}^{2} + 3\\right)}{9}, \\ \\rho u_{0}, \\ \\rho u_{0} u_{1}, \\ \\frac{\\rho u_{0} \\left(9 u_{1}^{2} + 3\\right)}{9}, \\ \\frac{\\rho \\left(9 u_{0}^{2} + 3\\right)}{9}, \\ \\frac{\\rho u_{1} \\left(9 u_{0}^{2} + 3\\right)}{9}, \\ \\frac{\\rho \\left(9 u_{0}^{2} + 3\\right) \\left(9 u_{1}^{2} + 3\\right)}{81}\\right]$" ], "text/plain": [ "⎡ ⎛ 2 ⎞ ⎛ 2 ⎞ ⎛ 2 ⎞ \n", "⎢ ρ⋅⎝9⋅u₁ + 3⎠ ρ⋅u₀⋅⎝9⋅u₁ + 3⎠ ρ⋅⎝9⋅u₀ + 3⎠ ρ⋅u₁⋅\n", "⎢ρ, ρ⋅u₁, ─────────────, ρ⋅u₀, ρ⋅u₀⋅u₁, ────────────────, ─────────────, ─────\n", "⎣ 9 9 9 \n", "\n", "⎛ 2 ⎞ ⎛ 2 ⎞ ⎛ 2 ⎞⎤\n", "⎝9⋅u₀ + 3⎠ ρ⋅⎝9⋅u₀ + 3⎠⋅⎝9⋅u₁ + 3⎠⎥\n", "───────────, ─────────────────────────⎥\n", " 9 81 ⎦" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cont_eq_moments = [continuous_moment(maxwellian, m, sp.symbols(\"v_:2\")[:dim]) for m in moments]\n", "cont_eq_moments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To obtain the same equilibrium as in the LBM literature, we have to drop all terms that have order 3 or higher:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxIAAAA0CAYAAAAe2Q59AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAToElEQVR4Ae2d77HVthbFL3duAZBUEOjgkVSQSweQVADpgAyf4FuGdECogEAH0MEL6eAlFfCnA95aPpKxfWxLsiVLlpdmfGzLsrT3b2vbkmXr3Pjy5cuFggiIgAiIgAiIgAiIgAjEJvDs2bObyPOJyfe2WT9E/OfYZZWU31H0vjKKnrGv3cBnCitCBERABERABERABEQgNoHnaFP+YjPF9gtsv8dyx8ZVuq5K76n+wqUx5iesu8vzSo0qtURABERABERABERABLYj8AiN0OtOcWxj3kbcfzpxNW7WpvdrGKnbV+D26ytjuXsw6LsarSidREAEREAEREAEREAEshHgaMRf2UrPV3BVeqOfcK+LEvuPsP/AdiS6x7QtAiIgAiIgAiIgAiIgAqsJoMH5xyATNrD/Qfzfg/iqdo+iN19tUhABERABERABERABERCBpATQuObrTPex3E1aUGGZ16y3OhKFVTaJIwIiIAIiIAIiIAK1EUBjmjM28fuIu9iuesamru1q11uvNnWtrW0REAEREAEREAEREIGoBExj+lesm/fszf4F1v9ELaiwzIyeVeutjkRhlU7iiIAIiIAIiIAIiEAtBExjmlO+skFtZ2ridxK/1qLjmB5H0VsdiTHrKy6YABzmGic9wMLhSg5f8oJR9ZMG6KggAsURmPNFHOMfQ3GmDc7f/h77vY8gsc/p/ar/oyjoWGSYs12RAkuohsCc3XBslz4XWSf+ZwQ5cN0GlMHORFHhqHrTCHO6zxlJHYk5OjrmRQCVj+883sS6uSiYysgLxi2vDJRIBEQgCgEPX3yCNOzk82PHl1jajgTi2MG4jzUfCChsTADcdR3dmHmM4jzstjufi60T8ttFW+CoetMPPHSfdBd1JCbR6IAPAVQ+NkjY+Oj+QyXni2bH4hqL/p/EB6TSiMBKAi5fRPYfsfzXFMP3lLnfDYw7m44R+bKBy/ABy7fYr/p1hEbTjX9ctsNxXUc3tolPcS67IY+lPsen9z9h+QVlbDq7USqdfHjmTHNUvcncpTuOz15/NGtTzppbR9l8qmkbGlYjvtrEwIuhggiIwDYEXL7IedvfGFHYSOE7y93A1xNfdSOQnqMUH7DmKMbv2H6L9dtuGm1HIeCyXZRClEl0Ai67LfE5fkNAv+P9M8c9NLpO0amnyfCoepOmS/dZ4hqRmMVTxkHcuHkxeWKksY307O8xQy42PCjbn0Y2u2I8w9nTzVO0fkVgnwT27IuQ/TOpd/y2+1oTryv05eGTJz4k+BFLE3DuOyzsTNzGsqtvoCCvrqPWkInWpTJOoS50dd7/kCbY53AO75t/Y83R/k1DKp2oBPK2DxyLG9lMrDevO1lGl3wqj4/urnzUkXARKuP4cxi7/SgJ23ySyG8Quq8T5ZCU71LzgtdcLDsC/IxtPonZVUOjI782RWCKQA2+SL+lf3b9tmm0IK7t/GPbdi6Gfszz+NR0GD/FrJT4GmxXCsspOUplPCXvmviQ+5+Xz60RJtK5SXTCtcSObHJU8wL711j4QKKZCjaS7GuySaU3r5P2wSo7FCWGEN1H5b8cjVVkaQQe0fE6QrFnzyeCdhq1zqFNNykTv4dog5GJcrFyKohAbQRq8EV2ENoOgzEQb+jNaAR8mDrypjd14/uIY9+Y8/a0qsF2pfMulXEKbiH3P1+fSyFnSJ6pdGKbpR3txPWF2+xMkEsJIYne0I8PWtl5KvmhS4juo7a6HI1VZGkEOBrRa7DnFhDOwUYGLwJtg8LEcfpIfiA2bKjkFlnli0AMAjX4Yu+mBl9lx/97LNZn7yDu8wws+vxUJ2PmtOyHarBddogOAYpj7JB30WFzrwu5/631uUVyhpyUSifkS068XvQYYJ/XGF57soZUemdVyrPwBbqP5nw1GqvIogjA2O27zEYwXqz5aoK98eeQl71YBn6E+fi02bxq9SCzXEYUrUQgPoFKfJGzLr2ELnxKyPeVeYPnzDB8LYW+/AoLw1RnYqxRcDqj4N9KbFcw4eaVlRLvVSmYhd7/fH0uhay+eabSideLsVDKyGYqvcd0Li0uVPdR+a9GYxVZLAHcDNmD5/vMm04JNwKkmSoS8rAR0rz3OJJGUSJQLYG9+iLkZgdh7NXDXhx926TlE8XhQ4vh/q7svFfb7QlyQYxTYAu6/xk/6vmXEWosLoW8PnlurVMpI5tb6+1ji63SBOk+JdTl1AHFl0cAFyPe0PkU8a65MOUUkj3Z9p3HnIKobBHYmsCBfPE3sLVPrS6gN7ffYD18TWFrEywu70C2W8xo7YmFMV6rztj5Nd7/UulU+shmKr3H6k1pcVF0vypNK8kzTsBcmPkaEXuQF2af66AbOtKz4vBD7eEQ9HjBI7E4l0OV7NTYP7caSaUoEaiTAOo/6/5qXyQd5LXKH1P7IvL/HQtfebKvQXGmuIeUfY8BekSxHfJZZTeyQx5VXkdjMU5Vv9baLrXdDD++vmzrWON7iE828p9SJ+SdbGQTeVtGi9ozKfVOVX+Z71q9TR7Rrj9XKZVV3nEIoNLw5scpX9l4sR8n8UKz5B9mWXm4rAn8MJNBIxInDvo9CIHIvkhqa/0xuS9C5yXXmeJqRGTbrbUb+SS33dZGiMw4lfhrbZfUbmDIh4Nb+1xSnaCPHdlsXomEjuwAxBjZLNqWqSow8l2rN0WLZnN1JBJaOmLW/M8IVhyu2wBnZGciR+AMUvdQ/ucchatMEchIQL6YEf7KomW7lQA9Ti+NsYfIwUlqvP8l1QlthVJHNlPrzYfAm44uBdTmaLoHdSRML5IfB7EBaYeIg16t8VVyriwcY6Oaf3DCYfb32O8Na2GfU5Bm/efnmPIjr1vQp5gAeWj/7KMRMRnngLu1/CjvUH7jY9NQJkgvX/QBGylNTB+R7caNsjVjlFf8dWic1CkW8hdx/5uTMfTYFjqhjK1HWZwYUuuN/HOMLjn1ZoKYul96lXgqlO/pcWpP/kcAK4T9d2XfLLzTIX9XWU+Qhu8LvsXCtG1APDsY97Gms2cJe5c/C7TAQvfOOJP88pvzelY0k3NxjxOTyUeOAxiaZmIsnztULZOytRPwGpHAxeY+QLBxzhEAGzgschNx11iiPZ12lYUyOfew/ciXHx5zvxua6ay6EdxGvnwK8hMWdoSSTZ2aSn7qoHAikIox8rWd0g8o6VvsJ3mCkkN+lMlvaw7nN3M2XcpEfpieQCofSS/5fkrIwXipz+G8Te7f+7GeJBWBcgh4dSQg7kssw0YVX21ioIPHDK6y/sJFxc5hzo4BP+Lphmvs9OLMxYvxDLHlPeX69Te6/F+z9t+Czhwxsjp3T+TczRc4PvZ9Bf/O3TmvNdJ86WY4t420N+aOLzwWnTHk5EjWB6ybmTGwZgf5LZZmlqyFck6dlkP+7h8YHsJvYDuXTYOZTBnUFQ9Zkvgj8vX2RZeMS46j/BT+TVGi+8hC/ZLYjbKE2C4R5xyMg30OuvMhiL2Xed+/cV4S24XYbUmdc52Toi6UrtNRbZlKb9axEJsj7ex1/sqj0tKB6bx/DtJax7aN+sHh8F0I6ywLaT4z507a9vsIxLFzQ1l7IySIp4xsJHNkJVnoyDTJCmmC5afAOI96eY+oIP1YR4H5kAGnf20azMw7NODc2UoVml9IepSdpI5ABo5G/GhlQTnvsLAjQVbRvgNCXlnkR7nB9Q7n7N1vZm26hAnrB84L8kVzThJ/hCzZfNH6Suw1dErlI7Rd0Kgj0iexm6kT2WyXizHK3ew6lMp2yDeb3WL7ms2vdJ2OastUese+/lzaijSz5hNqNsKbC0An3c/Y5tOFaI0s5BdSFtOy/K5cTUcBcdE6Nx19fTaTyA99+ESGT1fZgOFy5BCdMfjaDuiwLrNukX3MkFv+Q/hNoE29mcgXY7rCZF7RfYQlwXZ2hIrTaPNBCh8UvJ2Uou4DuRl7+1zdZpB2IrB/Aj4dCT4d4vcQbcDFl40rLrwYtAHxaxu53mWhUDb+hh0GvobSjEZAlkeh8oSmbxX/upFEfsjFjhxvfMOG7teSd7JVKOOpevsRWL/pot27/NDlKH7jbdMQJjX5Yrdex9wu1EeoIkcj2tFqyMnta6zpE7sKFTCOfh3alQEjChuhLkSURlkdkcDlnNKmgtLh28aUieP0qvxouW3Im/hPWHMe6eBgzvcqy2Tea1TjfHZsvsdiZbqDOD5R9gqm/N3K76Vk5kQ7ZMx63zZI9y6/Mf/R/aZn0xRMMrtZ1uJL9RHIxXsLfblX/7HPewTvHbsJlTDu2QE6rbp/78Z4kQVdWxcii6PsDkrgyqE3n7AzcCj48Wmz+e8GTgNrG+xNNPY/Y+HFgTM5cfFuxJt8vcsy6fnx90uUw6dMnGWHZXM2pueIo6yvsHgHyotlt/J7K5oxYcGMp+pqr+Gxd/mN6Y/iN142TcEko4tlL7pgH6Evj4WzUcexRCXFVcI46nWoJPtsKUuEurCluCqrUgKujkQzlSoqKxvYzo9zkY6jAEs/aA4tiw2F3qtVxkZjcV7m27v8XkpGTARefMpnP0bkjZr77Mi1rw8MiyuRMWSy39pQ/l4HebhfgfyH8JtAm0ZnMqz3Je2DTbDfhshfoo/MyD82QjWTPP6hJfbYO2PIL59z3Ct9a9rKuuBbzFm6JfX2LJMdRtSoN3TiDGc28JoY9IfOro4ERwne2Nw91z9AqNBzmPWSsjxFCkq2d/ldyvICzmVVgI1vIgOOVNmOxAW22YnkB4wcsZqrAyUy/g2ysw42HQnI39RHrNmJHoa9yz/UJ8a+mCyjGMUffYtGfV7jt77FMF1p9WHqmkceYz7u0jWK3Vbao3bGLhssPR7Fdr6Fr7SxbzFL64Jv/r10G+nUK3Nip0ZbTqjai46it7EjP0d4ge1msABrvmb4L9Z3sXhdGy97onV2kMFN7PLJlf0Tq87R8U1zDl8zCgpLygopAPlzCk++AvUES7ONffuqVpuVkaM4+VsBI2xAR05r2k6ZuyJLzoDCD9q7I1B2JIKcR0OpjCEXnYh/QmdfjePI1sOhEnuXf6jP3D503bXf+Np0jkHqY5Axlj/6irrIb30zZzroxHtHUddRyMQbIm++vKcNw3AUcnj8bD+i3RbZ4wiMLXTo6nUdsuld64i2cxVljy+ysT3ZtV5aF1z5Oo4n1clRdnu4Nlu2ijk2IurN/5L5Bvm1bxxhm9dDTrDUHaWYlehq5ig/XGawjcPT3vwvG5atQPNJe0eXlNXLYG4HMvEmwncyXaFI+V1CZzrOytbrFYMzvzNxiVMsY8i+6zriKb/LPu1x5Ld7v4nNpIWz342lfhuicak+HjLqGKLvmrRL7XEYxgHXoTV2SHnuUhv7yrS0LvjmP5YutU5jZZYQV5vefBBMnYaBcY/he17fO891JNgjuYeM2Fj0Cki7pBPBvIPL8hIoMFGp8kMu+04zX7exT2faf2EOVDNKcsjEDuatbmaIs6MTkz3ZUhl39Zjb3rv8c7otPXYkJtC1OF8MsRvkX+S3gWUUeR9gPcXCEUc7Qccd6HU26hii69q0S+1BXRaWnfReS7nIlwvk46hUdsYLOUU7DSyS+hyZRxPWM6PUOnmKsXmymvSGLhw5Zvh4WvV+7YgyH/I7BxNuPH369H9IyKlcnYl7xWhHBDoEUH/YyWEHgjeRGK9OdXLXpgiIQAoC8tsUVJfnKXssZ7eXM2u0cY06+dSnvesN+b9AT/5PGWc8bQP2+SCAr/+zbzDZnsMxvuL2YG5Eos1UGyIwRQAViR/msBPxAxYOh/GJl4IIiEDBBOS3ZRlH9ijLHimkqdHGNerkY/uK9H4Dfdl+Gwa26xjsqMVpb+JXIxITYBQdTgDOxVeb+GeFD7DNCqogAiJQOAH5bVkGkj3KskcKaWq0cY06+dh+z3pDdnYU/sXCNlvzVhLW7ERwwhy252bbckjbjEhcIqGCCEQhgErFzgO/qXmNba+ebJSClYkIiMBiAvLbxeiSnCh7JMFaVKY12rhGnXwqzZ71huxsr32HhR0GflzNV5r4HaCdrdVr+le92gRiCuEEUOGaoS+sh1/889UmDpVx0ahEOFqdIQLJCMhvk6FdlLHssQjbrk6q0cY16uRTqWrUGzqxM9H+Hxg5II4dCgavjoRGJE6w9BtO4D1OeY8Kp5GHcHY6QwRyEZDf5iI/Xq7sMc6lptgabVyjTj517ih680Ex/+OInQxn0IiEE5ESTBBgBRuraJwujEGzgJ046FcESiIgvy3JGqdXQXUdLcsmsaWp0edq1MnH7lXpjY4Cv4Pgn9J9ZzsN5uEw3yjpzeQ0B0cdiTk6OjZH4OzP20ylvImTOGUYHU5BBESgLALyW9mjLAL1S1Ojz9Wok09NrE1vfg8x/B8JTpjDNtzwtfVJPpq1aRKNDrgIoKKx1/qgk46Vkv8jodGIDhRtikBJBOS3JVmjeR9Z19GyTBJdmhp9rkadfAxfm97Qx34PwYfADJwsx6sNh3TNrE3qSJzA6VcEREAEREAEREAEREAERMCDgO1I6GNrD1hKIgIiIAIiIAIiIAIiIAIi0CegjkSfh/ZEQAREQAREQAREQAREQAQ8CKgj4QFJSURABERABERABERABERABPoE7KxNt/Guk/3QokmBfc2602elPREQAREQAREQAREQARE4HIFhPwEAmn6DHZF4gYhPncV+xX04UFJYBERABERABERABERABESgR4BTw571Ff4PoTATSgmmgKIAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle \\left[ \\rho, \\ \\rho u_{1}, \\ \\rho u_{1}^{2} + \\frac{\\rho}{3}, \\ \\rho u_{0}, \\ \\rho u_{0} u_{1}, \\ \\rho u_{0} u_{1}^{2} + \\frac{\\rho u_{0}}{3}, \\ \\rho u_{0}^{2} + \\frac{\\rho}{3}, \\ \\rho u_{0}^{2} u_{1} + \\frac{\\rho u_{1}}{3}, \\ \\frac{\\rho u_{0}^{2}}{3} + \\frac{\\rho u_{1}^{2}}{3} + \\frac{\\rho}{9}\\right]$" ], "text/plain": [ "⎡ \n", "⎢ 2 ρ 2 ρ⋅u₀ 2 ρ 2 ρ⋅u\n", "⎢ρ, ρ⋅u₁, ρ⋅u₁ + ─, ρ⋅u₀, ρ⋅u₀⋅u₁, ρ⋅u₀⋅u₁ + ────, ρ⋅u₀ + ─, ρ⋅u₀ ⋅u₁ + ───\n", "⎣ 3 3 3 3 \n", "\n", " 2 2 ⎤\n", "₁ ρ⋅u₀ ρ⋅u₁ ρ⎥\n", "─, ───── + ───── + ─⎥\n", " 3 3 9⎦" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cont_eq_moments = [remove_higher_order_terms(m, order=3, symbols=sp.symbols(\"u_:3\")) \n", " for m in cont_eq_moments]\n", "cont_eq_moments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we take these equilibrium moments and determine pdf values, which would lead to these moment values.\n", "The moment matrix transforms pdfs into moment space. To obtain the equilibrium pdfs we only have to transform the equilibrium moments with the inverse of this matrix:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAADhCAYAAAD/Ec//AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAb1UlEQVR4Ae2dUW7cRraGpQs/G8YEyAKkHVjjFcTage0d+GYHee15C3x3YHsFQbwDJyswrB3MXUCAawRZwf3/nq6ZNs3uU93N6jolfQVQRVaRPP/5qnVEFcnTl6vV6unFxcVnLXPlwz/+8Y+Xcx20QQACEIDAYQQUT/+pI67mjlLf5aOtjv/RunfeLv+7vcE6BCAAAQicRODNzNG3anvh9u2A/FYRmgA8Q4smCEAAAksQUIx9Nz2P2tz0TUCe7je7rYM9xfGrlhut/zm7U6PGnrYjlzJrG117ZrZoiz5d8/2Zuc0r/rq1lf7tK+SvLW5tyfgTbb7X8kXL37XMzoGoffHS03bkTGZto2vPzBZt0adrvj8zt3nFX7eeQ39tQPaV8PrmnkT9pHVfJZ+lyF4325GDmbWNrj0zW7RFn675/szc5hV/3XoO/f/1tUm2IAABCECgFwECci/y2IUABCAwIUBAngBhEwIQgEAvAgTkXuSxCwEIQGBCgIA8AcImBCAAgV4ECMi9yGMXAhCAwIQAAXkChE0IQAACvQgQkHuRxy4EIACBCQEC8gQImxCAAAR6ETgmIH+3Efu3DqJ72o7czaxtdO2Z2aIt+nTN92fmNq/469Ym+i+38iFf69XAndne1OeEQi7PtTi3xZ0W7/9Rfd9kMFL7YqWn7ciJzNpG156ZLdqiT9d8f2Zu84q/bm2hX+f8b1lxts3L6oD8tSy2IAABCEBgCQLbAfmYKYslNHAOCEAAAhCYECAgT4CwCQEIQKAXAQJyL/LYhQAEIDAhQECeAGETAhCAQC8CBORe5LELAQhAYEKAgDwBwiYEIACBXgQIyL3IYxcCEIDAhAABeQKETQhAAAK9CBCQe5HHLgQgAIEJAQLyBAibEIAABHoReHSIYb3i92az//+pvtbyRm07818ccu6afWXrqfZzTo0brf9Zc0yWfbJql66uYxqNzwD60n4ms37mojF3/0PVXh2QBeizOP2s+sMGmBMMfdb2rZZmQVnntp33Wr5o+buWKy1DlOzapa/LmNYOXlZ9mcc1s7Zo3NF+cVEVkAXK2YieqF4HY4PV+p+b7bfavHVbi2I7Ou9Ln1vrP6nyFckQJbN2aes2pjWDl1lf8nHl96XmA7bwPkt9JmrnkB0QnW5zWj6p4bnE+CqWMhaB7GOaXd9Yo43aIQjUBmTnQPaUwbSUqQr3U8YikH1Ms+sba7RROwSBMCBXXv32+PaQIQBnFJl9TLPryzimaLofBMKALDdLsPXc1K7ClMUuMjnbs49pdn05RxVVwxOoCcg1Tpbvl6rZl33GIJB9TLPrG2OUUZmKwCOpebxRVOqpwLm547JPuZLxc8n3rmz+df5djh3yH8BLHXeXHEb2Mc2uL/nw9pE38u9LZ+3flxFzQN5bJNSPt3mfuaBU2srNvb3nGq3TvkvzzWi6I73ZxzS7vojvQ+0f+fcli3ZPWfy1+QCVeu7z9Jsar2Y6yhWy+yljEcg+ptn1jTXaqM1M4I8irnYO2a8r+y25afHV493mr8u0j+3cBLKPaXZ9uUcXdUMSqArICrjv5N0X1S+Kl1r3dMUrLa9L2xnqciOnXJmfweRiJlJpTzSms4Cz69sSnWpct3R5NbO2idRvNh+k9svVavVUKJzT4Fq/BDvngjcB2IloPK/qm3jPtDi3RfMbWLLhqyUXvyzgPwS2aa0f1ec/FmlLZu3SZpZdxrRmwDLrSz6u/L7UfMAW3ufYz4SOcxqDt6ovqwPywto5HQQgAAEIiMB2QK6asoAaBCAAAQi0J0BAbs8YCxCAAASqCBCQqzCxEwQgAIH2BAjI7RljAQIQgEAVAQJyFSZ2ggAEINCeAAG5PWMsQAACEKgi4IDs53l/1LIvoUvVydgJAhCAAAQOJuA0AY7BFw7IV1r8vXgjvv0m2RQIQAACQxPwC2+OweuAPLQniIcABCBwXwgwh3xfRhI/IACB4QmE+ZC3PdQrfs574OJcFtda3qhtZ/4L77hkkS3n3fB7+jdad06NNCWztn2QpLvrmO7T5r4B9PGZjAZxpn/U35fiSiv91QFZApyAyMmEPliUaiem+az6VkuzoLyx8162fNPRKUA9552iZNZWA0j6u4xpjTbvk1Vf5nFHW+2n6/D9zsG2KiBLiLMRPVG9DsZ2Rev+JhFvezL61m0tiu3ovC99bq3/pMpXJClKZm0RIGnvNqaRNvdn1pd53NFW8+k6bp9zsK2dQ3ZAnEuz+UntzyXUV8uUsQhkH9Ps+sYabdQOQaA2IPuxjLnnlMtUhfspYxHIPqbZ9Y012qgdgkAYkCuvfnmGeYjh/pfI7GOaXd9AQ43UwQiEAVn+lGC776kGpizGGvjsY5pd31ijjdphCNQE5Bpnyvdf1ezLPmMQyD6m2fWNMcqoTEXAAfnxRlGppwLn5o7LPuVKxs8lU8YhkH1Ms+sbZ6RROgKB74tIB+S/NhulLn3rWvN5ZapiblqitJWbe18dy0ZOAtnHNLu+nKOKqoEJ/FG0105ZOBvRVTloqy5XyO6njEUg+5hm1zfWaKN2CAK1AdmvK/stuWm5UcPd1hXNtJ/tvASyj2l2fXlHFmXDEqgKyAq47+ThF9Uviqda93TFKy2vS9sZ6nIjp1yZn8FktYnM2r5xItGYfqPNDdn1bYnOPO5o2xqohVebsL1crVZPJdQ5Da71S7BzLlh9DsBORPOnFt/Ee6bFuS3uVDctsuGrJRe/LGAdtmmtH9XnPxbdSmZtERRp7zamkTb3Z9aXedzRVvPpOm6fFmx1TqcxeKv6sjogHyefoyAAAQhAYB+B7YBcNWWx72T0QQACEIDAMgQIyMtw5CwQgAAETiZAQD4ZISeAAAQgsAwBAvIyHDkLBCAAgZMJEJBPRsgJIAABCCxDgIC8DEfOAgEIQOBkAg7Ifp73Ry37ErqcbIgTQAACEIDALAGnCXAMvnBAvtLi78XL+PabZFEgAAEI3GsCfuHNMXgdkO+1pzgHAQhAYBQCzCGPMlLohAAE7j2BR4d4qFf8nMvCxbksrrW8UdvO/BfecanS03bkQ2ZtkfaafvnnfCfOJ3KjdecyOWvpbf8UZ3tq72n7FGY+Nrv2VvqqA7IEOAGRkwl92ABzYprP2r7V0jQo97RtX/eVzNr26Y765JfH970W3+x16lXfazhb6W3/FEd7au9p+xRmPja79nPoqwrIEuJsRE9Ur4PxBt6fm21PRt+6rUXpaTvyJ7O2SHvUL998JfzS+2n9J1W+Sj5b6W3/FEd7au9p+xRmPja79nPoq51D9i/mXJrNT2p/LqG+mmpVetqOfMqsLdJOPwQgkIxAbUD2YxlzzymXqQr3tyo9bUc+ZdYWaacfAhBIRiAMyJVXv02eYe5pOxqnzNoi7fRDAAI5CYQBWbJLsPWc4q7Sasqip+1dvpb2zNqKRmoIQGAgAjUBucad8v1SNfsuvU9P25EvmbVF2umHAATOTOCR7D3e2Cz1VMLc3HHZp1wl+rnkFqWn7cifzNouNlMqv8uJQ/57eanj7iLH73s/7I4bYbgdx01HfV+OdED+a7NR6tK3rgXZj7d5fe4Xu7SVm3vrY5b60dN25ENmbdZufapuIj/o/5YA7L5lUtMCtxpKs/v8UVprpyycjeiqHLRVlytk97cqPW1HPmXWFmmnHwIQSEagNiD7tVm/rTUtvgK72/xlnPYttd3TduRDZm2RdvohAIFkBKoCsgLuO+n+ovpF0a91T1e80vK6tLWoe9qO/MmsLdJ+YH+5OVn+Izrw8JN3723/FAd6au9p+xRmPja79ib6Ller1VM57zwV1wowO+eCNwHYyYU8N+mbeM+0OLdF85tAPW3Lx70ls7a9wis65Zv/A3DxCzD+A+yx9mfko/r8R7pp6W3/FOd6au9p+xRmPja79hb6dE6npnir+rI6IJ8KmuMhAAEIQOBbAtsBuWrK4ttT0AIBCEAAAksTICAvTZTzQQACEDiSAAH5SHAcBgEIQGBpAgTkpYlyPghAAAJHEiAgHwmOwyAAAQgsTYCAvDRRzgcBCEDgSAIOyH6u9Ect+5LlHHl6DoMABCAAgYCAUzA4Bl84IF9p8ffi9XoLS6YpEIAABB4sAb945Ri8DsgPlgKOQwACEMhEgDnkTKOBFghA4EETcD7k6qJX/JzLwsW5LK61vFHbzvwX3nGp0tN25ENmbaNrH5mt2Uu/c8U4J8iN1p0H5mylp+3IyczaIu1R/ym+VQdkGXECIicT+mBBqp1s5rPqWy1Ng7LO3822fd1XMmvbp9t92bVn17eLr3T7d+O9Ft8od9pa36c5S+lpO3Iws7ZIe9S/lG9VUxYy5mxET1Svg7HFad1/7b29nox2W4vS03bkT2Zto2sfnK2/Zcdfh+U7579EY7Fkv2x2sx35kVlbpD3qX8q3qoAsMS+1zKXZ/KT25xLjK4JWpaftyKfM2kbXPjLbiD39EJglUBuQ/VjG3HPKZarC/a1KT9uRT5m1ja59ZLYRe/ohMEsgDMiVV79NnmHuaXuW1lZjZm1bMmdXs2vPrm8WKo0QWIBAGJBlowRbzxnvKq2mLHra3uVrac+srWjcVWfXnl3fLq60Q+AkAjUBucZA+X6pmn2X3qen7ciXzNpG1z4y24g9/Q+UwCP5/Xjje6mnKObmjss+5UrGzyW3KD1tR/5k1ja69q5sN1MmvwviIf/5+amKuwg8/TkJdB7z7wsVB+S/NhulLn3rWkL9GI3X5z6cpa3c3Fsfs9SPnrYjHzJrG117b7a2L4Y3EUf67w+BzmP+RyFZO2XhbERX5aCtulwhu79V6Wk78imzttG1j8w2Yk8/BGYJ1AZkv/rpN46mxVcRd5u/LtO+pbZ72o58yKxtdO0js43Y0w+BWQJVAVkB952O/qL6RTmL1j1d8UrL69LWou5pO/Ins7bRtY/MdsK+3Hws/01Ouptu9rQdOZZZW6Q96j/aN88h15Yb7ehkQs9U+yae6x+0fY4bGT1ty829JbO2vcLVmV17dn07+er3wlf4Ls//VV38qjbfa/mo2hc4zUpP25FTmbVF2qP+JXy7XK1WT2XIyXuudcImN+ciR+iHAAQg8FAJKO46V9Bb1ZdVUxYPFRR+QwACEDgnAQLyOWljCwIQgMAeAgTkPXDoggAEIHBOAgTkc9LGFgQgAIE9BAjIe+DQBQEIQOCcBAjI56SNLQhAAAJ7CDgg+1E3f9XMvoQue05BFwQgAAEInEDAaQIcgy8ckK+0+HvxerxJJLMUCEAAAg+agF8eWn83KVMWD/pzgPMQgEAmAgTkTKOBFghA4EETOCSXxYVe7XuzoeVcFtdanNviLK9b97QdfUIyaxtd+8hszV76nZrAeS1utO48y2crPW2f6mR27a30VQdkCXC+i59VfzBs1c729ln1rZamQVnn72bbvu4rmbXt0+2+7Nqz69vFV7r9u/Fei2+UO22t79OcpfS0faqD2bWfQ1/VlIWEOPnFE9XrYGzwWvdfe2+vJ6Pd1qL0tB35k1nb6NoHZ+tv2fFXOvnO+S/RWCzZL5vdbJ/qR3bt59BXFZAF+qWWuTSbn9T+XEJ9RdCq9LQd+ZRZ2+jaR2YbsacfArMEagOyH8uYe065TFW4v1XpaTvyKbO20bWPzDZiTz8EZgmEAbny6rfJM8w9bc/S2mrMrG1L5uxqdu3Z9c1CpRECCxAIA7JslGDrOeNdpdWURU/bu3wt7Zm1FY276uzas+vbxZV2CJxEoCYg1xj4rmanRvv0tB25lFnb6NpHZhuxp/+BEngkvx9vfC/1FMXc3HHZp1zJ+LnkFqWn7cifzNpG196V7WbK5HdBPOQ/Pz9VcReBv8/9cDt6dL8vRzog/7XZKHXpW9eC7MdovD734Sxt5ebe+pilfvS0HfmQWdvo2nuztX0xvIk40v81Abh9zeOArT/KvrVTFs5GdFUO2qrLFbL7W5WetiOfMmsbXfvIbCP29ENglkBtQParn37jaFp8FXG3+cs47Vtqu6ftyIfM2kbXPjLbiD39EJglUBWQFXDf6egvql+Us2jd0xWvtLwubS3qnrYjfzJrG137yGwn7MvNx/Lf5KS76WZP26c6ll17E32eQ64tN9rRyYSeqfZNPNc/aPscNzJ62pabe0tmbXuFqzO79uz6dvLV74Wv8F2e/6u6+FVtvtfyUbUvcJqVnrZPdSq79tb6Ller1VNBdPKeaxlrcnPu1EHieAhAAAL3lYDirnMFvVV9WTVlcV9B4BcEIACBTAQIyJlGAy0QgMCDJkBAftDDj/MQgEAmAgTkTKOBFghA4EETICA/6OHHeQhAIBMBB+THG0GlzqQPLRCAAATuO4F/57JwQC45LEp9353HPwhAAAKZCBycyyKTeLRAAAIQuJcEmEO+l8OKUxCAwIgECMgjjhqaIQCBe0ngkFwWF3q1782GgnNZXGtxbouzvG7d03Y08pm1RdrdL/1+fd65F2607lzAqUpmfWg77qOSmVuNR630VwdkCXC+i59Vf7Bg1c729ln1rZamQVnn72bbvu4rmbUFuj1+77V80eLUqlda0hRxTasPbcd9TDJzq/HoHPqrArKEOPnFE9XrYGzxWvc3iXj7rZZbt7UostHNduRPZm0V2n0l/NL7yY+fVPkqOU2RprT60HbcxyQztxqPzqG/dg7Zv7hzaTY/qf25hPpqplXpaTvyKbO2SDv9EIBAMgK1Adk5Xf2v7bSUqQr3tyo9bUc+ZdYWaacfAhBIRiAMyJVXv39r4VdP25E/mbVF2umHAARyEggDsmSXYOs5vV2l1ZRFT9u7fC3tmbUVjdQQgMBABGoCco0739Xs1GifnrYjlzJri7TTDwEInJmAA7LngX/UMjdHbDm72t1XrhL9XHKL0tN25E9mbZF2+iEAgTwEfpMUx+ALB+QrLX50rQRXrf6naK60TFXMTUuUtnJz7z8HLrDW03YkP7O2SDv9EIBAKgJ+OMAxeB2Qa5Q5gjtwT0sJ4u5vVXrajnzKrC3STj8EIJCMgK+Qa4pfq/XbXNPir2m/27panPYvsd3TdqQ/s7ZIO/0QgEAyAlUBWQH3nXR/Uf2i6Ne6pyteaXld2lrUPW1H/mTWFmmf9Jebj+U/nkl3983M+tB23McjM7caj5rov1ytVk9l3bkirhVgds4FbwKwkwt5Ttk38Z5pcW6LO9VNS0/bkWOZtVVo9xW+i+ew/AfWY+nPwEf55T/CXYs0pNWHtuM+Gpm51XjUQr/O6fQQb1VfVgfkGrHsAwEIQAAChxHYDshVUxaHnZ69IQABCEDgGAIE5GOocQwEIACBBgQIyA2gckoIQAACxxAgIB9DjWMgAAEINCBAQG4AlVNCAAIQOIaAA/LjzYGlPuY8HAMBCEAAAscR+L4c5oD812aj1KWPGgIQgAAE2hP4o5hgyqKQoIYABCDQmQABufMAYB4CEIBAIUBALiSoIQABCHQm8OgQ+3rFz7ksXJzL4lrLG7XtzH/hHZcqPW1HPmTWNrr27Gylz7lgnHPjRuvO85KmZNYWQXqo2qsDsgA5AZGTCX0wTNVORvNZ9a2WpkFZ5+9m277uK5m17dPtvuzas+qTLn/232v5osVpaa+0pCiZtUWA0F6ZoF6gnI3oiep1MDZYrftqwNvrTPdua1F62o78yaxtdO2Z2fqzr+WlFn/tzi8R63P2Z9YWcUB7ZUAWyJdanJpxWj6p4blA+oqhVelpO/Ips7bRtY/MNmJPPwRmCdTe1HO+XP97Ni1lqsL9rUpP25FPmbWNrn1kthF7+iEwSyAMyJVXv3+bPfuJjT1tR9Izaxtd+8hsI/b0Q2AfgTAg6+ASbD1nvKu0mrLoaXuXr6U9s7aicVedXXt2fbu40g6BkwjUBOQaA+X7pWr2XXqfnrYjXzJrG137yGwj9vQ/UAKP9O+hb9Zd7vF/bu647F6uZPxccovS03bkT2Zto2sfmW3E/t72b6aafpeDh/zH7KdV7npD6aldtv39levvsHRAfqoNP+c7+yWn6vcjPuqehVzAl5t73m+x0tN25ERmbaNrH5ltxP4+93vc5N/NiD721C7b//6S09opi98E+WoGdLlCdn+r0tN25FNmbaNrH5ltxJ5+CMwSqA3IfjXUbyRNi/8a3m3+ukz7ltruaTvyIbO20bWPzDZiTz8EZglUBWQFXM9vfFH9opxF656ueKXldWlrUfe0HfmTWdvo2gdiW24ulv8WI/Tn7M+sLeLwILU/iqhs9ftq2MmEnqn2TTzXP2j7HBPyPW3Lzb0ls7a9wtWZXXtaffrc+wrexS+wuPyqNt9L+ah6fYNm3drhR2ZtEY6Hrv1ytVrtvakXAaQfAhCAAASOJ6A/Qgff1DveGkdCAAIQgEAVgao55KozsRMEIAABCJxEgIB8Ej4OhgAEILAcAQLyciw5EwQgAIGTCBCQT8LHwRCAAASWI0BAXo4lZ4IABCBwEgEC8kn4OBgCEIDAcgQIyMux5EwQgAAETiJAQD4JHwdDAAIQWI4AAXk5lpwJAhCAwEkEDsllcaFX/N5srDmXxbUW57Zokgt56lVP21Mt0+3M2qZap9vZtQ+gz6kHnNfiRlqdDzhNkR60NRqNVmyrA7IEOIn9z6o/2EfVzvb2WfWtlqZBWefvZtu+7iuZte3T7b7s2rPqky5/9t9r8TebOC3tlZYUBW3thuEcbKumLCTEyS+eqF4HY7usdV8NePutt1uVnrYjnzJrG117Zrb+7GvxVw/9KM6/RKzP2Y+2drTPwbYqIMvFl1rm0mx+UvtzCfUVQ6vS03bkU2Zto2sfmW3Enn4IzBKoDcjO+ep/z6alTFWUnLDT/iW2e9qO9GfWNrr2kdlG7OmHwCyBMCBXXv02+baEnrZnaW01Zta2JXN2Nbv27PpmodIIgQUIhAFZNkqw9ZzxrtJqyqKn7V2+lvbM2orGXXV27dn17eJKOwROIlATkGsMfFezU6N9etqOXMqsbXTtI7ON2NP/QAnUBOS5ueOCq1zJ+LnkFqWn7cifzNpG1z4y24g9/RDYSSAMyJrPK1MVc9MSpa3c3Ntp6JiOnrYjvZm1ja59ZLYRe/ohsI9AGJA3B/+m+mrmROUK2f2tSk/bkU+ZtY2ufWS2EXv6ITBLoDYg+9VQv5E0LTdquNu6opn2L7Hd03akP7O20bWPzDZiTz8EZglUBWQF3Hc6+ovqF+UsWvd0xSstr0tbi7qn7cifzNpG1z4Q23Jzsfy3GKE/Zz/a2tFuwvbRAXp9NexkQs9U+yae6x+0fae6delpO/Its7bRtadlq8+9r+Bd/AKLy69q872Uj6p9AdOtoK0d+tZsL1er1VPJd/Ke680Hqp03nBkCEIAABL4ioLjrXEFvVV9WTVl8dTQbEIAABCDQhAABuQlWTgoBCEDgcAIE5MOZcQQEIACBJgQIyE2wclIIQAAChxMgIB/OjCMgAAEINCGw/djbP3WXb2rkg9qcKJwCAQhAAAInElA8/adOcbXrNA7IfnbSX0UzV5rkqJgzRBsEIACBB0CgfFH0rKv/Dwa+71bTrHEnAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\\\\0 & 1 & -1 & 0 & 0 & 1 & 1 & -1 & -1\\\\0 & 1 & 1 & 0 & 0 & 1 & 1 & 1 & 1\\\\0 & 0 & 0 & -1 & 1 & -1 & 1 & -1 & 1\\\\0 & 0 & 0 & 0 & 0 & -1 & 1 & 1 & -1\\\\0 & 0 & 0 & 0 & 0 & -1 & 1 & -1 & 1\\\\0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 & 1\\\\0 & 0 & 0 & 0 & 0 & 1 & 1 & -1 & -1\\\\0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1\\end{matrix}\\right]$" ], "text/plain": [ "⎡1 1 1 1 1 1 1 1 1 ⎤\n", "⎢ ⎥\n", "⎢0 1 -1 0 0 1 1 -1 -1⎥\n", "⎢ ⎥\n", "⎢0 1 1 0 0 1 1 1 1 ⎥\n", "⎢ ⎥\n", "⎢0 0 0 -1 1 -1 1 -1 1 ⎥\n", "⎢ ⎥\n", "⎢0 0 0 0 0 -1 1 1 -1⎥\n", "⎢ ⎥\n", "⎢0 0 0 0 0 -1 1 -1 1 ⎥\n", "⎢ ⎥\n", "⎢0 0 0 1 1 1 1 1 1 ⎥\n", "⎢ ⎥\n", "⎢0 0 0 0 0 1 1 -1 -1⎥\n", "⎢ ⎥\n", "⎣0 0 0 0 0 1 1 1 1 ⎦" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M = moment_matrix(moments, stencil)\n", "M" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}- \\frac{2 \\rho u_{0}^{2}}{3} - \\frac{2 \\rho u_{1}^{2}}{3} + \\frac{4 \\rho}{9}\\\\- \\frac{\\rho u_{0}^{2} u_{1}}{2} - \\frac{\\rho u_{0}^{2}}{6} + \\frac{\\rho u_{1}^{2}}{3} + \\frac{\\rho u_{1}}{3} + \\frac{\\rho}{9}\\\\\\frac{\\rho u_{0}^{2} u_{1}}{2} - \\frac{\\rho u_{0}^{2}}{6} + \\frac{\\rho u_{1}^{2}}{3} - \\frac{\\rho u_{1}}{3} + \\frac{\\rho}{9}\\\\\\frac{\\rho u_{0}^{2}}{3} + \\frac{\\rho u_{0} u_{1}^{2}}{2} - \\frac{\\rho u_{0}}{3} - \\frac{\\rho u_{1}^{2}}{6} + \\frac{\\rho}{9}\\\\\\frac{\\rho u_{0}^{2}}{3} - \\frac{\\rho u_{0} u_{1}^{2}}{2} + \\frac{\\rho u_{0}}{3} - \\frac{\\rho u_{1}^{2}}{6} + \\frac{\\rho}{9}\\\\\\frac{\\rho u_{0}^{2} u_{1}}{4} + \\frac{\\rho u_{0}^{2}}{12} - \\frac{\\rho u_{0} u_{1}^{2}}{4} - \\frac{\\rho u_{0} u_{1}}{4} - \\frac{\\rho u_{0}}{12} + \\frac{\\rho u_{1}^{2}}{12} + \\frac{\\rho u_{1}}{12} + \\frac{\\rho}{36}\\\\\\frac{\\rho u_{0}^{2} u_{1}}{4} + \\frac{\\rho u_{0}^{2}}{12} + \\frac{\\rho u_{0} u_{1}^{2}}{4} + \\frac{\\rho u_{0} u_{1}}{4} + \\frac{\\rho u_{0}}{12} + \\frac{\\rho u_{1}^{2}}{12} + \\frac{\\rho u_{1}}{12} + \\frac{\\rho}{36}\\\\- \\frac{\\rho u_{0}^{2} u_{1}}{4} + \\frac{\\rho u_{0}^{2}}{12} - \\frac{\\rho u_{0} u_{1}^{2}}{4} + \\frac{\\rho u_{0} u_{1}}{4} - \\frac{\\rho u_{0}}{12} + \\frac{\\rho u_{1}^{2}}{12} - \\frac{\\rho u_{1}}{12} + \\frac{\\rho}{36}\\\\- \\frac{\\rho u_{0}^{2} u_{1}}{4} + \\frac{\\rho u_{0}^{2}}{12} + \\frac{\\rho u_{0} u_{1}^{2}}{4} - \\frac{\\rho u_{0} u_{1}}{4} + \\frac{\\rho u_{0}}{12} + \\frac{\\rho u_{1}^{2}}{12} - \\frac{\\rho u_{1}}{12} + \\frac{\\rho}{36}\\end{matrix}\\right]$" ], "text/plain": [ "⎡ 2 2 ⎤\n", "⎢ 2⋅ρ⋅u₀ 2⋅ρ⋅u₁ 4⋅ρ ⎥\n", "⎢ - ─────── - ─────── + ─── ⎥\n", "⎢ 3 3 9 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢ - ──────── - ───── + ───── + ──── + ─ ⎥\n", "⎢ 2 6 3 3 9 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢ ──────── - ───── + ───── - ──── + ─ ⎥\n", "⎢ 2 6 3 3 9 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ ⎥\n", "⎢ ───── + ──────── - ──── - ───── + ─ ⎥\n", "⎢ 3 2 3 6 9 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ ⎥\n", "⎢ ───── - ──────── + ──── - ───── + ─ ⎥\n", "⎢ 3 2 3 6 9 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢ ──────── + ───── - ──────── - ─────── - ──── + ───── + ──── + ── ⎥\n", "⎢ 4 12 4 4 12 12 12 36 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢ ──────── + ───── + ──────── + ─────── + ──── + ───── + ──── + ── ⎥\n", "⎢ 4 12 4 4 12 12 12 36 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢- ──────── + ───── - ──────── + ─────── - ──── + ───── - ──── + ──⎥\n", "⎢ 4 12 4 4 12 12 12 36⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢- ──────── + ───── + ──────── - ─────── + ──── + ───── - ──── + ──⎥\n", "⎣ 4 12 4 4 12 12 12 36⎦" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "derived_eq = M.inv() * sp.Matrix(cont_eq_moments)\n", "derived_eq" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is the same as the standard discrete equilibrium found in LBM literature." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}- \\frac{2 \\rho u_{0}^{2}}{3} - \\frac{2 \\rho u_{1}^{2}}{3} + \\frac{4 \\rho}{9}\\\\- \\frac{\\rho u_{0}^{2} u_{1}}{2} - \\frac{\\rho u_{0}^{2}}{6} + \\frac{\\rho u_{1}^{2}}{3} + \\frac{\\rho u_{1}}{3} + \\frac{\\rho}{9}\\\\\\frac{\\rho u_{0}^{2} u_{1}}{2} - \\frac{\\rho u_{0}^{2}}{6} + \\frac{\\rho u_{1}^{2}}{3} - \\frac{\\rho u_{1}}{3} + \\frac{\\rho}{9}\\\\\\frac{\\rho u_{0}^{2}}{3} + \\frac{\\rho u_{0} u_{1}^{2}}{2} - \\frac{\\rho u_{0}}{3} - \\frac{\\rho u_{1}^{2}}{6} + \\frac{\\rho}{9}\\\\\\frac{\\rho u_{0}^{2}}{3} - \\frac{\\rho u_{0} u_{1}^{2}}{2} + \\frac{\\rho u_{0}}{3} - \\frac{\\rho u_{1}^{2}}{6} + \\frac{\\rho}{9}\\\\\\frac{\\rho u_{0}^{2} u_{1}}{4} + \\frac{\\rho u_{0}^{2}}{12} - \\frac{\\rho u_{0} u_{1}^{2}}{4} - \\frac{\\rho u_{0} u_{1}}{4} - \\frac{\\rho u_{0}}{12} + \\frac{\\rho u_{1}^{2}}{12} + \\frac{\\rho u_{1}}{12} + \\frac{\\rho}{36}\\\\\\frac{\\rho u_{0}^{2} u_{1}}{4} + \\frac{\\rho u_{0}^{2}}{12} + \\frac{\\rho u_{0} u_{1}^{2}}{4} + \\frac{\\rho u_{0} u_{1}}{4} + \\frac{\\rho u_{0}}{12} + \\frac{\\rho u_{1}^{2}}{12} + \\frac{\\rho u_{1}}{12} + \\frac{\\rho}{36}\\\\- \\frac{\\rho u_{0}^{2} u_{1}}{4} + \\frac{\\rho u_{0}^{2}}{12} - \\frac{\\rho u_{0} u_{1}^{2}}{4} + \\frac{\\rho u_{0} u_{1}}{4} - \\frac{\\rho u_{0}}{12} + \\frac{\\rho u_{1}^{2}}{12} - \\frac{\\rho u_{1}}{12} + \\frac{\\rho}{36}\\\\- \\frac{\\rho u_{0}^{2} u_{1}}{4} + \\frac{\\rho u_{0}^{2}}{12} + \\frac{\\rho u_{0} u_{1}^{2}}{4} - \\frac{\\rho u_{0} u_{1}}{4} + \\frac{\\rho u_{0}}{12} + \\frac{\\rho u_{1}^{2}}{12} - \\frac{\\rho u_{1}}{12} + \\frac{\\rho}{36}\\end{matrix}\\right]$" ], "text/plain": [ "⎡ 2 2 ⎤\n", "⎢ 2⋅ρ⋅u₀ 2⋅ρ⋅u₁ 4⋅ρ ⎥\n", "⎢ - ─────── - ─────── + ─── ⎥\n", "⎢ 3 3 9 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢ - ──────── - ───── + ───── + ──── + ─ ⎥\n", "⎢ 2 6 3 3 9 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢ ──────── - ───── + ───── - ──── + ─ ⎥\n", "⎢ 2 6 3 3 9 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ ⎥\n", "⎢ ───── + ──────── - ──── - ───── + ─ ⎥\n", "⎢ 3 2 3 6 9 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ ⎥\n", "⎢ ───── - ──────── + ──── - ───── + ─ ⎥\n", "⎢ 3 2 3 6 9 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢ ──────── + ───── - ──────── - ─────── - ──── + ───── + ──── + ── ⎥\n", "⎢ 4 12 4 4 12 12 12 36 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢ ──────── + ───── + ──────── + ─────── + ──── + ───── + ──── + ── ⎥\n", "⎢ 4 12 4 4 12 12 12 36 ⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢- ──────── + ───── - ──────── + ─────── - ──── + ───── - ──── + ──⎥\n", "⎢ 4 12 4 4 12 12 12 36⎥\n", "⎢ ⎥\n", "⎢ 2 2 2 2 ⎥\n", "⎢ ρ⋅u₀ ⋅u₁ ρ⋅u₀ ρ⋅u₀⋅u₁ ρ⋅u₀⋅u₁ ρ⋅u₀ ρ⋅u₁ ρ⋅u₁ ρ ⎥\n", "⎢- ──────── + ───── + ──────── - ─────── + ──── + ───── - ──── + ──⎥\n", "⎣ 4 12 4 4 12 12 12 36⎦" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "literature_version = sp.Matrix(discrete_maxwellian_equilibrium(stencil, c_s_sq=sp.Rational(1,3), order=3))\n", "literature_version" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3) Reduced Stencils\n", "\n", "This method for deriving a discrete equilibrium works well for \"full stencils\" i.e. with $3^d$ directions, where $d$ is the dimension." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pytest\n", "pytest.importorskip('ipy_table')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matched moments 13 - non matched moments 2 - total 15\n" ] }, { "data": { "text/html": [ "
order   
0(0, 0)  x 1  
1(1, 0)  x 2  
2(1, 1)  x 1(2, 0)  x 2 
3(2, 1)  x 2(3, 0)  x 2 
4(2, 2)  x 1(3, 1)  x 2(4, 0)  x 2
" ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "moment_equality_table(LBStencil(Stencil.D2Q9), truncate_order=2)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matched moments 26 - non matched moments 9 - total 35\n" ] }, { "data": { "text/html": [ "
order    
0(0, 0, 0)  x 1   
1(1, 0, 0)  x 3   
2(1, 1, 0)  x 3(2, 0, 0)  x 3  
3(1, 1, 1)  x 1(2, 1, 0)  x 6(3, 0, 0)  x 3 
4(2, 1, 1)  x 3(2, 2, 0)  x 3(3, 1, 0)  x 6(4, 0, 0)  x 3
" ], "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "moment_equality_table(LBStencil(Stencil.D3Q19), truncate_order=2)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matched moments 26 - non matched moments 9 - total 35\n" ] }, { "data": { "text/html": [ "
order    
0(0, 0, 0)  x 1   
1(1, 0, 0)  x 3   
2(1, 1, 0)  x 3(2, 0, 0)  x 3  
3(1, 1, 1)  x 1(2, 1, 0)  x 6(3, 0, 0)  x 3 
4(2, 1, 1)  x 3(2, 2, 0)  x 3(3, 1, 0)  x 6(4, 0, 0)  x 3
" ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "moment_equality_table(LBStencil(Stencil.D3Q19), truncate_order=2)" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.2" } }, "nbformat": 4, "nbformat_minor": 1 }