aboutsummaryrefslogtreecommitdiff
path: root/simulation.py
diff options
context:
space:
mode:
authorAdrian Kummerlaender2019-09-01 23:06:10 +0200
committerAdrian Kummerlaender2019-09-01 23:06:10 +0200
commita89d3eba9aec11a4f55817fcdb189fcd6f26b574 (patch)
tree929f411a20564c9e267116f3e6a8966fe6c3a781 /simulation.py
parent0a64777ddc063d9b3f4abd68383e4ef998977bb7 (diff)
downloadsymlbm_playground-a89d3eba9aec11a4f55817fcdb189fcd6f26b574.tar
symlbm_playground-a89d3eba9aec11a4f55817fcdb189fcd6f26b574.tar.gz
symlbm_playground-a89d3eba9aec11a4f55817fcdb189fcd6f26b574.tar.bz2
symlbm_playground-a89d3eba9aec11a4f55817fcdb189fcd6f26b574.tar.lz
symlbm_playground-a89d3eba9aec11a4f55817fcdb189fcd6f26b574.tar.xz
symlbm_playground-a89d3eba9aec11a4f55817fcdb189fcd6f26b574.tar.zst
symlbm_playground-a89d3eba9aec11a4f55817fcdb189fcd6f26b574.zip
Prototype "ink" particles visualization
Diffstat (limited to 'simulation.py')
-rw-r--r--simulation.py39
1 files changed, 34 insertions, 5 deletions
diff --git a/simulation.py b/simulation.py
index 1f9a6c1..0f7e904 100644
--- a/simulation.py
+++ b/simulation.py
@@ -37,6 +37,7 @@ class Geometry:
return (self.size_x-2, self.size_y-2, self.size_z-2)
+
def pad(n, m):
return (n // m + min(1,n % m)) * m
@@ -109,6 +110,24 @@ class Memory:
def cells(self):
return ndindex(self.size(), order='F')
+class Particles:
+ def __init__(self, context, float_type, geometry, n):
+ self.context = context
+ self.count = n
+
+ self.np_particles = numpy.ndarray(shape=(self.count, 4), dtype=float_type)
+
+ self.np_particles[:,0:2] = numpy.mgrid[
+ geometry.size_x//20:2*geometry.size_x//20:100j,
+ 4*geometry.size_y//9:5*geometry.size_y//9:n/100j
+ ].reshape(2,-1).T
+ self.np_particles[:,2] = 0.0
+ self.np_particles[:,3] = 0.0
+
+ self.gl_particles = vbo.VBO(data=self.np_particles, usage=gl.GL_DYNAMIC_DRAW, target=gl.GL_ARRAY_BUFFER)
+ self.gl_particles.bind()
+ self.cl_gl_particles = cl.GLBuffer(self.context, mf.READ_WRITE, int(self.gl_particles))
+
class Lattice:
def __init__(self,
descriptor, geometry, moments, collide,
@@ -225,15 +244,25 @@ class Lattice:
return moments
- def sync_gl_moments(self):
+ def collect_gl_moments(self):
cl.enqueue_acquire_gl_objects(self.queue, [self.memory.cl_gl_moments])
if self.tick:
self.program.collect_gl_moments(
- self.queue, self.grid.size(), self.layout, self.memory.cl_pop_b, self.memory.cl_gl_moments)
+ self.queue, self.grid.size(), self.layout, self.memory.cl_pop_b, self.memory.cl_material, self.memory.cl_gl_moments)
+ else:
+ self.program.collect_gl_moments(
+ self.queue, self.grid.size(), self.layout, self.memory.cl_pop_a, self.memory.cl_material, self.memory.cl_gl_moments)
+
+ def update_gl_particles(self, particles):
+ cl.enqueue_acquire_gl_objects(self.queue, [self.memory.cl_gl_moments, particles.cl_gl_particles])
+
+ if self.tick:
+ self.program.collect_gl_moments(
+ self.queue, self.grid.size(), self.layout, self.memory.cl_pop_b, self.memory.cl_material, self.memory.cl_gl_moments)
else:
self.program.collect_gl_moments(
- self.queue, self.grid.size(), self.layout, self.memory.cl_pop_a, self.memory.cl_gl_moments)
+ self.queue, self.grid.size(), self.layout, self.memory.cl_pop_a, self.memory.cl_material, self.memory.cl_gl_moments)
- #cl.enqueue_release_gl_objects(self.queue, [self.cl_gl_moments])
- self.sync()
+ self.program.update_particles(
+ self.queue, (particles.count,1), None, self.memory.cl_gl_moments, particles.cl_gl_particles)