{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from lbmpy.session import *\n", "\n", "from pystencils.sympyextensions import prod\n", "from lbmpy.moments import get_default_moment_set_for_stencil, moments_up_to_order\n", "from lbmpy.creationfunctions import create_lb_method\n", "from lbmpy.equilibrium import discrete_equilibrium_from_matching_moments\n", "from lbmpy.methods import create_from_equilibrium, DensityVelocityComputation\n", "from lbmpy.quadratic_equilibrium_construction import *\n", "from lbmpy.chapman_enskog import ChapmanEnskogAnalysis\n", "from lbmpy.moments import exponent_to_polynomial_representation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Demo: Theoretical Background - LB Equilibrium Construction using quadratic Ansatz\n", "\n", "According to book by Wolf-Gladrow _\"Lattice-Gas Cellular Automata and Lattice Boltzmann Methods\"_ (2005)\n", "\n", "Through the Chapman Enskog analysis the following necessary conditions can be found in order for a lattice Boltzmann Method to approximate the Navier Stokes mass and momentum conservation equations. In the Chapman Enskog analysis only the moments of the equilibrium distribution functions are used, thus all conditions are formulated with regard to the moments $\\Pi$ of the equilibrium distribution function $f^{(eq)}$\n", "\n", "The conditions are:\n", "- zeroth moment is the density: $\\Pi_0 = \\sum_q f^{(eq)}_q = \\rho$\n", "- first moment is the momentum density, or for incompressible models the velocity:\n", " - compressible: $\\Pi_\\alpha = \\sum_q c_{q\\alpha} f^{(eq)}_q = \\rho u_\\alpha$\n", " - incompressible: $\\Pi_\\alpha = \\sum_q c_{q\\alpha} f^{(eq)}_q = u_\\alpha$\n", "- second moment is related to the pressure tensor and has to be: \n", " $\\Pi_{\\alpha\\beta} = \\sum_q c_{q\\alpha} c_{q\\beta} f^{(eq)}_q = \\rho u_\\alpha u_\\beta + p \\delta_{\\alpha\\beta}$\n", "- third order moments are also used in the Chapman Enskog expansion. The conditions on these moments are harder to formulate and are investigated later. A commonly used, but overly restrictive choice is \n", " $\\Pi_{\\alpha\\beta\\gamma} = p ( \\delta_{\\alpha\\beta} u_\\gamma + \\delta_{\\alpha\\gamma} u_\\beta + \\delta_{\\beta\\gamma} u_\\alpha )$. In Wolf-Gladrows book these conditions on the third order moment are not used but implicitly fulfilled by choosing fixed fractions of the coefficients $\\frac{A_1}{A_2}$ etc.\n", "\n", "Now the following generic quadratic ansatz is used for the equilibrium distribution. \n", "\n", "$$f^{(eq)}_q = A_{|q|} + B_{|q|} (\\mathbf{c}_q \\cdot \\mathbf{u}^2 ) + D_{|q|} \\mathbf{u}^2$$\n", "\n", "\n", "The free parameters $A_{|q|}, B_{|q|}, C_{|q|}$ and $D_{|q|}$ are chosen such that above conditions are fulfilled.\n", "The subscript $|q|$ is an integer and defined as the sum of the absolute values of the corresponding stencil direction. For example: for center $|q|=0$, for direct neighbors like north, east, top $|q|=1$ for 2D diagonals like north-west its 2 and for 3D diagnoals like bottom-north-west its 3.\n", "\n", "_lbmpy_ can create this quadratic ansatz for use for a given stencil:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Create Stencil\n", "stencil = LBStencil(Stencil.D2Q9)\n", "\n", "# Create quadratic equilibrium ansatz\n", "ansatz = generic_equilibrium_ansatz(stencil)\n", "\n", "# Show equilibrium for each stencil direction\n", "plt.figure(figsize=(12,8))\n", "stencil.plot(data=ansatz, textsize=9, slice=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we define the restrictions obtained through the Chapman Enskog analysis, in the book listed as equations (5.4.2) and following:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left\\{ \\left( 0, \\ 0\\right) : \\rho, \\ \\left( 0, \\ 1\\right) : \\rho u_{1}, \\ \\left( 0, \\ 2\\right) : p + \\rho u_{1}^{2}, \\ \\left( 1, \\ 0\\right) : \\rho u_{0}, \\ \\left( 1, \\ 1\\right) : \\rho u_{0} u_{1}, \\ \\left( 2, \\ 0\\right) : p + \\rho u_{0}^{2}\\right\\}$" ], "text/plain": [ "⎧ 2 2⎫\n", "⎨(0, 0): ρ, (0, 1): ρ⋅u₁, (0, 2): p + ρ⋅u₁ , (1, 0): ρ⋅u₀, (1, 1): ρ⋅u₀⋅u₁, (2, 0): p + ρ⋅u₀ ⎬\n", "⎩ ⎭" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "moment_restrictions = hydrodynamic_moment_values(dim=len(stencil[0]), compressible=True, up_to_order=2)\n", "moment_restrictions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The parameter `up_to_order` can be modified to 3. Then the third order restrictions are included as well (see discussion above). Using these moment restrictions, the necessary conditions on the parameter $A$ to $D$ can be found." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}8 C_{2} - \\rho\\\\2 B_{1} + 4 B_{2} - \\rho\\\\4 C_{2} + 2 D_{1} + 4 D_{2}\\\\2 C_{1} + 4 C_{2} + D_{0} + 4 D_{1} + 4 D_{2}\\\\A_{0} + 4 A_{1} + 4 A_{2} - \\rho\\\\2 A_{1} + 4 A_{2} - p\\\\2 C_{1} + 4 C_{2} + 2 D_{1} + 4 D_{2} - \\rho\\end{matrix}\\right]$" ], "text/plain": [ "⎡ 8⋅C₂ - ρ ⎤\n", "⎢ ⎥\n", "⎢ 2⋅B₁ + 4⋅B₂ - ρ ⎥\n", "⎢ ⎥\n", "⎢ 4⋅C₂ + 2⋅D₁ + 4⋅D₂ ⎥\n", "⎢ ⎥\n", "⎢2⋅C₁ + 4⋅C₂ + D₀ + 4⋅D₁ + 4⋅D₂⎥\n", "⎢ ⎥\n", "⎢ A₀ + 4⋅A₁ + 4⋅A₂ - ρ ⎥\n", "⎢ ⎥\n", "⎢ 2⋅A₁ + 4⋅A₂ - p ⎥\n", "⎢ ⎥\n", "⎣2⋅C₁ + 4⋅C₂ + 2⋅D₁ + 4⋅D₂ - ρ ⎦" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "equations = moment_constraint_equations(stencil, ansatz, moment_restrictions)\n", "sp.Matrix(equations)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since we have still more unknowns than equations, some additional restrictions have to be imposed." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ A_{0}, \\ A_{1}, \\ A_{2}, \\ B_{0}, \\ B_{1}, \\ B_{2}, \\ C_{0}, \\ C_{1}, \\ C_{2}, \\ D_{0}, \\ D_{1}, \\ D_{2}, \\ p\\right]$" ], "text/plain": [ "[A₀, A₁, A₂, B₀, B₁, B₂, C₀, C₁, C₂, D₀, D₁, D₂, p]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dofs = generic_equilibrium_ansatz_parameters(stencil)\n", "dofs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Wolf-Gladrows book the following arbitrary restrictions are added to the necessary constraints:\n", "\n", "$$ \\frac{A_0}{A_1} = \\frac{A_1}{A_2} = \\frac{B_1}{B_2} = \\frac{D_0}{D_1} =: r$$" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ \\frac{A_{0}}{A_{1}} - r, \\ \\frac{A_{1}}{A_{2}} - r, \\ \\frac{B_{1}}{B_{2}} - r, \\ \\frac{D_{0}}{D_{1}} - r, \\ \\frac{D_{1}}{D_{2}} - r\\right]$" ], "text/plain": [ "⎡A₀ A₁ B₁ D₀ D₁ ⎤\n", "⎢── - r, ── - r, ── - r, ── - r, ── - r⎥\n", "⎣A₁ A₂ B₂ D₁ D₂ ⎦" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "additional_restrictions = [\n", " \"A_0 / A_1 - r\",\n", " \"A_1 / A_2 - r\",\n", " \"B_1 / B_2 - r\",\n", " \"D_0 / D_1 - r\",\n", " \"D_1 / D_2 - r\", # comment out this line to get solution dependent on r\n", "]\n", "additional_restrictions = [sp.sympify(e) for e in additional_restrictions]\n", "additional_restrictions" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ \\left\\{ A_{0} : \\frac{4 \\rho}{9}, \\ A_{1} : \\frac{\\rho}{9}, \\ A_{2} : \\frac{\\rho}{36}, \\ B_{1} : \\frac{\\rho}{3}, \\ B_{2} : \\frac{\\rho}{12}, \\ C_{1} : \\frac{\\rho}{2}, \\ C_{2} : \\frac{\\rho}{8}, \\ D_{0} : - \\frac{2 \\rho}{3}, \\ D_{1} : - \\frac{\\rho}{6}, \\ D_{2} : - \\frac{\\rho}{24}, \\ p : \\frac{\\rho}{3}, \\ r : 4\\right\\}\\right]$" ], "text/plain": [ "⎡⎧ 4⋅ρ ρ ρ ρ ρ ρ ρ -2⋅ρ -ρ -ρ ρ ⎫⎤\n", "⎢⎨A₀: ───, A₁: ─, A₂: ──, B₁: ─, B₂: ──, C₁: ─, C₂: ─, D₀: ─────, D₁: ───, D₂: ───, p: ─, r: 4⎬⎥\n", "⎣⎩ 9 9 36 3 12 2 8 3 6 24 3 ⎭⎦" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solveResult = sp.solve(equations + additional_restrictions, dofs + [sp.Symbol(\"r\")], dict=True)\n", "solveResult" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The equilibrium we found here is the same as obtained with the usual _lbmpy_ construction technique:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "constructed_equilibrium = sp.Matrix(ansatz).subs(solveResult[0]).expand()\n", "lbm_config = LBMConfig(stencil=stencil, compressible=True, zero_centered=False)\n", "normal_lbmpy_equilibrium = create_lb_method(lbm_config=lbm_config).get_equilibrium_terms()\n", "assert constructed_equilibrium == normal_lbmpy_equilibrium" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generalization of above technique\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def generic_polynomial(u, coeff_prefix, order=2):\n", " dim = len(u)\n", " result = 0\n", " for idx in moments_up_to_order(order, dim=dim):\n", " u_prod = prod(u[i] ** exp for i, exp in enumerate(idx))\n", " coeff = sp.Symbol((\"%s_\" + (\"%d\" * dim)) % ((coeff_prefix,) + idx))\n", " result += coeff * u_prod\n", " return result\n", "\n", "\n", "def generic_polynomial_coeffs(dim, coeff_prefix, order=2):\n", " result = []\n", " for idx in moments_up_to_order(order, dim=dim):\n", " result.append(sp.Symbol((\"%s_\" + (\"%d\" * dim)) % ((coeff_prefix,) + idx)))\n", " return result" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ 1, \\ x, \\ y, \\ x^{2}, \\ y^{2}, \\ x y, \\ x^{2} y, \\ x y^{2}, \\ x^{2} y^{2}\\right]$" ], "text/plain": [ "⎡ 2 2 2 2 2 2⎤\n", "⎣1, x, y, x , y , x⋅y, x ⋅y, x⋅y , x ⋅y ⎦" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "allMoments = get_default_moment_set_for_stencil(stencil)\n", "allMoments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use, as before, all constraints for moments up order 2. This time we do not use a quadratic ansatz for the equilibrium distribution or the additional constraints (i.e. the ratios of coefficients being some constant $r$).\n", "Instead an arbitrary second order polynomial $u$ is used for the third order moments. The forth order moment does not appear at all in the Chapman Enskog expansion and is thus set to a constant.\n", "\n", "So we end up with the following moments" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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wB+LNG5VbpESBZkzjD4sKOoqs1rsmWK4BUqrcrfoFLo2xyiXHirTGlebUUtdrXUqyQd9s220NiPo9w02/iB5WEBG+TwOfX2m1hiqOT0Au9B6Xm+1rddnj73uKW2UW9932LSY5Mr1Pbn0SVFdHab0Rpr1XqeoTq3KLVJiReYMq+z4tULkKS+x2DfFckulW5W7RafUtTlWufRU2bm02qxa6pqry5Z06J1tu7VZQV/r/KTW3JOIzjL/7G78z/lXzody6bnyQ+mb30BmoVCMq/XPsZ+9iRkSeEQc9OKvLkM3ZdXUgQz+SuNj7EsWkGvK79oGrGhrOxxtg2rGnBSEOt28XZ3vNG1fjjN/YMIHONG3yyemOeQQej6HYP5gh199+L61EvK/od9q6nutbRgqX3Z9oAIOV2fbkL23xslfthLU9SJQn4Brl93PW+rXXCWKwHUQQBtOvllYu5Yayx+IgkPzud/etl3jK9BR95QTcODR/HnhRJwORaBrAmgPfAapOWbXVpJyIlBO4Ij5ietPbnq9sNxSx14Bm/Ht5os3kKssIB9bNUkXAREQgesngE6ci9v8ZRQ/sd188fj6iaqGIiACIiACIiACIiACIiACInA7BHRPeTu2Vk1FQAREQAREQAREoIRAbAH5cUkhyisCIiACIrAvAXTefCOai8efYOMnyH7BpiACIiACIiACIiACIiACIiACIiACWQK6p8wiUgYREAEREAEREAEREIEAAS0gB6AoSgREQAR6IYCbfS4a+/+Rxs+N/Yq4F9he96Kj9BABERABERABERABERABERABEeiTgO4p+7SLtBIBERABERABERCB3gk8Cij4B+L4v2EUREAEREAEOiLgFo3fQaV/4lj9dEe2kSoiIAIiIAIiIAIiIAIiIAIi0DsB3VP2biHpJwIiIAIiIAIiIAL9EAgtIHNx4kk/KkoTERABEbg9Arixf8otUHP/CWt+1lpBBERABERABERABERABERABERABC4I6J7yAokiREAEREAEREAEREAEFgQwZ+SLatz4cvEshBaQ3yAHFy4+muXUiQiIgAiIwJ4EfoUwfq5abxrvSV2yREAEREAEREAEREAEREAEROA6COie8jrsqFqIgAiIgAiIgAiIQEsCX7vCv10KCS0gf4NMv2H7WQsXS1w6FwEREIHdCPBrEK/RD3M/DR+7E/7YR0EEREAEREAEREAEREAEREAEREAEQgR0TxmiojgREAEREAEREAEREIGBANYevsQBtxc45rrwLFwsILvFimfIxcz/xfnL2RU6EQEREAER2IPAVxDy81QQ+uPnOOcbya9cXz1N1rEIiIAIiIAIiIAIiIAIiIAIiIAIeAK6p/QktBcBERABERABERABERgJYG2BX6H+DyJeYXuG49dj4uTgg/fv309O54e4iIsVf8f2DY7fzlN1JgIiIAIi0JIA+l3+n+MXExn81wLfIl5vH0+g6FAEREAEREAEREAEREAEREAEROCSgO4pL5koRgREQAREQAREQARunQDmiE/B4EluneH/AdHkxOysbBKVAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle \\left\\{ \\left( 0, \\ 0\\right) : \\rho, \\ \\left( 0, \\ 1\\right) : \\rho u_{1}, \\ \\left( 0, \\ 2\\right) : \\rho u_{1}^{2} + \\frac{\\rho}{3}, \\ \\left( 1, \\ 0\\right) : \\rho u_{0}, \\ \\left( 1, \\ 1\\right) : \\rho u_{0} u_{1}, \\ \\left( 1, \\ 2\\right) : b_{00} + b_{01} u_{1} + b_{02} u_{1}^{2} + b_{10} u_{0} + b_{11} u_{0} u_{1} + b_{20} u_{0}^{2}, \\ \\left( 2, \\ 0\\right) : \\rho u_{0}^{2} + \\frac{\\rho}{3}, \\ \\left( 2, \\ 1\\right) : a_{00} + a_{01} u_{1} + a_{02} u_{1}^{2} + a_{10} u_{0} + a_{11} u_{0} u_{1} + a_{20} u_{0}^{2}, \\ \\left( 2, \\ 2\\right) : M_{22}\\right\\}$" ], "text/plain": [ "⎧ 2 ρ 2 \n", "⎨(0, 0): ρ, (0, 1): ρ⋅u₁, (0, 2): ρ⋅u₁ + ─, (1, 0): ρ⋅u₀, (1, 1): ρ⋅u₀⋅u₁, (1, 2): b₀₀ + b₀₁⋅u₁ + b₀₂⋅u₁ + b₁₀⋅u₀ + b\n", "⎩ 3 \n", "\n", " 2 2 ρ 2 2 ⎫\n", "₁₁⋅u₀⋅u₁ + b₂₀⋅u₀ , (2, 0): ρ⋅u₀ + ─, (2, 1): a₀₀ + a₀₁⋅u₁ + a₀₂⋅u₁ + a₁₀⋅u₀ + a₁₁⋅u₀⋅u₁ + a₂₀⋅u₀ , (2, 2): M₂₂⎬\n", " 3 ⎭" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dim = len(stencil[0])\n", "u = sp.symbols(\"u_:3\")[:len(stencil[0])]\n", "moment_restrictions = hydrodynamic_moment_values(dim=len(stencil[0]), compressible=True, up_to_order=2)\n", "moment_restrictions[(2, 1)] = generic_polynomial(u, \"a\")\n", "moment_restrictions[(1, 2)] = generic_polynomial(u, \"b\")\n", "moment_restrictions[(2, 2)] = sp.Symbol(\"M_22\")\n", "moment_restrictions = {m: v.subs(sp.Symbol(\"p\"), sp.Symbol(\"rho\") / 3) for m, v in moment_restrictions.items()}\n", "moment_restrictions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next all parameters are collected.." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ a_{00}, \\ a_{01}, \\ a_{10}, \\ a_{02}, \\ a_{11}, \\ a_{20}, \\ b_{00}, \\ b_{01}, \\ b_{10}, \\ b_{02}, \\ b_{11}, \\ b_{20}, \\ p\\right]$" ], "text/plain": [ "[a₀₀, a₀₁, a₁₀, a₀₂, a₁₁, a₂₀, b₀₀, b₀₁, b₁₀, b₀₂, b₁₁, b₂₀, p]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "parameters = generic_polynomial_coeffs(dim, \"a\") + generic_polynomial_coeffs(dim, \"b\") + [sp.Symbol(\"p\")]\n", "parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... and a _lbmpy_ LB method is created. On this method an automatic Chapman Enskog analysis can be conducted to find \n", "constraints for the free parameters above." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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REAEREAEREAEREAEREAEREAEREAEREAEMgngHtsDLI+x8N/yP2D9KlOEsouACIiACIiACIiACDQigLEZ5w3wU32/YDv35SV88dFTr9rpjUiMgLDRLCWfaWmN/Hoj0hIcxYvAwQigP/vPTT3Bti4AD9Z+Unc7Auor27FWTSIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAnUI6HlOHY6SIgIiIAIiIAIiIAIiMCaAcebZJ3jvhVmQgbObPsWab0mxhHfIdGvJqDwiIAJ9E0C/5+QjvlqNMxzVr/tuLmm3IwH1lR3hq2oREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREIGeCHwLZU5vQ6Jio4lITlNORnrptlMrTlq4n8qkdBEQgb4IcLIhlxmt/KfZ+No1BRG4egLqK1fvAgIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAocngHtc/OMpF/65XEEEREAEREAEREAEREAEqhDAOJNvQ/oL69EXl84mIiHD8K03rPkNt1T4FRk4oeHTVEali4AIdEXgD2jzB/qu3nzUVbNImQ4JqK902ChSSQREQAREQAREQAREQAREQAREQAREQAREIIsA/6XO8N3dSr8iIAIiIAIiIAIiIAIisI6AmyfEceaTqaSziUguwxdYf2OYYPQC+f7C8loTGhw5rUTgGAT4NrNX6Ldch+Gh2+EkQwUREIG7zxWqr8gTREAEREAEREAEREAEREAEREAEREAEREAEDkkA94D5L3UuT7DN5zkKIiACIiACIiACIiACIrCKgJsf9BpCns6NMWcnIiEjJyd8ieUXJ2BWCZfvARI5eP0f9i1vUZqVpUgREIFNCfATjDwwnAL672Ps8A1Jz13fPqVpQwSumID6yhU3vkwXAREQAREQAREQAREQAREQAREQAREQgaMSwD1efs3iT+j/HMsDbI8+l3FUu6S3CIiACIiACIiACIhAFwR+gRbfLY0xP/rw4cOilijET67dYv12MZNLQB5OYvgKywtL/pQ8pYuACLQlgH76CDWEr0ljf+fBQm9Daote0g9GQH3lYA0mdUVABERABERABERABERABERABERABERABG5wT+szYLiv+71yBhEQAREQAREQAREQgZoEML7ky00exsaZ/w/pwBFSj1ZG/wAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle \\left( \\left\\{ 1 : \\rho, \\ x : \\rho u_{0}, \\ x^{2} : \\rho u_{0}^{2} + \\frac{\\rho}{3}, \\ y : \\rho u_{1}, \\ y^{2} : \\rho u_{1}^{2} + \\frac{\\rho}{3}, \\ x y : \\rho u_{0} u_{1}, \\ x y^{2} : b_{00} + b_{01} u_{1} + b_{02} u_{1}^{2} + b_{10} u_{0} + b_{11} u_{0} u_{1} + b_{20} u_{0}^{2}, \\ x^{2} y : a_{00} + a_{01} u_{1} + a_{02} u_{1}^{2} + a_{10} u_{0} + a_{11} u_{0} u_{1} + a_{20} u_{0}^{2}, \\ x^{2} y^{2} : M_{22}\\right\\}, \\ \\left\\{ 1 : \\omega, \\ x : \\omega, \\ x^{2} : \\omega, \\ y : \\omega, \\ y^{2} : \\omega, \\ x y : \\omega, \\ x y^{2} : \\omega, \\ x^{2} y : \\omega, \\ x^{2} y^{2} : \\omega\\right\\}\\right)$" ], "text/plain": [ "⎛⎧ 2 2 ρ 2 2 ρ 2 2 \n", "⎜⎨1: ρ, x: ρ⋅u₀, x : ρ⋅u₀ + ─, y: ρ⋅u₁, y : ρ⋅u₁ + ─, x⋅y: ρ⋅u₀⋅u₁, x⋅y : b₀₀ + b₀₁⋅u₁ + b₀₂⋅u₁ + b₁₀⋅u₀ + b₁₁⋅u₀⋅u₁\n", "⎝⎩ 3 3 \n", "\n", " 2 2 2 2 2 2 ⎫ ⎧ 2 2 \n", " + b₂₀⋅u₀ , x ⋅y: a₀₀ + a₀₁⋅u₁ + a₀₂⋅u₁ + a₁₀⋅u₀ + a₁₁⋅u₀⋅u₁ + a₂₀⋅u₀ , x ⋅y : M₂₂⎬, ⎨1: ω, x: ω, x : ω, y: ω, y : ω, \n", " ⎭ ⎩ \n", "\n", " 2 2 2 2 ⎫⎞\n", "x⋅y: ω, x⋅y : ω, x ⋅y: ω, x ⋅y : ω⎬⎟\n", " ⎭⎠" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rr = sp.symbols(\"omega\")\n", "eq_values = {exponent_to_polynomial_representation(m) : v for m, v in moment_restrictions.items()}\n", "r_rates = {exponent_to_polynomial_representation(m) : rr for m in moment_restrictions.keys()}\n", "eq_values, r_rates" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "cqe = DensityVelocityComputation(stencil, True, False)\n", "equilibrium = discrete_equilibrium_from_matching_moments(stencil=stencil, moment_constraints=eq_values, \n", " zeroth_order_moment_symbol=cqe.density_symbol,\n", " first_order_moment_symbols=cqe.velocity_symbols)\n", "method = create_from_equilibrium(stencil, equilibrium, cqe, r_rates)\n", "analysis = ChapmanEnskogAnalysis(method, constants=set(parameters))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left\\{0, - \\frac{b_{10}}{2} + \\frac{b_{10}}{\\omega}, \\frac{a_{01}}{2} - \\frac{a_{01}}{\\omega} - \\frac{b_{10}}{2} + \\frac{b_{10}}{\\omega}, \\frac{a_{01}}{2} - \\frac{a_{01}}{\\omega} - \\frac{a_{10}}{2} + \\frac{a_{10}}{\\omega} - \\frac{\\rho}{6} + \\frac{\\rho}{3 \\omega}, \\frac{a_{01}}{2} - \\frac{a_{01}}{\\omega} - \\frac{b_{01}}{2} + \\frac{b_{01}}{\\omega} - \\frac{\\rho}{6} + \\frac{\\rho}{3 \\omega}, \\frac{a_{01}}{2} - \\frac{a_{01}}{\\omega} + b_{10} - \\frac{2 b_{10}}{\\omega} - \\frac{\\rho}{2} + \\frac{\\rho}{\\omega}\\right\\}$" ], "text/plain": [ "⎧ b₁₀ b₁₀ a₀₁ a₀₁ b₁₀ b₁₀ a₀₁ a₀₁ a₁₀ a₁₀ ρ ρ a₀₁ a₀₁ b₀₁ b₀₁ ρ ρ a₀₁ a₀₁ \n", "⎨0, - ─── + ───, ─── - ─── - ─── + ───, ─── - ─── - ─── + ─── - ─ + ───, ─── - ─── - ─── + ─── - ─ + ───, ─── - ─── + b\n", "⎩ 2 ω 2 ω 2 ω 2 ω 2 ω 6 3⋅ω 2 ω 2 ω 6 3⋅ω 2 ω \n", "\n", " 2⋅b₁₀ ρ ρ⎫\n", "₁₀ - ───── - ─ + ─⎬\n", " ω 2 ω⎭" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "analysis.does_approximate_navier_stokes()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These constraints can be solved for the free parameters:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAVCAYAAAB7R6/OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAATklEQVQoFWOsr68vY2BgSAdiEAgFYhcghvNZgBxhkEBDQ8MeIA0C54C4C8jvBNJCTCARfGBUASR0RsOByHAAJTkQmAlMYiAaOU0KAfm7AcSSDexw+eTdAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle \\left[ \\right]$" ], "text/plain": [ "[]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solveRes = sp.solve(analysis.does_approximate_navier_stokes(), parameters)\n", "solveRes" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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wB+LNG5VbpESBZkzjD4sKOoqs1rsmWK4BUqrcrfoFLo2xyiXHirTGlebUUtdrXUqyQd9s220NiPo9w02/iB5WEBG+TwOfX2m1hiqOT0Au9B6Xm+1rddnj73uKW2UW9932LSY5Mr1Pbn0SVFdHab0Rpr1XqeoTq3KLVJiReYMq+z4tULkKS+x2DfFckulW5W7RafUtTlWufRU2bm02qxa6pqry5Z06J1tu7VZQV/r/KTW3JOIzjL/7G78z/lXzody6bnyQ+mb30BmoVCMq/XPsZ+9iRkSeEQc9OKvLkM3ZdXUgQz+SuNj7EsWkGvK79oGrGhrOxxtg2rGnBSEOt28XZ3vNG1fjjN/YMIHONG3yyemOeQQej6HYP5gh199+L61EvK/od9q6nutbRgqX3Z9oAIOV2fbkL23xslfthLU9SJQn4Brl93PW+rXXCWKwHUQQBtOvllYu5Yayx+IgkPzud/etl3jK9BR95QTcODR/HnhRJwORaBrAmgPfAapOWbXVpJyIlBO4Ij5ietPbnq9sNxSx14Bm/Ht5os3kKssIB9bNUkXAREQgesngE6ci9v8ZRQ/sd188fj6iaqGIiACIiACIiACIiACIiACInA7BHRPeTu2Vk1FQAREQAREQAREoIRAbAH5cUkhyisCIiACIrAvAXTefCOai8efYOMnyH7BpiACIiACIiACIiACIiACIiACIiACWQK6p8wiUgYREAEREAEREAEREIEAAS0gB6AoSgREQAR6IYCbfS4a+/+Rxs+N/Yq4F9he96Kj9BABERABERABERABERABERABEeiTgO4p+7SLtBIBERABERABERCB3gk8Cij4B+L4v2EUREAEREAEOiLgFo3fQaV/4lj9dEe2kSoiIAIiIAIiIAIiIAIiIAIi0DsB3VP2biHpJwIiIAIiIAIiIAL9EAgtIHNx4kk/KkoTERABEbg9Arixf8otUHP/CWt+1lpBBERABERABERABERABERABERABC4I6J7yAokiREAEREAEREAEREAEFgQwZ+SLatz4cvEshBaQ3yAHFy4+muXUiQiIgAiIwJ4EfoUwfq5abxrvSV2yREAEREAEREAEREAEREAEROA6COie8jrsqFqIgAiIgAiIgAiIQEsCX7vCv10KCS0gf4NMv2H7WQsXS1w6FwEREIHdCPBrEK/RD3M/DR+7E/7YR0EEREAEREAEREAEREAEREAEREAEQgR0TxmiojgREAEREAEREAEREIGBANYevsQBtxc45rrwLFwsILvFimfIxcz/xfnL2RU6EQEREAER2IPAVxDy81QQ+uPnOOcbya9cXz1N1rEIiIAIiIAIiIAIiIAIiIAIiIAIeAK6p/QktBcBERABERABERABERgJYG2BX6H+DyJeYXuG49dj4uTgg/fv309O54e4iIsVf8f2DY7fzlN1JgIiIAIi0JIA+l3+n+MXExn81wLfIl5vH0+g6FAEREAEREAEREAEREAEREAEROCSgO4pL5koRgREQAREQAREQARunQDmiE/B4EluneH/AdHkxOysbBKVAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle \\left\\{ \\left( 0, \\ 0\\right) : \\rho, \\ \\left( 0, \\ 1\\right) : \\rho u_{1}, \\ \\left( 0, \\ 2\\right) : \\rho u_{1}^{2} + \\frac{\\rho}{3}, \\ \\left( 1, \\ 0\\right) : \\rho u_{0}, \\ \\left( 1, \\ 1\\right) : \\rho u_{0} u_{1}, \\ \\left( 1, \\ 2\\right) : b_{00} + b_{01} u_{1} + b_{02} u_{1}^{2} + b_{10} u_{0} + b_{11} u_{0} u_{1} + b_{20} u_{0}^{2}, \\ \\left( 2, \\ 0\\right) : \\rho u_{0}^{2} + \\frac{\\rho}{3}, \\ \\left( 2, \\ 1\\right) : a_{00} + a_{01} u_{1} + a_{02} u_{1}^{2} + a_{10} u_{0} + a_{11} u_{0} u_{1} + a_{20} u_{0}^{2}, \\ \\left( 2, \\ 2\\right) : M_{22}\\right\\}$" ], "text/plain": [ "⎧ 2 ρ 2 \n", "⎨(0, 0): ρ, (0, 1): ρ⋅u₁, (0, 2): ρ⋅u₁ + ─, (1, 0): ρ⋅u₀, (1, 1): ρ⋅u₀⋅u₁, (1, 2): b₀₀ + b₀₁⋅u₁ + b₀₂⋅u₁ + b₁₀⋅u₀ + b\n", "⎩ 3 \n", "\n", " 2 2 ρ 2 2 ⎫\n", "₁₁⋅u₀⋅u₁ + b₂₀⋅u₀ , (2, 0): ρ⋅u₀ + ─, (2, 1): a₀₀ + a₀₁⋅u₁ + a₀₂⋅u₁ + a₁₀⋅u₀ + a₁₁⋅u₀⋅u₁ + a₂₀⋅u₀ , (2, 2): M₂₂⎬\n", " 3 ⎭" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_moment_restrictions = {a : b.subs(solveRes) for a, b in moment_restrictions.items()}\n", "new_moment_restrictions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All methods constructed with these constraints should theoretically approximate Navier Stokes. " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.9" } }, "nbformat": 4, "nbformat_minor": 2 }