{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "nbsphinx": "hidden" }, "outputs": [], "source": [ "from lbmpy.session import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Demo: Create lbmpy Method from Scratch\n", "\n", "\n", "\n", "\n", "### Defining transformation to collision space" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/latex": [ "$\\displaystyle \\left[ \\left( 0, \\ 0\\right), \\ \\left( 0, \\ 1\\right), \\ \\left( 0, \\ 2\\right), \\ \\left( 1, \\ 0\\right), \\ \\left( 1, \\ 1\\right), \\ \\left( 1, \\ 2\\right), \\ \\left( 2, \\ 0\\right), \\ \\left( 2, \\ 1\\right), \\ \\left( 2, \\ 2\\right)\\right]$" ], "text/plain": [ "[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from lbmpy.moments import moment_matrix, moments_up_to_component_order, exponents_to_polynomial_representations\n", "moment_exponents = list(moments_up_to_component_order(2, 2))\n", "moment_exponents" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVoAAAAaCAYAAAD2fpSuAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAHXUlEQVR4Ae2d71UcNxTFFw4FYNIB6SC2O8Ad4KQCkw7s40/wLQd3YFxBgjuwU4ENHdgdBG8H5P4GaSxmd2alGa14y0rnaPV33ru60r7RvNHCzu3t7ayGfgbOzs721frW9Th06SvVz/uvqi0WGbA6lxZxWcSUsqZy458qb68LXgJPVPdd6edu25aWz8XFn37syr9X/krxV19X041hwOpcWsRlEVPKQsuNP0oe9iG0Fx7wrs+QqsOxkqdKq5H9ScyJ+Dj6WZydK3+out+CuprdDAaszqVFXBYxpayy3Phj5WGQP3WBtoZWjc0jstJ299btvKVl+Pi6pWN/bMO2OpcWcVnElLIec+OPkif7+V0gL5W+DsHueB+tGrDCdLgIO9T8fQbEDzvaY6XVdXCfmo0rWZ1Li7gsYkpZcLnxr5Kn9m/Ch3egeZfT+GhV4CXPM6UvhsCrncfly1DAUP/H1ubG37hXHtvYtm08VufSIi6LmFLWa278kfJ4l/NB8SVY/cuwN8ov3clKKC4FLrhRfKbo37wruz1BPDBudrPtXWp7Rv+4Rmp1Li3isogpZTXmxp8gD3uKv3Zfce4NLScNlu5m6aS2xiorj99h614CadwY2TdKG45ceaYUf0wNG8SAmztzc2kRl0VMKUstN/4Ueeo7V7wW3t8VL/ZU8IazvvBZMouOXB4D+HJ6rnCM8xRQwwYxYHUuLeKyiCllqeXGP1IeNpVN6gU72iNFzs02Tlvla7jPAGdmcZ+QtkF8YWxr2CwGrM6lRVwWMaWsttz4x8jjhRg72tnO6ekpL7c4F/qUiqGgPrgO8FM+yW2YJQ9jhguDt/lXKrc+Y9f2QWnjwlD7pFBSVyzQABOXPFd8pYjL4g9Fwhf1+XiXnf6Zoi/ou/a5YWSBPoqDXAR9i2ADUEwIcNF9cAwx8nL0yY0pkFeE+0BfFk4DeWvBL/lsYjnN9WRXHxg4XnQ9dHgrYO8EAmAY8zBwV+Btf65QUlcsZhzn7xwHX3QRLyCPVMZFwRx1OVHVpJCirzRflrHFkp4yhliZU/vlxmR5XcRwtW783q4eYmgPFOcxqNbVR8YE3yfGhcALJw+wqXB1WX6tVlKXB78qFSZ28qEhZT64sfhdPXMUtqs4PqToK82XZWyxjKeMIVbm1H65MVleFzFcFcLv7eoBPlp2S13DFoM1Zx98xNdOILvXvzrC2YJ36zpdoosldcWC+qrxhycYcONcq66ZKKVZXCYBmBR9pfmyjC2gcDCbMoZBQRkbc2OyvC5iaCuBv7Wr7Gj5MrNjerAQGBQMKobf7+RmamO3S12uHa03XmvXJcxRQWP0Nxnfn5vN376QO03Rp75F+bKMLXYeUsYQK3Nqv9yYLK+LGK4K4fd29QZDaymwc2t3cg4YBtGfScuJtaSuaNxaAP4G0L74Uh2HnrnZZA8J+orzZRlb7EQkjCFW5OR+mTFZXhcxXK0Tv//OzjG0PLL6ihhgvX00gVPlHDo8oQ58tgu72ZK6QjB9+bF4uE7xkyIGlsCxMW4soSsBp/28aXUfKo/imusUk/VJ7drnpgS2kMO+/FhukTdhDH1w2vqxuNaJSeAsr4uWu4FMNP4BGX1N93a0vITip7Ux4RfXyQtor3GL4IdSzpuNDaFxmUkWxofISYQ2lNTVKh3ITMTjx3jj5LR+HVSqjnb/orBBUVpfo/TuhuyyLa7cc5PMRQq2FvxAZiK3SB47hgFUdwZcHcZ+v9aCyQEu8Z19cPyDk9PfiBFn0zTnHC2DaM56UbHsGtVfunr6spPCpwjB7IxCfyoHdAmj/h6AZCGbY03I/k+R823N2Vq1dSe0mC5hWBmEbxQeN2ZOFDTXq8wRL04csJPnpoUBbt0IKjdBdaX1rX1uNCZ0jOEiGpujbzAZyy1Cx45hEJBrHItrzZiiud90/DFzFPbRePlF6YHSlzP+TKKM7Q8MLvmpUXKOFfenynG4ziXrqk9WSV19GML6nHhCuX350vpCHNJdbG5CvTH5VdgiZWRbxzH6Yvs85JzHYFzF/abjj+HA99FYrxRPKO86C/yPUnZQOcJzWfB5qiBdw2Hq1u2gPHdKdrNDx7pK6ooZ0ig8MYJ7+hTRV3JuesbZWz0SW6+8oKEIt4G+2KwZXCO533T8UfPk7BcnprCtraFli4tRmxSccB75xwQel8MjTbgQLiRz4bEZ4SV1oW9VmIhnlfiF9sL6Ss7NwlhXVCRhWyGraS7MbQwkq7iSuDfIaxL+6Im668gRzY8ac7Pp3KNOBY5UfVbkPwcsNWx31678PNH1/Ix2TOCnpvgzXivFN/te+YXTBoHgkroCtb3ZKXh6hQ40lNRXcm4Ghry0KRXbUiGdypLcdlQPFq3hSuV+0/EPTk6nEW5aL0H4r2x4VP9Xxm3lH5fpCKzFykBloDJQGXAMyIbiHeAYZbvpbA0tfdTAVhofCta4hspAZaAyUBlIYEC2kyNdPI23u1ku9y/DGlFqxG3wTSnHuGqoDFQGKgOVgTQG2KTya7N74X9F01De26WPawAAAABJRU5ErkJggg==", "text/latex": [ "$\\displaystyle \\left( 1, \\ y, \\ y^{2}, \\ x, \\ x y, \\ x y^{2}, \\ x^{2}, \\ x^{2} y, \\ x^{2} y^{2}\\right)$" ], "text/plain": [ "⎛ 2 2 2 2 2 2⎞\n", "⎝1, y, y , x, x⋅y, x⋅y , x , x ⋅y, x ⋅y ⎠" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "moments = exponents_to_polynomial_representations(moment_exponents)\n", "moments" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "d2q9 = LBStencil(Stencil.D2Q9, ordering='walberla')\n", "d2q9.plot()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\\\\0 & 1 & -1 & 0 & 0 & 1 & 1 & -1 & -1\\\\0 & 1 & 1 & 0 & 0 & 1 & 1 & 1 & 1\\\\0 & 0 & 0 & -1 & 1 & -1 & 1 & -1 & 1\\\\0 & 0 & 0 & 0 & 0 & -1 & 1 & 1 & -1\\\\0 & 0 & 0 & 0 & 0 & -1 & 1 & -1 & 1\\\\0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 & 1\\\\0 & 0 & 0 & 0 & 0 & 1 & 1 & -1 & -1\\\\0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1\\end{matrix}\\right]$" ], "text/plain": [ "⎡1 1 1 1 1 1 1 1 1 ⎤\n", "⎢ ⎥\n", "⎢0 1 -1 0 0 1 1 -1 -1⎥\n", "⎢ ⎥\n", "⎢0 1 1 0 0 1 1 1 1 ⎥\n", "⎢ ⎥\n", "⎢0 0 0 -1 1 -1 1 -1 1 ⎥\n", "⎢ ⎥\n", "⎢0 0 0 0 0 -1 1 1 -1⎥\n", "⎢ ⎥\n", "⎢0 0 0 0 0 -1 1 -1 1 ⎥\n", "⎢ ⎥\n", "⎢0 0 0 1 1 1 1 1 1 ⎥\n", "⎢ ⎥\n", "⎢0 0 0 0 0 1 1 -1 -1⎥\n", "⎢ ⎥\n", "⎣0 0 0 0 0 1 1 1 1 ⎦" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M = moment_matrix(moments, stencil=d2q9)\n", "M" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining the Equilibrium Distribution, and Computation of Conserved Quantities" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/latex": [ "$\\displaystyle \\left( \\left( 1, \\ \\rho\\right), \\ \\left( y, \\ \\rho u_{1}\\right), \\ \\left( y^{2}, \\ c_{s}^{2} \\rho + \\rho u_{1}^{2}\\right), \\ \\left( x, \\ \\rho u_{0}\\right), \\ \\left( x y, \\ \\rho u_{0} u_{1}\\right), \\ \\left( x y^{2}, \\ c_{s}^{2} \\rho u_{0}\\right), \\ \\left( x^{2}, \\ c_{s}^{2} \\rho + \\rho u_{0}^{2}\\right), \\ \\left( x^{2} y, \\ c_{s}^{2} \\rho u_{1}\\right), \\ \\left( x^{2} y^{2}, \\ c_{s}^{4} \\rho + c_{s}^{2} \\rho u_{0}^{2} + c_{s}^{2} \\rho u_{1}^{2}\\right)\\right)$" ], "text/plain": [ "⎛ ⎛ 2 2 2⎞ ⎛ 2 2\n", "⎝(1, ρ), (y, ρ⋅u₁), ⎝y , cₛ ⋅ρ + ρ⋅u₁ ⎠, (x, ρ⋅u₀), (x⋅y, ρ⋅u₀⋅u₁), ⎝x⋅y , cₛ \n", "\n", " ⎞ ⎛ 2 2 2⎞ ⎛ 2 2 ⎞ ⎛ 2 2 4 2 2 2\n", "⋅ρ⋅u₀⎠, ⎝x , cₛ ⋅ρ + ρ⋅u₀ ⎠, ⎝x ⋅y, cₛ ⋅ρ⋅u₁⎠, ⎝x ⋅y , cₛ ⋅ρ + cₛ ⋅ρ⋅u₀ + cₛ \n", "\n", " 2⎞⎞\n", "⋅ρ⋅u₁ ⎠⎠" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from lbmpy.equilibrium import ContinuousHydrodynamicMaxwellian\n", "from lbmpy.methods import DensityVelocityComputation\n", "\n", "equilibrium = ContinuousHydrodynamicMaxwellian(dim=2, compressible=True, order=2)\n", "cqc = DensityVelocityComputation(d2q9, True, False)\n", "\n", "tuple(zip(moments, equilibrium.moments(moments)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining Relaxation Behaviour and Creating the Method" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Moment-Based Method\n", " Stencil: D2Q9Zero-Centered Storage: ✗Force Model: None
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Continuous Hydrodynamic Maxwellian Equilibrium\n", " \n", " $f (\\rho, \\left( u_{0}, \\ u_{1}\\right), \\left( v_{0}, \\ v_{1}\\right)) \n", " = \\frac{\\rho e^{\\frac{- \\left(- u_{0} + v_{0}\\right)^{2} - \\left(- u_{1} + v_{1}\\right)^{2}}{2 c_{s}^{2}}}}{2 \\pi c_{s}^{2}}$\n", "
Compressible: ✓Deviation Only: ✗Order: 2
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "
Relaxation Info
MomentEq. Value Relaxation Rate
$1$$\\rho$$\\omega$
$y$$\\rho u_{1}$$\\omega$
$y^{2}$$c_{s}^{2} \\rho + \\rho u_{1}^{2}$$\\omega$
$x$$\\rho u_{0}$$\\omega$
$x y$$\\rho u_{0} u_{1}$$\\omega$
$x y^{2}$$c_{s}^{2} \\rho u_{0}$$\\omega$
$x^{2}$$c_{s}^{2} \\rho + \\rho u_{0}^{2}$$\\omega$
$x^{2} y$$c_{s}^{2} \\rho u_{1}$$\\omega$
$x^{2} y^{2}$$c_{s}^{4} \\rho + c_{s}^{2} \\rho u_{0}^{2} + c_{s}^{2} \\rho u_{1}^{2}$$\\omega$
" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from lbmpy.methods.creationfunctions import create_from_equilibrium\n", "\n", "omega = sp.symbols(\"omega\")\n", "relaxation_rate_dict = {moment : omega for moment in moments}\n", "\n", "force_model = forcemodels.Guo(sp.symbols(\"F_:2\"))\n", "method = create_from_equilibrium(d2q9, equilibrium, cqc, relaxation_rate_dict)\n", "method" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example of a update equation without simplifications" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Subexpressions:
$$vel0Term \\leftarrow f_{4} + f_{6} + f_{8}$$
$$vel1Term \\leftarrow f_{1} + f_{5}$$
$$\\rho \\leftarrow f_{0} + f_{2} + f_{3} + f_{7} + vel0Term + vel1Term$$
$$u_{0} \\leftarrow \\frac{- f_{3} - f_{5} - f_{7} + vel0Term}{\\rho}$$
$$u_{1} \\leftarrow \\frac{- f_{2} + f_{6} - f_{7} - f_{8} + vel1Term}{\\rho}$$
$$\\delta_{\\rho} \\leftarrow \\rho - 1$$
Main Assignments:
$$d_{0} \\leftarrow f_{0} + \\omega \\left(c_{s}^{4} \\rho + c_{s}^{2} \\rho u_{0}^{2} + c_{s}^{2} \\rho u_{1}^{2} - f_{5} - f_{6} - f_{7} - f_{8}\\right) - \\omega \\left(c_{s}^{2} \\rho - f_{1} - f_{2} - f_{5} - f_{6} - f_{7} - f_{8} + \\rho u_{1}^{2}\\right) - \\omega \\left(c_{s}^{2} \\rho - f_{3} - f_{4} - f_{5} - f_{6} - f_{7} - f_{8} + \\rho u_{0}^{2}\\right) + \\omega \\left(- f_{0} - f_{1} - f_{2} - f_{3} - f_{4} - f_{5} - f_{6} - f_{7} - f_{8} + \\rho\\right)$$
$$d_{1} \\leftarrow f_{1} - \\frac{\\omega \\left(c_{s}^{2} \\rho u_{1} - f_{5} - f_{6} + f_{7} + f_{8}\\right)}{2} + \\frac{\\omega \\left(- f_{1} + f_{2} - f_{5} - f_{6} + f_{7} + f_{8} + \\rho u_{1}\\right)}{2} - \\frac{\\omega \\left(c_{s}^{4} \\rho + c_{s}^{2} \\rho u_{0}^{2} + c_{s}^{2} \\rho u_{1}^{2} - f_{5} - f_{6} - f_{7} - f_{8}\\right)}{2} + \\frac{\\omega \\left(c_{s}^{2} \\rho - f_{1} - f_{2} - f_{5} - f_{6} - f_{7} - f_{8} + \\rho u_{1}^{2}\\right)}{2}$$
$$d_{2} \\leftarrow f_{2} + \\frac{\\omega \\left(c_{s}^{2} \\rho u_{1} - f_{5} - f_{6} + f_{7} + f_{8}\\right)}{2} - \\frac{\\omega \\left(- f_{1} + f_{2} - f_{5} - f_{6} + f_{7} + f_{8} + \\rho u_{1}\\right)}{2} - \\frac{\\omega \\left(c_{s}^{4} \\rho + c_{s}^{2} \\rho u_{0}^{2} + c_{s}^{2} \\rho u_{1}^{2} - f_{5} - f_{6} - f_{7} - f_{8}\\right)}{2} + \\frac{\\omega \\left(c_{s}^{2} \\rho - f_{1} - f_{2} - f_{5} - f_{6} - f_{7} - f_{8} + \\rho u_{1}^{2}\\right)}{2}$$
$$d_{3} \\leftarrow f_{3} + \\frac{\\omega \\left(c_{s}^{2} \\rho u_{0} + f_{5} - f_{6} + f_{7} - f_{8}\\right)}{2} - \\frac{\\omega \\left(f_{3} - f_{4} + f_{5} - f_{6} + f_{7} - f_{8} + \\rho u_{0}\\right)}{2} - \\frac{\\omega \\left(c_{s}^{4} \\rho + c_{s}^{2} \\rho u_{0}^{2} + c_{s}^{2} \\rho u_{1}^{2} - f_{5} - f_{6} - f_{7} - f_{8}\\right)}{2} + \\frac{\\omega \\left(c_{s}^{2} \\rho - f_{3} - f_{4} - f_{5} - f_{6} - f_{7} - f_{8} + \\rho u_{0}^{2}\\right)}{2}$$
$$d_{4} \\leftarrow f_{4} - \\frac{\\omega \\left(c_{s}^{2} \\rho u_{0} + f_{5} - f_{6} + f_{7} - f_{8}\\right)}{2} + \\frac{\\omega \\left(f_{3} - f_{4} + f_{5} - f_{6} + f_{7} - f_{8} + \\rho u_{0}\\right)}{2} - \\frac{\\omega \\left(c_{s}^{4} \\rho + c_{s}^{2} \\rho u_{0}^{2} + c_{s}^{2} \\rho u_{1}^{2} - f_{5} - f_{6} - f_{7} - f_{8}\\right)}{2} + \\frac{\\omega \\left(c_{s}^{2} \\rho - f_{3} - f_{4} - f_{5} - f_{6} - f_{7} - f_{8} + \\rho u_{0}^{2}\\right)}{2}$$
$$d_{5} \\leftarrow f_{5} - \\frac{\\omega \\left(f_{5} - f_{6} - f_{7} + f_{8} + \\rho u_{0} u_{1}\\right)}{4} - \\frac{\\omega \\left(c_{s}^{2} \\rho u_{0} + f_{5} - f_{6} + f_{7} - f_{8}\\right)}{4} + \\frac{\\omega \\left(c_{s}^{2} \\rho u_{1} - f_{5} - f_{6} + f_{7} + f_{8}\\right)}{4} + \\frac{\\omega \\left(c_{s}^{4} \\rho + c_{s}^{2} \\rho u_{0}^{2} + c_{s}^{2} \\rho u_{1}^{2} - f_{5} - f_{6} - f_{7} - f_{8}\\right)}{4}$$
$$d_{6} \\leftarrow f_{6} + \\frac{\\omega \\left(f_{5} - f_{6} - f_{7} + f_{8} + \\rho u_{0} u_{1}\\right)}{4} + \\frac{\\omega \\left(c_{s}^{2} \\rho u_{0} + f_{5} - f_{6} + f_{7} - f_{8}\\right)}{4} + \\frac{\\omega \\left(c_{s}^{2} \\rho u_{1} - f_{5} - f_{6} + f_{7} + f_{8}\\right)}{4} + \\frac{\\omega \\left(c_{s}^{4} \\rho + c_{s}^{2} \\rho u_{0}^{2} + c_{s}^{2} \\rho u_{1}^{2} - f_{5} - f_{6} - f_{7} - f_{8}\\right)}{4}$$
$$d_{7} \\leftarrow f_{7} + \\frac{\\omega \\left(f_{5} - f_{6} - f_{7} + f_{8} + \\rho u_{0} u_{1}\\right)}{4} - \\frac{\\omega \\left(c_{s}^{2} \\rho u_{0} + f_{5} - f_{6} + f_{7} - f_{8}\\right)}{4} - \\frac{\\omega \\left(c_{s}^{2} \\rho u_{1} - f_{5} - f_{6} + f_{7} + f_{8}\\right)}{4} + \\frac{\\omega \\left(c_{s}^{4} \\rho + c_{s}^{2} \\rho u_{0}^{2} + c_{s}^{2} \\rho u_{1}^{2} - f_{5} - f_{6} - f_{7} - f_{8}\\right)}{4}$$
$$d_{8} \\leftarrow f_{8} - \\frac{\\omega \\left(f_{5} - f_{6} - f_{7} + f_{8} + \\rho u_{0} u_{1}\\right)}{4} + \\frac{\\omega \\left(c_{s}^{2} \\rho u_{0} + f_{5} - f_{6} + f_{7} - f_{8}\\right)}{4} - \\frac{\\omega \\left(c_{s}^{2} \\rho u_{1} - f_{5} - f_{6} + f_{7} + f_{8}\\right)}{4} + \\frac{\\omega \\left(c_{s}^{4} \\rho + c_{s}^{2} \\rho u_{0}^{2} + c_{s}^{2} \\rho u_{1}^{2} - f_{5} - f_{6} - f_{7} - f_{8}\\right)}{4}$$
" ], "text/plain": [ "AssignmentCollection: d_8, d_1, d_2, d_7, d_5, d_0, d_3, d_6, d_4 <- f(f_7, c_s, omega, f_2, f_6, f_1, f_8, f_3, f_0, f_4, f_5)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "collision_rule = method.get_collision_rule()\n", "collision_rule" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generic simplification strategy - common subexpresssion elimination" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
NameRuntimeAddsMulsDivsTotal
OriginalTerm- 245 248 2 495
sympy_cse30.74 ms 82 36 1 119
" ], "text/plain": [ ".Report at 0x7f116ccb7490>" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "generic_strategy = ps.simp.SimplificationStrategy()\n", "generic_strategy.add(ps.simp.sympy_cse)\n", "generic_strategy.create_simplification_report(collision_rule)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A custom simplification strategy for moment-based methods" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "simplification_strategy = create_simplification_strategy(method)\n", "simplification_strategy.create_simplification_report(collision_rule)\n", "simplification_strategy.add(ps.simp.sympy_cse)" ] } ], "metadata": { "anaconda-cloud": {}, "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", "version": "3.8.2" } }, "nbformat": 4, "nbformat_minor": 1 }