Commit 1a97248c authored by Frederik Hennig's avatar Frederik Hennig
Browse files

Still buggy periodic pipe test case

parent 06124196
Pipeline #27231 failed with stage
in 27 minutes and 6 seconds
This diff is collapsed.
%% Cell type:code id: tags:
```
%load_ext autoreload
%autoreload 2
```
%% Cell type:code id: tags:
```
import numpy as np
import sympy as sp
from pystencils.datahandling import create_data_handling
from pystencils import create_kernel
from pystencils.plot import scalar_field, vector_field, vector_field_magnitude
from lbmpy.creationfunctions import create_lb_collision_rule, create_lb_function
from lbmpy.macroscopic_value_kernels import flexible_macroscopic_values_getter, flexible_macroscopic_values_setter
from lbmpy.stencils import get_stencil
from lbmpy.advanced_streaming import PeriodicityHandling
from lbmpy.advanced_streaming.utility import is_inplace
from numpy.testing import assert_allclose
```
%% Cell type:code id: tags:
```
stencil = get_stencil('D2Q9')
q = len(stencil)
dim = len(stencil[0])
streaming_pattern = 'esotwist'
streaming_pattern = 'push'
inplace = is_inplace(streaming_pattern)
timesteps = ['even', 'odd'] if inplace else ['both']
zeroth_timestep = timesteps[0]
```
%% Cell type:markdown id: tags:
## Data Handling and Fields
%% Cell type:code id: tags:
```
domain_size = (30,) * dim
periodicity = (True,) * dim
dh = create_data_handling(domain_size=domain_size, periodicity=periodicity)
pdfs = dh.add_array('pdfs', q)
if not inplace:
pdfs_tmp = dh.add_array_like('pdfs_tmp', pdfs.name)
```
%% Cell type:markdown id: tags:
## LBM Collision Rule and Update Kernel(s)
%% Cell type:code id: tags:
```
method_params = {
'stencil' : stencil,
'method' : 'srt',
'relaxation_rate' : 1.0
}
optimization = {
'symbolic_field' : pdfs,
'target' : 'cpu'
}
if not inplace:
optimization['symbolic_temporary_field'] = pdfs_tmp
lb_collision = create_lb_collision_rule(optimization=optimization, **method_params)
lb_method = lb_collision.method
lb_kernels = []
if inplace:
lb_kernels.append(create_lb_function(collision_rule=lb_collision,
optimization=optimization,
kernel_type=streaming_pattern + '_even',
**method_params))
lb_kernels.append(create_lb_function(collision_rule=lb_collision,
optimization=optimization,
kernel_type=streaming_pattern + '_odd',
**method_params))
else:
if streaming_pattern == 'pull':
kernel_type = 'stream_pull_collide'
elif streaming_pattern == 'push':
kernel_type = 'collide_stream_push'
lb_kernels.append(create_lb_function(collision_rule=lb_collision,
optimization=optimization,
kernel_type=kernel_type,
**method_params))
```
%% Cell type:code id: tags:
```
from lbmpy.creationfunctions import create_lb_update_rule
push_update = create_lb_update_rule(
collision_rule=lb_collision, optimization=optimization, kernel_type='collide_stream_push', **method_params)
esotwist_update = create_lb_update_rule(
collision_rule=lb_collision, optimization=optimization, kernel_type='esotwist_even', **method_params)
```
%% Cell type:code id: tags:
```
push_update.main_assignments[1]
```
%%%% Output: execute_result
$\displaystyle {{pdfs_tmp}_{(0,1)}^{1}} \leftarrow {{pdfs}_{(0,0)}^{1}} + rr_{0} \left(- {{pdfs}_{(0,0)}^{1}} + \frac{f_{eq common}}{9} + \frac{u_{1}^{2}}{2} + \frac{u_{1}}{3}\right)$
Assignment(pdfs_tmp_N^1, pdfs_C^1 + rr_0*(-pdfs_C^1 + f_eq_common/9 + u_1**2/2 + u_1/3))
%% Cell type:code id: tags:
```
esotwist_update.main_assignments[1]
```
%%%% Output: execute_result
$\displaystyle {{pdfs}_{(0,1)}^{2}} \leftarrow rr_{0} \left(\frac{f_{eq common}}{9} + \frac{u_{1}^{2}}{2} + \frac{u_{1}}{3} - \xi_{8}\right) + \xi_{8}$
Assignment(pdfs_N^2, rr_0*(f_eq_common/9 + u_1**2/2 + u_1/3 - xi_8) + xi_8)
%% Cell type:markdown id: tags:
...damnit!
`pystencils` does different algebraic modifications to the update equations depending on the streaming pattern. Floating-point addition is not associative! This causes minor numerical differences between the streaming patterns, as visible in the test case.
%% Cell type:markdown id: tags:
## Macroscopic Values
%% Cell type:code id: tags:
```
density = 1.0
density_field = dh.add_array('rho', 1)
u_x = 0.01
velocity = (u_x, u_x)
velocity_field = dh.add_array('u', dim)
setter = flexible_macroscopic_values_setter(
lb_method, density, velocity, pdfs,
streaming_pattern=streaming_pattern, previous_timestep=zeroth_timestep)
setter_kernel = create_kernel(setter, ghost_layers=1).compile()
getter_kernels = []
for t in timesteps:
getter = flexible_macroscopic_values_getter(
lb_method, density_field, velocity_field, pdfs,
streaming_pattern=streaming_pattern, previous_timestep=t)
getter_kernels.append(create_kernel(getter, ghost_layers=1).compile())
```
%% Cell type:markdown id: tags:
## Periodicity Handler
%% Cell type:code id: tags:
```
periodicity_handler = PeriodicityHandling(
stencil, dh, pdfs.name,
streaming_pattern=streaming_pattern, zeroth_timestep=zeroth_timestep)
```
%% Cell type:markdown id: tags:
## Initialization and Time Loop
%% Cell type:code id: tags:
```
t_modulus = 0
def init():
global t_modulus
t_modulus = 0
dh.run_kernel(setter_kernel)
def one_step():
global t_modulus
# Periodicty
periodicity_handler(timesteps[t_modulus])
# Macroscopic Values
dh.run_kernel(getter_kernels[t_modulus])
# Here, the next time step begins
t_modulus = (t_modulus + 1) % len(timesteps)
# LBM Step
dh.run_kernel(lb_kernels[t_modulus])
# Field Swaps
if not inplace:
dh.swap(pdfs.name, pdfs_tmp.name)
```
%% Cell type:markdown id: tags:
## Simulation
%% Cell type:code id: tags:
```
init()
```
%% Cell type:code id: tags:
```
for i in range(100):
one_step()
```
%% Cell type:code id: tags:
```
u = dh.gather_array(velocity_field.name)
u_ref = np.full(domain_size + (dim,), u_x)
assert_allclose(u, u_ref)
```
%% Cell type:code id: tags:
```
vector_field(u)
```
%%%% Output: execute_result
<matplotlib.quiver.Quiver at 0x7f6f243b9040>
%%%% Output: display_data
![](data:image/png;base64,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0EBiJeH27duzNeD17t1byDtx4gQrV65seC+//LKQFxERYQQNAFarVo1ms9mhFxsby1atWhle4cKFhepyU1NT2bVrV+PFwsvLi1evXnXomc1mDhw40HixAMBDhw459HRd5+TJk40WQwBcsWKFQ4/MWixToEABw5sxY4aQt2HDBqNGGAAHDhwo5B08eNCoEQbA119/Xci7ePFithph0brcqKiobC2GJUuWFKrLTU5O5htvvGF4onW5mZmZ7Nu3r/Fi4eLiIr0QKa+gAjyXExYWxuDgYGqaxmLFijElJUXIsy6P1zSNPj4+wqVNKSkpbNq0KTVNo6ZpwqVN1uXx1kBdu3atkGe7PB4Av/76ayGPJGfOnEkA1DSNQ4YMEfasy+M1TWPHjh2Fvd27d9PX15eaprFBgwZC4Ub+szxe0zSWKVOG6enpQp51ebymaVIjL+vyeE3TpEZe1uXx1n2xfft2IU/Xdb7//vvSIy/yn+XxAKQuVLJw4ULjd7Rnz57CXl5DBXguxhretWrV4k8//cTZs2cLebbdJitXrhRupLOGd4ECBbhp0ybhknzbbpN169axXbt2wo101vCeP38+X331VWZmZgrdpzW8x48fzy5dujAuLk7Is+02+eCDD3jx4kUhzxrerVu35pgxY4SXkNt2m3z77bf8+eefhTzbbpOlS5dywoQJQp5tt8mGDRuEmyFtu002bNggfJELa3i7urpy6dKlbNOmjdDIi8zebfLmm28KjbzIf8J74MCB7N27N69duybk5UUeSIADeBnAeQBhAIY5+n4V4P8f2/COjY1lenq6U62Cuq4LHbXbhre120TEy6mYSsSzD29Rj8we3jKefTGVqGcb3hkZGcKefTFVamqqUKeKbXhHRkbSYrEI9eLkVEwlsq224b1z505hzza8refKRZ8b+2IqUc82vEV/t/My9z3AAbgCCAfwBAAPAMcBVPk3RwV4duzDWxRnWwVzCm8R7keroOjVaazYh7co99IqaBveotyPVkHRS+CR96dV0BreIuQU3qI42ypoH96KBxPgDQBstPn8UwCf/pujAjw7LVq0cKpVsE+fPk61Ck6YMEE6vEly0aJF0uFNZl130cXFRTq8w8PD6ebmJh3e8fHxzJ8/v3R4m0wmli1bVjq8dV1nkyZNnGoV7Nq1q3R4k+Tw4cOdahX8/vvvpcObzHqD1ZnwPnXqFF1cXKTDOyoqir6+viq87XgQAd4ewBybz7sC+CqH7+sF4BCAQyEhIf/ZA34UiI6Olg5vMutIWmQmhj0mk0n4XLAtuq4Lv0Fmz9mzZ53ynL2/8+fPS4W3lfDwcOlKWDLrSFo2vMmsI2nZSlgy60g6PDxc2rNYLE4/pw9j36vwzs7dAtzpNkJN0zoAeInku39/3hXAUyQ/uJuj2ggVCoVCngfRRhgJoKTN58EAbtzDz1MoFAqFBPcS4AcBlNc0rYymaR4AOgJYfX82S6FQKBSOcHNWJGnWNK0/gI3ImpHyI8nT923LFAqFQvGvOB3gAEByPYD192lbFAqFQiGBaiNUKBSKRxQV4AqFQvGIogJcoVAoHlFUgCsUCsUjitMLeZy6M02LARDxn93ho0EQgNsPeyNyIep5uTvqucmZvPy8lCJZyP6L/2mAK/4/mqYdymmF1eOOel7ujnpucuZxfF7UKRSFQqF4RFEBrlAoFI8oKsAfPt8/7A3Ipajn5e6o5yZnHrvnRZ0DVygUikcUdQSuUCgUjygqwBUKheIRRQX4Q0LTtJc1TTuvaVqYpmnDHvb25CY0TbuiadpJTdOOaZr22F4BRNO0HzVNi9Y07ZTN1wI1TdusadrFv/8t8DC38WFxl+dmtKZp1//+vTmmaVrLh7mN/wUqwB8Cmqa5AvgaQAsAVQB00jStysPdqlxHU5I1H7d5vXbMA/Cy3deGAdhKsjyArX9//jgyD///uQGAL//+van5d1tqnkYF+MPhKQBhJC+RzATwK4C2D3mbFLkMkrsAxNl9uS2A+X9/PB9Au/9ym3ILd3luHjtUgD8cSgC4ZvN55N9fU2RBAJs0TTusaVqvh70xuYwiJG8CwN//Fn7I25Pb6K9p2om/T7Hk+dNLKsAfDloOX1PzOf+hEcnayDrF1E/TtCYPe4MUjwTfAigLoCaAmwCmPtSt+Q9QAf5wUBeE/hdI3vj732gAK5B1ykmRRZSmacUA4O9/ox/y9uQaSEaRtJDUAfyAx+D3RgX4w0FdEPouaJrmq2laPuvHAJoDOPXv1mPFagDd/v64G4BVD3FbchXWF7a/eRWPwe/NPV0TU+Ec6oLQ/0oRACs0TQOyfj9/Ibnh4W7Sw0HTtMUAngMQpGlaJIBRACYBWKppWk8AVwF0eHhb+PC4y3PznKZpNZF1OvIKgN4Pa/v+K9RSeoVCoXhEUadQFAqF4hFFBbhCoVA8oqgAVygUikcUFeAKhULxiKICXKFQKB5RVIArFArFI4oKcIVCoXhE+T8sblC9YLhFegAAAABJRU5ErkJggg==)
![](data:image/svg+xml;utf8,<?xml version="1.0" encoding="utf-8" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!-- Created with matplotlib (https://matplotlib.org/) --> <svg height="248.518125pt" version="1.1" viewBox="0 0 368.925 248.518125" width="368.925pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <metadata> <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <cc:Work> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:date>2020-10-06T21:46:13.469804</dc:date> <dc:format>image/svg+xml</dc:format> <dc:creator> <cc:Agent> <dc:title>Matplotlib v3.3.1, https://matplotlib.org/</dc:title> </cc:Agent> </dc:creator> </cc:Work> </rdf:RDF> </metadata> <defs> <style type="text/css">*{stroke-linecap:butt;stroke-linejoin:round;}</style> </defs> <g id="figure_1"> <g id="patch_1"> <path d="M -0 248.518125 L 368.925 248.518125 L 368.925 0 L -0 0 z " style="fill:none;"/> </g> <g id="axes_1"> <g id="patch_2"> <path d="M 26.925 224.64 L 361.725 224.64 L 361.725 7.2 L 26.925 7.2 z " style="fill:#ffffff;"/> </g> <g id="Quiver_1"> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 214.282885 L 99.521973 209.776069 L 98.101537 209.30259 L 104.25676 205.98824 L 100.94241 212.143463 L 100.468931 210.723027 L 95.962115 215.229842 L 95.015158 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 214.282885 L 113.641454 209.776069 L 112.221018 209.30259 L 118.376241 205.98824 L 115.06189 212.143463 L 114.588411 210.723027 L 110.081596 215.229842 L 109.134638 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 214.282885 L 127.760934 209.776069 L 126.340498 209.30259 L 132.495721 205.98824 L 129.181371 212.143463 L 128.707892 210.723027 L 124.201076 215.229842 L 123.254119 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 214.282885 L 141.880415 209.776069 L 140.459979 209.30259 L 146.615202 205.98824 L 143.300851 212.143463 L 142.827372 210.723027 L 138.320557 215.229842 L 137.373599 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 214.282885 L 155.999896 209.776069 L 154.579459 209.30259 L 160.734683 205.98824 L 157.420332 212.143463 L 156.946853 210.723027 L 152.440037 215.229842 L 151.49308 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 214.282885 L 170.119376 209.776069 L 168.69894 209.30259 L 174.854163 205.98824 L 171.539812 212.143463 L 171.066333 210.723027 L 166.559518 215.229842 L 165.61256 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 214.282885 L 184.238857 209.776069 L 182.81842 209.30259 L 188.973644 205.98824 L 185.659293 212.143463 L 185.185814 210.723027 L 180.678998 215.229842 L 179.732041 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 214.282885 L 198.358337 209.776069 L 196.937901 209.30259 L 203.093124 205.98824 L 199.778773 212.143463 L 199.305294 210.723027 L 194.798479 215.229842 L 193.851521 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 214.282885 L 212.477818 209.776069 L 211.057381 209.30259 L 217.212605 205.98824 L 213.898254 212.143463 L 213.424775 210.723027 L 208.917959 215.229842 L 207.971002 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 214.282885 L 226.597298 209.776069 L 225.176862 209.30259 L 231.332085 205.98824 L 228.017734 212.143463 L 227.544256 210.723027 L 223.03744 215.229842 L 222.090482 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 214.282885 L 240.716779 209.776069 L 239.296343 209.30259 L 245.451566 205.98824 L 242.137215 212.143463 L 241.663736 210.723027 L 237.15692 215.229842 L 236.209963 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 214.282885 L 254.836259 209.776069 L 253.415823 209.30259 L 259.571046 205.98824 L 256.256695 212.143463 L 255.783217 210.723027 L 251.276401 215.229842 L 250.329443 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 214.282885 L 268.95574 209.776069 L 267.535304 209.30259 L 273.690527 205.98824 L 270.376176 212.143463 L 269.902697 210.723027 L 265.395881 215.229842 L 264.448924 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 214.282885 L 283.07522 209.776069 L 281.654784 209.30259 L 287.810007 205.98824 L 284.495656 212.143463 L 284.022178 210.723027 L 279.515362 215.229842 L 278.568404 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 214.282885 L 297.194701 209.776069 L 295.774265 209.30259 L 301.929488 205.98824 L 298.615137 212.143463 L 298.141658 210.723027 L 293.634842 215.229842 L 292.687885 214.282885 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 200.163404 L 99.521973 195.656589 L 98.101537 195.18311 L 104.25676 191.868759 L 100.94241 198.023982 L 100.468931 196.603546 L 95.962115 201.110362 L 95.015158 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 200.163404 L 113.641454 195.656589 L 112.221018 195.18311 L 118.376241 191.868759 L 115.06189 198.023982 L 114.588411 196.603546 L 110.081596 201.110362 L 109.134638 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 200.163404 L 127.760934 195.656589 L 126.340498 195.18311 L 132.495721 191.868759 L 129.181371 198.023982 L 128.707892 196.603546 L 124.201076 201.110362 L 123.254119 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 200.163404 L 141.880415 195.656589 L 140.459979 195.18311 L 146.615202 191.868759 L 143.300851 198.023982 L 142.827372 196.603546 L 138.320557 201.110362 L 137.373599 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 200.163404 L 155.999896 195.656589 L 154.579459 195.18311 L 160.734683 191.868759 L 157.420332 198.023982 L 156.946853 196.603546 L 152.440037 201.110362 L 151.49308 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 200.163404 L 170.119376 195.656589 L 168.69894 195.18311 L 174.854163 191.868759 L 171.539812 198.023982 L 171.066333 196.603546 L 166.559518 201.110362 L 165.61256 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 200.163404 L 184.238857 195.656589 L 182.81842 195.18311 L 188.973644 191.868759 L 185.659293 198.023982 L 185.185814 196.603546 L 180.678998 201.110362 L 179.732041 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 200.163404 L 198.358337 195.656589 L 196.937901 195.18311 L 203.093124 191.868759 L 199.778773 198.023982 L 199.305294 196.603546 L 194.798479 201.110362 L 193.851521 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 200.163404 L 212.477818 195.656589 L 211.057381 195.18311 L 217.212605 191.868759 L 213.898254 198.023982 L 213.424775 196.603546 L 208.917959 201.110362 L 207.971002 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 200.163404 L 226.597298 195.656589 L 225.176862 195.18311 L 231.332085 191.868759 L 228.017734 198.023982 L 227.544256 196.603546 L 223.03744 201.110362 L 222.090482 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 200.163404 L 240.716779 195.656589 L 239.296343 195.18311 L 245.451566 191.868759 L 242.137215 198.023982 L 241.663736 196.603546 L 237.15692 201.110362 L 236.209963 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 200.163404 L 254.836259 195.656589 L 253.415823 195.18311 L 259.571046 191.868759 L 256.256695 198.023982 L 255.783217 196.603546 L 251.276401 201.110362 L 250.329443 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 200.163404 L 268.95574 195.656589 L 267.535304 195.18311 L 273.690527 191.868759 L 270.376176 198.023982 L 269.902697 196.603546 L 265.395881 201.110362 L 264.448924 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 200.163404 L 283.07522 195.656589 L 281.654784 195.18311 L 287.810007 191.868759 L 284.495656 198.023982 L 284.022178 196.603546 L 279.515362 201.110362 L 278.568404 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 200.163404 L 297.194701 195.656589 L 295.774265 195.18311 L 301.929488 191.868759 L 298.615137 198.023982 L 298.141658 196.603546 L 293.634842 201.110362 L 292.687885 200.163404 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 186.043924 L 99.521973 181.537108 L 98.101537 181.063629 L 104.25676 177.749279 L 100.94241 183.904502 L 100.468931 182.484066 L 95.962115 186.990881 L 95.015158 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 186.043924 L 113.641454 181.537108 L 112.221018 181.063629 L 118.376241 177.749279 L 115.06189 183.904502 L 114.588411 182.484066 L 110.081596 186.990881 L 109.134638 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 186.043924 L 127.760934 181.537108 L 126.340498 181.063629 L 132.495721 177.749279 L 129.181371 183.904502 L 128.707892 182.484066 L 124.201076 186.990881 L 123.254119 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 186.043924 L 141.880415 181.537108 L 140.459979 181.063629 L 146.615202 177.749279 L 143.300851 183.904502 L 142.827372 182.484066 L 138.320557 186.990881 L 137.373599 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 186.043924 L 155.999896 181.537108 L 154.579459 181.063629 L 160.734683 177.749279 L 157.420332 183.904502 L 156.946853 182.484066 L 152.440037 186.990881 L 151.49308 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 186.043924 L 170.119376 181.537108 L 168.69894 181.063629 L 174.854163 177.749279 L 171.539812 183.904502 L 171.066333 182.484066 L 166.559518 186.990881 L 165.61256 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 186.043924 L 184.238857 181.537108 L 182.81842 181.063629 L 188.973644 177.749279 L 185.659293 183.904502 L 185.185814 182.484066 L 180.678998 186.990881 L 179.732041 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 186.043924 L 198.358337 181.537108 L 196.937901 181.063629 L 203.093124 177.749279 L 199.778773 183.904502 L 199.305294 182.484066 L 194.798479 186.990881 L 193.851521 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 186.043924 L 212.477818 181.537108 L 211.057381 181.063629 L 217.212605 177.749279 L 213.898254 183.904502 L 213.424775 182.484066 L 208.917959 186.990881 L 207.971002 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 186.043924 L 226.597298 181.537108 L 225.176862 181.063629 L 231.332085 177.749279 L 228.017734 183.904502 L 227.544256 182.484066 L 223.03744 186.990881 L 222.090482 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 186.043924 L 240.716779 181.537108 L 239.296343 181.063629 L 245.451566 177.749279 L 242.137215 183.904502 L 241.663736 182.484066 L 237.15692 186.990881 L 236.209963 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 186.043924 L 254.836259 181.537108 L 253.415823 181.063629 L 259.571046 177.749279 L 256.256695 183.904502 L 255.783217 182.484066 L 251.276401 186.990881 L 250.329443 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 186.043924 L 268.95574 181.537108 L 267.535304 181.063629 L 273.690527 177.749279 L 270.376176 183.904502 L 269.902697 182.484066 L 265.395881 186.990881 L 264.448924 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 186.043924 L 283.07522 181.537108 L 281.654784 181.063629 L 287.810007 177.749279 L 284.495656 183.904502 L 284.022178 182.484066 L 279.515362 186.990881 L 278.568404 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 186.043924 L 297.194701 181.537108 L 295.774265 181.063629 L 301.929488 177.749279 L 298.615137 183.904502 L 298.141658 182.484066 L 293.634842 186.990881 L 292.687885 186.043924 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 171.924443 L 99.521973 167.417628 L 98.101537 166.944149 L 104.25676 163.629798 L 100.94241 169.785021 L 100.468931 168.364585 L 95.962115 172.871401 L 95.015158 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 171.924443 L 113.641454 167.417628 L 112.221018 166.944149 L 118.376241 163.629798 L 115.06189 169.785021 L 114.588411 168.364585 L 110.081596 172.871401 L 109.134638 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 171.924443 L 127.760934 167.417628 L 126.340498 166.944149 L 132.495721 163.629798 L 129.181371 169.785021 L 128.707892 168.364585 L 124.201076 172.871401 L 123.254119 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 171.924443 L 141.880415 167.417628 L 140.459979 166.944149 L 146.615202 163.629798 L 143.300851 169.785021 L 142.827372 168.364585 L 138.320557 172.871401 L 137.373599 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 171.924443 L 155.999896 167.417628 L 154.579459 166.944149 L 160.734683 163.629798 L 157.420332 169.785021 L 156.946853 168.364585 L 152.440037 172.871401 L 151.49308 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 171.924443 L 170.119376 167.417628 L 168.69894 166.944149 L 174.854163 163.629798 L 171.539812 169.785021 L 171.066333 168.364585 L 166.559518 172.871401 L 165.61256 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 171.924443 L 184.238857 167.417628 L 182.81842 166.944149 L 188.973644 163.629798 L 185.659293 169.785021 L 185.185814 168.364585 L 180.678998 172.871401 L 179.732041 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 171.924443 L 198.358337 167.417628 L 196.937901 166.944149 L 203.093124 163.629798 L 199.778773 169.785021 L 199.305294 168.364585 L 194.798479 172.871401 L 193.851521 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 171.924443 L 212.477818 167.417628 L 211.057381 166.944149 L 217.212605 163.629798 L 213.898254 169.785021 L 213.424775 168.364585 L 208.917959 172.871401 L 207.971002 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 171.924443 L 226.597298 167.417628 L 225.176862 166.944149 L 231.332085 163.629798 L 228.017734 169.785021 L 227.544256 168.364585 L 223.03744 172.871401 L 222.090482 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 171.924443 L 240.716779 167.417628 L 239.296343 166.944149 L 245.451566 163.629798 L 242.137215 169.785021 L 241.663736 168.364585 L 237.15692 172.871401 L 236.209963 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 171.924443 L 254.836259 167.417628 L 253.415823 166.944149 L 259.571046 163.629798 L 256.256695 169.785021 L 255.783217 168.364585 L 251.276401 172.871401 L 250.329443 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 171.924443 L 268.95574 167.417628 L 267.535304 166.944149 L 273.690527 163.629798 L 270.376176 169.785021 L 269.902697 168.364585 L 265.395881 172.871401 L 264.448924 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 171.924443 L 283.07522 167.417628 L 281.654784 166.944149 L 287.810007 163.629798 L 284.495656 169.785021 L 284.022178 168.364585 L 279.515362 172.871401 L 278.568404 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 171.924443 L 297.194701 167.417628 L 295.774265 166.944149 L 301.929488 163.629798 L 298.615137 169.785021 L 298.141658 168.364585 L 293.634842 172.871401 L 292.687885 171.924443 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 157.804963 L 99.521973 153.298147 L 98.101537 152.824668 L 104.25676 149.510317 L 100.94241 155.665541 L 100.468931 154.245104 L 95.962115 158.75192 L 95.015158 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 157.804963 L 113.641454 153.298147 L 112.221018 152.824668 L 118.376241 149.510317 L 115.06189 155.665541 L 114.588411 154.245104 L 110.081596 158.75192 L 109.134638 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 157.804963 L 127.760934 153.298147 L 126.340498 152.824668 L 132.495721 149.510317 L 129.181371 155.665541 L 128.707892 154.245104 L 124.201076 158.75192 L 123.254119 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 157.804963 L 141.880415 153.298147 L 140.459979 152.824668 L 146.615202 149.510317 L 143.300851 155.665541 L 142.827372 154.245104 L 138.320557 158.75192 L 137.373599 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 157.804963 L 155.999896 153.298147 L 154.579459 152.824668 L 160.734683 149.510317 L 157.420332 155.665541 L 156.946853 154.245104 L 152.440037 158.75192 L 151.49308 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 157.804963 L 170.119376 153.298147 L 168.69894 152.824668 L 174.854163 149.510317 L 171.539812 155.665541 L 171.066333 154.245104 L 166.559518 158.75192 L 165.61256 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 157.804963 L 184.238857 153.298147 L 182.81842 152.824668 L 188.973644 149.510317 L 185.659293 155.665541 L 185.185814 154.245104 L 180.678998 158.75192 L 179.732041 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 157.804963 L 198.358337 153.298147 L 196.937901 152.824668 L 203.093124 149.510317 L 199.778773 155.665541 L 199.305294 154.245104 L 194.798479 158.75192 L 193.851521 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 157.804963 L 212.477818 153.298147 L 211.057381 152.824668 L 217.212605 149.510317 L 213.898254 155.665541 L 213.424775 154.245104 L 208.917959 158.75192 L 207.971002 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 157.804963 L 226.597298 153.298147 L 225.176862 152.824668 L 231.332085 149.510317 L 228.017734 155.665541 L 227.544256 154.245104 L 223.03744 158.75192 L 222.090482 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 157.804963 L 240.716779 153.298147 L 239.296343 152.824668 L 245.451566 149.510317 L 242.137215 155.665541 L 241.663736 154.245104 L 237.15692 158.75192 L 236.209963 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 157.804963 L 254.836259 153.298147 L 253.415823 152.824668 L 259.571046 149.510317 L 256.256695 155.665541 L 255.783217 154.245104 L 251.276401 158.75192 L 250.329443 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 157.804963 L 268.95574 153.298147 L 267.535304 152.824668 L 273.690527 149.510317 L 270.376176 155.665541 L 269.902697 154.245104 L 265.395881 158.75192 L 264.448924 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 157.804963 L 283.07522 153.298147 L 281.654784 152.824668 L 287.810007 149.510317 L 284.495656 155.665541 L 284.022178 154.245104 L 279.515362 158.75192 L 278.568404 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 157.804963 L 297.194701 153.298147 L 295.774265 152.824668 L 301.929488 149.510317 L 298.615137 155.665541 L 298.141658 154.245104 L 293.634842 158.75192 L 292.687885 157.804963 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 143.685482 L 99.521973 139.178667 L 98.101537 138.705188 L 104.25676 135.390837 L 100.94241 141.54606 L 100.468931 140.125624 L 95.962115 144.63244 L 95.015158 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 143.685482 L 113.641454 139.178667 L 112.221018 138.705188 L 118.376241 135.390837 L 115.06189 141.54606 L 114.588411 140.125624 L 110.081596 144.63244 L 109.134638 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 143.685482 L 127.760934 139.178667 L 126.340498 138.705188 L 132.495721 135.390837 L 129.181371 141.54606 L 128.707892 140.125624 L 124.201076 144.63244 L 123.254119 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 143.685482 L 141.880415 139.178667 L 140.459979 138.705188 L 146.615202 135.390837 L 143.300851 141.54606 L 142.827372 140.125624 L 138.320557 144.63244 L 137.373599 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 143.685482 L 155.999896 139.178667 L 154.579459 138.705188 L 160.734683 135.390837 L 157.420332 141.54606 L 156.946853 140.125624 L 152.440037 144.63244 L 151.49308 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 143.685482 L 170.119376 139.178667 L 168.69894 138.705188 L 174.854163 135.390837 L 171.539812 141.54606 L 171.066333 140.125624 L 166.559518 144.63244 L 165.61256 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 143.685482 L 184.238857 139.178667 L 182.81842 138.705188 L 188.973644 135.390837 L 185.659293 141.54606 L 185.185814 140.125624 L 180.678998 144.63244 L 179.732041 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 143.685482 L 198.358337 139.178667 L 196.937901 138.705188 L 203.093124 135.390837 L 199.778773 141.54606 L 199.305294 140.125624 L 194.798479 144.63244 L 193.851521 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 143.685482 L 212.477818 139.178667 L 211.057381 138.705188 L 217.212605 135.390837 L 213.898254 141.54606 L 213.424775 140.125624 L 208.917959 144.63244 L 207.971002 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 143.685482 L 226.597298 139.178667 L 225.176862 138.705188 L 231.332085 135.390837 L 228.017734 141.54606 L 227.544256 140.125624 L 223.03744 144.63244 L 222.090482 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 143.685482 L 240.716779 139.178667 L 239.296343 138.705188 L 245.451566 135.390837 L 242.137215 141.54606 L 241.663736 140.125624 L 237.15692 144.63244 L 236.209963 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 143.685482 L 254.836259 139.178667 L 253.415823 138.705188 L 259.571046 135.390837 L 256.256695 141.54606 L 255.783217 140.125624 L 251.276401 144.63244 L 250.329443 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 143.685482 L 268.95574 139.178667 L 267.535304 138.705188 L 273.690527 135.390837 L 270.376176 141.54606 L 269.902697 140.125624 L 265.395881 144.63244 L 264.448924 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 143.685482 L 283.07522 139.178667 L 281.654784 138.705188 L 287.810007 135.390837 L 284.495656 141.54606 L 284.022178 140.125624 L 279.515362 144.63244 L 278.568404 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 143.685482 L 297.194701 139.178667 L 295.774265 138.705188 L 301.929488 135.390837 L 298.615137 141.54606 L 298.141658 140.125624 L 293.634842 144.63244 L 292.687885 143.685482 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 129.566002 L 99.521973 125.059186 L 98.101537 124.585707 L 104.25676 121.271356 L 100.94241 127.42658 L 100.468931 126.006143 L 95.962115 130.512959 L 95.015158 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 129.566002 L 113.641454 125.059186 L 112.221018 124.585707 L 118.376241 121.271356 L 115.06189 127.42658 L 114.588411 126.006143 L 110.081596 130.512959 L 109.134638 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 129.566002 L 127.760934 125.059186 L 126.340498 124.585707 L 132.495721 121.271356 L 129.181371 127.42658 L 128.707892 126.006143 L 124.201076 130.512959 L 123.254119 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 129.566002 L 141.880415 125.059186 L 140.459979 124.585707 L 146.615202 121.271356 L 143.300851 127.42658 L 142.827372 126.006143 L 138.320557 130.512959 L 137.373599 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 129.566002 L 155.999896 125.059186 L 154.579459 124.585707 L 160.734683 121.271356 L 157.420332 127.42658 L 156.946853 126.006143 L 152.440037 130.512959 L 151.49308 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 129.566002 L 170.119376 125.059186 L 168.69894 124.585707 L 174.854163 121.271356 L 171.539812 127.42658 L 171.066333 126.006143 L 166.559518 130.512959 L 165.61256 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 129.566002 L 184.238857 125.059186 L 182.81842 124.585707 L 188.973644 121.271356 L 185.659293 127.42658 L 185.185814 126.006143 L 180.678998 130.512959 L 179.732041 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 129.566002 L 198.358337 125.059186 L 196.937901 124.585707 L 203.093124 121.271356 L 199.778773 127.42658 L 199.305294 126.006143 L 194.798479 130.512959 L 193.851521 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 129.566002 L 212.477818 125.059186 L 211.057381 124.585707 L 217.212605 121.271356 L 213.898254 127.42658 L 213.424775 126.006143 L 208.917959 130.512959 L 207.971002 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 129.566002 L 226.597298 125.059186 L 225.176862 124.585707 L 231.332085 121.271356 L 228.017734 127.42658 L 227.544256 126.006143 L 223.03744 130.512959 L 222.090482 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 129.566002 L 240.716779 125.059186 L 239.296343 124.585707 L 245.451566 121.271356 L 242.137215 127.42658 L 241.663736 126.006143 L 237.15692 130.512959 L 236.209963 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 129.566002 L 254.836259 125.059186 L 253.415823 124.585707 L 259.571046 121.271356 L 256.256695 127.42658 L 255.783217 126.006143 L 251.276401 130.512959 L 250.329443 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 129.566002 L 268.95574 125.059186 L 267.535304 124.585707 L 273.690527 121.271356 L 270.376176 127.42658 L 269.902697 126.006143 L 265.395881 130.512959 L 264.448924 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 129.566002 L 283.07522 125.059186 L 281.654784 124.585707 L 287.810007 121.271356 L 284.495656 127.42658 L 284.022178 126.006143 L 279.515362 130.512959 L 278.568404 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 129.566002 L 297.194701 125.059186 L 295.774265 124.585707 L 301.929488 121.271356 L 298.615137 127.42658 L 298.141658 126.006143 L 293.634842 130.512959 L 292.687885 129.566002 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 115.446521 L 99.521973 110.939706 L 98.101537 110.466227 L 104.25676 107.151876 L 100.94241 113.307099 L 100.468931 111.886663 L 95.962115 116.393479 L 95.015158 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 115.446521 L 113.641454 110.939706 L 112.221018 110.466227 L 118.376241 107.151876 L 115.06189 113.307099 L 114.588411 111.886663 L 110.081596 116.393479 L 109.134638 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 115.446521 L 127.760934 110.939706 L 126.340498 110.466227 L 132.495721 107.151876 L 129.181371 113.307099 L 128.707892 111.886663 L 124.201076 116.393479 L 123.254119 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 115.446521 L 141.880415 110.939706 L 140.459979 110.466227 L 146.615202 107.151876 L 143.300851 113.307099 L 142.827372 111.886663 L 138.320557 116.393479 L 137.373599 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 115.446521 L 155.999896 110.939706 L 154.579459 110.466227 L 160.734683 107.151876 L 157.420332 113.307099 L 156.946853 111.886663 L 152.440037 116.393479 L 151.49308 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 115.446521 L 170.119376 110.939706 L 168.69894 110.466227 L 174.854163 107.151876 L 171.539812 113.307099 L 171.066333 111.886663 L 166.559518 116.393479 L 165.61256 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 115.446521 L 184.238857 110.939706 L 182.81842 110.466227 L 188.973644 107.151876 L 185.659293 113.307099 L 185.185814 111.886663 L 180.678998 116.393479 L 179.732041 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 115.446521 L 198.358337 110.939706 L 196.937901 110.466227 L 203.093124 107.151876 L 199.778773 113.307099 L 199.305294 111.886663 L 194.798479 116.393479 L 193.851521 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 115.446521 L 212.477818 110.939706 L 211.057381 110.466227 L 217.212605 107.151876 L 213.898254 113.307099 L 213.424775 111.886663 L 208.917959 116.393479 L 207.971002 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 115.446521 L 226.597298 110.939706 L 225.176862 110.466227 L 231.332085 107.151876 L 228.017734 113.307099 L 227.544256 111.886663 L 223.03744 116.393479 L 222.090482 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 115.446521 L 240.716779 110.939706 L 239.296343 110.466227 L 245.451566 107.151876 L 242.137215 113.307099 L 241.663736 111.886663 L 237.15692 116.393479 L 236.209963 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 115.446521 L 254.836259 110.939706 L 253.415823 110.466227 L 259.571046 107.151876 L 256.256695 113.307099 L 255.783217 111.886663 L 251.276401 116.393479 L 250.329443 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 115.446521 L 268.95574 110.939706 L 267.535304 110.466227 L 273.690527 107.151876 L 270.376176 113.307099 L 269.902697 111.886663 L 265.395881 116.393479 L 264.448924 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 115.446521 L 283.07522 110.939706 L 281.654784 110.466227 L 287.810007 107.151876 L 284.495656 113.307099 L 284.022178 111.886663 L 279.515362 116.393479 L 278.568404 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 115.446521 L 297.194701 110.939706 L 295.774265 110.466227 L 301.929488 107.151876 L 298.615137 113.307099 L 298.141658 111.886663 L 293.634842 116.393479 L 292.687885 115.446521 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 101.327041 L 99.521973 96.820225 L 98.101537 96.346746 L 104.25676 93.032395 L 100.94241 99.187619 L 100.468931 97.767182 L 95.962115 102.273998 L 95.015158 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 101.327041 L 113.641454 96.820225 L 112.221018 96.346746 L 118.376241 93.032395 L 115.06189 99.187619 L 114.588411 97.767182 L 110.081596 102.273998 L 109.134638 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 101.327041 L 127.760934 96.820225 L 126.340498 96.346746 L 132.495721 93.032395 L 129.181371 99.187619 L 128.707892 97.767182 L 124.201076 102.273998 L 123.254119 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 101.327041 L 141.880415 96.820225 L 140.459979 96.346746 L 146.615202 93.032395 L 143.300851 99.187619 L 142.827372 97.767182 L 138.320557 102.273998 L 137.373599 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 101.327041 L 155.999896 96.820225 L 154.579459 96.346746 L 160.734683 93.032395 L 157.420332 99.187619 L 156.946853 97.767182 L 152.440037 102.273998 L 151.49308 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 101.327041 L 170.119376 96.820225 L 168.69894 96.346746 L 174.854163 93.032395 L 171.539812 99.187619 L 171.066333 97.767182 L 166.559518 102.273998 L 165.61256 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 101.327041 L 184.238857 96.820225 L 182.81842 96.346746 L 188.973644 93.032395 L 185.659293 99.187619 L 185.185814 97.767182 L 180.678998 102.273998 L 179.732041 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 101.327041 L 198.358337 96.820225 L 196.937901 96.346746 L 203.093124 93.032395 L 199.778773 99.187619 L 199.305294 97.767182 L 194.798479 102.273998 L 193.851521 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 101.327041 L 212.477818 96.820225 L 211.057381 96.346746 L 217.212605 93.032395 L 213.898254 99.187619 L 213.424775 97.767182 L 208.917959 102.273998 L 207.971002 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 101.327041 L 226.597298 96.820225 L 225.176862 96.346746 L 231.332085 93.032395 L 228.017734 99.187619 L 227.544256 97.767182 L 223.03744 102.273998 L 222.090482 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 101.327041 L 240.716779 96.820225 L 239.296343 96.346746 L 245.451566 93.032395 L 242.137215 99.187619 L 241.663736 97.767182 L 237.15692 102.273998 L 236.209963 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 101.327041 L 254.836259 96.820225 L 253.415823 96.346746 L 259.571046 93.032395 L 256.256695 99.187619 L 255.783217 97.767182 L 251.276401 102.273998 L 250.329443 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 101.327041 L 268.95574 96.820225 L 267.535304 96.346746 L 273.690527 93.032395 L 270.376176 99.187619 L 269.902697 97.767182 L 265.395881 102.273998 L 264.448924 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 101.327041 L 283.07522 96.820225 L 281.654784 96.346746 L 287.810007 93.032395 L 284.495656 99.187619 L 284.022178 97.767182 L 279.515362 102.273998 L 278.568404 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 101.327041 L 297.194701 96.820225 L 295.774265 96.346746 L 301.929488 93.032395 L 298.615137 99.187619 L 298.141658 97.767182 L 293.634842 102.273998 L 292.687885 101.327041 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 87.20756 L 99.521973 82.700744 L 98.101537 82.227266 L 104.25676 78.912915 L 100.94241 85.068138 L 100.468931 83.647702 L 95.962115 88.154518 L 95.015158 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 87.20756 L 113.641454 82.700744 L 112.221018 82.227266 L 118.376241 78.912915 L 115.06189 85.068138 L 114.588411 83.647702 L 110.081596 88.154518 L 109.134638 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 87.20756 L 127.760934 82.700744 L 126.340498 82.227266 L 132.495721 78.912915 L 129.181371 85.068138 L 128.707892 83.647702 L 124.201076 88.154518 L 123.254119 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 87.20756 L 141.880415 82.700744 L 140.459979 82.227266 L 146.615202 78.912915 L 143.300851 85.068138 L 142.827372 83.647702 L 138.320557 88.154518 L 137.373599 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 87.20756 L 155.999896 82.700744 L 154.579459 82.227266 L 160.734683 78.912915 L 157.420332 85.068138 L 156.946853 83.647702 L 152.440037 88.154518 L 151.49308 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 87.20756 L 170.119376 82.700744 L 168.69894 82.227266 L 174.854163 78.912915 L 171.539812 85.068138 L 171.066333 83.647702 L 166.559518 88.154518 L 165.61256 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 87.20756 L 184.238857 82.700744 L 182.81842 82.227266 L 188.973644 78.912915 L 185.659293 85.068138 L 185.185814 83.647702 L 180.678998 88.154518 L 179.732041 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 87.20756 L 198.358337 82.700744 L 196.937901 82.227266 L 203.093124 78.912915 L 199.778773 85.068138 L 199.305294 83.647702 L 194.798479 88.154518 L 193.851521 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 87.20756 L 212.477818 82.700744 L 211.057381 82.227266 L 217.212605 78.912915 L 213.898254 85.068138 L 213.424775 83.647702 L 208.917959 88.154518 L 207.971002 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 87.20756 L 226.597298 82.700744 L 225.176862 82.227266 L 231.332085 78.912915 L 228.017734 85.068138 L 227.544256 83.647702 L 223.03744 88.154518 L 222.090482 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 87.20756 L 240.716779 82.700744 L 239.296343 82.227266 L 245.451566 78.912915 L 242.137215 85.068138 L 241.663736 83.647702 L 237.15692 88.154518 L 236.209963 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 87.20756 L 254.836259 82.700744 L 253.415823 82.227266 L 259.571046 78.912915 L 256.256695 85.068138 L 255.783217 83.647702 L 251.276401 88.154518 L 250.329443 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 87.20756 L 268.95574 82.700744 L 267.535304 82.227266 L 273.690527 78.912915 L 270.376176 85.068138 L 269.902697 83.647702 L 265.395881 88.154518 L 264.448924 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 87.20756 L 283.07522 82.700744 L 281.654784 82.227266 L 287.810007 78.912915 L 284.495656 85.068138 L 284.022178 83.647702 L 279.515362 88.154518 L 278.568404 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 87.20756 L 297.194701 82.700744 L 295.774265 82.227266 L 301.929488 78.912915 L 298.615137 85.068138 L 298.141658 83.647702 L 293.634842 88.154518 L 292.687885 87.20756 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 73.08808 L 99.521973 68.581264 L 98.101537 68.107785 L 104.25676 64.793434 L 100.94241 70.948657 L 100.468931 69.528221 L 95.962115 74.035037 L 95.015158 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 73.08808 L 113.641454 68.581264 L 112.221018 68.107785 L 118.376241 64.793434 L 115.06189 70.948657 L 114.588411 69.528221 L 110.081596 74.035037 L 109.134638 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 73.08808 L 127.760934 68.581264 L 126.340498 68.107785 L 132.495721 64.793434 L 129.181371 70.948657 L 128.707892 69.528221 L 124.201076 74.035037 L 123.254119 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 73.08808 L 141.880415 68.581264 L 140.459979 68.107785 L 146.615202 64.793434 L 143.300851 70.948657 L 142.827372 69.528221 L 138.320557 74.035037 L 137.373599 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 73.08808 L 155.999896 68.581264 L 154.579459 68.107785 L 160.734683 64.793434 L 157.420332 70.948657 L 156.946853 69.528221 L 152.440037 74.035037 L 151.49308 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 73.08808 L 170.119376 68.581264 L 168.69894 68.107785 L 174.854163 64.793434 L 171.539812 70.948657 L 171.066333 69.528221 L 166.559518 74.035037 L 165.61256 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 73.08808 L 184.238857 68.581264 L 182.81842 68.107785 L 188.973644 64.793434 L 185.659293 70.948657 L 185.185814 69.528221 L 180.678998 74.035037 L 179.732041 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 73.08808 L 198.358337 68.581264 L 196.937901 68.107785 L 203.093124 64.793434 L 199.778773 70.948657 L 199.305294 69.528221 L 194.798479 74.035037 L 193.851521 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 73.08808 L 212.477818 68.581264 L 211.057381 68.107785 L 217.212605 64.793434 L 213.898254 70.948657 L 213.424775 69.528221 L 208.917959 74.035037 L 207.971002 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 73.08808 L 226.597298 68.581264 L 225.176862 68.107785 L 231.332085 64.793434 L 228.017734 70.948657 L 227.544256 69.528221 L 223.03744 74.035037 L 222.090482 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 73.08808 L 240.716779 68.581264 L 239.296343 68.107785 L 245.451566 64.793434 L 242.137215 70.948657 L 241.663736 69.528221 L 237.15692 74.035037 L 236.209963 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 73.08808 L 254.836259 68.581264 L 253.415823 68.107785 L 259.571046 64.793434 L 256.256695 70.948657 L 255.783217 69.528221 L 251.276401 74.035037 L 250.329443 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 73.08808 L 268.95574 68.581264 L 267.535304 68.107785 L 273.690527 64.793434 L 270.376176 70.948657 L 269.902697 69.528221 L 265.395881 74.035037 L 264.448924 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 73.08808 L 283.07522 68.581264 L 281.654784 68.107785 L 287.810007 64.793434 L 284.495656 70.948657 L 284.022178 69.528221 L 279.515362 74.035037 L 278.568404 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 73.08808 L 297.194701 68.581264 L 295.774265 68.107785 L 301.929488 64.793434 L 298.615137 70.948657 L 298.141658 69.528221 L 293.634842 74.035037 L 292.687885 73.08808 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 58.968599 L 99.521973 54.461783 L 98.101537 53.988305 L 104.25676 50.673954 L 100.94241 56.829177 L 100.468931 55.408741 L 95.962115 59.915557 L 95.015158 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 58.968599 L 113.641454 54.461783 L 112.221018 53.988305 L 118.376241 50.673954 L 115.06189 56.829177 L 114.588411 55.408741 L 110.081596 59.915557 L 109.134638 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 58.968599 L 127.760934 54.461783 L 126.340498 53.988305 L 132.495721 50.673954 L 129.181371 56.829177 L 128.707892 55.408741 L 124.201076 59.915557 L 123.254119 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 58.968599 L 141.880415 54.461783 L 140.459979 53.988305 L 146.615202 50.673954 L 143.300851 56.829177 L 142.827372 55.408741 L 138.320557 59.915557 L 137.373599 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 58.968599 L 155.999896 54.461783 L 154.579459 53.988305 L 160.734683 50.673954 L 157.420332 56.829177 L 156.946853 55.408741 L 152.440037 59.915557 L 151.49308 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 58.968599 L 170.119376 54.461783 L 168.69894 53.988305 L 174.854163 50.673954 L 171.539812 56.829177 L 171.066333 55.408741 L 166.559518 59.915557 L 165.61256 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 58.968599 L 184.238857 54.461783 L 182.81842 53.988305 L 188.973644 50.673954 L 185.659293 56.829177 L 185.185814 55.408741 L 180.678998 59.915557 L 179.732041 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 58.968599 L 198.358337 54.461783 L 196.937901 53.988305 L 203.093124 50.673954 L 199.778773 56.829177 L 199.305294 55.408741 L 194.798479 59.915557 L 193.851521 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 58.968599 L 212.477818 54.461783 L 211.057381 53.988305 L 217.212605 50.673954 L 213.898254 56.829177 L 213.424775 55.408741 L 208.917959 59.915557 L 207.971002 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 58.968599 L 226.597298 54.461783 L 225.176862 53.988305 L 231.332085 50.673954 L 228.017734 56.829177 L 227.544256 55.408741 L 223.03744 59.915557 L 222.090482 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 58.968599 L 240.716779 54.461783 L 239.296343 53.988305 L 245.451566 50.673954 L 242.137215 56.829177 L 241.663736 55.408741 L 237.15692 59.915557 L 236.209963 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 58.968599 L 254.836259 54.461783 L 253.415823 53.988305 L 259.571046 50.673954 L 256.256695 56.829177 L 255.783217 55.408741 L 251.276401 59.915557 L 250.329443 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 58.968599 L 268.95574 54.461783 L 267.535304 53.988305 L 273.690527 50.673954 L 270.376176 56.829177 L 269.902697 55.408741 L 265.395881 59.915557 L 264.448924 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 58.968599 L 283.07522 54.461783 L 281.654784 53.988305 L 287.810007 50.673954 L 284.495656 56.829177 L 284.022178 55.408741 L 279.515362 59.915557 L 278.568404 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 58.968599 L 297.194701 54.461783 L 295.774265 53.988305 L 301.929488 50.673954 L 298.615137 56.829177 L 298.141658 55.408741 L 293.634842 59.915557 L 292.687885 58.968599 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 44.849119 L 99.521973 40.342303 L 98.101537 39.868824 L 104.25676 36.554473 L 100.94241 42.709696 L 100.468931 41.28926 L 95.962115 45.796076 L 95.015158 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 44.849119 L 113.641454 40.342303 L 112.221018 39.868824 L 118.376241 36.554473 L 115.06189 42.709696 L 114.588411 41.28926 L 110.081596 45.796076 L 109.134638 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 44.849119 L 127.760934 40.342303 L 126.340498 39.868824 L 132.495721 36.554473 L 129.181371 42.709696 L 128.707892 41.28926 L 124.201076 45.796076 L 123.254119 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 44.849119 L 141.880415 40.342303 L 140.459979 39.868824 L 146.615202 36.554473 L 143.300851 42.709696 L 142.827372 41.28926 L 138.320557 45.796076 L 137.373599 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 44.849119 L 155.999896 40.342303 L 154.579459 39.868824 L 160.734683 36.554473 L 157.420332 42.709696 L 156.946853 41.28926 L 152.440037 45.796076 L 151.49308 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 44.849119 L 170.119376 40.342303 L 168.69894 39.868824 L 174.854163 36.554473 L 171.539812 42.709696 L 171.066333 41.28926 L 166.559518 45.796076 L 165.61256 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 44.849119 L 184.238857 40.342303 L 182.81842 39.868824 L 188.973644 36.554473 L 185.659293 42.709696 L 185.185814 41.28926 L 180.678998 45.796076 L 179.732041 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 44.849119 L 198.358337 40.342303 L 196.937901 39.868824 L 203.093124 36.554473 L 199.778773 42.709696 L 199.305294 41.28926 L 194.798479 45.796076 L 193.851521 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 44.849119 L 212.477818 40.342303 L 211.057381 39.868824 L 217.212605 36.554473 L 213.898254 42.709696 L 213.424775 41.28926 L 208.917959 45.796076 L 207.971002 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 44.849119 L 226.597298 40.342303 L 225.176862 39.868824 L 231.332085 36.554473 L 228.017734 42.709696 L 227.544256 41.28926 L 223.03744 45.796076 L 222.090482 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 44.849119 L 240.716779 40.342303 L 239.296343 39.868824 L 245.451566 36.554473 L 242.137215 42.709696 L 241.663736 41.28926 L 237.15692 45.796076 L 236.209963 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 44.849119 L 254.836259 40.342303 L 253.415823 39.868824 L 259.571046 36.554473 L 256.256695 42.709696 L 255.783217 41.28926 L 251.276401 45.796076 L 250.329443 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 44.849119 L 268.95574 40.342303 L 267.535304 39.868824 L 273.690527 36.554473 L 270.376176 42.709696 L 269.902697 41.28926 L 265.395881 45.796076 L 264.448924 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 44.849119 L 283.07522 40.342303 L 281.654784 39.868824 L 287.810007 36.554473 L 284.495656 42.709696 L 284.022178 41.28926 L 279.515362 45.796076 L 278.568404 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 44.849119 L 297.194701 40.342303 L 295.774265 39.868824 L 301.929488 36.554473 L 298.615137 42.709696 L 298.141658 41.28926 L 293.634842 45.796076 L 292.687885 44.849119 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 30.729638 L 99.521973 26.222822 L 98.101537 25.749344 L 104.25676 22.434993 L 100.94241 28.590216 L 100.468931 27.16978 L 95.962115 31.676596 L 95.015158 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 30.729638 L 113.641454 26.222822 L 112.221018 25.749344 L 118.376241 22.434993 L 115.06189 28.590216 L 114.588411 27.16978 L 110.081596 31.676596 L 109.134638 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 30.729638 L 127.760934 26.222822 L 126.340498 25.749344 L 132.495721 22.434993 L 129.181371 28.590216 L 128.707892 27.16978 L 124.201076 31.676596 L 123.254119 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 30.729638 L 141.880415 26.222822 L 140.459979 25.749344 L 146.615202 22.434993 L 143.300851 28.590216 L 142.827372 27.16978 L 138.320557 31.676596 L 137.373599 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 30.729638 L 155.999896 26.222822 L 154.579459 25.749344 L 160.734683 22.434993 L 157.420332 28.590216 L 156.946853 27.16978 L 152.440037 31.676596 L 151.49308 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 30.729638 L 170.119376 26.222822 L 168.69894 25.749344 L 174.854163 22.434993 L 171.539812 28.590216 L 171.066333 27.16978 L 166.559518 31.676596 L 165.61256 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 30.729638 L 184.238857 26.222822 L 182.81842 25.749344 L 188.973644 22.434993 L 185.659293 28.590216 L 185.185814 27.16978 L 180.678998 31.676596 L 179.732041 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 30.729638 L 198.358337 26.222822 L 196.937901 25.749344 L 203.093124 22.434993 L 199.778773 28.590216 L 199.305294 27.16978 L 194.798479 31.676596 L 193.851521 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 30.729638 L 212.477818 26.222822 L 211.057381 25.749344 L 217.212605 22.434993 L 213.898254 28.590216 L 213.424775 27.16978 L 208.917959 31.676596 L 207.971002 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 30.729638 L 226.597298 26.222822 L 225.176862 25.749344 L 231.332085 22.434993 L 228.017734 28.590216 L 227.544256 27.16978 L 223.03744 31.676596 L 222.090482 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 30.729638 L 240.716779 26.222822 L 239.296343 25.749344 L 245.451566 22.434993 L 242.137215 28.590216 L 241.663736 27.16978 L 237.15692 31.676596 L 236.209963 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 30.729638 L 254.836259 26.222822 L 253.415823 25.749344 L 259.571046 22.434993 L 256.256695 28.590216 L 255.783217 27.16978 L 251.276401 31.676596 L 250.329443 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 30.729638 L 268.95574 26.222822 L 267.535304 25.749344 L 273.690527 22.434993 L 270.376176 28.590216 L 269.902697 27.16978 L 265.395881 31.676596 L 264.448924 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 30.729638 L 283.07522 26.222822 L 281.654784 25.749344 L 287.810007 22.434993 L 284.495656 28.590216 L 284.022178 27.16978 L 279.515362 31.676596 L 278.568404 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 30.729638 L 297.194701 26.222822 L 295.774265 25.749344 L 301.929488 22.434993 L 298.615137 28.590216 L 298.141658 27.16978 L 293.634842 31.676596 L 292.687885 30.729638 "/> <path clip-path="url(#p7c3399fde5)" d="M 95.015158 16.610158 L 99.521973 12.103342 L 98.101537 11.629863 L 104.25676 8.315512 L 100.94241 14.470735 L 100.468931 13.050299 L 95.962115 17.557115 L 95.015158 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 109.134638 16.610158 L 113.641454 12.103342 L 112.221018 11.629863 L 118.376241 8.315512 L 115.06189 14.470735 L 114.588411 13.050299 L 110.081596 17.557115 L 109.134638 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 123.254119 16.610158 L 127.760934 12.103342 L 126.340498 11.629863 L 132.495721 8.315512 L 129.181371 14.470735 L 128.707892 13.050299 L 124.201076 17.557115 L 123.254119 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 137.373599 16.610158 L 141.880415 12.103342 L 140.459979 11.629863 L 146.615202 8.315512 L 143.300851 14.470735 L 142.827372 13.050299 L 138.320557 17.557115 L 137.373599 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 151.49308 16.610158 L 155.999896 12.103342 L 154.579459 11.629863 L 160.734683 8.315512 L 157.420332 14.470735 L 156.946853 13.050299 L 152.440037 17.557115 L 151.49308 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 165.61256 16.610158 L 170.119376 12.103342 L 168.69894 11.629863 L 174.854163 8.315512 L 171.539812 14.470735 L 171.066333 13.050299 L 166.559518 17.557115 L 165.61256 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 179.732041 16.610158 L 184.238857 12.103342 L 182.81842 11.629863 L 188.973644 8.315512 L 185.659293 14.470735 L 185.185814 13.050299 L 180.678998 17.557115 L 179.732041 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 193.851521 16.610158 L 198.358337 12.103342 L 196.937901 11.629863 L 203.093124 8.315512 L 199.778773 14.470735 L 199.305294 13.050299 L 194.798479 17.557115 L 193.851521 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 207.971002 16.610158 L 212.477818 12.103342 L 211.057381 11.629863 L 217.212605 8.315512 L 213.898254 14.470735 L 213.424775 13.050299 L 208.917959 17.557115 L 207.971002 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 222.090482 16.610158 L 226.597298 12.103342 L 225.176862 11.629863 L 231.332085 8.315512 L 228.017734 14.470735 L 227.544256 13.050299 L 223.03744 17.557115 L 222.090482 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 236.209963 16.610158 L 240.716779 12.103342 L 239.296343 11.629863 L 245.451566 8.315512 L 242.137215 14.470735 L 241.663736 13.050299 L 237.15692 17.557115 L 236.209963 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 250.329443 16.610158 L 254.836259 12.103342 L 253.415823 11.629863 L 259.571046 8.315512 L 256.256695 14.470735 L 255.783217 13.050299 L 251.276401 17.557115 L 250.329443 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 264.448924 16.610158 L 268.95574 12.103342 L 267.535304 11.629863 L 273.690527 8.315512 L 270.376176 14.470735 L 269.902697 13.050299 L 265.395881 17.557115 L 264.448924 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 278.568404 16.610158 L 283.07522 12.103342 L 281.654784 11.629863 L 287.810007 8.315512 L 284.495656 14.470735 L 284.022178 13.050299 L 279.515362 17.557115 L 278.568404 16.610158 "/> <path clip-path="url(#p7c3399fde5)" d="M 292.687885 16.610158 L 297.194701 12.103342 L 295.774265 11.629863 L 301.929488 8.315512 L 298.615137 14.470735 L 298.141658 13.050299 L 293.634842 17.557115 L 292.687885 16.610158 "/> </g> <g id="matplotlib.axis_1"> <g id="xtick_1"> <g id="line2d_1"> <defs> <path d="M 0 0 L 0 3.5 " id="mfabbc0ffb6" style="stroke:#000000;stroke-width:0.8;"/> </defs> <g> <use style="stroke:#000000;stroke-width:0.8;" x="95.488636" xlink:href="#mfabbc0ffb6" y="224.64"/> </g> </g> <g id="text_1"> <!-- 0 --> <g transform="translate(92.307386 239.238437)scale(0.1 -0.1)"> <defs> <path d="M 31.78125 66.40625 Q 24.171875 66.40625 20.328125 58.90625 Q 16.5 51.421875 16.5 36.375 Q 16.5 21.390625 20.328125 13.890625 Q 24.171875 6.390625 31.78125 6.390625 Q 39.453125 6.390625 43.28125 13.890625 Q 47.125 21.390625 47.125 36.375 Q 47.125 51.421875 43.28125 58.90625 Q 39.453125 66.40625 31.78125 66.40625 z M 31.78125 74.21875 Q 44.046875 74.21875 50.515625 64.515625 Q 56.984375 54.828125 56.984375 36.375 Q 56.984375 17.96875 50.515625 8.265625 Q 44.046875 -1.421875 31.78125 -1.421875 Q 19.53125 -1.421875 13.0625 8.265625 Q 6.59375 17.96875 6.59375 36.375 Q 6.59375 54.828125 13.0625 64.515625 Q 19.53125 74.21875 31.78125 74.21875 z " id="DejaVuSans-48"/> </defs> <use xlink:href="#DejaVuSans-48"/> </g> </g> </g> <g id="xtick_2"> <g id="line2d_2"> <g> <use style="stroke:#000000;stroke-width:0.8;" x="166.086039" xlink:href="#mfabbc0ffb6" y="224.64"/> </g> </g> <g id="text_2"> <!-- 5 --> <g transform="translate(162.904789 239.238437)scale(0.1 -0.1)"> <defs> <path d="M 10.796875 72.90625 L 49.515625 72.90625 L 49.515625 64.59375 L 19.828125 64.59375 L 19.828125 46.734375 Q 21.96875 47.46875 24.109375 47.828125 Q 26.265625 48.1875 28.421875 48.1875 Q 40.625 48.1875 47.75 41.5 Q 54.890625 34.8125 54.890625 23.390625 Q 54.890625 11.625 47.5625 5.09375 Q 40.234375 -1.421875 26.90625 -1.421875 Q 22.3125 -1.421875 17.546875 -0.640625 Q 12.796875 0.140625 7.71875 1.703125 L 7.71875 11.625 Q 12.109375 9.234375 16.796875 8.0625 Q 21.484375 6.890625 26.703125 6.890625 Q 35.15625 6.890625 40.078125 11.328125 Q 45.015625 15.765625 45.015625 23.390625 Q 45.015625 31 40.078125 35.4375 Q 35.15625 39.890625 26.703125 39.890625 Q 22.75 39.890625 18.8125 39.015625 Q 14.890625 38.140625 10.796875 36.28125 z " id="DejaVuSans-53"/> </defs> <use xlink:href="#DejaVuSans-53"/> </g> </g> </g> <g id="xtick_3"> <g id="line2d_3"> <g> <use style="stroke:#000000;stroke-width:0.8;" x="236.683442" xlink:href="#mfabbc0ffb6" y="224.64"/> </g> </g> <g id="text_3"> <!-- 10 --> <g transform="translate(230.320942 239.238437)scale(0.1 -0.1)"> <defs> <path d="M 12.40625 8.296875 L 28.515625 8.296875 L 28.515625 63.921875 L 10.984375 60.40625 L 10.984375 69.390625 L 28.421875 72.90625 L 38.28125 72.90625 L 38.28125 8.296875 L 54.390625 8.296875 L 54.390625 0 L 12.40625 0 z " id="DejaVuSans-49"/> </defs> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> </g> </g> </g> <g id="xtick_4"> <g id="line2d_4"> <g> <use style="stroke:#000000;stroke-width:0.8;" x="307.280844" xlink:href="#mfabbc0ffb6" y="224.64"/> </g> </g> <g id="text_4"> <!-- 15 --> <g transform="translate(300.918344 239.238437)scale(0.1 -0.1)"> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-53"/> </g> </g> </g> </g> <g id="matplotlib.axis_2"> <g id="ytick_1"> <g id="line2d_5"> <defs> <path d="M 0 0 L -3.5 0 " id="me3f7a07949" style="stroke:#000000;stroke-width:0.8;"/> </defs> <g> <use style="stroke:#000000;stroke-width:0.8;" x="26.925" xlink:href="#me3f7a07949" y="214.756364"/> </g> </g> <g id="text_5"> <!-- 0 --> <g transform="translate(13.5625 218.555582)scale(0.1 -0.1)"> <use xlink:href="#DejaVuSans-48"/> </g> </g> </g> <g id="ytick_2"> <g id="line2d_6"> <g> <use style="stroke:#000000;stroke-width:0.8;" x="26.925" xlink:href="#me3f7a07949" y="186.517403"/> </g> </g> <g id="text_6"> <!-- 2 --> <g transform="translate(13.5625 190.316621)scale(0.1 -0.1)"> <defs> <path d="M 19.1875 8.296875 L 53.609375 8.296875 L 53.609375 0 L 7.328125 0 L 7.328125 8.296875 Q 12.9375 14.109375 22.625 23.890625 Q 32.328125 33.6875 34.8125 36.53125 Q 39.546875 41.84375 41.421875 45.53125 Q 43.3125 49.21875 43.3125 52.78125 Q 43.3125 58.59375 39.234375 62.25 Q 35.15625 65.921875 28.609375 65.921875 Q 23.96875 65.921875 18.8125 64.3125 Q 13.671875 62.703125 7.8125 59.421875 L 7.8125 69.390625 Q 13.765625 71.78125 18.9375 73 Q 24.125 74.21875 28.421875 74.21875 Q 39.75 74.21875 46.484375 68.546875 Q 53.21875 62.890625 53.21875 53.421875 Q 53.21875 48.921875 51.53125 44.890625 Q 49.859375 40.875 45.40625 35.40625 Q 44.1875 33.984375 37.640625 27.21875 Q 31.109375 20.453125 19.1875 8.296875 z " id="DejaVuSans-50"/> </defs> <use xlink:href="#DejaVuSans-50"/> </g> </g> </g> <g id="ytick_3"> <g id="line2d_7"> <g> <use style="stroke:#000000;stroke-width:0.8;" x="26.925" xlink:href="#me3f7a07949" y="158.278442"/> </g> </g> <g id="text_7"> <!-- 4 --> <g transform="translate(13.5625 162.07766)scale(0.1 -0.1)"> <defs> <path d="M 37.796875 64.3125 L 12.890625 25.390625 L 37.796875 25.390625 z M 35.203125 72.90625 L 47.609375 72.90625 L 47.609375 25.390625 L 58.015625 25.390625 L 58.015625 17.1875 L 47.609375 17.1875 L 47.609375 0 L 37.796875 0 L 37.796875 17.1875 L 4.890625 17.1875 L 4.890625 26.703125 z " id="DejaVuSans-52"/> </defs> <use xlink:href="#DejaVuSans-52"/> </g> </g> </g> <g id="ytick_4"> <g id="line2d_8"> <g> <use style="stroke:#000000;stroke-width:0.8;" x="26.925" xlink:href="#me3f7a07949" y="130.039481"/> </g> </g> <g id="text_8"> <!-- 6 --> <g transform="translate(13.5625 133.838699)scale(0.1 -0.1)"> <defs> <path d="M 33.015625 40.375 Q 26.375 40.375 22.484375 35.828125 Q 18.609375 31.296875 18.609375 23.390625 Q 18.609375 15.53125 22.484375 10.953125 Q 26.375 6.390625 33.015625 6.390625 Q 39.65625 6.390625 43.53125 10.953125 Q 47.40625 15.53125 47.40625 23.390625 Q 47.40625 31.296875 43.53125 35.828125 Q 39.65625 40.375 33.015625 40.375 z M 52.59375 71.296875 L 52.59375 62.3125 Q 48.875 64.0625 45.09375 64.984375 Q 41.3125 65.921875 37.59375 65.921875 Q 27.828125 65.921875 22.671875 59.328125 Q 17.53125 52.734375 16.796875 39.40625 Q 19.671875 43.65625 24.015625 45.921875 Q 28.375 48.1875 33.59375 48.1875 Q 44.578125 48.1875 50.953125 41.515625 Q 57.328125 34.859375 57.328125 23.390625 Q 57.328125 12.15625 50.6875 5.359375 Q 44.046875 -1.421875 33.015625 -1.421875 Q 20.359375 -1.421875 13.671875 8.265625 Q 6.984375 17.96875 6.984375 36.375 Q 6.984375 53.65625 15.1875 63.9375 Q 23.390625 74.21875 37.203125 74.21875 Q 40.921875 74.21875 44.703125 73.484375 Q 48.484375 72.75 52.59375 71.296875 z " id="DejaVuSans-54"/> </defs> <use xlink:href="#DejaVuSans-54"/> </g> </g> </g> <g id="ytick_5"> <g id="line2d_9"> <g> <use style="stroke:#000000;stroke-width:0.8;" x="26.925" xlink:href="#me3f7a07949" y="101.800519"/> </g> </g> <g id="text_9"> <!-- 8 --> <g transform="translate(13.5625 105.599738)scale(0.1 -0.1)"> <defs> <path d="M 31.78125 34.625 Q 24.75 34.625 20.71875 30.859375 Q 16.703125 27.09375 16.703125 20.515625 Q 16.703125 13.921875 20.71875 10.15625 Q 24.75 6.390625 31.78125 6.390625 Q 38.8125 6.390625 42.859375 10.171875 Q 46.921875 13.96875 46.921875 20.515625 Q 46.921875 27.09375 42.890625 30.859375 Q 38.875 34.625 31.78125 34.625 z M 21.921875 38.8125 Q 15.578125 40.375 12.03125 44.71875 Q 8.5 49.078125 8.5 55.328125 Q 8.5 64.0625 14.71875 69.140625 Q 20.953125 74.21875 31.78125 74.21875 Q 42.671875 74.21875 48.875 69.140625 Q 55.078125 64.0625 55.078125 55.328125 Q 55.078125 49.078125 51.53125 44.71875 Q 48 40.375 41.703125 38.8125 Q 48.828125 37.15625 52.796875 32.3125 Q 56.78125 27.484375 56.78125 20.515625 Q 56.78125 9.90625 50.3125 4.234375 Q 43.84375 -1.421875 31.78125 -1.421875 Q 19.734375 -1.421875 13.25 4.234375 Q 6.78125 9.90625 6.78125 20.515625 Q 6.78125 27.484375 10.78125 32.3125 Q 14.796875 37.15625 21.921875 38.8125 z M 18.3125 54.390625 Q 18.3125 48.734375 21.84375 45.5625 Q 25.390625 42.390625 31.78125 42.390625 Q 38.140625 42.390625 41.71875 45.5625 Q 45.3125 48.734375 45.3125 54.390625 Q 45.3125 60.0625 41.71875 63.234375 Q 38.140625 66.40625 31.78125 66.40625 Q 25.390625 66.40625 21.84375 63.234375 Q 18.3125 60.0625 18.3125 54.390625 z " id="DejaVuSans-56"/> </defs> <use xlink:href="#DejaVuSans-56"/> </g> </g> </g> <g id="ytick_6"> <g id="line2d_10"> <g> <use style="stroke:#000000;stroke-width:0.8;" x="26.925" xlink:href="#me3f7a07949" y="73.561558"/> </g> </g> <g id="text_10"> <!-- 10 --> <g transform="translate(7.2 77.360777)scale(0.1 -0.1)"> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> </g> </g> </g> <g id="ytick_7"> <g id="line2d_11"> <g> <use style="stroke:#000000;stroke-width:0.8;" x="26.925" xlink:href="#me3f7a07949" y="45.322597"/> </g> </g> <g id="text_11"> <!-- 12 --> <g transform="translate(7.2 49.121816)scale(0.1 -0.1)"> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-50"/> </g> </g> </g> <g id="ytick_8"> <g id="line2d_12"> <g> <use style="stroke:#000000;stroke-width:0.8;" x="26.925" xlink:href="#me3f7a07949" y="17.083636"/> </g> </g> <g id="text_12"> <!-- 14 --> <g transform="translate(7.2 20.882855)scale(0.1 -0.1)"> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-52"/> </g> </g> </g> </g> <g id="patch_3"> <path d="M 26.925 224.64 L 26.925 7.2 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/> </g> <g id="patch_4"> <path d="M 361.725 224.64 L 361.725 7.2 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/> </g> <g id="patch_5"> <path d="M 26.925 224.64 L 361.725 224.64 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/> </g> <g id="patch_6"> <path d="M 26.925 7.2 L 361.725 7.2 " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/> </g> </g> </g> <defs> <clipPath id="p7c3399fde5"> <rect height="217.44" width="334.8" x="26.925" y="7.2"/> </clipPath> </defs> </svg>)
......
......@@ -146,8 +146,11 @@ def test_fully_periodic_flow(stencil, streaming_pattern):
# Equal to the steady-state velocity field up to numerical errors
assert_allclose(u, u_ref)
# Exactly equal to other streaming patterns!
# Flow must be equal up to numerical error for all streaming patterns
global all_results
for prev_pattern, prev_u in all_results.items():
assert_array_equal(
for key, prev_u in all_results.items():
if key[0] == stencil:
prev_pattern = key[1]
assert_allclose(
u, prev_u, err_msg=f'Velocity field for {streaming_pattern} differed from {prev_pattern}!')
all_results[(stencil, streaming_pattern)] = u
import numpy as np
import sympy as sp
from pystencils.datahandling import create_data_handling
from pystencils import create_kernel
from pystencils.slicing import make_slice
from lbmpy.creationfunctions import create_lb_collision_rule, create_lb_function
from lbmpy.macroscopic_value_kernels import flexible_macroscopic_values_getter, flexible_macroscopic_values_setter
from lbmpy.stencils import get_stencil
from lbmpy.advanced_streaming import PeriodicityHandling, FlexibleNoSlip, FlexibleLBMBoundaryHandling
from lbmpy.advanced_streaming.utility import is_inplace, streaming_patterns
import pytest
from numpy.testing import assert_allclose
all_results = dict()
class PeriodicPipeFlow:
def __init__(self, stencil, streaming_pattern):
# Stencil
self.stencil = stencil
self.q = len(self.stencil)
self.dim = len(self.stencil[0])
# Streaming
self.streaming_pattern = streaming_pattern
self.inplace = is_inplace(self.streaming_pattern)
self.timesteps = ['even', 'odd'] if self.inplace else ['both']
self.between_timesteps = ['even_to_odd', 'odd_to_even'] if self.inplace else ['both']
self.zeroth_timestep = self.timesteps[0]
# Domain, Data Handling and PDF fields
self.pipe_length = 60
self.pipe_radius = 15
self.domain_size = (self.pipe_length, ) + (2 * self.pipe_radius,) * (self.dim - 1)
self.periodicity = (True, ) + (False, ) * (self.dim - 1)
self.force = (0.0001, ) + (0.0,) * (self.dim - 1)
self.dh = create_data_handling(domain_size=self.domain_size, periodicity=self.periodicity)
self.pdfs = self.dh.add_array('pdfs', self.q)
if not self.inplace:
self.pdfs_tmp = self.dh.add_array_like('pdfs_tmp', self.pdfs.name)
# LBM Streaming and Collision
method_params = {
'stencil': stencil,
'method': 'srt',
'relaxation_rate': 1.0,
'force_model': 'guo',
'force': self.force
}
optimization = {
'symbolic_field': self.pdfs,
'target': 'cpu'
}
if not self.inplace:
optimization['symbolic_temporary_field'] = self.pdfs_tmp
self.lb_collision = create_lb_collision_rule(optimization=optimization, **method_params)
self.lb_method = self.lb_collision.method
self.lb_kernels = []
if self.inplace:
self.lb_kernels.append(create_lb_function(collision_rule=self.lb_collision,
optimization=optimization,
kernel_type=self.streaming_pattern + '_even',
**method_params))
self.lb_kernels.append(create_lb_function(collision_rule=self.lb_collision,
optimization=optimization,
kernel_type=self.streaming_pattern + '_odd',
**method_params))
else:
if self.streaming_pattern == 'pull':
kernel_type = 'stream_pull_collide'
elif self.streaming_pattern == 'push':
kernel_type = 'collide_stream_push'
self.lb_kernels.append(create_lb_function(collision_rule=self.lb_collision,
optimization=optimization,
kernel_type=kernel_type,
**method_params))
# Macroscopic Values
self.density = 1.0
self.density_field = self.dh.add_array('rho', 1)
u_x = 0.0
self.velocity = (u_x,) * self.dim
self.velocity_field = self.dh.add_array('u', self.dim)
setter = flexible_macroscopic_values_setter(
self.lb_method, self.density, self.velocity, self.pdfs,
streaming_pattern=self.streaming_pattern, previous_timestep=self.zeroth_timestep)
self.init_kernel = create_kernel(setter, ghost_layers=1).compile()
self.getter_kernels = []
for t in self.timesteps:
getter = flexible_macroscopic_values_getter(
self.lb_method, self.density_field, self.velocity_field, self.pdfs,
streaming_pattern=self.streaming_pattern, previous_timestep=t)
self.getter_kernels.append(create_kernel(getter, ghost_layers=1).compile())
# Periodicity
self.periodicity_handler = PeriodicityHandling(
stencil, self.dh, self.pdfs.name,
streaming_pattern=self.streaming_pattern, zeroth_timestep=self.zeroth_timestep)
# Boundary Handling
self.noslip = FlexibleNoSlip()
self.bh = FlexibleLBMBoundaryHandling(self.lb_method, self.dh, self.pdfs.name,
streaming_pattern=self.streaming_pattern)
self.bh.set_boundary(boundary_obj=self.noslip, mask_callback=self.mask_callback)
self.t_modulus = 0
def mask_callback(self, x, y, z=None):
y = y - self.pipe_radius
z = z - self.pipe_radius if z is not None else 0
return np.sqrt(y**2 + z**2) >= self.pipe_radius
def init(self):
self.t_modulus = 0
self.dh.run_kernel(self.init_kernel)
def step(self):
# Boundaries
self.bh(between_timesteps=self.between_timesteps[self.t_modulus])
# Periodicty
self.periodicity_handler(self.timesteps[self.t_modulus])
# Macroscopic Values
self.dh.run_kernel(self.getter_kernels[self.t_modulus])
# Here, the next time step begins
self.t_modulus = (self.t_modulus + 1) % len(self.timesteps)
# LBM Step
self.dh.run_kernel(self.lb_kernels[self.t_modulus])
# Field Swaps
if not self.inplace:
self.dh.swap(self.pdfs.name, self.pdfs_tmp.name)
def run(self, iterations):
for _ in range(iterations):
self.step()
@property
def velocity_array(self):
return self.dh.gather_array(self.velocity_field.name)
def get_trimmed_velocity_array(self):
u = np.copy(self.dh.gather_array(self.velocity_field.name))
mask = self.bh.get_mask(None, self.noslip)
for idx in np.ndindex(u.shape[:-1]):
if mask[idx] != 0:
u[idx] = np.full((self.dim, ), np.nan)
return u
@pytest.mark.parametrize('stencil', ['D2Q9', 'D3Q19', 'D3Q27'])
@pytest.mark.parametrize('streaming_pattern', streaming_patterns)
def test_periodic_pipe(stencil, streaming_pattern):
stencil = get_stencil(stencil)
pipeflow = PeriodicPipeFlow(stencil, streaming_pattern)
pipeflow.init()
pipeflow.run(100)
u = pipeflow.get_trimmed_velocity_array()
# Flow must be equal up to numerical error for all streaming patterns
global all_results
for key, prev_u in all_results.items():
if key[0] == stencil:
prev_pattern = key[1]
assert_allclose(
u, prev_u,
err_msg=f'Velocity field for {streaming_pattern} differed from {prev_pattern}!')
all_results[(stencil, streaming_pattern)] = u
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment