{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from lbmpy.session import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial 04: The Cumulant Lattice Boltzmann Method in lbmpy\n", "\n", "## A) Principles of the centered cumulant collision operator\n", "\n", "Recently, an advanced Lattice Boltzmann collision operator based on relaxation in cumulant space has gained popularity. Similar to moments, cumulants are statistical quantities inherent to a probability distribution. A significant advantage of the cumulants is that they are statistically independent by construction. Moments can be defined by using the so-called moment generating function, which for the discrete particle distribution of the LB equation is stated as\n", "\n", "$$\n", "\\begin{align}\n", " M( \\mathbf{X} ) = \n", " \\sum_i f_i \n", " \\exp \\left(\n", " \\mathbf{c}_i \\cdot \\mathbf{X}\n", " \\right)\n", "\\end{align}\n", "$$\n", "\n", "The raw moments $m_{\\alpha \\beta \\gamma}$ can be expressed as its derivatives, evaluated at zero:\n", "\n", "$$\n", "\\begin{align}\n", " m_{\\alpha \\beta \\gamma} \n", " = \n", " \\left.\n", " \\frac{\\partial^{\\alpha}}{\\partial X^{\\alpha}}\n", " \\frac{\\partial^{\\beta}}{\\partial Y^{\\beta}}\n", " \\frac{\\partial^{\\gamma}}{\\partial Z^{\\gamma}}\n", " M(X, Y, Z) \n", " \\right\\vert_{\\mathbf{X}=0}\n", "\\end{align}\n", "$$\n", "\n", "The cumulant-generating function is defined as the natural logarithm of this moment-generating function, and the cumulants $c_{\\alpha \\beta \\gamma}$ are defined as its derivatives evaluated at zero:\n", "\n", "$$\n", "\\begin{align}\n", " C(\\mathbf{X}) :=& \\, \\log ( M(\\mathbf{X}) ) \\\\\n", " c_{\\alpha \\beta \\gamma} \n", " =& \\,\n", " \\left.\n", " \\frac{\\partial^{\\alpha}}{\\partial X^{\\alpha}}\n", " \\frac{\\partial^{\\beta}}{\\partial Y^{\\beta}}\n", " \\frac{\\partial^{\\gamma}}{\\partial Z^{\\gamma}}\n", " C(X, Y, Z) \n", " \\right\\vert_{\\mathbf{X}=0}\n", "\\end{align}\n", "$$\n", "\n", "Other than with moments, there is no straightforward way to express cumulants in terms of the populations. However, their generating functions can be related to allowing the computation of cumulants from both raw and central moments, computed from populations. In lbmpy, the transformations from populations to cumulants and back are implemented using central moments as intermediaries. All cumulants of orders 2 and 3 are equal to their corresponding central moments, up to the density $\\rho$ as a proportionality factor.\n", "\n", "The central moment-generating function $K$ can be related to the moment-generating function through $K(\\mathbf{X}) = \\exp( - \\mathbf{X} \\cdot \\mathbf{u} ) M(\\mathbf{X})$. It is possible to recombine the equation with the definition of the cumulant-generating function\n", "\n", "$$\n", "\\begin{align}\n", " C( \\mathbf{X} ) = \\mathbf{X} \\cdot \\mathbf{u} + \\log( K( \\mathbf{X} ) ).\n", "\\end{align}\n", "$$\n", "\n", "Derivatives of $C$ can thus be expressed in terms of derivatives of $K$, directly yielding equations of the cumulants in terms of central moments.\n", "\n", "In the cumulant lattice Boltzmann method, forces are applied symmetrically in central moment space." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## B) Method Creation\n", "\n", "Using the `create_lb_method` interface, creation of a cumulant-based lattice Boltzmann method in lbmpy is straightforward. Cumulants can either be relaxed in their raw (monomial forms) or in polynomial combinations. Both variants are available as predefined setups. **Attention:** Cumulant-based methods are only available for the *compressible* equilibrium.\n", "\n", "### Relaxation of Monomial Cumulants\n", "\n", "Monomial cumulant relaxation is available through the `method=\"monomial_cumulant\"` parameter setting. This variant requires fewer transformation steps and is a little faster than polynomial relaxation, but it does not allow separation of bulk and shear viscosity. Default monomial cumulant sets are available for the D2Q9, D3Q19 and D3Q27 stencils. It is also possible to define a custom set of monomial cumulants.\n", "\n", "When creating a monomial cumulant method, one option is to specify only a single relaxation rate which will then be assigned to all cumulants related to the shear viscosity. In this case, all other non-conserved cumulants will be relaxed to equilibrium. Alternatively, individual relaxation rates for all non-conserved cumulants can be specified. The conserved cumulants are set to zero by default to save computational cost. They can be adjusted with `set_zeroth_moment_relaxation_rate`, `set_first_moment_relaxation_rate` and `set_conserved_moments_relaxation_rate`." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Cumulant-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{3 \\rho e^{- \\frac{3 \\left(- u_{0} + v_{0}\\right)^{2}}{2} - \\frac{3 \\left(- u_{1} + v_{1}\\right)^{2}}{2}}}{2 \\pi}$\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
CumulantEq. Value Relaxation Rate
$1$$\\rho \\log{\\left(\\rho \\right)}$$0.0$
$x$$\\rho u_{0}$$0.0$
$y$$\\rho u_{1}$$0.0$
$x^{2}$$\\frac{\\rho}{3}$$\\omega_{v}$
$y^{2}$$\\frac{\\rho}{3}$$\\omega_{v}$
$x y$$0$$\\omega_{v}$
$x^{2} y$$0$$1.0$
$x y^{2}$$0$$1.0$
$x^{2} y^{2}$$0$$1.0$
" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lbm_config = LBMConfig(method=Method.MONOMIAL_CUMULANT, relaxation_rate=sp.Symbol('omega_v'), compressible=True)\n", "method_monomial = create_lb_method(lbm_config=lbm_config)\n", "method_monomial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Relaxation of Polynomial Cumulants\n", "\n", "By setting `method=\"cumulant\"`, a set of default polynomial cumulants is chosen to be relaxed. Those cumulants are taken from literature and assembled into groups selected to enforce rotational invariance (see: `lbmpy.methods.centeredcumulant.centered_cumulants`). Default polynomial groups are available for the D2Q9, D3Q19 and D3Q27 stencils. As before it is possible to specify only a single relaxation rate assigned to the moments governing the shear viscosity. All other relaxation rates are then automatically set to one." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Cumulant-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{3 \\rho e^{- \\frac{3 \\left(- u_{0} + v_{0}\\right)^{2}}{2} - \\frac{3 \\left(- u_{1} + v_{1}\\right)^{2}}{2}}}{2 \\pi}$\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
CumulantEq. Value Relaxation Rate
$1$$\\rho \\log{\\left(\\rho \\right)}$$0.0$
$x$$\\rho u_{0}$$0.0$
$y$$\\rho u_{1}$$0.0$
$x y$$0$$\\omega_{v}$
$x^{2} - y^{2}$$0$$\\omega_{v}$
$x^{2} + y^{2}$$\\frac{2 \\rho}{3}$$1.0$
$x^{2} y$$0$$1.0$
$x y^{2}$$0$$1.0$
$x^{2} y^{2}$$0$$1.0$
" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lbm_config = LBMConfig(method=Method.CUMULANT, relaxation_rate=sp.Symbol('omega_v'), compressible=True)\n", "method_polynomial = create_lb_method(lbm_config=lbm_config)\n", "method_polynomial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## C) Exemplary simulation: flow around sphere\n", "\n", "To end this tutorial, we show an example simulation of a channel flow with a spherical obstacle. This example is shown in 2D with the D2Q9 stencil but can be adapted easily for a 3D simulation." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from lbmpy.relaxationrates import relaxation_rate_from_lattice_viscosity\n", "from lbmpy.macroscopic_value_kernels import pdf_initialization_assignments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To define the channel flow with dimensionless parameters, we first define the reference length in lattice cells. The reference length will be the diameter of the spherical obstacle. Furthermore, we define a maximal velocity which will be set for the inflow later. The Reynolds number is set relatively high to 100000, which will cause a turbulent flow in the channel.\n", "\n", "From these definitions, we can calculate the relaxation rate `omega` for the lattice Boltzmann method." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "reference_length = 30\n", "maximal_velocity = 0.05\n", "reynolds_number = 100000\n", "kinematic_vicosity = (reference_length * maximal_velocity) / reynolds_number\n", "initial_velocity=(maximal_velocity, 0)\n", "\n", "omega = relaxation_rate_from_lattice_viscosity(kinematic_vicosity)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a next step, we define the domain size of our set up." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "stencil = LBStencil(Stencil.D2Q9)\n", "domain_size = (reference_length * 12, reference_length * 4)\n", "dim = len(domain_size)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the data for the simulation is allocated. We allocate a field `src` for the PDFs and field `dst` used as a temporary field to implement the two grid pull pattern. Additionally, we allocate a velocity field `velField`" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "dh = ps.create_data_handling(domain_size=domain_size, periodicity=(False, False))\n", "\n", "src = dh.add_array('src', values_per_cell=len(stencil), alignment=True)\n", "dh.fill('src', 0.0, ghost_layers=True)\n", "dst = dh.add_array('dst', values_per_cell=len(stencil), alignment=True)\n", "dh.fill('dst', 0.0, ghost_layers=True)\n", "\n", "velField = dh.add_array('velField', values_per_cell=dh.dim, alignment=True)\n", "dh.fill('velField', 0.0, ghost_layers=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We choose a cumulant lattice Boltzmann method, as described above. Here the second-order cumulants are relaxed with the relaxation rate calculated above. All higher-order cumulants are relaxed with one, which means we set them to the equilibrium." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Cumulant-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{3 \\rho e^{- \\frac{3 \\left(- u_{0} + v_{0}\\right)^{2}}{2} - \\frac{3 \\left(- u_{1} + v_{1}\\right)^{2}}{2}}}{2 \\pi}$\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
CumulantEq. Value Relaxation Rate
$1$$\\rho \\log{\\left(\\rho \\right)}$$0.0$
$x$$\\rho u_{0}$$0.0$
$y$$\\rho u_{1}$$0.0$
$x y$$0$$1.99982001619854$
$x^{2} - y^{2}$$0$$1.99982001619854$
$x^{2} + y^{2}$$\\frac{2 \\rho}{3}$$1.0$
$x^{2} y$$0$$1.0$
$x y^{2}$$0$$1.0$
$x^{2} y^{2}$$0$$1.0$
" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lbm_config = LBMConfig(stencil=Stencil.D2Q9, method=Method.CUMULANT, relaxation_rate=omega,\n", " compressible=True,\n", " output={'velocity': velField}, kernel_type='stream_pull_collide')\n", "\n", "method = create_lb_method(lbm_config=lbm_config)\n", "method" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Initialization with equilibrium" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "init = pdf_initialization_assignments(method, 1.0, initial_velocity, src.center_vector)\n", "\n", "ast_init = ps.create_kernel(init, target=dh.default_target)\n", "kernel_init = ast_init.compile()\n", "\n", "dh.run_kernel(kernel_init)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Definition of the update rule" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "lbm_optimisation = LBMOptimisation(symbolic_field=src, symbolic_temporary_field=dst)\n", "update = create_lb_update_rule(lb_method=method,\n", " lbm_config=lbm_config,\n", " lbm_optimisation=lbm_optimisation)\n", "\n", "ast_kernel = ps.create_kernel(update, target=dh.default_target, cpu_openmp=True)\n", "kernel = ast_kernel.compile()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Definition of the boundary set up" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def set_sphere(x, y, *_):\n", " mid = (domain_size[0] // 3, domain_size[1] // 2)\n", " radius = reference_length // 2\n", " return (x-mid[0])**2 + (y-mid[1])**2 < radius**2" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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AAAAAAAAABRJGBoAAAAAAAAAAAAAKJIwNAAAAAAAAAAAAABQJGFoAAAAAAAAAAAAAKBIwtAAAAAAAAAAAAAAQJGEoQEAAAAAAAAAAACAIglDAwAAAAAAAAAAAABFEoYGAAAAAAAAAAAAAIokDA0AAAAAAAAAAAAAFEkYGgAAAAAAAAAAAAAokjA0AAAAAAAAAAAAAFAkYWgAAAAAAAAAAAAAoEjC0AAAAAAAAAAAAABAkYShAQAAAAAAAAAAAIAiCUMDAAAAAAAAAAAAAEUShgYAAAAAAAAAAAAAiiQMDQAAAAAAAAAAAAAUSRgaAAAAAAAAAAAAACiSMDQAAAAAAAAAAAAAUCRhaAAAAAAAAAAAAACgSMLQAAAAAAAAAAAAAECRhKEBAAAAAAAAAAAAgCIJQwMAAAAAAAAAAAAARRKGBgAAAAAAAAAAAACKJAwNAAAAAAAAAAAAABRJGBoAAAAAAAAAAAAAKJIwNAAAAAAAAAAAAABQJGFoAAAAAAAAAAAAAKBIwtAAAAAAAAAAAAAAQJGEoQEAAAAAAAAAAACAIglDAwAAAAAAAAAAAABFEoYGAAAAAAAAAAAAAIokDA0AAAAAAAAAAAAAFEkYGgAAAAAAAAAAAAAokjA0AAAAAAAAAAAAAFAkYWgAAAAAAAAAAAAAoEjC0AAAAAAAAAAAAABAkYShAQAAAAAAAAAAAIAiCUMDAAAAAAAAAAAAAEUShgYAAAAAAAAAAAAAiiQMDQAAAAAAAAAAAAAUSRgaAAAAAAAAAAAAACiSMDQAAAAAAAAAAAAAUCRhaAAAAAAAAAAAAACgSMLQAAAAAAAAAAAAAECRhKEBAAAAAAAAAAAAgCIJQwMAAAAAAAAAAAAARRKGBgAAAAAAAAAAAACKJAwNAAAAAAAAAAAAABRJGBoAAAAAAAAAAAAAKJIwNAAAAAAAAAAAAABQJGFoAAAAAAAAAAAAAKBIwtAAAAAAAAAAAAAAQJGEoQEAAAAAAAAAAACAIglDAwAAAAAAAAAAAABFEoYGAAAAAAAAAAAAAIokDA0AAAAAAAAAAAAAFEkYGgAAAAAAAAAAAAAokjA0AAAAAAAAAAAAAFAkYWgAAAAAAAAAAAAAoEjC0AAAAAAAAAAAAABAkYShAQAAAAAAAAAAAIAiCUMDAAAAAAAAAAAAAEUShgYAAAAAAAAAAAAAiiQM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Pvaxj0363ve+t1v1vaVLlw754Q9/OO6mm27a6Ze//OXiQw89dN22vue1TBgaAAAAAAAAAAAAgM08//zz9SeccMLLQegTTjjhxQ9/+MPLJ0yY0LZw4cKmyy67bPz111+/y0MPPTSsux7XXnvt6E9+8pN755xj2LBh7R/96Eeffec737myoaEh33HHHSO+/e1v77ZixYqGiy66aNKYMWM2nn/++cu66/XLX/5y1AMPPDD8kEMOWXPuuec+t//++6977rnnGi699NJdf/Ob34y+7777hn/5y1/ebezYsRuvuuqqXd/ylre8dOaZZy7fb7/9Njz22GONs2fPnnD//fcPv+OOO0b90z/907jPfe5zm72rra0t7b777uuPP/74FTNnzlyzzz77bGhsbMyPPvrokFtuuWXU9ddfv8uKFSsaTjnllMkPPPDAg5MmTWrb2j/fq6++etx99903/PDDD1991llnLdt///3XvfDCC/XXXHPNzj/5yU92fvHFFxvOPPPMvX//+98v2tp37AhSdTKe/pNS2j0inoiIuPX9EbsN37zm3RPmDPBUAABQplkrevx/SAK6MHtMS61HAAAAAAAABsDI6Z/f7F7rC62x+LzFHZd75JyfHNChtqMFCxb8oqGhYf+mpqYxU6dO/VNPtTO+fsvBz6/e0NhTzWvBziOGtC644O1/6I/e55xzzu7/9m//Nj4i4vOf//xmJzevX78+HXvssZPvuuuuUR33Fi1a9MDUqVM3dOzvueeeBz333HONw4YNa7/lllsWHXHEEa/6H64efvjhIUcdddS0ZcuWNTY1NbU/+uijD0yYMOFVAeOU0oyO9Tvf+c4X58yZ82j1qc5tbW1x2GGHTbv//vuHDx8+vL2trS2ddtppy6688sonqvusWrWqbtq0aQcsXbp0yJQpU1oWL168sPNvfvDBB4dOnz59fV1dXZd/JnPnzm0+5phjpq1du7buk5/85NPf/va3l3aumTlz5tR58+aNOPzww1fPnTt3cfXe4sWLh0ybNu2gjutTTjll+Q9+8IPHOr/vlFNO2eu6667bJSLizjvvXHjkkUe+Zv4Hv8WLF09et27dira2toUzZsx497b26/pvCgAAAAAAAAAAAIAdVktLS/rRj360S0TElClTWr7+9a8/07lm6NCh+ZprrvlzQ0NDlyfz/vu///uY5557rjEi4lOf+tTTnYPQld4bvvrVrz4ZEbFu3bq67373uzt3N1NTU1P7Nddc81h1EDoioqGhIc4888xlERFr1qyp22mnnVq/+93vbhb6HzlyZPsHPvCB5yMiHn744ebnn3++vnPNAQcc0G0QOiJi5syZLaeccsryiIibbrppTLeFfTBu3LjW73//+4939b4vfOELL/9533777SO35T2vdcLQAAAAAAAAAAAAALzKnXfeOWzlypX1ERGnnnrq8/X1m+WGIyJiv/32az3qqKNWdrV36623joqISCnFxz/+8eXdveuMM854ccSIERsjIm6//fZR3dUdeeSRK8ePH7+xq71DDz305aD18ccfv2Lo0KFdBrQPOeSQtR3rxYsXD+nuXR2WLVtW/+CDDw6dP39+07x585rmzZvXNGbMmLaIiEceeaR5/fr1qbce3Xn3u9/9YnNzc5dzvv71r18/bNiw9oiIRx99dOjWvmNH0NB7CQAAAAAAAAAAAAA7kt///vfNHes3vvGNa3qqnTFjxppf/epXozvfX7RoUXNExMSJEzdMmjSprbvnm5qa8v7777927ty5Ix9++OHm7uomT568vru9sWPHvtx/ypQp67qr22mnnV4OU3eEvTubO3du8+zZs8f/6le/GrV8+fLG7nq1t7fH8uXL63v6bT2ZNm1at3NGRIwaNapt7dq1Q1avXu3w4x4IQwMAAAAAAAAAAADwKi+++OLLGdMJEya09lQ7fvz4LvdXrFhRHxGxyy679Ph8RMSuu+7aGhGxcuXKbrOtHScld6X65Oqe6urqXskVt7W1bXaq8ze/+c1dZs2atefGjRv7dOLzmjVrtjqo3NOcEa/M2tdZdlSS4gAAAAAAAAAAAAC8Ss755XVKPWdxc849FvT2fF96DIT77ruvqSMIPXbs2LYvf/nLT95xxx0PPfPMM79ft27dvTnnBTnnBd/85jf/3PFM9Z8TteFkaAAAoDizx7R0uzdrRbf/j0nwmtfTfzYAAAAAAABgS4wdO7atY7106dLGgw8+eH13tc8991yXedQxY8ZsjIhYtmxZY2/vW7ZsWUNExKhRo9p6q+0v//qv/7rzxo0bU319fdxyyy2LDz300HVd1VWfmk3tORkaAAAAAAAAAAAAgFc55JBDXj6J57e//e3wnmrvvffeLvenTZvWEhGxdOnSIU899VS3AeL169enhQsXDouImDJlSs1OAFq0aFFzRMTUqVPXdheEjoi49957hw3cVPRGGBoAAAAAAAAAAACAVznqqKPWjho1amNExHXXXbdze3t7l3VLlixpvPPOO0d1tXfssceujIjIOcc///M/79Ldu66++uqdVq9eXR8Rccwxx6zc5uG3UltbW4qIaGlp6TZf+/jjjzf88pe/HDNgQ9ErYWgAAAAAAAAAAAAAXqW5uTl/4AMfWB6x6cTk//W//tf4zjWtra1x+umn79Xa2pq66vE3f/M3K8aNG9caEXHppZdOuOeee5o71/zpT39q/PKXv7x7RERTU1P7xz72see37y/pu3333XddRMRjjz3WdOutt2522vWqVavqPvCBD+y7bt06+dtBxF8GAAAAAAAAAAAAAJu56KKLnh4/fnxrRMQ//MM/7H7iiSfu85//+Z+j7rzzzmFXXHHFToceeuj03/zmN6MPPPDAtV09P3To0HzppZc+llKKNWvW1B133HHTPvvZz064+eabh992223Dv/rVr+76F3/xF/svW7asMSLiK1/5ypMTJkxoG8jfWO2MM854PiKivb09Tj755Nd98Ytf3O2mm24acfvttw/7x3/8x3EHHXTQ/r/73e9GHnrooatrNSOba6j1AAAAAAAAAAAAAAAMPjvvvPPGOXPmPHz88cdPWb58eeOcOXPGzpkzZ2x1zV/91V89/+Y3v3nVpz71qb276nHKKae8tGzZsj9/9rOf3Wvt2rV1l1xyycRLLrlkYnVNfX19zJo166nzzz9/WT/+nF4dffTRaz/zmc8sveSSSyauXLmy/sILL5x04YUXvqrmnHPOefbAAw9suffee0fUaEw6cTI0AAAAAAAAAAAAAF067LDD1v3P//zPg+eee+4ze+211/ohQ4bkMWPGtP3FX/zFqssvv3zJ9ddf/+feenziE594/g9/+MP/nHHGGc/tu+++65qbm9ubmpra99hjj/WnnHLK8rvvvnvhhRde+MwA/JxeXXzxxU9fe+21fzryyCNXjho1amNjY2MeP3586zve8Y4VN9xwwx+vuOKKJ2s9I6+Wcs61nmGHkFLaPSKeiIi49f0Ruw3fvObdE+YM8FQAAPDaM2tFc61HgJqZPaal1iMAAAAAAAA1NnL65ze71/pCayw+b3HH5R4552LDnAsWLPhFQ0PD/k1NTWOmTp36p55qZ3z9loOfX72hcaBmq5WdRwxpXXDB2/9Q6zmgrxYvXjx53bp1K9ra2hbOmDHj3dvar2F7DAUAAAAAAAAAAAAwmIwdNqS11jMMhB3ld0J3hKEBAAAAAAAAAACA15xbzjv6oVrPAPS/uloPAAAAAAAAAAAAAACwNYShAQAAAAAAAAAAAIAiCUMDAAAAAAAAAAAAAEUShgYAAAAAAAAAAAAAiiQMDQAAAAAAAAAAAAAUSRgaAAAAAAAAAAAAACiSMDQAAAAAAAAAAAAAUCRhaAAAAAAAAAAAAACgSMLQAAAAAAAAAAAAAECRhKEBAAAAAAAAAAAAgCIJQwMAAAAAAAAAAAAARWqo9QAAAADb0+wxLd3uzVrRPICTQP/o6d84AAAAAAAAwI7GydAAAAAAAAAAAAAAQJGEoQEAAAAAAAAAAACAIglDAwAAAAAAAAAAAABFEoYGAAAAAAAAAAAAAIokDA0AAAAAAAAAAAAAFEkYGgAAAAAAAAAAAAAoUkOtBwAAABgos8e0dLs3a0XzAE4CPevp3yoAAAAAAAB988gXD5zetmpZY63n6G8NI8e17vd//ueh/uj9/ve/f+8bbrhh54iIRYsWPTB16tQNvT0zadKkg5YuXTpk4sSJG5566qkHqvdSSjO6e27o0KF5zJgxbfvvv//a97///S989KMffaGhofuYa8d7utprbGzMo0ePbpsyZUrLX/7lX674+Mc/vnzEiBG5t9kpkzA0AAAAAAAAAAAA8JrTtmpZ48aVz73mw9CvFevXr0/PPvts47PPPjv69ttvH/29731v/M033/zHiRMntm1pr9bW1rR8+fLG5cuXN959992jvvvd746fM2fOHw866KD1/TE7tSUMDQAAAAAAAAAAAMCAOeCAA9ZeddVVS6rvrVy5sv7+++9vvuKKK3ZdvHhx84MPPjjsve99737z5s1b3FOvcePGtf785z9/uPre2rVr6x588MGmq666atz8+fNHPP7440NPPPHE1z300EMPNjc3OyH6NUYYGgAAAAAAAAAAAIABM2zYsPbDDz98Xef7xx577Jpzzjnnhde//vXTlyxZ0jR//vwRt9122/C3ve1ta7rr1djYmLvqdfTRR6/96Ec/+sIRRxwxZe7cuSMfe+yxof/xH/8x5pxzznlxe/8eaquu1gMAAAAAAAAAAAAAQETEyJEj288555znOq7vvvvu4Vvbq76+Pj796U8/23H9u9/9bqt7MXgJQwMAAAAAAAAAAAAwaOyzzz4bOtbr1q1L29Jr8uTJ66t6yc2+BvlLBQAAAAAAAAAAAGDQWLJkyZCO9Z577rmhp9re/OlPfxq6vXoxOAlDAwAAAAAAAAAAADAorF69Ol155ZW7RkQ0NTW1v+c971m1tb3a29vj29/+9viIiJRSnHTSSSu205gMIg21HgAAAAAAAAAAAACAHcfatWvr5s2b11R9b/Xq1XX3339/8xVXXLHrI4880pRSigsuuOCpiRMntvXUq7W1NXXu1dLSUrdw4cKmq6++epff/e53IyMizj777GcPP/zwddv/11BrwtAAAAAAAAAAAAAADJgHH3xw2MyZMw/obv+II45YOWvWrGfe97739Xoq9LJlyxp76nXggQeuPe+8854544wzXtzaeRnc6mo9AAAAAAAAAAAAAAB0mDt37sjLL7983JIlSxq3tdfChQuHXXnllbvMnz+/qfdqSiQMDQAAAAAAAAAAAMCAOfzww1fnnBdUf9atW3fvokWLHrjwwgsfHzFixMb//u//3ulNb3rT9D/84Q9De+o1ceLEDZ17bdiwYcGjjz76h+985ztLdttttw133XXXqLe97W3TbrnlluED9RsZOMLQAAAAAAAAAAAAAGwmpbTFz+Sct+pdQ4cOzVOnTt3w+c9/ftktt9yyuKGhIT/77LONZ5555t5b2quxsTH22Wef1o9//OMv3H333YtGjx69cdWqVfVnnHHGvq2trVs1H4OXMDQAAAAAAAAAAAAAm2lqamrvWK9evbpPmdOWlpa6iIhhw4a191bbncMOO2zd0Ucf/VJExIIFC0Y88MADPZ4O3ZO99tqr9eSTT34+IuKpp54aMmfOnFFb24vBqaHWAwAAAAwGs8e0dLs3a0XzAE7CjqKnf3MAAAAAAAAwGIwdO7atY/3UU081zpgxY11P9S0tLWnVqlUNERGjR49u66m2N1OmTFl36623RkTEvffe23zQQQet39pe06ZNe3nu+++/v/mkk05auS2zMbg4GRoAAAAAAAAAAACAzRx88MEvn/Azf/78Yb3V//a3v23euHFjRETsv//+23Q6UFtbW+pYb9iwIfVU24deL69bW1u3qReDjzA0AAAAAAAAAAAAAJt5xzvesaq+vj5HRPz4xz8e297e3mP9Nddcs3PH+rjj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95x11lnLJ0+evDIi4plnnulz0003Ddh4zPDhw9+RUhp38sknj2ptrpNPPnlUSmnc8OHD39Hc/U3XP/rRj96WUhpX/Ofkk08eNWfOnN5N17NmzaqMiJg1a1Zl8biN526PRYsWlZ177rnD9txzz72qqqr2LS8v33/48OHvOOGEE3a56667Klu6p+k1v//97w9ubsy//du/7dw05vTTTx/Z3JhvfvObO6SUxpWVlY1btmyZHHBEOOcbAABgG/f9gVvFb50CAAAAAAAAcqShoSFuvvnm7SMiKioqGs4777yl7b33s5/97OK//e1vAyIirrvuusEf/vCHV26pOrvaLbfc0v/000/ftbq6urT4+UWLFvW+7bbbtrvtttu2O+2005Zce+2180tL3xgybNiwutGjR9fMmzevYvr06f2/9KUvveXjOXPmzKqm9owZM/o39/r33XdfVUTE2LFj12633XavH7s9fPjwdyxatKh3RESWZQ9v9hvNEWFoAAAAAAAAAAAAAN7k4Ycfrli5cmVpRMQBBxxQvf3229e3997jjjtuVUVFRUNNTU3J7Nmzmz0peXPceeedc2tra9OBBx64d0TEqaeeuuS8885bXDxm8ODB9cOGDat76KGHnoiIOPPMM3d54okn+u69995rr7322uebxpWXl2ftfd0ZM2b0+dCHPrTbhg0bUllZWfaRj3xkyYknnriiqqqqftasWX1//OMfv23hwoW9b7jhhiH9+vWrv+KKKxYW33/QQQetnjdvXsWDDz74lo/J888/32vBggXlTdfz5s2rWLRoUdmwYcPqmp5raGiI2bNnV0VETJgwYXV7697WCUMDAAAAAAAAAAAA8CazZ8/u29TeZ5991nbk3rKyshg7duy6xx57rN/y5cvLXnjhhV6jRo3a0Fm1vfOd76wtvt5hhx3qxo8fX9Pc2Kbn+/bt29D02NLYtpx99tmjNmzYkEpLS+M3v/nNsyeddNKqpr5DDz107emnn7784IMPHjtv3ryKq666asePfexjrx1wwAGvv9bkyZNX33jjjUOWLl3a69FHH63Yb7/9Xu+78847qyIidtttt5qampr00ksvld91111VZ5555vKmMf/4xz/6NAXUJ0+evEXD0CtXriydNWtWRVvjxowZs75///4NbY3bkoShAQAAAAAAAAAAAHiTpUuXvp4x3XHHHTscZB48ePDr9yxevLisM8PQ3eHee+/t+/jjj/eNiPjgBz+4pDgI3WTIkCH1l19++QtHHXXU2IaGhrj00kt3uOGGG+Y39R911FGvB5inTZtWVRyGvu+++6oiIg4++ODVNTU16Xe/+135vffe+6Yw9D333FMVEVFSUhJHHnlk9ZZ5p6+/1sADDzxwYFvj/vjHP8499thju/WU6pLufHEAAAAAAAAAAAAAtj6rV68ubWr369evwyf/Np3EHBGxYsWK3OdV77rrrv5N7bPPPntpS+OOPPLINbvuumtNRMT999/fv7hv5MiRdbvssktNxBvh5yYzZ86siog47LDDVh966KGri59r0nTPmDFj1g4ePLi+uG/hwoX/yrLs4SzLHt6U95dnToYGAAAAAAAAAAAA4E2qqqpeD9tWV1d3OMy8Zs2a1+8ZOHBgh8PUW5snnniiT0REr169sgkTJqxtbex+++235rnnnquYP39+eU1NTaqoqMia+g466KDVzz//fMWDDz5Y2fTcCy+80Gv+/PnlKaU46qijVq9bty5FRMybN69i0aJFZcOGDatraGiI2bNnV0ZETJgwYYufxHzSSSe9dvPNN7+wpV+nM+Q+aQ8AAAAAAAAAAABA59p+++3rmtqvvPJKr47ev3Tp0tfv2WGHHepaG5sHK1asKIuIGDBgQF2vXq1/OIYOHbohIiLLsliyZElpcd/kyZNXRzR+fB599NGKiIg777yzKiJi9OjRNcOGDasbPXr0hhEjRtRmWRZ33XVXVUTEgw8+2KephsmTJ1d38tvLNWFoAAAAAAAAAAAAAN7kgAMOWNfU/uc//9m3I/fW1dXFnDlz+kREDBo0qG7UqFEbOru+7pJSanNMlmUt9h111FGvB5mnTZtWFRFx3333VUVEHHzwwa+f+NzUvvfee6siIu65556qptc/6qijtvjJ0HkiDA0AAAAAAAAAAADAmxxwwAHrBgwYUB8RMXv27MrXXnuttK17mtx22239a2pqSgrzvOUU46ZAcUNDQ6vzrF27dqvJuQ4cOLAuovGE6A0bWs92L168uFdE4/scMmRIfXHfzjvvvGHnnXeujXgjBD1z5syqiIjDDjvs9ZDzoYceurq4r2nsHnvssW7jOXu6reY/EgAAAAAAAAAAAAC2DiUlJXHSSSe9FhFRU1NTcumllw5u770/+9nPdmhqn3766Us37u/Xr199RMTKlSvLWptn3rx5Fe2veMvae++910VEbNiwIc2YMaPVk7Ife+yxfhERO+20U21FRcVbjoluOvX5wQcfrHzhhRd6vfjii+Ubn/h89NFHr45o/BgsXLiwbNasWZURERMmTHAq9EaEoQEAAAAAAAAAAAB4iwsuuODV3r17ZxERl1xyybDHH3+8vK17rrrqqkF/+9vfBkREjB49uuZDH/rQyo3HjBw5sjYi4vHHH+/b0unQs2bNqnjmmWf6tPZa5eXlWUREbW1tavPNbKajjjpqVVP7yiuvbDEYfvfdd/drCnFPnDhxVXNjmk59Xrp0aa8f//jHQyIaP1bDhg2raxozevToDSNGjKjNsiy+//3v77BixYqyiIjJkycLQ29EGBoAAAAAAAAAAACAtxg7duz6//zP/3wpImLt2rUlRx555B4zZ85sMaB89dVXD/rMZz6zS0REr169suuuu+750tLSt4ybOHHi6oiIJUuW9Lrqqqu227h/+fLlJR/96Ed3aau+wYMHb4iIeP7559sMaW+uww47bO3b3/72tRERv/3tb4fceuut/Tce89prr5V+6lOf2jmi8WTtc889d3FzczWd+hwR8ctf/nKHiDdOiy7W9FzTmJRSHHnkkc2GoYcPH/6OlNK4lNK4jr+7fGv1eHEAAAAAAAAAAAAAeq6vfe1ri5977rnya6+9doeXX36598SJE/d8//vfv+y4445bueuuu9auX78+PfHEExW//e1vt585c2ZVRGMQ+rLLLnv+kEMOWdvcnJ/4xCeW/eAHPxhWXV1dev7554969tlny9/3vvetSillDz74YL/LL7986OLFi3vvueeea5966qm+LdU2bty46oULF253zz33DPz+978/ePLkydV9+vTJIiIGDRpUP3z48LqW7t0UV1555QuTJ0/ec8OGDemDH/zgbmecccbi448/fmX//v3rZ82a1ffHP/7xji+99FJ5RMRZZ531yvjx42uam2fUqFEbdtppp9r58+eXV1dXl0ZEHHbYYW8JOR966KGrf/e73w1uGrPbbrut23HHHes78z21ZOXKlaWzZs2qaGtcaWlp7L///s2+z64iDA0AAAAAAAAAAABAi6655poFY8eOrfnOd74zfOXKlaV/+MMftv/DH/6wfXNjd9lll5qf/vSnLx5zzDHVLc03bNiwuksvvfTFs846a9fa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r2dZlgp//taO8XdkWXZClmXDsywrLzyekGXZnV1QLgAAAAAAAAAAAEAu9OrVK/bbb7/qiIgHHnigKiLivvvu61tTU1NSWVlZP2HChLUREUccccTqiIjZs2dX1tXVxdKlS0vnzp3bJyJi0qRJq4vnfOWVV0o//vGP71pTU1PSt2/fhs9//vOL7r777qcXLlz4f+vWrXsky7KHsyx7+LbbbpvbdE+WZamr3jP5U9bdBQAAAAAAAAAAAACwdZo4ceLqBx54oP8TTzzRd+XKlSX33HNPVUTEAQccUF1W1hhDnTx58pqKioqG6urq0hkzZvRdsGBBr4aGhoh4Iyjd5Prrr99u9erVpRERv/rVr+adeOKJq5p73WXLlpVuyffFtiP3J0MDAAAAAAAAAAAAsGUcfvjhqyMi6uvr07Rp0yrvv//+qojGkHTTmIqKimzfffddExFx9913V917771VERH9+/evf9e73rWueL4nnniiIiJiwIAB9S0FoSMiZs2a1a/z3w3bImFoAAAAAAAAAAAAAJo1adKktX369GmIiLjrrrv6P/roo5UREVOmTHnTic+HHHLI6oiI+++/v2rGjBlNp0evLi198wHPdXV1KSJi/fr1qb6+vtnXXL16dcnvfve77Tv7vbBtEoYGAAAAAAAAAAAAoFnl5eXZvvvuWx0RcdNNNw1et25dSWVlZf2ECRPWFo874ogjVkdEPPTQQ1Vz5szpGxExadKk1RvPt/vuu9dGRKxbt67k2muvHbRxf11dXXz4wx/eecmSJb22xPth2yMMDQAAAAAAAAAAAECLJk6cuDoiorq6ujQi4oADDqguKyt705jJkyevqaioaFi7dm1JQ0NDREQcccQR1RvPddpppy3r3bt3FhHx2c9+dtRnPvOZ4bfffnvVfffd1/enP/3p9vvuu++eU6dO3W7//fd/y73QHGFoAAAAAAAAAAAAAFp0+OGHvymY3BSOLlZRUZHtu+++a5quKysr6w8++OC1G48bPXr0hosvvvjFkpKSqKmpKbnssst2PP744/c49NBD9zz33HNHPfHEE32POeaY5f/1X/+1aMu8G7Y1wtAAAAAAAAAAAAAAtOjQQw9dU1FR0dB0PWXKlLeEoSPeHJIeP358dWlpabPznXfeea/9+c9/fnrKlCkrBg0aVFdWVpYNGTJkw8SJE1f94he/eG7q1KnPtXQvbKys7SEAAAAAAAAAAAAA+VI6aNCG7q6hK3TF+6yoqMjWrVv3aFvjLr744pcvvvjil9sz53ve854173nPe+a11H/ssceuzrLs4Zb6b7755hci4oWW+hcuXPiv9tRB/glDAwAAAAAAAAAAANuc0VP/+FR31wBseSXdXQAAAAAAAAAAAAAAwKYQhgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAIBOd/LJJ49KKY0bPnz4O7q7lq3d1KlTq1JK41JK46ZOnVrV3fXkSVl3FwAAAAAAAAAAAADQ2X79jQf3XFe9vld317Gl9ansveGU/37XU91dB3QXYWgAAAAAAAAAAABgm7Ouen2vdas3bPNhaFr2k5/8ZPvzzjtvVETE008//a8xY8as7+aS2AJKursAAAAAAAAAAAAAAIBNIQwNAAAAAAAAAAAAAOSSMDQAAAAAAAAAAAAAkEvC0AAAAAAAAAAAAAC0qKamJl100UVD3vWud+0xaNCgfXr16rX/4MGD9zn00EN3u/zyy7err69v1zzPP/98r49//OMjRo0a9fY+ffrsN2jQoH0OPfTQ3X7729/2b+ve66+/fuCUKVNGDx069J29e/fev1+/fvuNGDHiHePGjRtz3nnnDbv33nv7No2dOnVqVUpp3HnnnTeq6bmxY8e+I6U0rvjP1KlTq4pf45577ul37rnnDjvwwAPHDB48eJ9evXrtX1lZud/o0aP3PvXUU3d6+OGHK9r7MfvNb34z4Pjjj99lxIgR7+jTp89+VVVV++622257H3vssbted911A6urq1N759rYrbfe2v/444/fZfjw4e+oqKjYv7Kycr8xY8bsdc4554x48cUXe23qvHlV1t0FAAAAAAAAAAAAALB1mjt3bu/3vve9uz/33HNvCgK/9tprZffdd9+A++67b8Avf/nLIXfcccezQ4cObTEVfd999/U98cQTd1+2bNnr2dWampqSpjn+/Oc/L77mmmsWbHxfXV1dHHfccbveeeedg4qf37BhQ1q7dm3vhQsX9n7kkUcq77nnngGPP/74U5v6Pn/yk59sXxyeLnr99Nxzz1U899xzFb/5zW+GfPvb357/la98ZUlL87zyyiulJ5100uiZM2dWbdxXXV1dOm/evIo//elPg1atWvXCueee+1pHaly1alXJBz7wgV2mTZs2sPj52traNHfu3D5z587tc8MNNwy5+uqrnzvllFNWdmTuPBOGBgAAAAAAAAAAAOAtVq5cWXLEEUfs8dJLL5VHREyZMmXFmWeeuXTkyJEbnn322fIrrrhih1mzZlU+8sgjlUcfffTus2bNerqs7K3R1HXr1pWccsopo6urq0s/9alPvfL+979/ZXl5ecOMGTMqL7300h2XLFnS69prr91hp512Wv/1r3/91eJ7L7744iFNQej999+/+owzzli6xx571FZVVdUvXbq07J///Gefv/zlLwNWrFhR2nTPpEmT1jz00ENP/P73vx948cUXD4+IuPnmm58ZOXLk+uK5x4wZ8/p1XV1d6t+/f/2UKVNWTJo0afXYsWNrKysr6xcsWND74Ycf7nv11VfvsGLFirKvfvWrO+211141xx133OqN3+fq1atLJk2aNOaZZ57pExGx9957rz3jjDOW7LPPPusqKiqyF154off06dMrb7/99u06+ndRV1cXRx555G4PPvhgVUopjjnmmGUnnXTSit122612/fr1aebMmf0uv/zyoS+//HLv008/ffSIESOenjhx4tqOvk4eCUMDAAAAAAAAAAAA8BYXXHDBsKYg9LnnnvvypZdeuqipb+LEiWtPP/305SeeeOIut99++3aPPfZYv0suuWTIl7/85becmrx8+fKy1atXZ7fffvvc9773vdVNzx922GFrTz311OUHHXTQnq+++mqv733ve8M+8YlPvDZ8+PC6pjG33HLLdhER73znO9f84x//mNOrV683zX3cccet/trXvrb41VdffT0M3b9//4bx48fXzJw5c0PTc3vvvXdNcfh5YyeeeOLKT3ziE8uqqqoaNupa96EPfWjlV77ylcUTJkwYM3fu3D7f+MY3hh133HFzNp7j/PPPH94UhD7ttNOWXHfddfNLSkpe7584ceLa0047bUVNTc3CJUuWlG58f2u+9a1vDX3wwQerysrKshtvvPHZD37wg6uK+4844og1Z5999msTJkwY++yzz1acf/75Ix9++OG31LgtKml7CAAAAAAAAAAAAAA9ybp169Kvf/3rwRERo0ePrrnkkksWbTympKQkrr322hcHDhxYFxHxi1/8YoeW5vvwhz+8pDgI3WTUqFEbvv3tby+IiKipqSn5+c9/vn1x/9KlS3tFRIwfP7564yB0saFDh9a38601a5dddtnQTBD6ddtvv339f/7nfy6KiHjkkUcqX3nllTeFmZcsWVL6v//7v4MjIvbaa6+111xzzZuC0MUqKiqykSNH1jXb2Yza2tp0xRVXDI2IOP300xdvHIRuMmTIkPoLL7xwQVONjz/+eHl7XyPPhKEBAAAAAAAAAAAAeJO///3vfVevXl0aEXHKKacsLSsra3bcdttt13DMMccsj4iYN29exYsvvthsYvkTn/jEay291mmnnbaiqqqqPiLi3nvv7V/cN2TIkA0REdOmTRv48ssvN1/EFrBq1aqSOXPm9J49e3bFrFmzKmbNmlXRq1evrKn/oYce6ls8/o477qiqqakpiYg455xzFrf08doU06dP77tkyZJeERGnnHLK8tbGHn300a8HzqdPn96v04rYinXZfxQAAAAAAAAAAAAA5MP//d//9WlqT5gwYU1rY9/1rnetufHGG4dERDzyyCN9dt555w3F/b169cre9a53rW3p/vLy8myvvfZa++CDD1bNnTu3T3HfqaeeunT27NmV8+fPL99jjz3efvTRR6+YMmXKqilTpqwePXr0hpbm3BQvv/xy2YUXXjh06tSpg+bPn1+eZVmLYxcvXvymDO4jjzzyejj6Pe95z+rOrOvBBx98PdQ8ZcqUse2975VXXmn5KO1tiDA0AAAAAAAAAAAAAG+ybNmy1zOmw4YNazV0XNy/dOnS0o37BwwYUNerV+u53KYToFetWvWmbOv555//2rx58yquuOKKodXV1aW///3vt//973+/fUTEyJEja48++ugV559//uK99tprfbveWAvuv//+vscdd9zuK1asaFe2dt26dSXF10uXLn39vp122qlTQ9qLFy/epFDz2rVrS9oelX/C0AAAAAAAAAAAAAC0KKXUan9rJyi35/7CHC0O+ulPf7rws5/97JJrrrlmu+nTp/d/7LHH+tXU1JQsWLCg/Be/+MXQa6+9docLL7xwwQUXXLCkzRdqRk1NTfrwhz+864oVK8rKysqyM844Y/FJJ520Yu+9964ZMmRIfZ8+fbKIiCeffLL33nvv/Y5CvZvyUpukvr7+9fbUqVPn7LDDDnXtuW/YsGHtGpd3wtAAAAAAAAAAAAAAvMl22233epB24cKFvd75znfWtjT25Zdffv3k4sGDB9dv3L9ixYqyurq6KCtrObbadLJy//79mw3w7rHHHusvuuiiVyLildra2jR9+vS+N91003b/+7//O6S2tjZ95Stf2end73539bvf/e517XuHb5g6dWrVSy+9VB4RcdFFF83/whe+sLS5ca+99lqLb2Dw4MGv1z1//vxeY8eO3ayTqottv/32r89dXl6ejR8/vqaz5t4W9IjjrwEAAAAAAAAAAABov3322ef1UPGMGTP6tTb2oYceer1///33f0sYecOGDekf//hH35bu37BhQzz11FN9IyL22GOPNsPM5eXl2ZFHHrnmmmuuWXDVVVc9F9F4UvNNN920XfG49pxIHRHxr3/9q09T+6Mf/eiylsa19h7GjRu3tqk9bdq0qna9cDsVz33nnXf278y5twXC0AAAAAAAAAAAAAC8ySGHHLK2qqqqPiLipptuGlxX1+yBzbF8+fKSqVOnDoqIGD16dM3OO++8oblxv/zlL7dv6bVuuOGGQatWrSqNiDjssMNWdaTOY4899vXxG5/cXFFR0dDUrqmpaTEZXVdX93pfdXV1s9na+vr6uO6664a0NMf73ve+1X369GmIiLjyyit3aOnjtSmOPPLI6gEDBtRHRFx//fVDli1bJv9bxAcDAAAAAAAAAAAAgDfp06dPdsoppyyNiHj22WcrvvjFLw7beExDQ0N87GMf22nFihVlERGf+MQnFrc0369+9ashd911V+XGz8+fP7/sa1/72oiIxvDyOeec81px/+WXX77dhg3N5qsjIuK2224b0NQeNWpUbXHfiBEjXr/x6aefrmhpjj322KOmqX3llVc2G9r+zGc+M/zJJ59s8WTowYMH15966qlLIiKeeOKJvh/72MdGNjQ0NDu2trY2LVy4sKzZzmb07ds3++QnP/lKRMTSpUt7nXjiibuuWrWqxQzw8uXLS77zne+0GNze1rT7AwkAAAAAAAAAAABAz3HRRRctuuOOOwa+9NJL5ZdeeunbnnzyyT5nnnnm0pEjR2549tlne19xxRU7PPTQQ1UREfvuu++aL3zhC0uam2fQoEF1ffr0aTj++OP3+PjHP/7q+9///pUVFRUNM2bM6PejH/3obUuWLOkVEfHlL3950fDhw990pPKnP/3pXf7rv/5r5NFHH718woQJ1XvssUdtnz59Gl5++eVed911V/9f/epXQyIi+vbt2/Cxj33sTUHqgw46aG15eXlWW1ubvvnNbw7r1atXtttuu9WWlDTmiEeNGrW+srIyO/HEE1d9/vOfr1u2bFnZRRddNPzFF18sP+GEE1bssMMOdU8//XT5tddeO2TmzJlV+++/f/UjjzzylkB3kx/+8IeLpk+f3v+ZZ57pc/311+/w8MMPV5555plL9t1333Xl5eXZiy++2Ov++++vuvXWW7f7j//4j4Xnnnvuay3NtbFvfetbr0yfPr3/zJkzq+67774BY8eO3fv0009f8u53v3vNdtttV7dq1arSJ598smL69OlV06ZNG1heXt7w1a9+tdm/j22NMDQAAAAAAAAAAAAAbzFo0KCGu+++e+573/ve3Z9//vmKadOmDZw2bdrAjcftv//+1XfcccezZWXNx1L79OnT8Otf/3re8ccfv/tll12242WXXbbjxmPOOOOMxV//+tdfbe7+1157rezGG28ccuONNzZ72nFVVVX9dddd99zo0aPfdIT0oEGDGs4888xXf/7zn+/45JNP9j355JN3L+7/4x//OPfYY49d3b9//4arrrrq+VNPPXW32tra9Ktf/WpIU8i6yYEHHrj6sssumz9+/Pi9m32TjXU0TJ8+fe5xxx03evbs2ZVPPPFE3y9+8Ys7tzS+I8rKyuIvf/nLMx/5yEd2vvXWW7d/+eWXe1900UXDWxq/3Xbb1bXUt61p8YhsAAAAAAAAAAAAAHq2MWPGrH/yySef/M53vjN//Pjx1QMHDqwrKyvLtt9++7qJEyeuuuyyy55/6KGH5gwdOrS+tXkmTZq0dtasWU+eccYZi0eOHFlbXl6eDRw4sG7ixImrfvOb3zxz7bXXLmjuvscee+zxCy+8cP6UKVNWjB49umbgwIF1paWlWf/+/ev32WefNZ///OcXPfXUU4+fdNJJq5q7/7LLLlt4ySWXvDhu3LjqAQMG1JeW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AAAAAAAAAABAO2z1J0NnWZa2wJx3RMQdnT0vAAAAAAAAAAAAANB1etTJ0AAAAAAAAAAAAADAtkMYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYAAAAAAAAAAAAAckkYGgAAAAAAAAAAAADIJWFoAAAAAAAAAAAAACCXhKEBAAAAAAAAAAAAgFwShgYA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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "bh = LatticeBoltzmannBoundaryHandling(method, dh, 'src', name=\"bh\")\n", "\n", "inflow = UBB(initial_velocity)\n", "outflow = ExtrapolationOutflow(stencil[4], method)\n", "wall = NoSlip(\"wall\")\n", "\n", "bh.set_boundary(inflow, slice_from_direction('W', dim))\n", "bh.set_boundary(outflow, slice_from_direction('E', dim))\n", "for direction in ('N', 'S'):\n", " bh.set_boundary(wall, slice_from_direction(direction, dim))\n", "\n", "bh.set_boundary(NoSlip(\"obstacle\"), mask_callback=set_sphere)\n", "\n", "plt.figure(dpi=200)\n", "plt.boundary_handling(bh)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def timeloop(timeSteps):\n", " for i in range(timeSteps):\n", " bh()\n", " dh.run_kernel(kernel)\n", " dh.swap(\"src\", \"dst\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run the simulation" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mask = np.fromfunction(set_sphere, (domain_size[0], domain_size[1], len(domain_size)))\n", "if 'is_test_run' not in globals():\n", " timeloop(50000) # initial steps\n", "\n", " def run():\n", " timeloop(100)\n", " return np.ma.array(dh.gather_array('velField'), mask=mask)\n", "\n", " animation = plt.vector_field_magnitude_animation(run, frames=600, rescale=True)\n", " set_display_mode('video')\n", " res = display_animation(animation)\n", "else:\n", " timeloop(10)\n", " res = None\n", "res" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.4" }, "vscode": { "interpreter": { "hash": "16c4475f8761a33edafce150242b66df5b4abe8839febe0da1ac663b672fe94f" } } }, "nbformat": 4, "nbformat_minor": 2 }