aboutsummaryrefslogtreecommitdiff
path: root/lid_driven_cavity.py
diff options
context:
space:
mode:
authorAdrian Kummerlaender2019-06-15 20:45:27 +0200
committerAdrian Kummerlaender2019-06-15 20:54:56 +0200
commitd71faec93ec0a55c46810e0d178b2803ee89130c (patch)
tree3c35650637615af20668a5ec7bf974b2c05b248b /lid_driven_cavity.py
parentc43d3f38b6922d36d15e8ba2b6ce17ddb0c75b0a (diff)
downloadsymlbm_playground-d71faec93ec0a55c46810e0d178b2803ee89130c.tar
symlbm_playground-d71faec93ec0a55c46810e0d178b2803ee89130c.tar.gz
symlbm_playground-d71faec93ec0a55c46810e0d178b2803ee89130c.tar.bz2
symlbm_playground-d71faec93ec0a55c46810e0d178b2803ee89130c.tar.lz
symlbm_playground-d71faec93ec0a55c46810e0d178b2803ee89130c.tar.xz
symlbm_playground-d71faec93ec0a55c46810e0d178b2803ee89130c.tar.zst
symlbm_playground-d71faec93ec0a55c46810e0d178b2803ee89130c.zip
Add support for generating a D3Q19 kernel
Note how this basically required no changes besides generalizing cell indexing and adding the symbolic formulation of a D3Q19 BGK collision step. Increasing the neighborhood communication from 9 to 19 cells leads to a significant performance "regression": The 3D kernel yields ~ 360 MLUPS compared to the 2D version's ~ 820 MLUPS.
Diffstat (limited to 'lid_driven_cavity.py')
-rw-r--r--lid_driven_cavity.py79
1 files changed, 0 insertions, 79 deletions
diff --git a/lid_driven_cavity.py b/lid_driven_cavity.py
deleted file mode 100644
index 873adeb..0000000
--- a/lid_driven_cavity.py
+++ /dev/null
@@ -1,79 +0,0 @@
-import numpy
-import time
-
-import matplotlib
-import matplotlib.pyplot as plt
-matplotlib.use('AGG')
-
-from lbm import Lattice, Geometry
-
-import symbolic.D2Q9 as D2Q9
-
-def MLUPS(cells, steps, time):
- return cells * steps / time * 1e-6
-
-def generate_moment_plots(lattice, moments):
- for i, m in enumerate(moments):
- print("Generating plot %d of %d." % (i+1, len(moments)))
-
- velocity = numpy.ndarray(shape=tuple(reversed(lattice.geometry.inner_span())))
- for x, y in lattice.geometry.inner_cells():
- velocity[y-1,x-1] = numpy.sqrt(m[1,lattice.idx(x,y)]**2 + m[2,lattice.idx(x,y)]**2)
-
- plt.figure(figsize=(10, 10))
- plt.imshow(velocity, origin='lower', cmap=plt.get_cmap('seismic'))
- plt.savefig("result/ldc_" + str(i) + ".png", bbox_inches='tight', pad_inches=0)
-
-def cavity(geometry, x, y):
- if x == 1 or y == 1 or x == geometry.size_x-2:
- return 2
- elif y == geometry.size_y-2:
- return 3
- else:
- return 1
-
-boundary = """
- if ( m == 2 ) {
- u_0 = 0.0;
- u_1 = 0.0;
- }
- if ( m == 3 ) {
- u_0 = 0.1;
- u_1 = 0.0;
- }
-"""
-
-nUpdates = 100000
-nStat = 5000
-
-moments = []
-
-print("Initializing simulation...\n")
-
-lattice = Lattice(
- descriptor = D2Q9,
- geometry = Geometry(256, 256),
-
- moments = D2Q9.moments(optimize = False),
- collide = D2Q9.bgk(tau = 0.56),
-
- boundary_src = boundary)
-
-lattice.setup_geometry(cavity)
-
-print("Starting simulation using %d cells...\n" % lattice.geometry.volume)
-
-lastStat = time.time()
-
-for i in range(1,nUpdates+1):
- lattice.evolve()
-
- if i % nStat == 0:
- lattice.sync()
- print("i = %4d; %3.0f MLUPS" % (i, MLUPS(lattice.geometry.volume, nStat, time.time() - lastStat)))
- moments.append(lattice.get_moments())
- lastStat = time.time()
-
-print("\nConcluded simulation.\n")
-
-generate_moment_plots(lattice, moments)