From 9cf82f641b8982df526107b99d883545ee02fe20 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Wed, 12 Jun 2019 21:01:42 +0200 Subject: Restructuring --- lbm_codegen.ipynb | 828 ------------------------------------------------------ 1 file changed, 828 deletions(-) delete mode 100644 lbm_codegen.ipynb (limited to 'lbm_codegen.ipynb') diff --git a/lbm_codegen.ipynb b/lbm_codegen.ipynb deleted file mode 100644 index e1593c0..0000000 --- a/lbm_codegen.ipynb +++ /dev/null @@ -1,828 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from sympy import *\n", - "init_printing()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Characteristic constants" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "q = 9\n", - "d = 2" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "c = [Matrix(x) for x in [(-1, 1), ( 0, 1), ( 1, 1), (-1, 0), ( 0, 0), ( 1, 0), (-1,-1), ( 0, -1), ( 1, -1)]]" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$$\\left [ \\left[\\begin{matrix}-1\\\\1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0\\\\1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}1\\\\1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}-1\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}1\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}-1\\\\-1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0\\\\-1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}1\\\\-1\\end{matrix}\\right]\\right ]$$" - ], - "text/plain": [ - "⎡⎡-1⎤ ⎡0⎤ ⎡1⎤ ⎡-1⎤ ⎡0⎤ ⎡1⎤ ⎡-1⎤ ⎡0 ⎤ ⎡1 ⎤⎤\n", - "⎢⎢ ⎥, ⎢ ⎥, ⎢ ⎥, ⎢ ⎥, ⎢ ⎥, ⎢ ⎥, ⎢ ⎥, ⎢ ⎥, ⎢ ⎥⎥\n", - "⎣⎣1 ⎦ ⎣1⎦ ⎣1⎦ ⎣0 ⎦ ⎣0⎦ ⎣0⎦ ⎣-1⎦ ⎣-1⎦ ⎣-1⎦⎦" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "c" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "w = [Rational(*x) for x in [(1,36), (1,9), (1,36), (1,9), (4,9), (1,9), (1,36), (1,9), (1,36)]]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$$\\left [ \\frac{1}{36}, \\quad \\frac{1}{9}, \\quad \\frac{1}{36}, \\quad \\frac{1}{9}, \\quad \\frac{4}{9}, \\quad \\frac{1}{9}, \\quad \\frac{1}{36}, \\quad \\frac{1}{9}, \\quad \\frac{1}{36}\\right ]$$" - ], - "text/plain": [ - "[1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "w" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA0AAAASCAYAAACAa1QyAAAABHNCSVQICAgIfAhkiAAAAHZJREFUKJFjYKACCGFgYJjMwMBwmIGB4RMDA8N/BgaGJYQ0XYAq/MzAwHCdWE2ODAwMqgwMDIwMDAwOuDSxoPH3EzKVgYGBgYkYRaOaBlwTeuQGQDEDAwODBJS2ZGBgWABlv2FgYChBN6SBAZJ0cOEH5LiMzgAA6XoX52TB9a4AAAAASUVORK5CYII=\n", - "text/latex": [ - "$$1$$" - ], - "text/plain": [ - "1" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sum(w)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAADEAAAAdCAYAAAAD8oRRAAAABHNCSVQICAgIfAhkiAAAAi9JREFUWIXt1t2LTVEYx/GPGTTFNJkhk5SoKeRCopAkaoSkhD/BtXArLrwkF8pbjQvuKcqUuZIkbpTxFlFKTSF5yUthzMTF2jNzzmnvffY5Z585Ls63dmu113p+63n2evazFk3+D6ZUOL8d3xq4fi7swuZGLJwn5zC90U6U0lLB3NboGa6TL1VTSRBrcb9ejkwWJ9DVaCfiqGQnuvCpXo7UQtYgevAyYewkbmEIP/EZgzgs+87NxSjOVKObtU4fQD9exYwN4yGe4wNmYDVW4m3UHyqjvxd92IjbOeoW0Zcy1pbw/hj+4kIG/QF8FKpfxbqF6dSCo9hSYtQp/V/4lfD+StT2pNhCh7AD/UJKVaxbGEQv1mB3idFW3CzjSBzbo/ZJmXnbhAP0Wl66y4X8KwzuvGwF4CCO4DTuClv+GHPK2F3FD8npU5XuG6yL+tMUV4w03kcLjD0DQtVJow3fhUCq1o37wjewI+pvwJ0yjozRLVS7buzEIqEkrkix6cVMXM9Z1yYTpfRUtEg1LMBvPEuZczma05Gzrqn4giWylcc0BoUUmB0z1iqU1YFadePSaUSoRofwtIoFCpkXtaMxY+uFkzctlarRHWePEOn8MmKLhVwtpcXEoXQvwfZs5ETcz1+L7jjtsl279+GPcMe5KNx0L+F1tNA7LE2wHRJKZt66RczKMGeZcI48EvJ7BF/xQKjtnQl2qyJn9uesO6kcF4JY2GhHauGF8JWbNGlSB/4BwBaSc+fGZlwAAAAASUVORK5CYII=\n", - "text/latex": [ - "$$\\frac{\\sqrt{3}}{3}$$" - ], - "text/plain": [ - "√3\n", - "──\n", - "3 " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "c_s = sqrt(Rational(1,3))\n", - "c_s" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Moments" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "rho, tau = symbols('rho tau')" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([f_next_0, f_next_1, f_next_2, f_next_3, f_next_4, f_next_5,\n", - " f_next_6, f_next_7, f_next_8], dtype=object)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f_next = symarray('f_next', q)\n", - "f_next" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([f_curr_0, f_curr_1, f_curr_2, f_curr_3, f_curr_4, f_curr_5,\n", - " f_curr_6, f_curr_7, f_curr_8], dtype=object)" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f_curr = symarray('f_curr', q)\n", - "f_curr" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "$$\\left[\\begin{matrix}u_{0}\\\\u_{1}\\end{matrix}\\right]$$" - ], - "text/plain": [ - "⎡u₀⎤\n", - "⎢ ⎥\n", - "⎣u₁⎦" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "u = Matrix(symarray('u', d))\n", - "u" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "from sympy.codegen.ast import Assignment" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$$\\left [ Assignment(rho, f_curr_0 + f_curr_1 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8)\\right ]$$" - ], - "text/plain": [ - "[ρ := f_curr_0 + f_curr_1 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr\n", - "_6 + f_curr_7 + f_curr_8]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "moments = [ Assignment(rho, sum(f_curr)) ]\n", - "moments" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$$\\left [ Assignment(rho, f_curr_0 + f_curr_1 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8), \\quad Assignment(u_0, (-f_curr_0 + f_curr_2 - f_curr_3 + f_curr_5 - f_curr_6 + f_curr_8)/(f_curr_0 + f_curr_1 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8)), \\quad Assignment(u_1, (f_curr_0 + f_curr_1 + f_curr_2 - f_curr_6 - f_curr_7 - f_curr_8)/(f_curr_0 + f_curr_1 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8))\\right ]$$" - ], - "text/plain": [ - "⎡ \n", - "⎢ρ := f_curr_0 + f_curr_1 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr\n", - "⎣ \n", - "\n", - " -f_curr_0 + f_curr_2 - f_curr_\n", - "_6 + f_curr_7 + f_curr_8, u₀ := ──────────────────────────────────────────────\n", - " f_curr_0 + f_curr_1 + f_curr_2 + f_curr_3 + f_\n", - "\n", - "3 + f_curr_5 - f_curr_6 + f_curr_8 f_cu\n", - "──────────────────────────────────────────────────, u₁ := ────────────────────\n", - "curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8 f_curr_0 + f_curr_1 \n", - "\n", - "rr_0 + f_curr_1 + f_curr_2 - f_curr_6 - f_curr_7 - f_curr_8 ⎤\n", - "────────────────────────────────────────────────────────────────────────────⎥\n", - "+ f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8⎦" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "for i, u_i in enumerate(u):\n", - " moments.append(Assignment(u_i, sum([ (c_j*f_curr[j])[i] for j, c_j in enumerate(c) ]) / sum(f_curr)))\n", - "\n", - "moments" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$$5 ADD + 3 ASSIGNMENT + 8 MUL + 2 POW$$" - ], - "text/plain": [ - "5⋅ADD + 3⋅ASSIGNMENT + 8⋅MUL + 2⋅POW" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "count_ops(moments, visual=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$$\\left ( \\left [ \\left ( m_{0}, \\quad f_{curr 3} + f_{curr 6}\\right ), \\quad \\left ( m_{1}, \\quad f_{curr 1} + f_{curr 2}\\right ), \\quad \\left ( m_{2}, \\quad f_{curr 0} + f_{curr 4} + f_{curr 5} + f_{curr 7} + f_{curr 8} + m_{0} + m_{1}\\right ), \\quad \\left ( m_{3}, \\quad \\frac{1}{m_{2}}\\right ), \\quad \\left ( m_{4}, \\quad f_{curr 0} - f_{curr 8}\\right )\\right ], \\quad \\left [ Assignment(rho, m2), \\quad Assignment(u_0, -m3*(-f_curr_2 - f_curr_5 + m0 + m4)), \\quad Assignment(u_1, m3*(-f_curr_6 - f_curr_7 + m1 + m4))\\right ]\\right )$$" - ], - "text/plain": [ - "⎛⎡ \n", - "⎜⎢(m₀, f_curr_3 + f_curr_6), (m₁, f_curr_1 + f_curr_2), (m₂, f_curr_0 + f_curr\n", - "⎝⎣ \n", - "\n", - " ⎛ 1 ⎞ \n", - "_4 + f_curr_5 + f_curr_7 + f_curr_8 + m₀ + m₁), ⎜m₃, ──⎟, (m₄, f_curr_0 - f_cu\n", - " ⎝ m₂⎠ \n", - "\n", - " ⎤ \n", - "rr_8)⎥, [ρ := m₂, u₀ := -m₃⋅(-f_curr_2 - f_curr_5 + m₀ + m₄), u₁ := m₃⋅(-f_cur\n", - " ⎦ \n", - "\n", - " ⎞\n", - "r_6 - f_curr_7 + m₁ + m₄)]⎟\n", - " ⎠" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "moments_opt = cse(moments, optimizations='basic', symbols=numbered_symbols(prefix='m'))\n", - "moments_opt" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$$10 ADD + 3 ASSIGNMENT + DIV + 6 MUL + SUB$$" - ], - "text/plain": [ - "10⋅ADD + 3⋅ASSIGNMENT + DIV + 6⋅MUL + SUB" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "count_ops(moments_opt, visual=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "const float m0 = f_curr_3 + f_curr_6;\n", - "const float m1 = f_curr_1 + f_curr_2;\n", - "const float m2 = f_curr_0 + f_curr_4 + f_curr_5 + f_curr_7 + f_curr_8 + m0 + m1;\n", - "const float m3 = 1.0/m2;\n", - "const float m4 = f_curr_0 - f_curr_8;\n" - ] - } - ], - "source": [ - "for expr in moments_opt[0]:\n", - " print(\"const float %s = %s;\" % (expr[0], ccode(expr[1])))" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "rho = m2;\n", - "u_0 = -m3*(-f_curr_2 - f_curr_5 + m0 + m4);\n", - "u_1 = m3*(-f_curr_6 - f_curr_7 + m1 + m4);\n" - ] - } - ], - "source": [ - "for i, expr in enumerate(moments_opt[1]):\n", - " print(ccode(expr))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Equilibrium" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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