From 2705560c540d66b1f15887256a8b8a90f5b9d912 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Tue, 11 Jun 2019 16:06:29 +0200 Subject: Test generation of D3Q19 kernel code in notebook --- lbm_codegen_d3q19.ipynb | 1160 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1160 insertions(+) create mode 100644 lbm_codegen_d3q19.ipynb diff --git a/lbm_codegen_d3q19.ipynb b/lbm_codegen_d3q19.ipynb new file mode 100644 index 0000000..face58f --- /dev/null +++ b/lbm_codegen_d3q19.ipynb @@ -0,0 +1,1160 @@ +{ + "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 = 19\n", + "d = 3" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "c = [ Matrix(x) for x in [\n", + " ( 0, 1, 1), (-1, 0, 1), ( 0, 0, 1), ( 1, 0, 1), ( 0, -1, 1),\n", + " (-1, 1, 0), ( 0, 1, 0), ( 1, 1, 0), (-1, 0, 0), ( 0, 0, 0), ( 1, 0, 0), (-1,-1, 0), ( 0, -1, 0), ( 1, -1, 0),\n", + " ( 0, 1,-1), (-1, 0,-1), ( 0, 0,-1), ( 1, 0,-1), ( 0, -1,-1)\n", + "]]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\\left [ \\left[\\begin{matrix}0\\\\1\\\\1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}-1\\\\0\\\\1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0\\\\0\\\\1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}1\\\\0\\\\1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0\\\\-1\\\\1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}-1\\\\1\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0\\\\1\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}1\\\\1\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}-1\\\\0\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0\\\\0\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}1\\\\0\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}-1\\\\-1\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0\\\\-1\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}1\\\\-1\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0\\\\1\\\\-1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}-1\\\\0\\\\-1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0\\\\0\\\\-1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}1\\\\0\\\\-1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0\\\\-1\\\\-1\\end{matrix}\\right]\\right ]$$" + ], + "text/plain": [ + "⎡⎡0⎤ ⎡-1⎤ ⎡0⎤ ⎡1⎤ ⎡0 ⎤ ⎡-1⎤ ⎡0⎤ ⎡1⎤ ⎡-1⎤ ⎡0⎤ ⎡1⎤ ⎡-1⎤ ⎡0 ⎤ ⎡1 ⎤ \n", + "⎢⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ \n", + "⎢⎢1⎥, ⎢0 ⎥, ⎢0⎥, ⎢0⎥, ⎢-1⎥, ⎢1 ⎥, ⎢1⎥, ⎢1⎥, ⎢0 ⎥, ⎢0⎥, ⎢0⎥, ⎢-1⎥, ⎢-1⎥, ⎢-1⎥, \n", + "⎢⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ \n", + "⎣⎣1⎦ ⎣1 ⎦ ⎣1⎦ ⎣1⎦ ⎣1 ⎦ ⎣0 ⎦ ⎣0⎦ ⎣0⎦ ⎣0 ⎦ ⎣0⎦ ⎣0⎦ ⎣0 ⎦ ⎣0 ⎦ ⎣0 ⎦ \n", + "\n", + "⎡0 ⎤ ⎡-1⎤ ⎡0 ⎤ ⎡1 ⎤ ⎡0 ⎤⎤\n", + "⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎥\n", + "⎢1 ⎥, ⎢0 ⎥, ⎢0 ⎥, ⎢0 ⎥, ⎢-1⎥⎥\n", + "⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎥\n", + "⎣-1⎦ ⎣-1⎦ ⎣-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 [\n", + " (1,36), (1,36), (1,18), (1,36), (1,36),\n", + " (1,36), (1,18), (1,36), (1,18), (1,3), (1,18), (1,36), (1,18), (1,36),\n", + " (1,36), (1,36), (1,18), (1,36), (1,36)\n", + "]]" + ] + }, + { + "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}{36}, \\quad \\frac{1}{18}, \\quad \\frac{1}{36}, \\quad \\frac{1}{36}, \\quad \\frac{1}{36}, \\quad \\frac{1}{18}, \\quad \\frac{1}{36}, \\quad \\frac{1}{18}, \\quad \\frac{1}{3}, \\quad \\frac{1}{18}, \\quad \\frac{1}{36}, \\quad \\frac{1}{18}, \\quad \\frac{1}{36}, \\quad \\frac{1}{36}, \\quad \\frac{1}{36}, \\quad \\frac{1}{18}, \\quad \\frac{1}{36}, \\quad \\frac{1}{36}\\right ]$$" + ], + "text/plain": [ + "[1/36, 1/36, 1/18, 1/36, 1/36, 1/36, 1/18, 1/36, 1/18, 1/3, 1/18, 1/36, 1/18, \n", + "1/36, 1/36, 1/36, 1/18, 1/36, 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, f_next_9, f_next_10, f_next_11,\n", + " f_next_12, f_next_13, f_next_14, f_next_15, f_next_16, f_next_17,\n", + " f_next_18], 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, f_curr_9, f_curr_10, f_curr_11,\n", + " f_curr_12, f_curr_13, f_curr_14, f_curr_15, f_curr_16, f_curr_17,\n", + " f_curr_18], 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}\\\\u_{2}\\end{matrix}\\right]$$" + ], + "text/plain": [ + "⎡u₀⎤\n", + "⎢ ⎥\n", + "⎢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_10 + f_curr_11 + f_curr_12 + f_curr_13 + f_curr_14 + f_curr_15 + f_curr_16 + f_curr_17 + f_curr_18 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8 + f_curr_9)\\right ]$$" + ], + "text/plain": [ + "[ρ := f_curr_0 + f_curr_1 + f_curr_10 + f_curr_11 + f_curr_12 + f_curr_13 + f_\n", + "curr_14 + f_curr_15 + f_curr_16 + f_curr_17 + f_curr_18 + f_curr_2 + f_curr_3 \n", + "+ f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8 + f_curr_9]" + ] + }, + "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_10 + f_curr_11 + f_curr_12 + f_curr_13 + f_curr_14 + f_curr_15 + f_curr_16 + f_curr_17 + f_curr_18 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8 + f_curr_9), \\quad Assignment(u_0, (-f_curr_1 + f_curr_10 - f_curr_11 + f_curr_13 - f_curr_15 + f_curr_17 + f_curr_3 - f_curr_5 + f_curr_7 - f_curr_8)/(f_curr_0 + f_curr_1 + f_curr_10 + f_curr_11 + f_curr_12 + f_curr_13 + f_curr_14 + f_curr_15 + f_curr_16 + f_curr_17 + f_curr_18 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8 + f_curr_9)), \\quad Assignment(u_1, (f_curr_0 - f_curr_11 - f_curr_12 - f_curr_13 + f_curr_14 - f_curr_18 - f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7)/(f_curr_0 + f_curr_1 + f_curr_10 + f_curr_11 + f_curr_12 + f_curr_13 + f_curr_14 + f_curr_15 + f_curr_16 + f_curr_17 + f_curr_18 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8 + f_curr_9)), \\quad Assignment(u_2, (f_curr_0 + f_curr_1 - f_curr_14 - f_curr_15 - f_curr_16 - f_curr_17 - f_curr_18 + f_curr_2 + f_curr_3 + f_curr_4)/(f_curr_0 + f_curr_1 + f_curr_10 + f_curr_11 + f_curr_12 + f_curr_13 + f_curr_14 + f_curr_15 + f_curr_16 + f_curr_17 + f_curr_18 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8 + f_curr_9))\\right ]$$" + ], + "text/plain": [ + "⎡ \n", + "⎢ρ := f_curr_0 + f_curr_1 + f_curr_10 + f_curr_11 + f_curr_12 + f_curr_13 + f_\n", + "⎣ \n", + "\n", + " \n", + "curr_14 + f_curr_15 + f_curr_16 + f_curr_17 + f_curr_18 + f_curr_2 + f_curr_3 \n", + " \n", + "\n", + " \n", + "+ f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8 + f_curr_9, u₀ := ─────\n", + " f_cur\n", + "\n", + " -f_curr_1 + f_curr_10 - f_curr_1\n", + "──────────────────────────────────────────────────────────────────────────────\n", + "r_0 + f_curr_1 + f_curr_10 + f_curr_11 + f_curr_12 + f_curr_13 + f_curr_14 + f\n", + "\n", + "1 + f_curr_13 - f_curr_15 + f_curr_17 + f_curr_3 - f_curr_5 + f_curr_7 - f_cur\n", + "──────────────────────────────────────────────────────────────────────────────\n", + "_curr_15 + f_curr_16 + f_curr_17 + f_curr_18 + f_curr_2 + f_curr_3 + f_curr_4 \n", + "\n", + "r_8 \n", + "──────────────────────────────────────────────────────, u₁ := ────────────────\n", + "+ f_curr_5 + f_curr_6 + f_curr_7 + f_curr_8 + f_curr_9 f_curr_0 + f_cur\n", + "\n", + " f_curr_0 - f_curr_11 - f_curr_12 - f_curr_\n", + "──────────────────────────────────────────────────────────────────────────────\n", + "r_1 + f_curr_10 + f_curr_11 + f_curr_12 + f_curr_13 + f_curr_14 + f_curr_15 + \n", + "\n", + "13 + f_curr_14 - f_curr_18 - f_curr_4 + f_curr_5 + f_curr_6 + f_curr_7 \n", + "──────────────────────────────────────────────────────────────────────────────\n", + "f_curr_16 + f_curr_17 + f_curr_18 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 \n", + "\n", + " \n", + "───────────────────────────────────────────, u₂ := ───────────────────────────\n", + "+ f_curr_6 + f_curr_7 + f_curr_8 + f_curr_9 f_curr_0 + f_curr_1 + f_cur\n", + "\n", + " f_curr_0 + f_curr_1 - f_curr_14 - f_curr_15 - f_curr_\n", + "──────────────────────────────────────────────────────────────────────────────\n", + "r_10 + f_curr_11 + f_curr_12 + f_curr_13 + f_curr_14 + f_curr_15 + f_curr_16 +\n", + "\n", + "16 - f_curr_17 - f_curr_18 + f_curr_2 + f_curr_3 + f_curr_4 \n", + "──────────────────────────────────────────────────────────────────────────────\n", + " f_curr_17 + f_curr_18 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 \n", + "\n", + " ⎤\n", + "────────────────────────────────⎥\n", + "+ f_curr_7 + f_curr_8 + f_curr_9⎦" + ] + }, + "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": [ + "$$7 ADD + 4 ASSIGNMENT + 18 MUL + 3 POW$$" + ], + "text/plain": [ + "7⋅ADD + 4⋅ASSIGNMENT + 18⋅MUL + 3⋅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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