demo_theoretical_background_generic_equilibrium_construction.ipynb 138 KB
Newer Older
1
2
3
4
5
6
7
8
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
9
    "from lbmpy.session import *\n",
10
11
12
13
14
15
16
    "\n",
    "from pystencils.sympyextensions import prod\n",
    "from lbmpy.stencils import get_stencil\n",
    "from lbmpy.moments import get_default_moment_set_for_stencil, moments_up_to_order\n",
    "from lbmpy.creationfunctions import create_lb_method, create_generic_mrt\n",
    "from lbmpy.quadratic_equilibrium_construction import *\n",
    "from lbmpy.chapman_enskog import ChapmanEnskogAnalysis\n",
17
    "from lbmpy.moments import exponent_to_polynomial_representation"
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
   ]
  },
  {
   "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": {
58
      "image/png": "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\n",
59
      "text/plain": [
60
       "<Figure size 864x576 with 1 Axes>"
61
62
      ]
     },
63
64
65
     "metadata": {
      "needs_background": "light"
     },
66
67
68
69
70
71
72
73
74
75
76
77
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Create Stencil\n",
    "stencil_name = \"D2Q9\"\n",
    "stencil = get_stencil(stencil_name)\n",
    "\n",
    "# Create quadratic equilibrium ansatz\n",
    "ansatz = generic_equilibrium_ansatz(stencil)\n",
    "\n",
    "# Show equilibrium for each stencil direction\n",
78
79
    "plt.figure(figsize=(12,8))\n",
    "ps.stencil.plot(stencil, data=ansatz, textsize=9, slice=True)"
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
   ]
  },
  {
   "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": {
96
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxIAAAAcCAYAAAD1JokmAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAQtElEQVR4Ae2djbXctBaFSVYKgKQCoIMAFQAdJFABoYOwqCAr6SBQQV7oIEkFkHQArwKS20He/nwlP1kj25ItzejOHK2la1vWz9HeR+dIlsf31sePHz+xYAgYAoaAIdAHArdu3XoqST5V/ELxH8VfZKevdLRgCBgChoAhYAhUQ6CGv7llC4lqfFhFhoAhYAjsQsAZ9eeyyywgPtH1Sx2+0PVXuyq2woaAIWAIGAKGQIBALX9zO6hzPFXlXyg+Jo6JdmIIGAKGgCHQGoEHUQNPdH0fmxyl26UhYAgYAoaAIbAHgSx/I/+DD3qu+F2qsYOFhDKyeHir+E5PwZ6lClmaIWAIGAKGQDMEwkWDf6UpTGvWsFVsCBgChoAhcFEIhL4l6W+0FngnRH5R/FlrhLeKvHo7hsmrTW618Up3v3IFx4x2YggYAoaAIXBcBGSTeWLE602fySZ7I39cIaw1Q8AQMAQMgbNHIMffKA8bDe/lj773gMQ7Eve5kbuIUIW8AvXIV9bjEWCQs0fZashkHNRAsc86euf23MdWJ1rBD6+b/ti6dz2DB9O1cm00Xssxu+QSpi+XzP7Y9xx/81q5vx5L6CTekaCSR1pIfBZmSp1L6djaeBmuSnw+3aOefxV5gval4ovcxYnyFoWctpSHJ3o44+EHjEUNdJy5Fw5yIDpXDnL6viXPqbl17TOOCX4hzhhii3MMxusIRfUTYQv+nwrzn6tX7ipc0rNWbabqdX1d9Bmmaynk0mm98JqWbppqvE7xOMXVnL649FU/UEtmtbc6dzR9qYX2tB6H/aq/cfmm6wQ5KXYghqhqIfGDv146Kh/bG3xNZCzPuUt/4NN1zYLjb8WDvD7P1mNuW06Gt1vb6bWc6/8Brrm41OyX2uQVjA+KKOJEJ7gmXfHsOEj1tUYaWCmehFvHFQ8JRh6Vhm2AyO+idOM1wCnEZs+5cGanl683jRy0OFcbST3zben+4rj2+fYcnQyrPkP5TNcy9aEHXr1OrOmQ8dp2jHselo4pfXG8ZPmBpbpz7zkZzA5kjvFcXHPyCftsf6O8B+uE+NUm5VkPWpHQ6F8ScPKE36Uz+fnD16LzK51zza5AtVDSlpPhtcqczVeoOuHgU8nxUhHF+lERR58M58hBsqMVEjvgFj5/Crsi/vihFWN5Mo5vKq/CmFceu7QHkosvY3wpbIedCK4Vh9dOQ072nqvOOTuePa4ryZDlM26qru3FqLR8J7xm65DxWspw3fxz+qJWsv3AXomcDGdrB9S/8/Y3GsTjEy+nOKs7EsqX3GFQOj/UnqxgqV+Bp1qcJJ9WhzLknquuorZoW3G1b7ntnzqf+nJyDkIMJA+TkkWOdf+sOAj7X/P81NyqfXaW/o77pDQWEXA82SnR9Y3jVTJjkx7HfTz1tWRiwcAuAfL5iK2rZjt9H1Vn0ob4+xwVVsd1mL/0XPVftB0vxSsnfw+8hnLm6JDy3DgbEvbxJp/P6YvSi/zAHgzU1lnbAfXvbPyN+rJ/R0Irq+F9aSnNZDdClROS35hV+tVwd/6+u110KGpL8iLDP5J/rlxR46fM3BEHRTCcEwdFHS/I3Am3jG0+pIBzT4VJuvGagmhz2huVZDHBos1HXifzNnRzxWHBFT0Ls7Y+n7PHvr+T+6Zry3R0xOuyoNFd4zUC5EiXK/pS5Ad2ijwZ50FdZgcCMBqcVvE3dzYIxsqKX21PQjDpeD+5Mb3wP9qcphZe7WgLuR8qHsifEkHt8MSO/6dBmeygcgwKPo31r+I3ik9Ux+RHqkrbE07OwQ7hj8IB8i3x4HSIp618DICn7+P/THH3/qv0z52D0+nRwsm5VZ/n/ouyf70m9RChiFfQFM5Z4yvgkfZ53YeFjHc8jK+fTsCTmr0OgXwH493pUraeqR+rH7rw7e48JvVsZ51FxR02lCn1GUW6pnay9CwWviavcd0Nr0/O646+HYVX5Ds2t07Xs+3ADgxLi87qy0Y/UNo+XGDPCV3YgUA3zN9c8xL/xc95zoZ78UJiVqmCmpggT96TdvfuuqNfQQZFFhUkzJd7vrUtHErWF1CcctNO0eJH5dj2GX/57pTyjdJqThB64EBd2hSac4BUGTw8laHkn6swIUWfx4WEzjH4cHigy8qPcaEsHLQIXXLrcGIsPEvhovRsXgFN9WGIcsfX92rzF5WBJ7bA+XrUwJfSGG+kt+JDVc8H1/7SeN+kZ/MtVrszp2fVGsio6Cbb8WJepSv8JueeIo74HjqdgVFplh54LZXZ58+2IcKyxH74+odjizGbwW2xviCs6j2Vv5lg5i8kD/5yyQ/4rCXH3uyA+Ztl9ljwD7opGzY8IB8WElIOBuXviv/oxtrTd5RoaeVIXXMBI1ozlLaF3EtlRtmEw5Uuiib/wpGFGF8d4Cm3D3/phB+e8XrCQIC/sePYEwel3WjKAcKs8aAsPFF/S14F9D1+wo4znnClOjHofhEK/q1Cr9w+V4f/kA7PTX6yeQW43PEl3MHjT8oocM4O4fgxB10z+TjJj6Zb6Jn6cqywpmfHkoN2lmxyymdk61qunoWdbcGr6uThxLh4oA1Ffk+45m9D0XLOe+I1R94wT1NeaegU3KpNOLmp/ibkh/M1PxDnL7k+uR1wXJm/WWBNNuudcGIuxId2ftb16zs6YYWJcjwkw0J5f4vVI5PsOGAE5oJfcfIkpkbY2tbwzl8NAWbqYDEWT7S+dnmXBslMdbPJPXAwK9zKjdYc0PwaD/xXxt+cnD/o+MSd+wOcTdLc2PA7GIyZVqE7bmUjsA+vhYFfSKX63opXuPILh/tqeMKLrodFu2Sc20FixyLFF+Pxrsr9qGMcch6oUKa6nnlBJBd9bbnzNadnXoRjHG+qHS+2HwITvzCOH3RaHOOIk3q7A/weeN0qfisbEsrTYsyucVusLx34mxCz4Vy6muMHDsplJPRkBy7O34jX4p1S6Sfzp99U9pXiwztK4LOoGLjfdWSyEE+EM/Tg+gmjypMXQxYHP4nGUOwOkvHqWG3lCit5mKzQz/9EZZgQEN5dH9r97RGXdr1N15zDAzhROsjrFxXDdp1uweNkR4L8pwyn4lYYDU/71f44CTomDhFXNB3zwvi68vli2ZSetGfqF7uHfH0qfKUtLj57HejO7Hj3MgV5V/VMeemPx5onmWcbwEf9pX/NfUYuiAFX1XhVndiT1E4Bdgi/4RfKuWJavg0InIrbLXZgQ/eaFhF2zfxAT3Yg4gpMz93fbNoplT7gp1iUvxBmz26DlE4A61vFR8rAE7ylwOoRw5gK1JO65x1FTEqqjty0LW0hR5XFTELI4RUZr4jB/R9pU+k12+2Fg6Cb2actOUCIEh54hQlucOg+4NiZmDZf+PkGo2M33MoWMNke/58BciqNrzmlJriteT3gSnJga+ArnvQhauvQRM/QO0UWEvzuo2VY0rOW7cZ132Q7fqCT6lzKfvjxEtoZcIAD7xu5rhF64XVLX1rbkBZjtoTbXH3Zgt3WMqv6UugHtsrRmx044Ooc/Y3I4kHbK0+afA8PNXjtMjWPH7LpHjrPq3p8RGh4EHd7uKM/SsDI4ZCZPCwFJsRzxg/nx2shceD1AxxkbEjjfCXXW9oCgJoyhPLiQCYLJQF+X2lEDFjN0AsHW/rUkgPkKeEBbt5FncCA/EWa+GNhPTugonK1Lrvg1unuNxqz/um479+cfTg6rxKI19IYz8ldBy9wo+M561kjyJLV3mQ7Xmo/mLTFobZ9WbIfcdu9XR/dhiz46BbcltZ5DH4W9WWDH9gqc/d2QB07K3/j5jaMudgu4VPxb3NhmANobjDupN6OclLB3SgtvmTilfw8pCpm6/69BBwnG05Ytk9+8hWRpvhR0f8Ayd/KPua2FVWI3JPJfnR/vHQyfsiRkbwqCCHEIbg0Bgc/Rhknq67eXX1XnV1wcN3T8W+uQ2zCAVKU8OCkxoiOQeUZPCyEfTpP4xkTWeFcuFU/0GN0F0yfuvhcR6/PHp8Ql2xeXb3YgKzx5RrBCYfji2t2T78t4cjVtesgubPHu2togpfKd61nETiz4xocFHfZsptqxzfyGvvWyXUNPCXXrG84Jq+5bUX5sm2IwyrbfpBfbWX5aCdT6ZidcKk64muqLa3TiZI+tNYX1Z/lB2rI0ZMdcGjf1/Hc/Y3vXzzHea++p/TXK+I9nUzK3PF3Co5sg/Cjm7mAMfjVKSF5vlHE2Y+TaRy/7jOocER7fmy22hYCBIFJ4rigCdIPTp2MADoZ/AcZrxP86o0f4w7vEiqZXZiDH7BX6ns3HKi/6AJK5zF4ozSe6L9VX8d3wnXtQysOqN/LsMqDE4Yn2fw2yHMG1+gUk2fSXihmhzPilgUDRsbjEmIwNx6yeaWykvElLjyvnheqYHx9pXrm5CFPq+DlOVs9E+ar47qSvsPRjbPjTrFy7YfX0XhRxnVtv7joG47Ja05bDkd/yLYhJfbDVd5qzGZx62TI1RePx+Kx0vhb0pcsP1BJDvrahR24QH/DPDcOsa2K70+vpQQ49SHqDk/4PvjruaPy8MlFfqg4lt1yrjoeKLKQ2FVPTnnaUeQfj1VvS/XidJk4Z9et/Lv6Tl8UjYMAc+FRzEMJZ+RVwCEt6pHuXxS36m+zseUwxy4tYr6BRzh6XFrOyWN6Nh13u/S9hIOWuqa6m/GK/iryCfDRR+gag3Lg/5S2C0+VN98Q4Nx6zDq8s7gN+c85V93mbyIuHZ/NfI4wvwh/o36y64INmswjdf1BcdY36t7BOuG2ErcEKqrxXjLvYF9tEWBDmV9VBkfRIvygSl8UVry378bBIeBbeDisZTkFA7YWLo3blmMLrHGmWa8krhET3Ke+1I5ZkGX29Bh6Ntt4cOPS9Iyut9S1lrzie8bfyumpJ4sF/i9Lyv8ZrzBdN/TCbWmvzN+kEWtpBy7F35TspqVZcKl3Fu/O3JTx89+PZSXjhZnJnU6WIWWA1Pq/EulGXKpriycGbJ1VDaqbV0DoS/ZEp0bfjYMpjVt4mNawfOXqZ/GMkeHLRWz7/ikehq8W+NKXxq3rb5OxBaaufp6cPPEY1ziKt9QEbrVqyVM83lcr3ZDh0vQMiFrqWmtesRNq47EiD4AI7ESMC4vrpLGPu/yi6jX/7AHVsRduA5FWT53M5m8SSAkb5ltNfI6r+yL8DT5Q/WX+zqvpcRg+OBMnzl6rsnCrFSOnpP+nzZ0rH2S+mru/lq6yj9by1LqPnIqT7ZuKdTOxLHrtolbfVY9x4HRVWBTzUEsHwnoujVv1t+XY4qktr2mw/cqHGWa3W0MOWp5LhqPomdoZ+j7XF92vYj9Vj9kQ2RCFo/A6x6dPN17X5x4eq9xjL9zmyluSz/Slnr4Iy4vzN+rzY8XnXuccBi/9deqoPKwTJj+BuEVGH7Q6AUietH6m9CufPndUfp7OsTLc+orAXNXV0iUjX4ziH+1t2jmpJkijioyDRsB2UG3v3J772DqFCjjOxyeRkoFP7B3sfNWUrXc9o6+ma+WMG6/lmF1yCdOXy2RfvLOYuOd6z05p/Mn3CTDKz8PDu8o3vuEzWUiQW5n8L/WP/lnFibR2YQgYAoaAIWAIGAKGgCFgCBgCJ0fALTr4fcrki4kHP7bWKoP3NnkixmcxeZpvwRAwBAwBQ8AQMAQMAUPAEDAELgwBrQXuu00Gev55/IbPwY7EheFj3TUEDAFDwBAwBAwBQ8AQMAQMgQ0I/A9CjnDeuZ6sJAAAAABJRU5ErkJggg==\n",
97
      "text/latex": [
98
       "$\\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\\}$"
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
      ],
      "text/plain": [
       "⎧                                         2                                   \n",
       "⎨(0, 0): ρ, (0, 1): ρ⋅u₁, (0, 2): p + ρ⋅u₁ , (1, 0): ρ⋅u₀, (1, 1): ρ⋅u₀⋅u₁, (2\n",
       "⎩                                                                             \n",
       "\n",
       "              2⎫\n",
       ", 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": {
134
      "image/png": "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\n",
135
      "text/latex": [
136
       "$\\displaystyle \\left[\\begin{matrix}2 C_{1} + 4 C_{2} + D_{0} + 4 D_{1} + 4 D_{2}\\\\8 C_{2} - \\rho\\\\4 C_{2} + 2 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\\\\2 B_{1} + 4 B_{2} - \\rho\\end{matrix}\\right]$"
137
138
      ],
      "text/plain": [
139
       "⎡2⋅C₁ + 4⋅C₂ + D₀ + 4⋅D₁ + 4⋅D₂⎤\n",
140
141
142
143
144
       "⎢                              ⎥\n",
       "⎢           8⋅C₂ - ρ           ⎥\n",
       "⎢                              ⎥\n",
       "⎢      4⋅C₂ + 2⋅D₁ + 4⋅D₂      ⎥\n",
       "⎢                              ⎥\n",
145
146
       "⎢     A₀ + 4⋅A₁ + 4⋅A₂ - ρ     ⎥\n",
       "⎢                              ⎥\n",
147
148
       "⎢       2⋅A₁ + 4⋅A₂ - p        ⎥\n",
       "⎢                              ⎥\n",
149
       "⎢2⋅C₁ + 4⋅C₂ + 2⋅D₁ + 4⋅D₂ - ρ ⎥\n",
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
       "⎢                              ⎥\n",
       "⎣       2⋅B₁ + 4⋅B₂ - ρ        ⎦"
      ]
     },
     "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": {
178
      "image/png": "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\n",
179
      "text/latex": [
180
       "$\\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]$"
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
      ],
      "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": {
212
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAAyCAYAAACd3uajAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAMwElEQVR4Ae2di3XcthKGJR8VYCsdxB3YvhXE6cCPCnzTQXxuCVYHvq4gjw4UVWDFHSSpII460P0/LGaXIsEHyKWuCMycwyUBAtjFxxkOXuSenpyc/KPtsbamXNze3r5vRvixE3ACTsAJ1Evg9PT0g2r/Y4vAzakicCLvtH1pnPwqJ3LTCPuhE3ACTsAJVExAToTOxnkDwTMdfzqLEX/KafzZOJl9qC8IBaqc59mZPUMg4AynKYI4/Vspv9f2Kub4Vfuv8Rglt571B+njbzHed5FAgh+MrNFo7Ai/X3pfKBl6bRylC+iE6cmJ6h90xXoi3ylBsyeSfe1V4O/K9EzlUKbLDALOMA+aeNGLvpbO4VDuiM59VATO5vlS3b5TcEEBMbpVdb6IT6fhp3Owg+FrncdJu/QQqJWj6k3H4epRD5es6KhwIY+Og3fKKsAT49Ux2iDO0Ej078UIBUbXfulJZfE/9JyvOjryg8FPKRByHP9VPNun1HmP2xFwjicni51IvOExlHAdFYvhBJcMAs4wA9Yh6ct42Ddc9W08/8chix81CIzxIymO+LH0c9/AaeT3wx2B6jkudiLi+CZ2d81YzXhdyaYTcIbTWVlKhrBupHudubzolFlJwjla0y5dAmEIUPyGhrGN7dNudo+JBKrnuMiJyFjxwj9HmKZw7kQy7MsZZsC6mxTd6/RCxJNhLubnOMd8yH4iUGGXA4Ekv8PpcGS2bPvWaQ+KQPUcz+aqQWztnTSM1JxIck5E6Vlf/I22v9krX/XPoeQy5FrFmySrjjqTyZyvQSKDUFUd21ALegcTbnisKkpOBju/vQ7B75KPAcEhI2bb6J/b8Y6J2SKhbI5kKkUXZzsRMXghQ222BK3F1+n6RkPfOw6FX2n7RflfA7NiyWGIQdskce0tQ1p/SHsJ6oX0Cmfyl/Zvm/qlsPMLyMKH8Wva7+Hs4ehf8TDcJMUQh+12fOAzl2NRujhriW80yP+Ipa3NB+u5Ntbt/ybjvdNKVnrmS35oOh3FsbzwieLM+ShYj+QyNDLKh+J+FLeOs7Y0pe/FgJsaDvhJqq46T2uZOZHO8lTnF1rA8HspfoPL8cUKG2XeKXBW2O1YQEzEYxbHRv5N27LqjzO8OrMKZe7PpVidXoQKZd0+zmQviqNlSMu56XA4j/MAYnLYgQSFy2SGhXOYU72pelN7j62PLfwGeyGyWxsmDMPObsdJlNkck6VsPPJR7u+XMr2SA+lTQBxF23At3O5xkPaOw8n9LVtNP4PhVqt69N8tdrR+kDDEsjvsfNowzJfOmcojpvBTGhp+9OQYVbDVbW7HDd1ZwLFRShmHWU5E4EyR+mqPo0ABU9LuiZCmL20qfxFxCxkWwWBhJWj9IcmGTDRuG1ZNptllr/ZzjB82eaWNVyHdGZaOxNyOdyCWcow4t7+b7ETize9SijU0/BQUrOdG2e51tMPbpzlSgyMwHPmGKk6/VS37ng/BsLkB4jw6w62Kczk5gR+rKju9NOkn/FgezatkOq9CIZ+kbbft8C5V+Z9LORZD6GysJlIsWiY8uRo8r8IoGe/aurG8iqPlx8qhkEb7S8XRFSbOlge2ex2EO4qsuOLkCAyLY5JbITFEB+kJPyNvDFurmBuZ6dc76d1QQ4fs1ckAP3MC8MNWvxc/s9kmJ4szznauGjumwkfgaNyK2Y86kegsUt3aPYRotEnDJb/Ao4CmrPt8OrhuBko9XsqwVC459RJD71nkAGulXcrP7XgHdCnH1mUpIjh5OGthbcPbQK0MORV6Lr+imBbn+8kE2i3ByRk9YSDg/OYrgtvxfHapnEXo4qznRFI0xuLkOOxJV5I+lgOxB+fGsvp5ERA/hnJYbsmQIcf0/D6L44X2LiMEnN8IoImn3Y4nghpIVoouqh4MLV/dmxMZYOqnnIATcAJOYGMEzInc13DWxvD4z3UCTsAJOIEpBEYn1qcUssU08qIMC9Ed48G0d9pexLB2YQmkDxMFEukP55fmkhPrDHNopdM6wzSX3NglHGvuibCUEUfB5BbPFjBPQ5iVaLwXzGWYgPMb5jPlrDOcQmk4jTMc5jP17GyOVfZE5HXpgXyOdJmk5n+mbYkyr3uw5w9iEt81CTi/Jo15x85wHrdmLmfYpDH/eCnH0Yl1fQFv8lxVdAMfe5uo9RZyfsc7lZt8mFF1otfB8yuUy0sj8cKrvSKjNIYl8kOxhvQw6go91hx5EDp4H/pnUIYYkuaYHEvVQzgNcTwmQ7sm+r7s+6F+h6/OEgSeV+F/TQadGKBdugScX5dJbowzzCXWTe8Mu0zmxORyVPrgRGqeE4Ez8x/J3sqci1BhHue3/KI7Q2e4nMBxSpili7U7kTdiv9ow1nGu64MuxfktvzzO0BkuJ3CcEmbpYrVORF0xJtSZE/mpj7/SPNZ2q42XTro0CDi/BoyZh2MMdd71b4TtGEOyO8cRiDtGo/fDvlKqdSICAjT+M6F3OIvJJtJow5hxOC4HAs7vwGLu0SBD179JWAcZUoJzPA7HvlJGV2f1ZWzH6ybLJMsnXbC+/yFoZ9lMWHVjAp5X2+NUVpNSGR6bn8rjr1sZv+W6ICzPtmXZ5zo2h/9B12zzw5X3wA9GptvGjvB78bNXwCu4bXGOx71+4hkm1imVJa7PpCx47NmbymDIR0XML+Oh5lW9uBnNZjM1b6kM1+KnctFd/iitc20UzxtnWZ6+WLdT5d9nnOqwiv5FPr+n6qJzOGr48XfYHb5bjFNdnOMRr6V44kT+eaSPxRJbhqEcHVtLZnG5D6GAWJ+/1/4tpTJci5/KRYHRNf6sKiUWv+m3Ra/MD27JOUE5Cf5bne0TibYuznG9K7jYicSLw1CC/cEUwwklyRsZ1Krv0Sqc4Vr8ePcZ0jdcxVg58sdut9nP/xc/gOGImQ+kV7J1cY4rXcHFTkS/i4vDmLQZqxnvSj/5fouNLbK1v7RYhivyY06k77/W6aHw+hrG82lNb1ZW5scwVe/CEkGz+ZCnmwUYf7hzXO8KLnIiaqHQGvw5/jxTuKKcyHrodyU7w9mE0b1OL0Q8GeZifo5zz3XzYILYpUsgya+VzGzZ9q3THhSB6jmezVUDGWuY+2gYqTmREJ8qNxo4k1u0IquXXIZKT+savhg1vFk9U91NMuqRqh+eAbChFrigV7CBi71QU8GdOL89Bxwtcrnb9X5aOrPtkDDyr96OG3qYzbEkXZztRKRNL2SozZag3cw6Xd8I2yY4vVVzsNkchjiQj2IeDFpMGa/mhYDFLak+4Ok9ovWHtJegXogLzuQv7d+K1euQSh8KOz+DsWs9E2ra7+Hs4Yj/2kHCTVIMcSpuxwFJ+DA9zOVYlC7Oek4kKhP/uWFr8yF6rs2ep0j2NJQP6NwIO46GAmqSXIZKz5wTbxs2J4JBM2zz1OJq4ScW3NRwwE9Sddb5HxWPob5WmtAjcX4HUpHfS7EZfPGo0rHEl3mnO5wV73YsMHM5Kl8Rtqx6cA+6OjuoVtbRuRRr38qznCqUdfs4E5dxAnMY2jAWpVvPrxk3/q1lpOAm1hmuSlSt3ettsqqd32DrWbZsw4TvE1w9akcAPZzLsRhdzHYiUi4ePuozYHombcN1hWsRmMNQzNu9N1oByPVuV8en2Fm9h8ahbRhmv/LI+e30Ywo/pWFIkJ4cb2nY9Oq2taxiCcfSdPFRDmSBG3MQtO5QQJceAkdkiJHXOLFO6w9JtgCjcduwajLNLnu4STq/CMN24of9MtfGe+WSw9KWtvL9mB7mcNy0LU92IvHmxysm+noh6FSYI5lwo6xS/47FUOVYK3HVhyAf6EV6q9/V93wIhs0NEOfRGW5VXBDnF95PtO+lNbjAj3m2a9l5jQs2DMWUPXqYfM5G+jWZYwm6eDZGS5XEo7ISCDBMJqFk30nJbggjiqPlx6qNkEb7S8XRFbaVHIqqV47JUGUxVs3f+1bFVvVGB+kJh+GsGA6NFsUxD4eeIvwlbW9Dx/l1+MEOgR+LNvaLN4h0uUtgQA+zOZaii6NOJDqLwW5tNNpew717GeoLHYuhlA4nzWqs4EBi+KvCnVZlaZRVx96exdS6Or+ppDxdH4Fj6CFll6SLk4ez+qBmxltrMTObJ5fS0QJnGOuzjl+x6ZiVM3ceBFPYJUHA+SWgzI9yO57PDgdSlC3Pek4kl5+gMQzBDY+WNMf0Wj7Lq9c4pq+q54sYsny6Y7xiOLjWP/+byszh/JZfV7fj5QwpoRRdVD1whlf34kSOg95LcQJOwAk4gYdCwJyIzYl8q4ibxo9jnL0ZbpzyQyfgBJyAE6iNgHwEIyG2gIDqM6p0Yj2R9jDJhZwIw08uTsAJOAEn4AQYhmNOllcKNeXmf266VAKAjKFEAAAAAElFTkSuQmCC\n",
213
      "text/latex": [
214
       "$\\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]$"
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
      ],
      "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": {
246
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9gAAAAyCAYAAACnHXMIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAdQklEQVR4Ae2djdXUNtqGgUMBhK3gSzogoYJsOoCkgpAOkkMFOUkHhAqy0AFLBRvSQXYrCLwd8N2XX8nIHv/I8s94xrfO8diW9XvpsaRHkjV379y580HHAx2p+fXjx48/pRZ913fv3sXvcx0P5OeHPne2NwETMAETMAETMAETMAETMAETMIE9EZA++7nS84JD+uzr3LTJ3y9y+2PL/c1dWaBgf6/jz+ThewV+k9x3XirQf+rBKx3vdTyVnzSMTj+2NAETMAETMAETMAETMAETMAETMIG9EJBe+0xpQWH+Qwd6bY4uzETzQx3RPNLFy6hgfz1VOVYinigAlOvf5PdqZ66VT0D9cM15VP5sTMAETMAETMAEroyA+jB0/ugwYpihwfw0tc93682/JmACJnDdBFRnUk++Cbn8UnXlqJKdEgl649t7qWXudYgc5frfB1A8yWc6MpGLye5MwARMwARMwARM4CwEgnL9kn5aOL5RQlhp+E7PWIFoYwImYAImkBBQXflf3VJXomi/TB5NuixSsBVDHA19Oim2C3OsBog19VauL6zcnFwTMAETMAETMIGqr8YngLVR55H9dZiRYfLAxgRMwARMoEUgKNm/yfqJdEFWMk82pQo2y8P/VAImTZtPTt0ZPQgoIxfkj5EMGxMwARMwARMwARO4JALfKrHvOhL8b9k9CP2cjse2MgETMIHDE2DDM0zRap9SBZsIr13xZEkVoxc2JmACJmACJmACJnBpBOinfS5F+kFPwvvse5zb2gRMwAQOQyDquV+U5Pj+VE8DFfXUoHbrXnlkF7k4cjGaTrlndIP1+n/reKzjZynn3lFdINrGrNpE8u/NLp9V26XZtYnk35tdPqvUpbmlNPqvzamfzdwn6od82RNGXPIYO5ANZy6TBo5Nbsx8E8y9kZj/nTtm0CseRZ8KT1awe6O/kgcSMEZ0+U/vzoannU2553v0+j/Ag4C+ld1nbbdHvzercgkwO7MrJ1Du03JXxs7c8riZUx6nJV2JORMCfAL3q/o5fAbXMC6TBo5Nbsx8E8y9kZh/pVxbl+mVkLIHc5aIl8W4f1/P1ej8mpNMvZR8i/5E7tO/KeO/0/i2iUbMJhAwq3JRMDuzKydQ7tNyV8bO3PK4mVMepxVcsTrvtfotbHbWMC6TBo5Nbsx8E8y9kZh/pVxbl+mVkPIHVrATduFF+z2xGrtk+/a4o3p0+1W48LdNkcjt2ayaPKbcmd0UWk23ZtfkMeXO7KbQ+uTW3D6xGLoypyE6KzxTHwflmr9X7fsHGJfJCtxHgjTzEUArPzb/27+isi6zsKBZwQ5A1fCgED9Ww5P17bTcM0ONn3+FIOIpftuUFU70dM1nsyovXbMzu3IC5T4td2XszC2PmznlcVrSlZjzt6N3Wivu6ihcJjWKzS7MfDPUnRGZf/3dtXWZTgmZZ+lvsD/xq75L0gvX3twMhZldOLH/S41TXD7OCPB/dX/zKYjq6rtgn/UNd8vvtd6aVXnJmp3ZlRMo92m5K2NnbnnczCmP0yKu1H9hCegXqXItO77DRuGOfRWXySK0JwVi5pNwLe7Y/O/cMYPFxeo2QCvYAawamde65GgYNUL8jyRLqtLvrHGDQs5/SdZGblHGOfp27qzdHuzCrMoL3OzMrpxAuU/LXRk7c8vjZk55nGa7Cv0SVue1+zAo3Wmfx2Uym/bkAMx8MrJFPZi/dZlFBSoN7H564+teAiyfqI0aLO4Z/a1GgHkQ7F7pkv/P9vJwoMiY1S2Hkl+zK6F268fszK6cQJlPy1weN3PK47SEK7Gmj0K/5LWu4zeW9F8e6nikvkq1Is9lIhobGzPfGHgrOvN3/7wlEovfWsHuQRoaI2ajaYz+qXsaqTdqkH7jXgfmB9lX3zXpmj8if2rlGiwNY1YNHJNuzG4SroZjs2vgmHRjdpNw1Y7NrUYxeGFOg3gWfUi/BSU79lPSwOPScOxcJimZba7NfBvOfbGYv9/7PtlYxP6uQvmg4+tcxTCM+uCHv3lg7f4so/BQYl8qrItZVq008z32V3tM89547pXV3jh1vUR7ZKc0PVNav9HB8kIMSwzfV1e3syJxtccvej8an1AEN5uczs3uUjh1Fca52XWlKdopbchXlMEbXSN7zMZVg596jjLBKqKTvyCS/apmT9zMqb+oxSbKT6zDqKeQJUysv7j/SXKUKqGVg2v82YPsHq1czs38aLzb7+25+bfTc477ozJQvtE76Se0P5tpFIPc0R5M1ndD+G8JDM8sFWKzi9FDbonwo45XOe7H3Cicd4Q35m5Pz5VemP24pzTFtOyN515Z7Y1TLL/0vFd2pDGkDaXmpM7QMwagcJRdr3SFM8cupO/s72hIx245dTHeC7t22pQuZuGoe591PENZQu46n7fdr3Ef4t6DzJlTR73ULnOVF3XUu7Y99zIo4Vw86Xp+bXbK5276NIH71ZfLXpgfhXf7nd0L/3a6trw/KgPl+y8dozqs3BTpu/KHAv/hnn7OZqTl04hVJowUxNvdnpVOZkiAfrbZuT44e+O5V1Z749RVnntlR1qVNioP3gGWH3aZaD84OtjlcQm7vbDbO6cu1nthl6ZNaXqg443skKf/UweEz3QaRnZxs6az1M174GZODZEYvBEr6jDM77en5m+QMeSM/8i9arMH2Y2Aj1Iue2F+FN5RvuJ5L/xjes5xPioD5ZsB6Ic5zNUO3OS463NTomDHhM1aOqVM0hFied8fIXEx3L607sUeBZu/59rVRmY75bk7Vjvl1CXbu2OXJDJ+u9Q3yETaMYwSnsPshd3eOXWVzV7YpWljqdVXOr4cafAY2LmRm1ltUxrxhOs9cDOn/AIbezcJCXlicKeeCMgP/qJc7kF2I7CjlMtemB+Fd5SveN4L/5iec5wPx0B1OXlGaZ7aR0BfnWzuTfbx6aN4ZhTmmG/VEWLWIXbCyfjujdLMX3axodnezO547pTV7jh1CdJO2cWk8g12pyITBjDYrZYK7GSmMQaw5nlH7HbNqasMdsSuSp7kiWXfzDZ+r7SNjSYzYPuvyuPGP+fmZk6TC5x3k89bhgbKYydsj+395Az3eTi37LbSdYhy2RHzQ/BuyRjv/V778e2krnZ/UAZ8dz21X0obEQeiJpVHiYLN5jHM4PbNXo0mQJ0BEhs7QrERW1TBVhx/6YhLVUfTdMkOtuAJn0tnak6LSTnv78n7L74oQuypwLOx2UY5yTMXLHfmlFfEna5U7rQJzB7S3sQl4J1ugyVtSfwroiF3o88uSebMabQ4uxx0vpsth7FPEs+tx9NuL0mmpuVsUdcul0VxjgZm3qOI1neguoF/KvpFxxsdn+t4pOPHcLzSeXQGVW4uQudROskreavyldxX+c2hLT+T8yo/9CUYsJ9qfsZD8D/J7/0prhUBnRcam+IRXYVRCYo6THE2IirYnQIk96yX/4eOvznL3+jusCEOlpwv0jAqnN2aqTzJiPygCLHLczV6mZO5S2c6lZPcI+vIJDKEjLKjbJRZ3XabS+fUnatPtsofslMZXcelk3BClmAFp05lKPg9hNyVcpI/y10lXdVP/IY/q1EM72fjHT2IzM3idDSZS97NsVV4sa6LfRTazsn9ESRZ/qgjD9Enqd7cgp855UJ0wf8h2pcCvCde5vCWX7dTJ0RnWXyj9usncWVSkHqJflT8j3pYY9/bX5e/S6pfYl7JJ581/UxelQfu+RSsyrfOnaYkr8HPA8VT1+WdgXdYys9r+adP+0JnVj5kh5GtYCtgCpkONXCyI+hIL39vlc5+xQ7RidKuOImvVqp1/0QHO78N/j2YnhPmZx1xX6PVFJ50GGJnbNLgwxUwncIJWX+hPFdyjszpnopg9K/kroCTsjloGPHGtP/ChgqSSv5/On8nDvU7qvsjyl0JJ8tdJVr1T/o3SrVlzsXBZG4OpyPKXHw3035Il1g9DpaVIi6ZKuqPEMYB2oUuflPtSsvliO3LVLZd7kt5H7HO6OK3iJ3qFfri/wmBcf2n6ot0koLPaBnY6zWXUr+Edrkvr8gVn3kNmsK8Ppe/0cnZvojl96nSjh7wTuenuh9rO6qgRv8HW4HRaUa5QNnI+Q6uCrjrJ8B9rmcpREZ16SAwMtAYoZF7BIs183VmZMdfZ3wmu6iY63a+CeHOD6gVgtIJ41XMVJ4xEfJHxYoCeTKoEd0scZ7CdE+clG7krh5ICpxZ+vyF0jlncKkT6xROnQF0WK7FU2mtRhkVfucAlp7TEFBRUgmljQQzDIeRuxJO8mO5S2RZPPjrINqfrPpe7hmhbrQLsrt6mZvDSX53K3Mr12H/HAtfbOhrsNdEVdcFVlv1R2K/K3kjRi/pn9XflIf0j3qa6mCM29Twonull7Zlcrkk/ld/15XG2eVCeqeUzd54K+2b1RlL8J7COsrS2HnJMiGPCq9qt0JaG30n2dGfol+V1Q6OpT0+n8JlqfzGvHJWOmjf6WfX+l1M25JnxYV+2diYWnb057GrJ4Jy4gxhxQGm3pl2uWPQ7+39nEDlBhipUpzp7cTZw64MKTGARtGujeyIk9GcdrwIIhVpo/Ou+1lmKQGalYjpnrN5Tg96vo8dMS3hhOxFZRqZw6R2tzYL/O6IU05uct89WJ3F7IRnKadUxo4ud9T9dedjSJhCw8f7WisYQ+6XfnZmmZvL6Wgyx7s52KmTPMXPX6pZjzP0R3j3R1dMDcnxmWVyKGl9zyaXS19Aa9mL6exyIW07KZs5vDepM5bgvRPWvSIZ8hgnIHDXrptQ1hjoi/2B3rCmPDgHlyQPyF612dyUNE91G+rtx4p3KX0x6gRZSbk/5ioA+UIJ5Ts4ln9+LbvJnRj5ezKQSToI7Q55vG8LFW4byvhYHq7xeQHPa8QwmqcSTpLT9sw+FRzmj9vTMX/FMnKolkz2UIjLKifXET3hXZx1KSfL3UlR09F4Jp6fi81Yw7ZkI3qSkJ1bFHM6mszlvJty80DlzSwFq+rijrPuj6z4EswolxVTdb1Bz+F9tDpjQylgBS+zqrXOE+oilNFYD22YnFWjIq9b9BFhx6Zx7X1c6MtG+7/EvHc2OlJQGLQJDLyywqA9CBKdNc6jCnZ0rQB/UATcvtWZHYLHOjzRKyMzsXGq7VoXCFSfGxTqtqEBPKyZyfMw3BbkxIvFN8d1xXcYiM2MUllhOisX8abSip97dLqpfF//z1Kcji53sUFDpnobQMkd7qqdPq9ftDpzuCSna5e5sXeTvsVbHXR0G5+sBfLuj3SK4GzLueUyOwEHC2BJ3tdeZ2wlGpRJu9/0rezodxZ/P7xV4ifGQ75WHzRQHc7M9cnstfoMxM8AatyTajD5oY/BMn103+yBgXuDobYehsTQwAzNYDV8KWEozm9CRhvPkpuq0QpuE+vq8mHLon3feny7Y6fC+qCDdfa7MUrPAx0f56RLfufyLOIR0r4J0xDXLjgpLTQevIi9HfwU6Jac0niHrpfgGcL/TmeWKp0MrikOGgc6pjQQk75rkftesyXPPXFSWg4vd0HOkCX+viQu2a1lRXZsesnINLuQLjb4pTCppzep68hMiK+4vluKk9KxW5mby6gWmjt3qMNYmnjSSVIc1GH0Gf7Q877l2e3+R/ue4E9MSP9mMnWSgJUsdlQuRTm8tHLZG2+lZ7d1RpFAFHpaqFweKfp6olFhcg9fVg0Ptm8h/k3ql7l5lX/yyEDm7zommwXzShpGjeKjXUC5ZpLtpN0YCuD+0MOeZ3Ro6PCwGUV7tKX2AgTdsOsaiaMTQcPVEBTZMTPBCELlRmf+Ay6OKsROfBsC94OZRBgVDkp7DEOX5zchXaSJDlzWt4Ux1bjX9RyeMaii85ZM98JJzOnUU05Zo1yA3ZJTbkHO4Ukc4oDcUSlS4cd73i8MHcz4jrLJzsloYeWq8GdLnnvhZLn7JCzIk3iwyVT1H6E634SnyB//KJH9bgZ/o6ctZY7EzJW7EMYsTnuXubmMBuow6i8MdRhtc725JZaJiX2JWNfFR9wP9kdwuLVMxcStfd5BuczK4qWVy554773OmCUYEz0vUC5RB6KdQ5nD8Kli1mrhLeV4bl6VJ/qSjU3HdJ9t5uRVbBmwoB9Lvc3/cdO3ZQJ4aDa9Wj0gN1mTbAqvNqO7iNcuw4USBBx2EfxVEa66bEFxEc8mu3aG7PWelBYKhMK5CY7g0P6rovBo+KSw4jLaGNawh4WfKn5e5tV3EY/JLmV3Tk6BEZ2tSsbD/Xvdj3amYr6nnhUHMpUqDFQElFOn0ir3yOPfIR7+K/73ofTJ/dHkbhLPwJEBhLNxUty8m5vKXcz32Flpi3UgTmGLGR3V3QHPzeo6gFwap3PIXGAUVyVQdyFbDJj0DtoHtud8N3fTH4HFXKMyKKofu+JVWGcrl5ieIMebvusx7rlnpf0S2/JdtlN9ZSHGpe0X/TD0kLRv1hlN6XsQyp99qtr7/3TGs6Sl4i6qB0rzumTatwhL+eTfJPjrtL5VTSfJkB9khhWd1Vbpj+SZUdbRQ+4RUiKkIht1P8eN4mAkp45H11TiNMKrxtsOX3GSZ3Y6fxaf6RqhrP5GJtrlnuXvl1y3a7hT/HDkw/7VOSqeYnbn4qR4eTlYcQGnePBZBLPZqzBT2MhTLevEI0PcXNRyF+xhSvpYRVKlR9esLHkX77vOen4kucvm2WZ1Lk6Kd3O5S/Ou+JG3zjpN9shco+7VPZ1C5LOWwzS8eI27eL31WXGTp03qOvImc1GclN6zyJzibdR1gR2zCXQye+tYPT+nLO2iPzLEJ/eZOBbXj11xnLNcYnqQHR2bvesx3jlnpffi2nKl+Sx1xgKcS9svBtYafvvSIndF9ZP80Z87qRP74lnKXnEW1wOleV0q7VuEozzyftKwZ5V/TJPc847Ql6p+ShTsSRHGiKeelT4aNTpyHJsLIOmVoeH/0E57sJ+UJvmhwH5sh7XFveKtXiadqTAqoVk7LQq/iJ38nZMTLwZ8GseaZaS4kHPia3Qwg12j0yA7lP2G3AU7lrp0dk71/Jw8zyF32TxTZmfmdA65Qy54R6lfOSODJwNJsmMAp8ueNJ/UjZEpfnRsXt8pzs1ljjzLXBqnc8gcilBj0DCwQ1Z6Bwn17CyyFGU5pPHs/ZE0PaXXYllUP3bFd+5yUfxnede7WEy1U9ovqi0nfzKb1xlTubbdK82l9TLvCfkd1Xfkpqh+Cv5O+n7tPKxxr7iL6oHSvK6RhzXDTMpmtPzTdMjfZSjYaaLPdS1YCP9Jwy+7agZnSrrk56RjMcX/pbktZXdATiwNpiJvzAa2+fE82PHXRZ3KdJe9/BxN7rJ4tlkdjVOaf/IeZKtPkW4M9OBXJirlnfJImGkc136t/PIOm9NA3SQ+tJsng4Gyo4N6wi7KjJ4dSpZivtc4i2VR/diVFpdLfjuc8gtlQCXaWXembtNr857OW8wm18uUC6x1MLs8qmDhNi2nnGv5qVZd6FzpGDpvOhit+IrqAfmbnNccHntzo3zSJlE2o+Wfpl3uKwX7ni5sBghoLT2AMXFTp9u729+/OckNL2KWUSEMfUyfFcalOJrD7kicKE/ll839PuMcy1f8qHwxjL5GwzfhN3IXN92J9oNnuT+M3AECjjpyeDa4HY1TI/PDN8gb/xsZ68O26077A/I0p7ZknN4za8cGM2xqmsrNc9mjfHeaA8pSJ4clLMWyqH7sitvl0kUly85teRamRRyV1Mt8d53db5riNuZIfl7r+ELHXR1saDZ5I60YVslZ8RXVA/KXzaUkXdfi5/61ZGStfEiQ2JH8RuE/7IiDzVkwKNiTFJ7K15X/mF15AYeOJ51NNhNMKzNGHP/Uc0bIvtPBIA8bYzDCVivnurdJCAzwTFz5so+AZKtvgw/kEOP6TxDMqZKFwR/qKb2PbNzIACJ/LcPmQdRh/9Gzzg0d9cxmRQKuH1eE2x+02/J+Nos+mVov631g5jqd2Fg0PXsNzPXAsiXjGew8nig4sSOZ+qCCxGTPYN86P9Sv2U0oblVwzBKiWLMsCYX55+g9VH7x9is1GuzgjAJOB/WFnscZ7+jm8OchnoeHMxOA2FL/UfchgwxC2nQQMKdTKJIX/t88ztbQkUWWPEB4impVG9ePq+LtDVzc05Ubbst7Sa33oK9eDmXDZ1KHGTR2PbCOnFnBzuCqF42lPIy6syFAZXSNMhM7BF3Lx4PLY5/Mblr5U6nDTAczOmxG9z/JWhzIiYGxKWE6q409svhSbtOGO7o/7DmT52H5zMw4ihFL3KgfbfoJmFOLTWg/qau+0UFHlgHsrrpO1jZrEXD9uBbZ7HDdlmejWtxhX738XO9FHPxbPNI9Buh6YJ1SsYKdyVUCWHUE1DF4pgNFOx3dSq8zQzyOM7MrK+ukkn+F4qz7OEvYJW/MeNNh/aostuv31eZ5/TleL4eSRzonfL/FTKRNDwFzOgUjJiy//E6ywzeOyBCDiQzSUH9VdZ3ONhsTUDlEpcJlsDJ7sXZbvjLjoeD76mXZM3H2+5Dfa3/memC5EraCPYGlBI/Zmt8QQB1/yivLIzFdCs/tE/9WBMxuWBBUsbM0PMpT6vgP3dDxjLPYyFpsnFN38borjPjsMOcJPA/DZKmMim21kkfvNJ8m2PQQMKceMLcbmX2fPqVN1T3f+ad1XerE1wsScP24IMzyoNyWl7Mr9tlXL8ueuudx6NsXh39JHl0PrFta99cN/upDR5lB6R5SeK4eQmEGza4JjuXg7EjPztdD8sTATlS2myHc3nmw55ZDLs8uhrbrISD5ZISfXU9r5ZpGGueys+wFbuYUQLRO4kInNl2NU7uQ/LB5I5ucPawtfbEWAdePa5HND9dteT6rRVwO1cuKgM9UmOhgdVZqUnv+RjCu9EjdXOq164EVS+7eimFfTdB64VgWzm6ndA4qo2teOg5/f3iLpPPX7DqxdFmiVLNcsq1cV8oLz4InNj17kMpisGf2h7/viu6C9WFPuTwPC2hqxkOdxwh/rVyHMFC6bQIBc+oXhVC/8c8csV5rO6aNdR3WprL8vevH5ZlODdFt+VRiM9yP1cuqm5gse0r7lh6KMr4r2F+Tcg3NmDfOqYn1s+vilMrEa89g5wF7IGf17IxeVO5f6uCFq+3zgjqcK7PLK/KTgRrJGYoLFR1yVlWAOsdZnueyr/wEefxW941ll7o/ssnieWRAHXnnXe00kjHk8JWO17qO/1WM+4c62Kjn2joeytZ0Y05ZzPhun+98v471Gr50z7fZb2TnNhUg6xrXj+vyHQ3dbfkoosUcLFAv97aNiyXyPAG5HliR+12F/UEHDR3LVbKMhPWjHFajPVkersCR8px2KsmR/3c4s1zNLg+UOLH0O900CqXmF72bJ6OIgSmV/o0O3P085R2W+6s3U3hePYyBDIoTS+JQlJE/ZIq2gG//30mmqt3q5YZN9Fix02XY+Z6Nqg5vzClPBMQJWWKQ8L0O6jDkzm2qIGxlVAbZ7c1WaTpiPCoH+pbIP++B2/IVhKCkXg7lQj3Fe4Lh8xUGANv/4FI9vNQf1wP9JSc2vJfoyOy91V651+tR/pCbt6UKNhHSqWJZqo0JmIAJmIAJmIAJmIAJmIAJmIAJXDyBoCgzucDG1iez/X0ZjAr2vT4HI/bMqD1SIIy22ZiACZiACZiACZiACZiACZiACZjANRCIqxeK/rqtVMGOmnxcNn0NIJ0HEzABEzABEzABEzABEzABEzCBgxLQBDLLw9Fx2Xw4+xPqFFeRgq3I2IQEJfuJElH9J2oaqK9NwARMwARMwARMwARMwARMwARM4FIIBOWapeHsi5DuizQpC/eDa/77jYCieS8lOr2P9vVZz38Nfl7o/FgPvh/zU3v2hQmYgAmYgAmYgAmYgAmYgAmYgAnsgID0Wf69h3+JYiL5yxy9Vn6Y7X6oI5rq8+m4yRkPU5P9QXcImGn0h0pIsaafRu5rEzABEzABEzABEzABEzABEzABE1ibgPRZFGP+jvSF9Nns3eLlDx24vZr75v8BVfm8pGc8bN8AAAAASUVORK5CYII=\n",
247
      "text/latex": [
248
       "$\\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]$"
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
      ],
      "text/plain": [
       "⎡⎧    4⋅ρ      ρ      ρ       ρ      ρ       ρ      ρ      -2⋅ρ       -ρ      \n",
       "⎢⎨A₀: ───, A₁: ─, A₂: ──, B₁: ─, B₂: ──, C₁: ─, C₂: ─, D₀: ─────, D₁: ───, D₂:\n",
       "⎣⎩     9       9      36      3      12      2      8        3         6      \n",
       "\n",
       " -ρ      ρ      ⎫⎤\n",
       " ───, p: ─, r: 4⎬⎥\n",
       "  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",
    "normal_lbmpy_equilibrium = create_lb_method(stencil=stencil_name, compressible=True).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": {
325
      "image/png": "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\n",
326
      "text/latex": [
327
       "$\\displaystyle \\left[ 1, \\  x, \\  y, \\  x^{2}, \\  y^{2}, \\  x y, \\  x^{2} y, \\  x y^{2}, \\  x^{2} y^{2}\\right]$"
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
      ],
      "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": {
361
      "image/png": "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\n",
362
      "text/latex": [
363
       "$\\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\\}$"
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
      ],
      "text/plain": [
       "⎧                                     2   ρ                                   \n",
       "⎨(0, 0): ρ, (0, 1): ρ⋅u₁, (0, 2): ρ⋅u₁  + ─, (1, 0): ρ⋅u₀, (1, 1): ρ⋅u₀⋅u₁, (1\n",
       "⎩                                         3                                   \n",
       "\n",
       "                           2                              2              2   ρ\n",
       ", 2): b₀₀ + b₀₁⋅u₁ + b₀₂⋅u₁  + b₁₀⋅u₀ + b₁₁⋅u₀⋅u₁ + b₂₀⋅u₀ , (2, 0): ρ⋅u₀  + ─\n",
       "                                                                             3\n",
       "\n",
       "                               2                              2             ⎫\n",
       ", (2, 1): a₀₀ + a₀₁⋅u₁ + a₀₂⋅u₁  + a₁₀⋅u₀ + a₁₁⋅u₀⋅u₁ + a₂₀⋅u₀ , (2, 2): M₂₂⎬\n",
       "                                                                            ⎭"
      ]
     },
     "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": {
409
      "image/png": "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\n",
410
      "text/latex": [
411
       "$\\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]$"
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
      ],
      "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": {
442
      "image/png": "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\n",
443
      "text/latex": [
444
       "$\\displaystyle \\left[ \\left( 1, \\  \\rho, \\  \\omega\\right), \\  \\left( y, \\  \\rho u_{1}, \\  \\omega\\right), \\  \\left( x, \\  \\rho u_{0}, \\  \\omega\\right), \\  \\left( y^{2}, \\  \\rho u_{1}^{2} + \\frac{\\rho}{3}, \\  \\omega\\right), \\  \\left( x y, \\  \\rho u_{0} u_{1}, \\  \\omega\\right), \\  \\left( x^{2}, \\  \\rho u_{0}^{2} + \\frac{\\rho}{3}, \\  \\omega\\right), \\  \\left( 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}, \\  \\omega\\right), \\  \\left( 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}, \\  \\omega\\right), \\  \\left( x^{2} y^{2}, \\  M_{22}, \\  \\omega\\right)\\right]$"
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
      ],
      "text/plain": [
       "⎡                                       ⎛ 2      2   ρ   ⎞                    \n",
       "⎢(1, ρ, ω), (y, ρ⋅u₁, ω), (x, ρ⋅u₀, ω), ⎜y , ρ⋅u₁  + ─, ω⎟, (x⋅y, ρ⋅u₀⋅u₁, ω),\n",
       "⎣                                       ⎝            3   ⎠                    \n",
       "\n",
       " ⎛ 2      2   ρ   ⎞  ⎛ 2                         2                            \n",
       " ⎜x , ρ⋅u₀  + ─, ω⎟, ⎝x ⋅y, a₀₀ + a₀₁⋅u₁ + a₀₂⋅u₁  + a₁₀⋅u₀ + a₁₁⋅u₀⋅u₁ + a₂₀⋅\n",
       " ⎝            3   ⎠                                                           \n",
       "\n",
       "  2   ⎞  ⎛   2                       2                              2   ⎞  ⎛ 2\n",
       "u₀ , ω⎠, ⎝x⋅y , b₀₀ + b₀₁⋅u₁ + b₀₂⋅u₁  + b₁₀⋅u₀ + b₁₁⋅u₀⋅u₁ + b₂₀⋅u₀ , ω⎠, ⎝x \n",
       "                                                                              \n",
       "\n",
       "  2        ⎞⎤\n",
       "⋅y , M₂₂, ω⎠⎥\n",
       "            ⎦"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rr = sp.symbols(\"omega\")\n",
    "collision_table = [( exponent_to_polynomial_representation(m), v, rr) for m, v in  moment_restrictions.items()]\n",
    "collision_table"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "method = create_generic_mrt(stencil, collision_table, compressible=True)\n",
    "analysis = ChapmanEnskogAnalysis(method, constants=set(parameters))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
492
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABTAAAAAyCAYAAABrnfTOAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAcTUlEQVR4Ae1djZXUNhdlORQApIJAB5BU8EEHQCogdLA5qSAHOthQQVg6gFQQoANIBYHtgO/eWclja/wjz9jWz7s6R2NbluX37n2SNc+ydPb9+/cbY+Hs7Ow2zv+OeBt5X4zl1TkhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBITAFALwOd5DngtG+BzfjuW/OXYSBT3C+X8RnyCyQAUhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBITASQjAafkFBVwivoYP8p0bRNlb5qADExfRafkO8Q0KvI/4qbeEDBOpsFP8G7afMxTxZJEs6HgySCogOwQs2K0FHbMzLAm0CAIWbNeCjosYg9FCLNhH7TrWrh+rpgUdjTZBi6htwT4s6LiIMWRWiOPtAltGOqkYH7TFxHH1fpy2viXsO05GeVtCD/gb/0Q5DxE5GvMj79tX7q2+RGTmRfSAvkdBxX02DpmvIPtj6PER2w+I1QULOlZHmhS6YcFuLegoU64TAQu2a0HHOq1zG60s2EftOtauH2uCBR23qfF13sWCfVjQsTbrdM6o1+DuqdcNaS+xT0fVY6S/Z7q49ejksY3lbSlpwf8X2gPK4yDE14iNvfh7DI3ApDExHFxwnVzMLz36HEVac7CgY838WdXNgt1a0NGq/dautwXbtaBj7Xa6pn4W7KN2HWvXj/ZvQcc163ntZVuwDws61mKn9C89bysDZ9VvOObAMw6cC4O4DRFJczyXt5OlpBMThXA05hM4M2kHnTDkwOTn45+cB7xzQSkHUJbzdzLsvPnXu3X9WtCxLsakDRGwYLcWdJQ114mABdu1oGOd1rmNVhbso3Yda9ePNcGCjtvU+DrvYsE+LOhYmXU+gz78OjYM9NXws3F+AbwL4tYjkcU2mreFpfXr73ifXlP8kAOTGej5LDlw6OmXkp2wEeBb0DECBmUpDAELdmtBx8LMTuJGImDBdi3oGEm3svUgYME+atexdv1othZ07KmeSopEwIJ9WNAxku4istG3dA/Oyd55DXGunS5u86F0Dm9LSu19kffDQs/g4OukOaP6hsS3OFfsJ+TQgx5+Kv6PU5DKv4NOo8uyu7xFbIzoyLcxfng5GzbOh/A74o+1OafBpwldjdht9e0P6iBHgJiwWUu6qn6S7XoC+OSba/4R+A/xZ8Q/8OwsaVHGzeVXHYCVFB7EYeEE9oivtqwHlJEk1YERcHQqKwRgq/xvz/8Td/x/ewv22yahxPatj7cldUL59Pv0+iRvtW9Uy75T2H8v/5yVwYOALVdU9x5d/gFnvpdIYwe/E3DuHAk/ILLj/wPy0JGWRXD61K4j/7hwToyHnjPoTcfQbRxfhUSUyiX1gOwmdI21W+SbrHtjfIe2seWxBR3n2mzJfFrS1YLtWtDRt3fQlfMW8Xm5W4wRx3zO/I14x+fJeZtCfgv2UbuOsfrR9pFX/wEy/Z/TbpvAk9qyNiAT+7F1APnU155oByag1ukTEYANsl9C5+Ur/98+1n55a+Qtsg2n7D5Ah+Latz7evD7crq4TjIWrPTUR96S3k8MyL9vpJe1Dds7hSR3YcW/rxrRzpiHQ4PltPePndj53/lek07G5ux77LDMbTJw81eoI/bzX/VfPgeOFfHEkbZvX0rm0pGtM3Ryte+B/lO+2baTYj6ybpes4x2al6/45Ittttd2qn/vn2NJYuHao07dBmu/fPVr6fkuXl0p+I+131c/hSA5H22KUMfrcWtre55ZnQUePidNVbdmMZ2ekfYzaOMoYrSOen1RbCzqmwnbL+4JHjr7s+FciuR21T5Qxat9b6jh2L6drce0b5D7gzeu5lE4ox/dZO/bB+zROoNZNBzP7PLlvoTCdXB/bcrZAaJySPI9Az3/HcFw6iel08nF84DBs32PLfchStY5OvwO8kU5edk7oEG+kl8ylJV1H66bjeLLuDfEd2sXWx5Brsm5WomOUzUrXw+eGbHc9x91UfbdQP4kBAj+7CV8A8hnJk0+mcEp9PpX8uK+V9rva53AMh96+kbfkfuMoh6Xr2JJfbdkM5yVxi6kDyBP1P3eojnh+Um0t6JgK263u6zi8CO8Xw62/Zsg+kR5l376cVFvIWVz75vg54M1juJROKGfQJ3kTJ2sMP0GpD4FiTGPwc2JeH/X8YtgrAeNw5q/B6Sscs7OTQ6hdR6549R6VgZjvQouX6JXlW9fkzKUlXUftthC+vEkObS3oGGWzlfBpSVcLtlu9jqh37KewH/MmaKQ4YoEh6zkwE8tfvX2A/9p1HNVvVwNGfgp5blnQ0U+vpLZsxF4HTo3aRyE2PqBak2xBx0bZ2nZgg+fUCf/zd1PcBPqNchvkPTgsxb4hZ3F9tQneNmuza3VgspPOuRLbwS9IFOP8ovOSoXGeXR/uHJp33X7qTbU6uoaHHZbwT9bOeYzGLkwf4yJrLi3p6kiastus+RoztNa5qnWcabNF82lJV9XPHQLsHxRts45H9ne+tF8AuvRfXHozD7hLz22TUv6q229HdO06Tuk3Ze8ltAEWdCRPKduCKTuJOZ9K/in7KMHGp/C1oOMUBkWeR9/6CQTnmiSN8xJpXJ3c2+UUt1N6+3Jy9uNQh1TtwxR+vecjeNtMp5u9EtaR2HTQATidYRxF86KnQz+mbThqj3lZVi6hdh3D0bL887VzXrIStRq6GD5y59KSrjF2mztfUzZnQcc5Nls6n5Z0tWC7tevIl32dl7V4XvIPASM7zLmH1PLXbh/kv3YdY/Sbqge5P7cs6Ji6LZiykanzKeWPsY/cbXwKXws6TmFQ1HnXF/m57bx0CtCp2Q4x3Lbz9+3nbt8p24c+vAbTZvC2iU61OjDfggHvfScZl4hvUFn+5MGMcDfIGx4Hpzc9rFZH52Ruj4ThkGROxss/X75BY+Pn92OAD7kLj2PKWDyPJV0deLF2G/ITHi/OxYIFVq3jkTYb8hceLwj/ckVZ0tWhVrXtWtARz0q+ZGX/p+kDuTT2g/gS95PDIctNBvKrDuwtI2ynw+N9zrz2YjmckjrUNzyeun7N89XrmEFbcBJ/ieWPtY/QpsPjkzBY+WILOq4M4bbFo06wX8K+yG6Vahy/RLxA9P0T/78+ltspBUJ7Do+nrl/tPHQupq8GWaN421KnW6sxk7bg57g9KwXnV/gBkasXzXFe+goUjrbkcS6d/9p15CiR145D7O5GkzzG1vP6jokRoQQuLek6Zbcl8DVldhZ0jLXZGvi0pKsF261dR779ZnjRen7ex/HT3J2XO6n384ynkr92+yDMtes4pZ8ztcFNCc8tCzqqLRs00ckTU/ZRgo1PKWlBxykMSjtPRyWdYbv5LwPhvU0yeYrb4NKDQ19Wzn6cktq3WN420+nWAeVHJKCT/BKX/Yd4hciO8l8pO8q4N+Vo5lXA/qzA66ETjb/PU/9hVmErZa5dR6cfHQdh6EsL8zTHBXHZp1dfWqNbuFOQroN1swQdQtzDY2e7FnTss89OWkV8dvRynHfSKtLVgu3WrONj2Ocn2CP7MK/C9qmA46TyG2q/q60DUxxO1YES2nILOoKnpG3BlJ1EnE8m/5R9lGDjU/jWrCN8EHS80WnExWy+Qlf6VooP0ONhjBJT3E6Vwetz9+NAh2TtwxR+4flY3rbU6WYo5NxjGAgXy/kHyr1C5CjHPxAvkU4Pewkh9M57mS+w0/xBhT6cm+EtK4XPUNDWgo6kw4qetesaW/eG+C6halrQ0fMgXQ+fG7Jdbx15bku2Wc73/VeesEZJVYL8JdtHFAnIZEFHYjHUFsfqH4tnynyl6lhCWzDGa+7yx9r4kP2M6Z7LuSJ1pK8BkQ4uvojszGedC7AZyTFkn7Hcp1Il9/bhGFw20+kMFaQjIBx1NIRviHTWNQ68TiZ3gLycl/Al8t1pn0c6R2Q+QnqUp7197Vb7kJEO1t8oJyL3Od/CzhGL7S4gzzl2+Ak6w23oM/jG+jrL9C/KpCP0HspafWREKh2nUVg2R0o9t+STqFnRFXoO1r0YDJa1sHVKs6CjRy6VrrjvZu2tJV1T8ekx3mKbQsdT7RXXsy/zGfEh+hi5THcTTVdJ8qewj2ggF8pYs47O1jb/D0BqcO9Nnksl6+hkV1u2UF0eKgY4q6894QsYwm4qfYl6jjLopOH0L/RRKLQQcG1Ekja8JcZRu072Vdu3JexvjnJr6YRyWQcOfJJ9DkzfAeaIShrGYEChnIeQbwk6jk4HGoc+38G5q8ECDJ5w2GziwDQI7+YqW+LTkq6bG5JuuAoClmzWkq6rGEsGhZ7KIa7nC9kL9LuK/NysdPkzMCGJUAACp9bzAlQ82UlbeltQuvwl2FjuMp5az50N0c8iX0ruZM+Ub4v24VT7m6kS2/xV+p8olw7M9+jXckRyE242e/sdCsAQs0iKz3t9xf7XOy2Hzu9zak8ICAEhIASEgBAQAkLgJATQwWMnr0jnJRUvXf6TyNPFQkAINAiU3haULn9DhHZSIrD7hBy25H0qKWXRvRdEoMb2YUWd+DXRgT+xz4HJUZdfKMgYV/CI8lNzhq/Xm95fjuZUEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAYR4BOm0/wt5y7eIEtp59QEAKWEODaOhzhyWkrm3Cr2cMOTnLuSjodY97g+xW6+94MjDk127fUvhAQAkJACAgBISAEhIAQEAJCQAgIASEgBEwjAH8MB4k9cCA85yhMl/YN2/s45uI+u4Bj5uN6JJ1PbHkS5/wcp//h8AfkGZ0akNcoCIGcEIDNvoUdcw5YOvD5ldHO9psRmEik85Lezcf+ZKQCfiRmX3a/AE7fOaUJASEgBISAEBACQkAICAEhIASEgBAQAkJACOw/mf0ffDK7gWJ+C3B2ozDht3mAyJW2ucDwwRevOEefzs5piWu5cPA/SOP6JApCoCgEYL9ca4dOzI+w4d3n5LewQwfk34j0aP7YqiA4HA1joyz96Ex6/KNCS46o/C4T30rw2/gmoJzusurNmeV3cO+zoVIhx24l9p7zxPsuzv/Sc46f7ncWROrJwzcqWeg4IJu3p77TQ2kdHrfUzws0xiXzrMWndPUMLLuN4PNkO+2TeEs+p3QM5YNsi+i8pY5ehyldIdMq7a109Qwsux3jcyk77ZN4Sz4ndExur2PyEbvSeZjSL3P7WKSttqhjLnXc1aHk9bzPBuakTdUj4J1cxwgZV6lPW9jalG59XG4hl7/vlHyQpVjsZ+i4Rh3gaMpPwPfKy+Gw5OFucBjO0f/xAul06OycOjzZChxtSefmLiA/R7Jdspx2uf6837r70C80J3T+x/ddiHI381303b8vDTgM+nGYPwcsImRcw/428TVN6dbmDHmfgg867zkS84LEsXH5iMg5L39Dhqay4Hg0OGM8XNr8+gb08j9FefSYKjgEHPhahbwSi7DEpyVdKzFP82pYsllLutZq2OKwVmallxDYI2ChnlvQcc+o9oTAIQKn1AFcS7/MB/hQGgck0uik5ALLHd+KS79A3mb6P6TRt/MN8SHSm4FeSGcanY3yzQCImgO4prOvKn8TdOJ0CfQvXtyEEV+1jP5fdzKWUzo9WUnC4Edgji4EFF6kYyEgBISAEBACQkAICAEhIASEgBAQAkJACBhEgI4aOjHbwX+hGeNb8Z+Uh4PS+PWs99G0y9a+EMgaAfgnOdKUI4NfwG/5qpkDEwf08r/hSWTyho/D0UAv6E89OfgWoDP0uSePkoSAEBACQkAICAEhIASEgBAQAkJACAgBISAErhFoL9TDwWLPEOm8CZ2SY3jRYRmGvoFnYR4dC4FsEHDOSy5IxTlhdw78xoFJKZ0Tk8bOIcqTAfn/RKavKHg3oSwvwD4rBieOfc5jBqYhfkcM3yZcZ9BvEQiIxyJokpAGEVDdNEi6VBYCQmASAbWNkxApgxAQAgUgoLasAJKWE5GfeLcHk3HA2Bvnd5lzl3C0ZXg8pyzlFQKbI4B2j1Mn0HnJaS6b6RA6DkwnFVe0uucucEmjm4c4+zPynzNi/zUiPaTNTbDPtwV8k0BHpjz/AKLEIB5LZE0yW0BAddMCy9JRCAiBuQiobZyLmPILASGQIwJqy3JkZTWZOAjsofOt8NPZS/DfzIcZcVc/ejP0ufC48c9ElKMsQiA1AlyMioMsX7UFudU+cPv0+rOycAWsyXkWXIO6K9xd37tBvvuoiM1Izd5MGyY6Ryr1ZPBvOTre3etT+m0jkBuPlE1cthkqf198Hseh6uZxuOmqeQiofs7DK3Vu8MV+zn9ODq5e+hfaiiz+wEA29r3af8o47xcXI1h0gYGl20bVAWdNhW/EYzkEqh275kptWTk2e4qk4JkDv9rPxlnF8XrUGTox+0ZcfphVmDKvhgA42qQPdIoCGcjIEZiHfVYYOb2aTUQmeue51D07kU36Evso8+US5ZxahtORbzMa/SgbIvV+1E5fet/d+/bS5W5ZHrHa8n5j93J4JuGSctXA5xi+7XNb6Jqaz7a+Je4DP9XNbrvO51nR7W2sHap+7p/nsZjllm9JDl1ZnLan6dNgn1/YfMxBb8jBjnunn4ljvuTmg/XXpWVEmYu0jSiHbUqyPsfSuFgtLyWP7t5VP5eW0tGVo3as269RW9bCI9c2bKk6MKUf7sPn5ucwH9L4VWzzjHX5Os+u8Bodb9ePBB+r9oFQ/sn/f9aWccrenA7sEx7Y7Rkvbgd4WqnwN8S3OOdXvGpnOWrflctOaWcI6FGFnXgRZGEnnqMtr9pFIZ1606l5p52u/T0COfFIqcTlnpsa9sTn8Syqbh6Pna6MQ0D1Mw6nHHKBK85l/gX9mWYUh0tjH4df2CQNkIV/rvji+CnkaUZcIp2dUsrNxSAXCSiT/dpF+p8oS/3HRVhJW4h4TIt/7N3Bk9qxFlhqy1pgGN+FLdABxi9gOUKN+3yO/oNnZ+NnQR4+Z/nlBQNfmjT9gesk/aZCwHGzSR/oWB1Ty4j7D/okbx6r1BHXPWtXqiOuX/KSZyisb0EhfjLPeTrZECj0I5ATj5RQXPbzVGqq+DyeOdXN47HTlXEIqH7G4ZQ0F/ow/EPDyM5xE9AHe8zYJKTd4SdBfInceZHsROpLO0XaJdtG1YFTmMjnWvGYDxe9kqgd64VFbVkvLPYS8SzfvaDE9j4iB6TxZWDjvCQiPEbkgC1GOS/zMpMt+0DHap6tjLeO1Wjudag4XLE8l8B5IR7Qswu5+jrKt3MRNDc5MuOR8IjL3IzkNHnE55H4qW4eCZwum4OA6ucctNLl5aiMK7QJ5CvLANn4wrjztQv6ZH6edI5yXCws3DaqDizGTNKCxGNS+KNurnYsgEltWQCIDoVAoQhs2Qc6FqKcZdxyBOax+C1+HQh5iMi3FaHzkhPIM2Tb6b8Wb/wXfwIux3LgPFeZ/4zIERpFh9q59ORY4dQCn+LyRhXtrLW6SX1rr58V1U0+279AH76ofYl4jniBmO0zH7LxxTFHjHLESOeFN85l06dRHaij/ygei+BR7RgaxLWC6kARdWAt+ospN6fn/5qgjfWB1rzvnLLHZNyaJ5MOzD6yADwflPx0nJ3n0LHZd0mWadDjVwg2NXrhK/JQV+9IyFKXY4WqhUuvv3VOa+JTXNbRzqpuegR28xDr2bmHI/ke2pj2FyQ/oT/DT8fYr+HnY3Ri+lGOyWWlAJCHL1TpuOS0PhyV+QdiE3Au+z4NZFQdaBgrd0c85sMduFA7loAO1YEEoOuWgwjAHrN//g8KH3kCOo72gSKLWTXblIwpeJIDc085nX5cuIifLJQcOLqUfwIGA87TQct5MooeaTqo4LUDtwYuvYrWOa2lbpJPcVlHO6u66RGop72trW4+wLO+M5IRlLFv8BqdzbZzYM9kgj3IyHm86GTloj2fEf+FfHQI+lACL7U8o0rA2tvFGlvxuAaqp5Wpduw0/OZerTowFzHlXxOB6p9JEX2gNfGNKjtCxs15kgMT1KGzzAb7PQhabNX1KItYOJPr9B98aoX0vgWL+EeBk7NWFWrh0pNindOa+BSXdbSzqpseAT0790jks4d+DF9QMvS9oGRfgM7Ln5ghtwDZ/QIEl2gvuaAiHZlZ92lqeUaVgPWa9ioe10R3ftlqx+ZjduoVqgOnIqjrl0TA4jMp7AMtiedSZYUypuLJvAMTwJ+TVBBSw+pcfFPZGX0J/fiZ+Icew+WqZX1/cHqylpFUGZcedLOcVsinuKyjnTVfNwlAZfWztrrJZ7t3ZHp7bW85hUzSAPvhZ1N9crC/QicrnZdZ86I6kNSEFru5eFwMyqULUju2NKID5akODACj5JQIZP38PxUY9n8Ye8pp94F6Tm+XFCljEp5MOzBBDOeCoiOvcV6OkLWdxRx/J36CFQb+CXjXThyoMO0sxe1XyKXnwCSnlfIpLp1VF97Omq6bVL7C+llb3eTXFX0dY2+7Oby85FcgXEyQzsqhkC0vqgNDlJWVLh6z5kvt2Ab0qA5sALJucQwC2T7/j1Gm55qYPlDPZZsmxciYhCezDkw02ByZ+HPbeelMIqsJ7meaKb35zcI8bp+T4z8OyuEnWfxsvopQKZeeG3OcVsynuPRWfeNGye2s18Icn1S80vpZG5dcCIefYIfOwYdIvwq/1CCvCQJHiHLqHm7bwTte+TVJlryoDtTRfxSP2fOodqzdMq6wrzqQfR1YgfViiszy+b8gejF9oAVvd1RRMTIm4enWUeoUfhEabHaQ6cR7i306+BhuI95F5FBYPw8T00sKfFv5N3TixP3U5xki5/XkfFLY7D4p44penDA/hxEYlOmkUDGXHhdTnFbOp7iso501WTepdMX1s6q6ief7J3D1FpT9jrhbmBDHvk/wnFxmEA4WTISMfLHB/tkLOjZxnB0vkEn9xwr6j+Ix//8BasfWbaVVB/KvA+taQPalZ/f8XxixyT7Qwvc7prhJGZP10/CA4PyPnQgNvyNehum1HEM3TmRPHfvi51L1hD78g8LPxakXdbxHXRA4z+c3F89L1a9PbuhUJZdeV+hnitOa+RSXnfa22HbWat2k3rXWz1rrJvTiC1p+bcEtX9ryBW2nv5fyGPJwihvK5yP7L4+8TNjP7vkHmarsc+SItbeDNbbiMZ92YIpfcKV2bIV2W3WgnDowVUdqPG/hmQQdR/tAOfA6JeOaPLmy+efjIsTijAlhgDeVzq4vOMfPjRSEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACqyEAfySnReRL41fwSXZGg94cuCvnHnrghpcPZFGyEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCYBEEOEKV4a/rzf53aAQm5/jhykNv4fHkHIoKQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIgcURwCBKTiHEL8K52GO4GPWN3hGYyMgFXjhU8wkK4PyJCkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICIFFEXDOS346foXYO5Cy14FJKeDE5ErcLxBfoiCuYk1PqIIQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkLgZATgb3yCQv5FpPPyR/gjuT0IvZ+Qt3M5xyVXgLuLQnq9oO382hcCQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAiMIQCfI6ewvETkquN/juX9P67wi95XFtn3AAAAAElFTkSuQmCC\n",
493
      "text/latex": [
494
       "$\\displaystyle \\left\\{0, - \\frac{b_{10}}{2} + \\frac{b_{10}}{\\omega}, - \\frac{a_{10}}{2} + \\frac{a_{10}}{\\omega} + \\frac{b_{01}}{2} - \\frac{b_{01}}{\\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{b_{01}}{2} - \\frac{b_{01}}{\\omega} - \\frac{b_{10}}{2} + \\frac{b_{10}}{\\omega} + \\frac{\\rho}{6} - \\frac{\\rho}{3 \\omega}, \\frac{b_{01}}{2} - \\frac{b_{01}}{\\omega} + b_{10} - \\frac{2 b_{10}}{\\omega} - \\frac{\\rho}{3} + \\frac{2 \\rho}{3 \\omega}\\right\\}$"
495
496
      ],
      "text/plain": [
497
498
499
       "⎧     b₁₀   b₁₀    a₁₀   a₁₀   b₀₁   b₀₁    a₀₁   a₀₁   b₀₁   b₀₁   ρ    ρ   b\n",
       "⎨0, - ─── + ───, - ─── + ─── + ─── - ───, - ─── + ─── + ─── - ─── + ─ - ───, ─\n",
       "⎩      2     ω      2     ω     2     ω      2     ω     2     ω    6   3⋅ω   \n",
500
       "\n",
501
502
503
       "₀₁   b₀₁   b₁₀   b₁₀   ρ    ρ   b₀₁   b₀₁         2⋅b₁₀   ρ   2⋅ρ⎫\n",
       "── - ─── - ─── + ─── + ─ - ───, ─── - ─── + b₁₀ - ───── - ─ + ───⎬\n",
       "2     ω     2     ω    6   3⋅ω   2     ω            ω     3   3⋅ω⎭"
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
      ]
     },
     "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": {
529
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAUCAYAAACwG3xrAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAATElEQVQoFWNgYGAoA+KzUGwEpNOg7LtA2gWIGTpBjP///zMgY5g4E0gFPjCqABI6o+EACQcWIPUWiGcyMjJ+ANKpQAxKZuFALADEuwFXLBaP20mJEwAAAABJRU5ErkJggg==\n",
530
      "text/latex": [
531
       "$\\displaystyle \\left[ \\right]$"
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
      ],
      "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": {
554
      "image/png": "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\n",
555
      "text/latex": [
556
       "$\\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\\}$"
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
      ],
      "text/plain": [
       "⎧                                     2   ρ                                   \n",
       "⎨(0, 0): ρ, (0, 1): ρ⋅u₁, (0, 2): ρ⋅u₁  + ─, (1, 0): ρ⋅u₀, (1, 1): ρ⋅u₀⋅u₁, (1\n",
       "⎩                                         3                                   \n",
       "\n",
       "                           2                              2              2   ρ\n",
       ", 2): b₀₀ + b₀₁⋅u₁ + b₀₂⋅u₁  + b₁₀⋅u₀ + b₁₁⋅u₀⋅u₁ + b₂₀⋅u₀ , (2, 0): ρ⋅u₀  + ─\n",
       "                                                                             3\n",
       "\n",
       "                               2                              2             ⎫\n",
       ", (2, 1): a₀₀ + a₀₁⋅u₁ + a₀₂⋅u₁  + a₁₀⋅u₀ + a₁₁⋅u₀⋅u₁ + a₂₀⋅u₀ , (2, 2): M₂₂⎬\n",
       "                                                                            ⎭"
      ]
     },
     "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",
   "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",
Frederik Hennig's avatar
Frederik Hennig committed
606
   "version": "3.8.2"
607
608
609
610
611
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}