{ "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 get_stencil" ] }, { "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 = get_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", "ps.stencil.plot(stencil)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAAASCAYAAABb2Wt8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFkklEQVR4Ae2cj1HbMBTGSS8D5NIJChvQsgHdAMoEwAZwnYCDDWgn4GAD6AQFNmg2ALIB/X5CyhlH8p9Eks2d392L/lr6/OlJerINo9fX140UMhqNJmr3XPpPukVcfc0U9lYGzHmGZuA5Pc9tOP6UEM5vtT2XMvGPpNvSvsuAOc8IDTyn57k5x3gCsVX3hxeAi7Fr47sJ+thT2yex2rU4k2KOhdW1kwOz+hh4/mD23NYuxroghTD5WVzubOMuTNFXrDYHzLGYrG5n4LmanxilrThOdRzY0Z30+vzvYXrA7CElQdbAcwJSS0224nhcunitpB5GcPb/Kv0hfVb6kgblERwT9lEGzHlGZeA5Pc8rc+zOlzFD3S5n62jndR82tR/7rJocs+8+1skbeI7/PMs3Hh+N57Z4o3oC6nxDq9EmoWTpOYDKeGX4JOWV4VR6KNJ5g9CpVGEuAlO9W+H9XszrKh7CrHzewvyUnknh1p0PfyneqYQwO1Aqxz4QbGQurnuL2WL9K5zGzvtgxxBXxbHK8NSZe24OnoJ7rAKe5P+RthEm72PgAvMqsFyufjgaPCjfDKxNXyuvclKpHoZhDLnUH7inKj8o5ZOcqZ99T34oy4u5WFn94Hn4cBSrmbjqxuZ0qQ9lhDBPVQZWFLlpwkXXPKv/B2HFKO8UZyMhXbkIdMwzGE+kRoTFRe90D0GbVr3U9uy1C/XLAnAvbG7+YaNm/o2VOVeCc3wsqXoowSrkhEEGWKUI36mvgm4KI99U+YWvvGVeFWZWVwijTiNJwKmv3yrM+7qAB7MshoxvrXTJs/hlMoHVeY/PSuPJVEoPeHaTHbwIExzug5KB55BdgMvxy3O6uXhnw9hI8XaAlWjJS1CnxyUCWHgWoADToXgxF/CwWNUaZaF+jmgVZibUIwOdA0iLPkKYOb5cuXbALY2xuLsm1wlDmK+EkV0fxd7xDPgqtmvOQ3jZFB408Y03q5B65g1eikXgmxrnrBQUAWBn5Q2Cd5cPXpiuIIjZkdWDwS3ffRCzKh4L94nVS8t3+fou0iHM2AMe14fBLHu4cQRafneU14dNLcQxcw2P5VZ4bxWyKRuvZexuJEZoyWBAlzwB1z4DrTjn+DOBCNZz9VOHDTAfCGdfFitDRw1mVvdrZ5CqixdT++ylK56Fjx0UYRIZnpXHbsVxsXh8pE5WqeG5iIVPdA+LGV3Eq/CKW9x/jitwDL8zpTlOz2J7AqxCxS8FSb4TdXoh5SiwJRCsSF1LELPwMYHMtw5dgyz1H8TMoEqLO9K9rt1lwEtt5E6GMLM7IQtbsPg3hdm4rm/FnfyGMC/AWF4nwtz1MQBMQbzCyQKwJZwsrHgAUynHg0nsRYAHJUUDVDIogMI494I18hR4MUOOumdwzbkpD5TGvXgxc7Vwl91/h7/rRcCLuWby9BJzaZT4EM5xXCrKnvRybG15T1wbT0shR5kvUhbg3bUXASaxFHcTYeV2cZPBDyCkL1IeRpSFFWkVYbGpfIUUalQ4ajHrWu4Fb+XcqvEIFGeS1b7VCPW9ar76bIKZ5nnWUuTUxfEIVpHUPIOJY6FvwmefXC14dlxiJ/y5/LqyEs8N8WID77i0i++bl6sE7vvKqsYhAFeOnZPvALxt2XqcQUy50kykFym7rfeaVPkWSy3mYv+6BiPlq8LseMEhacozHtYCo+KkL4v3kiveAjMTiQ+xnG3gHQZtydVLETbF7PpWfWz4yKVzh03xqh7PWBbzD5wSNuzJyCbIWEnsrsgCwFkj+I9DVG9b5QfSJ+lnKZOKj0PerVDKSy5NMTsgtj7nKIwVV4rXQ4TZpA1m1WXiI4zLXFiNG2hyMv60xMzEx52dS8FtvmZTmFXaYAaY6rM486S96TE46v00xat6cIpdwK+bg2wOs/9T1mqsRPf1rwAAAABJRU5ErkJggg==\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": "iVBORw0KGgoAAAANSUhEUgAAAPEAAAASCAYAAACKGzglAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFeUlEQVR4Ae2bgVHbMBSGCccAlE5Q2ICWDcIGtEwAbADXCTjYgHYCDjaADQps0GwAZAP6f0LKKY6eYwcs2yXvTrEsvcifn/SkJzsZvLy8rKRkMBisq/xM6a/SFnnpjnTsrCyZ83RN3+zcN156sQ7zakm3/1bdWAnHPVTaVuq6LJnz9FDf7Nw3XnqxOjMrcTGpAVZhluihzw+LOm89V7t7SsdvbSd833MumQv9+dHt/BHGxZpuMiU4L8596yvDMaXblbIlc56e6Jud+8ZLL9ZitsLpHTXU6f1vYrwumRNGaaCob3buGy9dVot5Le5kbabZ+35V+qH0pPML6rUiH3HsoiyZ8/RK3+zcN156cWHmsKeMj2qPveW77VfjtkNe7b/3nnjJXNgPY+uPbmfd/38/LqZWYnpcs8EmR8nMPlh1vHJ6VOKV04bSgQYKT7BblTLmGEx6N+LdjcvaylvMKuctwE+lUyVsG/ZHv5RvVSzmAKV6xgfCGBnL1q0yW7ye848Y3RjvwhjGaIjF7OuIlPG94IMnsA/0Qf1E1Agr5JXKB5NCZVROaH2vctcx/nxT56VOIT061g3EuD3leQLORJDae4/U7veCvnlqMcdfqKIT9Ntk1rWx1U1g0fG6ii3aZIZV17/XgUF1qzwLAWPlE3WWNM2s9q2xfCUm6opyK2ZzPDfNC0wJMw58J74Hr4f/4Ke7MyuxKso21cwCQeg0Gi4VXeQkpeBhmQTOU/U1y8qYMQw3jE4l6QAzExiTG5MZq/FcaZNZ9j0WIKwhenvSOZFEqWRgLhsXwVlhRVhssLspGXi5tsUMW7Avz6nGsjuL4Erq6TThnPN2FILoS0eFm+AB2KTRoNfSMckcsTDZzB1UkX6ObBkzDvFAR+UAqXENi5nw/zK0A7fSe0zOoclFjxbvpfhYdUmMdSIHfpHYBXtbzEzq93JcF9XqiJ6LYlNO/E2V7BdMUQOsbDzBTq6y5hebqzCZw812pINiC5jMUjoS97FPF97e8XfbylvMjAcinq4xJ3k1Fq6DAb1td1TWlQUpySxefI2o4UbMbLdYVF3kMBVO+xuiQ2ZWYpU5oaOU2Vc6VSOm3qt2858VmPfF2ZXJxhlkDjOzK3sdN6ikSxTBHi6Ef66N3B8Ws8pZxRAcwdlZZawWbLfi7Rc62cTiTQDw88aDRHn2ojJm2ZbwmZAfG2Pfkc7Zjo6KKzGzQPxLLU6nRF86VyKU3lIj8QOYKb2MJyaz+HAA9647I0+VS5nMdIpSvCrcqcEhHVal4QZ1LGZWB2QyFjz/pphd6Pdanf3T4p2AeJuui7cLYTRcJrNYceAtsTIxsgJvKBFerxedmNk+HkA6NYVGGVx7pkaeiiQzN6fL00Fu35AHpfJVksx8W9zF8Dnwt+3ESeY5DtAmc5K30EP8iCnYt1DVymmS2Y/lPdnaRTo6sh34osQEOlzFCZUI1xBmzpB3BXzQiNKzEpvpojAjLCJMFgu9RxTHXGa1zb0QLZz55FZk5XGSuU/VjRtqmpnL8qwhtmnIsyIvIjmY2ValHHZRB1mIWf1aZVzENmSM8Ffbt8pCvFy0IjNjYMqWfvKcRJncBKEQKxfv9ginZ5Lq0CMGd3XK4wjPSqx2M/pNlumalZhjBn2HQcZL8ey8cEgqMUuPCGfC6M8v4nvJla/BjDPwQ5owNojOzLEU9N77WJU3XFf6jN/DcN7GsSqz9HjGMPE/WCUsuOv8oANnxIGJtc0//mvG2Fb9vtKj0mclnIKX+1MzhMoaF7+SzmUOIF6ffQSDjVCEVwwcs0kdZuniyAj3OBarC6NcScaPmsw4LuHgWAlu92siHbNJHV6gpM/EylNeVtJWpCqz9LAp4wL7Bh9kch/9A93U1mZkUDQDAAAAAElFTkSuQmCC\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": "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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": 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": "iVBORw0KGgoAAAANSUhEUgAAAKwAAAASCAYAAADG8TXdAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEZklEQVRoBe2aj1HbMBTGMccAlBGSDaBsQDcIjNBsEK4T9NoNgAl6ZAPYgIYN6Aal2SD9fkLKKbbkP4ljy3d5dy+WJVn+vifp6UlOtlqtjkKSZdmp8n9I36Rj0qr7R9dkJXXMHj5sOLKGvJVdX6uM6j2bZH94+PbK7bjEUA8qW0oZpF+l59LUJVnMtkMfNDinVr/ImAzUhcquahj2wA0jyXgFVTbeFdeLIUlfhertkqc2J9LZLm34z1qcyWIWvjsw+phJS/6h+Xz/nuekB26yV8zDmhkvoz1Ll1xlsNQldcw3MuAiYERseyov60KEQBXjOHAsqfZHZ9xiA/ZSVks6Xg30auqYsefIhgYB+MaLhvLJO3CzljnxLSRjEqteSJkx77pnGWNmT7mmKEPBLBti15C4vUHBQRy4BcwlQ4ZiWOKl1uLLyDvajmGHiJkwBtycwBT6weXZOkPrj71w2/CwMsyRZrWLpYJxq8rxCBiYXW4SUoZZZRzNsWmBF16MY6SlrikIK9hceG5jYGLcbD9803PfpfBhgDDo77kmIFtzc9ht33H7V8pe6j7Tjys3V1XC8z0qP/MLrIFcaMCpAWezlWJfaoyZq8wgOpMWlkLy1P51rn70tgQzg/VObZl3qN6j7ke6jy3P5h0dYa4VbpVww6ZPBvDHDwO/0mZD4AYd4WSDinN5Vhpns1D6U2EZUoH5WKDCQhl5Egz1Fiuvm682WgsJ1FYQMzilDFDDRWlWB0is81xZnaueawWz2plJmUhBG/v5qhfjRj+AB06F4zK/jTpp29bOYYfaaYMbbeA0Xb/h3Ay20CkBBqj88qI6KUkZZhfigNeFAn5epzysxxyrM9xqZcIw60VCWMq4sRK9Sh2v0POd5bXIjVDnlwMOP+lP7kMD9rPyX1zlgVyDmEWSgeHH4nQ+8vvj0u2vOpT3XwrTerBaBHjKmAS52cpTtTmzeqcrnqgXaZmb4RHiduKzs4SpPBgP2xAzy2svmy7hxKsTQ8+VBgeCrc+k586DkOmkghtxOcummZCqy5Ek7Xe+GW6Tm20LEzCxzWZUeYQ/xLTjjQGrDGYzcYPvlchKWWphFmkGCV+KzNLSAyGz4dN7ic/yEtp4UifKTTx4xn+OVQMvS3zu59POvqVNbu8W7HpDyXiEFwM3HxIwO4c0WOFWiVlE8T5sTPJLMc93Inr3hZRTmZDGTlyi3MQpHwK4Qdp5fN4mN7W1LOmQ0bGIT6TMEATX69ImY48/TIytzgybYFZdOK03OdxLXSzblN7WmOu+qAG3G7VJOOHEpbeNz1PiRkgamnhmUnL0g/slnuKsq/SoRXUm0p2PtareU1bO+6WVmFWHgUnsA2an5rmy9vssE8663Ahx1sdZSnNf66isL34NuOFknhxOpek7Mzb5OGCWS11L/6Stmc+IJwimMdJz6Ysa7TwmFJa6mPnrHhNxQ4R546PIRmHPN3W5AVN1/c0bRz/RL2Y90zKvb8iNQUpIRIhAH5rN8n8e9+V8ajNZIwAAAABJRU5ErkJggg==\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": "iVBORw0KGgoAAAANSUhEUgAAAKwAAAASCAYAAADG8TXdAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEZklEQVRoBe2aj1HbMBTGMccAlBGSDaBsQDcIjNBsEK4T9NoNgAl6ZAPYgIYN6Aal2SD9fkLKKbbkP4ljy3d5dy+WJVn+vifp6UlOtlqtjkKSZdmp8n9I36Rj0qr7R9dkJXXMHj5sOLKGvJVdX6uM6j2bZH94+PbK7bjEUA8qW0oZpF+l59LUJVnMtkMfNDinVr/ImAzUhcquahj2wA0jyXgFVTbeFdeLIUlfhertkqc2J9LZLm34z1qcyWIWvjsw+phJS/6h+Xz/nuekB26yV8zDmhkvoz1Ll1xlsNQldcw3MuAiYERseyov60KEQBXjOHAsqfZHZ9xiA/ZSVks6Xg30auqYsefIhgYB+MaLhvLJO3CzljnxLSRjEqteSJkx77pnGWNmT7mmKEPBLBti15C4vUHBQRy4BcwlQ4ZiWOKl1uLLyDvajmGHiJkwBtycwBT6weXZOkPrj71w2/CwMsyRZrWLpYJxq8rxCBiYXW4SUoZZZRzNsWmBF16MY6SlrikIK9hceG5jYGLcbD9803PfpfBhgDDo77kmIFtzc9ht33H7V8pe6j7Tjys3V1XC8z0qP/MLrIFcaMCpAWezlWJfaoyZq8wgOpMWlkLy1P51rn70tgQzg/VObZl3qN6j7ke6jy3P5h0dYa4VbpVww6ZPBvDHDwO/0mZD4AYd4WSDinN5Vhpns1D6U2EZUoH5WKDCQhl5Egz1Fiuvm682WgsJ1FYQMzilDFDDRWlWB0is81xZnaueawWz2plJmUhBG/v5qhfjRj+AB06F4zK/jTpp29bOYYfaaYMbbeA0Xb/h3Ay20CkBBqj88qI6KUkZZhfigNeFAn5epzysxxyrM9xqZcIw60VCWMq4sRK9Sh2v0POd5bXIjVDnlwMOP+lP7kMD9rPyX1zlgVyDmEWSgeHH4nQ+8vvj0u2vOpT3XwrTerBaBHjKmAS52cpTtTmzeqcrnqgXaZmb4RHiduKzs4SpPBgP2xAzy2svmy7hxKsTQ8+VBgeCrc+k586DkOmkghtxOcummZCqy5Ek7Xe+GW6Tm20LEzCxzWZUeYQ/xLTjjQGrDGYzcYPvlchKWWphFmkGCV+KzNLSAyGz4dN7ic/yEtp4UifKTTx4xn+OVQMvS3zu59POvqVNbu8W7HpDyXiEFwM3HxIwO4c0WOFWiVlE8T5sTPJLMc93Inr3hZRTmZDGTlyi3MQpHwK4Qdp5fN4mN7W1LOmQ0bGIT6TMEATX69ImY48/TIytzgybYFZdOK03OdxLXSzblN7WmOu+qAG3G7VJOOHEpbeNz1PiRkgamnhmUnL0g/slnuKsq/SoRXUm0p2PtareU1bO+6WVmFWHgUnsA2an5rmy9vssE8663Ahx1sdZSnNf66isL34NuOFknhxOpek7Mzb5OGCWS11L/6Stmc+IJwimMdJz6Ysa7TwmFJa6mPnrHhNxQ4R546PIRmHPN3W5AVN1/c0bRz/RL2Y90zKvb8iNQUpIRIhAH5rN8n8e9+V8ajNZIwAAAABJRU5ErkJggg==\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": "iVBORw0KGgoAAAANSUhEUgAAAI8AAAAZCAYAAAAIXH3NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE0klEQVRoBe2ai1EbMRCGMZMCIFQQ6IC0AB2QFkIHYVIBQzoIJQQ6CB3w6CB0EEIH5PsU6XInn30PzpzB3hlZr5W0+rW7epwnT09PG21pMpmcwbtF2CXcE05o/0i8phVEYNJWeaLifIdfpdkgf0G0S/7jCuK2njIIbHZA4SjjPSW/jxLphda0ggh0UR7hKStK2q7KZSsI4epO+V3bqbM97WW8+zF/k5UPmo3b5e/UKXJ8S+l13A+BwTBlMTb6BMT+RfjSp23bNnGMA/khlfVPTHto9/D+OcZbqU/yM+sSzyrH4OO6DYJpX8Vx4Tw892rfpp39E36Wecnvm7ecEBTG2Hzim1eXeFY1BptBMe28+AigtS9UcaKC/GGco7qFpjx4oFRXzpfTqZ/Et+qx2BAGw7TTgZm98oDB91iEY2Kv6weEdPaxaEjSo9zlHTJe3QH9QTnm1eX9tMnT3xHhSxveV8IzKKatlcfFASC3q+sIqlf3E0J49yEemlSciqIwrm53Tf0RGBTTLo+Eujw1t0J4oUmlYKAMiqLiqJwe8B4Jjn3OeI/UEf0fl7yyfWiqg6cT0a8G4kPom7jhDY3p1FWdAfQuxdWY9BXg3RG2OyHfwMw4KsNXQhrLp4AzxgmeLMZhe6zp6sr28KhI9nNjOvLNq6vpavFFszAdeuQXxxTQw6GZiWjpWnlxoCLtreY28QwV06dnJ8fSqsvjqzyNh3jaqTALv6ozhp6n93MEbRsxjfMItyDSxsWzg1hAnrmca4hn4UP9i2NaLBSDu5iVxSPv96tCmWYJ3qWc/lz4yqk/lglcuIp36W+RvMjzXOWZiyn9qxRlAxLvwlhJh3esNEfyynOR8immbBRMw5kHd+fCKeg2AiX3T3aa4A0HZ/gO81rqtI4dglvRDjyeWSoEjwBpJdY5ackxfzSNHTgX8INMLqIy5aR87wl1l4J75P2UN0h5+mzEFB6V65B+0sdmsb0leKO9j/XHpK9K/eqOKusE3ziYIphy6QmKhzbL8kC9ExMQw6+a+rZW4oBT1pP3twx55OzteWjbBlOVJ7z2Ol/Ibc6Eiqzimq54Y/IVrx3bjYLpJlqrkIapNxXKCkJID80eYNXyOtKTeEYKBO8lCd9J7DunOkvOeV5tvgOmepjCqzBhDVTye6GKJD3+i4rfB1J6w5xeHNNNhE/CaQVTBBBa31yKYDlZJ1Ym+863g5mTpJ838SD3DEzdPvM/2OWYim9ukKNguqkk0DmhcoZRIQhuUTMFs2GkLlZinxWFKo2lt3or1AlTMFBxfBbJ35RyL5PnxWsUTN85MgIfK3ycQPJAXhlnvbPYrI4arURwGMdPG07Yw2GgHmOlpksZd8EULDwv5ngno829jPm78qTHwjQoj4IgwNTNqCxgy7RW4VaVqM5KHCu3rsT/puI2mKI4euHK90LyD7S9o04FqsNw6j9UY2BaKM8zV621lTxznJduXj7MDj42yrFPp25Xp6TT2VJvn54A9M6mgxyR5xJFKRso1eNQ629bSTwmoKX4l4zKPwspd7trfJNI/azj8K8Er935tqRnLr4Xgmt6OxOyfGsbFcY+nmdqsnEGS20lo6I8Y3CUpPF7ITxLu8W39jxYgDcqz0V6HtPejK7Lk1tmK0HWNQ2MwF+a/gOg+mBtDwAAAABJRU5ErkJggg==\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": "iVBORw0KGgoAAAANSUhEUgAAAOYAAAA3CAYAAAAYCDYxAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAJM0lEQVR4Ae2di5HUOBCG2SsC4DaDWzLgEQGQARwRABksRQQUZABEcEAGcBHwyIC9CK4gg73/06p9sscey8+1ZltVGsuS3C397Xa3JFtzdH5+fs3D4SJwdHR0S717HHtI+plkfna4Pd5uz4bI4sgVc7uCnKNluhk+ScYPoBVvjA86vzkHbacxDIEhsvhtGGmvXSACx0mbsZQnybkn10UgWxaumOsKZnVuso63E6b3lXY3NgFkzeQQWRSvmLhnik8VTxXfcN4EW3n32/Kb9dY6V1teLcFLdMHgRhvtmP9CZcGtbaszJU/0XQ4JgJNlIS2+VnIUFp8U79MHhYeK39L+6BzX7TTNu+y02vNmqTa00VYeyvqB44J8XQ4NXZoii+Itpjr/SDfbZx0JdxUtHTL080rlr+3kChw/6WnNAyqEaCmx0E/I0Pki1lqkXQ4AXA/jZbHUE3RNusIC95UbjhnIygPQOZZitHXStdzgp0Sjq3QbD3g/VeTYa5VUp7NNKoMndAJPHaFrafrTy0t1mHkNOCj9QxF3wuIPK5v7KB6LyIF2KvTKwvqjulnegeqNksMQPrQlqZ8ti+u6sPigjn9XJ77LGjCWxJW1CY87ygeMKQHajyAg2tx4v0gngZsAa/FL5eYy1sZxyg8Km1xDO98k5yj7x/QcmvH8vY6MDQm9vC6qhQdSSIruaksj4rWkHOjPXllE+bBmyyTXTphLDn18Goy5J0IYIoviFVMgYU2Cq6rjZ0BTPFHalgZqs5AqM6tjeDWPlZKIxkfVR4EYPxEQ+JeQ+v/njuoFZeWo+jwMakH5z9MMaCrvWZpnaeU3eR6rzPj38op0uGbVoD4NkgON0zWzykLY2YMB67oT5pJDH58G43GyEJPK9SstLQAQ7E9rt9JYtPQcRQpuoNUZetT13xSDe6ojCgKPh9BRYGKp4hfzsNC39vFReacLFWmkPM2NzeYl+jV3e19b5igTv8Xl0IJLTRZpP9QeZDBpSNHCb+c+yuGjOqNkUbTFFHhYqOeKuIr/KjL5c0/RwlclWi2TVcg4YjFZjsEqYn1xlcyCKblISHmmLm4uM9q6WlhJDvQnxWUNWaT8xsiBNo+SRdGKSa91U7zl2BbiDdNWlJ3XQ/8sumMpPVyXmvucFuak23gqL4uX2oMb91cOnznrtLXZ6KuMB6idjj7u4zGa6J4Lp/KbIotquUREThRfJbE21bun/VsvwqIys7pUYFyLK2djpq/ciD3MeBKPCTm8Hoj/2Kf7mDblXrO0HHLbkdYbK4eUxr70eFlIiBBm/FIb9+icJy+FT6lTclQfGGuGlxDm7ofoopS9Sxhz8O3jpXIeQL1jqznaMoaG2raYHGiPAuN/MOAEpQtzAWPauu8a0e3lozqTZBG+LokWhZuLaf/qaat8OnimvNWm3MUvO8T2Zdf3irsISLaTfUyXwy6uQ3OacrAxJtPMuF9tLlhb3lC+nfUlVJ6iteWEjsphrTAta3YmLfP0cATGysLlMBzrvis6v8eUkHBlWdDmw9rOCZY+BlexXNjh6jB7SyDtHycHKNb9KVkOrYqpDjFuYi3to5Sy05qpHtaOt1xsqeKl6mN9qxBpvVAGdQi4xby/OmnmMlDa6I/6zNpVePtHaRTTP06+BFmVLAdzZQNs6giTQKz7YS15GfylYmtQXcakTDSEdUKdo6R/K/5uF8Q8BuHMTgVFTHh0KrxdX/DxOGk7/QZXD+sjUKwcquUSMEN5FJ8rYtV4e+KfqFwUV0F5KC4zXuni/Vfl3bD6OmJ1cYWhZ0pJHgq5+jqbeK4W1F97VxeePLAO1jtYDdQRjEqWQ6sraxhIuX7G9B/qZDUJFPNRuGrsGRWSN2LCzK7OUUpuShQRhSRA431KK+Qe6I8woN94EWDiynlJci5RDsGVVcODq9Vy82AFUS5iWEZRXdLccHz1kAbGUgQbY2JVGaNWyhtKr8hPvBneqbv3rsqDaIuiLVUO5sritv6InejDl8+RcHmxfml4rBPyU8uQptO6B52OODIGX/rj5IPGcWrnSpaDKSZK9rlF2YIlpSwBCYuZntt3ilhM+4aQ6p1KKcCWfEUO3pcdmNHmA2eGAkS8Bw/rI1CsHK5HrHZmSKU83EwoJmtwwTrGJxB5prD2fqitd5obC1lmY7GiVUieYFiTgw3Ca5NvSh0s4B0dK1kO1eSPlAZLmFo8lI/1xso6RmVFCbnxzAqQ5j3bVCmVFV7qxjJSzpMrBNW7kmNO678fHYEcBCrFzKp88TU/X9GnywE5l3odR8ARGIDAbwPqUvVPxYNegxyIh1d3BBZBIFsx5cbi2rJMUrm2i7TIiToCjsC1bMUUVigmyyE7Y0nH0RFwBOZFYNAYc17WTs0RcAS6EBhiMbtoeL4j4AjMjIAr5syAOjlHYA4EXDHnQNFpOAIzI8B+L2EXo5npOjlHwBGYgIBP/kwAzy91BJZCwF3ZpZB1uo7ABARcMSeA55c6Aksh4Iq5FLJO1xGYgIAr5gTw/FJHYCkE7HvMpeg73ZkQSL5lheJJJMu+S/6K5EwYb4mMK+aWpNHRlqiU76SE1feyyuNj8286sjWof1jQgV2p2b5cUoDkpHzsBoF1rO2zpPywi6Hyq718C+iONzEDAR9jZoC0gSp8B1vtApG0B0vJXr7m2iZFniwZAVfMMqTHxmb8fynfw7aFrvy2up5XAAKumAUISa7qbUWGHTVXVk23vXyrHQmlvKe4uIrneyKusYcNI+CTPxsWzr6mSenYPA0X9rUprPJs98F7sYxyNuqmLlY1bNqt+pUiK8/DBhFwxdygUDKbhNWr/o1NSon1/CKlsx3z2TqU3QvPVIZSsm+wK6SAKCH4rGwJUmq0UYoWXFEpWvqnTrVaqpP+FSBbjj5R/aYrXLvGT7aDgI8xtyOLrJZI4cIu9j1KifVMlfCWK2UWvJup5Iq5GVH0N0RKySbbN1OlVB6ztYwl04Al5Z/XLOyb0bU6ftwQAq6YGxLGvqZI+bCCd1OljPVtR/xwqnqMJ/nflOa/sd2J9f1QAAI+xixBSBcWEQsYJnZik1HAY0XcVP6GIgQpJq4u/zeT5vGG0Fvl7fxHzcVV/rs1BHxWdmsSaW8Pkze4q2F82ajSnGl9oPKmAvq7tA3Qtn76H6htL9Hd/GyRAAAAAElFTkSuQmCC\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": "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\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": "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\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": null, "metadata": {}, "outputs": [], "source": [ "import pytest\n", "pytest.importorskip('ipy_table')" ] }, { "cell_type": "code", "execution_count": 19, "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": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "moment_equality_table(get_stencil(\"D2Q9\"), truncate_order=2)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matched moments 32 - non matched moments 3 - 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": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "moment_equality_table(get_stencil(\"D3Q27\"), 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(get_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.6.8" } }, "nbformat": 4, "nbformat_minor": 1 }