aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2019-06-11 10:25:55 +0200
committerAdrian Kummerlaender2019-06-11 10:25:55 +0200
commit711d03d4772211bd0c350fec8b5f0ef9fe3d3552 (patch)
tree9a21c9d6832cbb0764183efcae36525e16a213d8
parent4cc075c66ed8e2a225939a60d2fc18c78ed18028 (diff)
downloadsymlbm_playground-711d03d4772211bd0c350fec8b5f0ef9fe3d3552.tar
symlbm_playground-711d03d4772211bd0c350fec8b5f0ef9fe3d3552.tar.gz
symlbm_playground-711d03d4772211bd0c350fec8b5f0ef9fe3d3552.tar.bz2
symlbm_playground-711d03d4772211bd0c350fec8b5f0ef9fe3d3552.tar.lz
symlbm_playground-711d03d4772211bd0c350fec8b5f0ef9fe3d3552.tar.xz
symlbm_playground-711d03d4772211bd0c350fec8b5f0ef9fe3d3552.tar.zst
symlbm_playground-711d03d4772211bd0c350fec8b5f0ef9fe3d3552.zip
Restructure codegen notebook
-rw-r--r--lbm_codegen.ipynb729
1 files changed, 278 insertions, 451 deletions
diff --git a/lbm_codegen.ipynb b/lbm_codegen.ipynb
index 0b85e19..49b1740 100644
--- a/lbm_codegen.ipynb
+++ b/lbm_codegen.ipynb
@@ -11,6 +11,13 @@
]
},
{
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Characteristic constants"
+ ]
+ },
+ {
"cell_type": "code",
"execution_count": 2,
"metadata": {},
@@ -129,6 +136,13 @@
]
},
{
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Moments"
+ ]
+ },
+ {
"cell_type": "code",
"execution_count": 8,
"metadata": {},
@@ -188,13 +202,13 @@
"outputs": [
{
"data": {
- "image/png": "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\n",
"text/latex": [
- "$$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}$$"
+ "$$\\left[\\begin{matrix}u_{x}\\\\u_{y}\\end{matrix}\\right]$$"
],
"text/plain": [
- "f_curr_0 + f_curr_1 + f_curr_2 + f_curr_3 + f_curr_4 + f_curr_5 + f_curr_6 + f\n",
- "_curr_7 + f_curr_8"
+ "⎡uₓ ⎤\n",
+ "⎢ ⎥\n",
+ "⎣u_y⎦"
]
},
"execution_count": 11,
@@ -203,8 +217,8 @@
}
],
"source": [
- "rho = sum(f_curr)\n",
- "rho"
+ "u = Matrix([u_x, u_y])\n",
+ "u"
]
},
{
@@ -213,44 +227,72 @@
"metadata": {},
"outputs": [],
"source": [
- "#u_x = sum([ (c_i*f_curr[i])[0] for i, c_i in enumerate(c) ]) / rho\n",
- "#u_x"
+ "from sympy.codegen.ast import Assignment"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
- "outputs": [],
- "source": [
- "#u_y = sum([ (c_i*f_curr[i])[1] for i, c_i in enumerate(c) ]) / rho\n",
- "#u_y"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
"outputs": [
{
"data": {
+ "image/png": "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voM4yMvNPc8gvB0Duq6PQY4ymQa2qJPxFulaJmsiE2WWIscO3IisWJtX5yUCIfR6siwD3Hws9Sf60+4LDRc/LPTyBd2UsSSThOdzZOHD5vahHu66/8XF7hbp2eMY7Y+csKTzQd8mZW6D9IP9GPgCsrvKr5D3uIswd38Mka7r3ZlGH2xraKju1qeu3j4esYnp4/W+hwy2Kd3go/4t8il90If+5BDlBv3oO1SaocjfUH+kHOqLNENTdmx/5Ojnp9fO0cxDfYUhRXNhfBOq3CD8MTWlGer6CpPYJ2VuAXzbJRNHoQVNURRFURRFURRFURRFURQlTd8mZW6JLMK/FRmY+RfwZ6QPeH2P+VIUJR/VXUVRFEVRfKK+SFicB5zoOxOKoiiznEnskzKPRnapLWQu8BnCmjGtKIqiKIqiKIqiKIqiKIrim75NylQURVEURVEURVH6x8rIBNhDgduAdfxmR1EUZdYzSfakzB2A15W50XroCgdFURRFURRFURRFURRFUZQkFwMnI0e0r+k5L4qiKIqiKIqiKMrMZACsAJYAz/WbFUVRlFnNm5F+wHOB12bEb91tdhRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFURRFUfrH/wPjymG5Nz1Z1QAAAABJRU5ErkJggg==\n",
"text/latex": [
- "$$\\left[\\begin{matrix}u_{x}\\\\u_{y}\\end{matrix}\\right]$$"
+ "$$\\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_x, -m3*(-f_curr_2 - f_curr_5 + m0 + m4)), \\quad Assignment(u_y, m3*(-f_curr_6 - f_curr_7 + m1 + m4))\\right ]\\right )$$"
],
"text/plain": [
- "⎡uₓ ⎤\n",
- "⎢ ⎥\n",
- "⎣u_y⎦"
+ "⎛⎡ \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_y := m₃⋅(-f_cu\n",
+ " ⎦ \n",
+ "\n",
+ " ⎞\n",
+ "rr_6 - f_curr_7 + m₁ + m₄)]⎟\n",
+ " ⎠"
]
},
- "execution_count": 14,
+ "execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "u = Matrix([u_x, u_y])\n",
- "u"
+ "moments = cse([\n",
+ " Assignment(rho, sum(f_curr)),\n",
+ " Assignment(u_x, sum([ (c_i*f_curr[i])[0] for i, c_i in enumerate(c) ]) / sum(f_curr)),\n",
+ " Assignment(u_y, sum([ (c_i*f_curr[i])[1] for i, c_i in enumerate(c) ]) / sum(f_curr))\n",
+ "], optimizations='basic', symbols=numbered_symbols(prefix='m'))\n",
+ "moments"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "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[0]:\n",
+ " print(\"const float %s = %s;\" % (expr[0], ccode(expr[1])))"
]
},
{
@@ -259,99 +301,76 @@
"metadata": {},
"outputs": [
{
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "rho = m2;\n",
+ "u_x = -m3*(-f_curr_2 - f_curr_5 + m0 + m4);\n",
+ "u_y = m3*(-f_curr_6 - f_curr_7 + m1 + m4);\n"
+ ]
+ }
+ ],
+ "source": [
+ "for i, expr in enumerate(moments[1]):\n",
+ " print(ccode(expr))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Equilibrium"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
"data": {
- "image/png": "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\n",
+ "image/png": "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