diff options
author | Adrian Kummerlaender | 2019-10-22 10:49:44 +0200 |
---|---|---|
committer | Adrian Kummerlaender | 2019-10-22 10:49:44 +0200 |
commit | c27ee89f265f73fa77ec043e4f2a52c5c3859965 (patch) | |
tree | ee3b43561f73352e8735a6a05c0be3b565e3f56f /boltzgen/kernel | |
parent | 8fb7705428a6524a436a5dd8806ad8076b7f4e08 (diff) | |
download | boltzgen-c27ee89f265f73fa77ec043e4f2a52c5c3859965.tar boltzgen-c27ee89f265f73fa77ec043e4f2a52c5c3859965.tar.gz boltzgen-c27ee89f265f73fa77ec043e4f2a52c5c3859965.tar.bz2 boltzgen-c27ee89f265f73fa77ec043e4f2a52c5c3859965.tar.lz boltzgen-c27ee89f265f73fa77ec043e4f2a52c5c3859965.tar.xz boltzgen-c27ee89f265f73fa77ec043e4f2a52c5c3859965.tar.zst boltzgen-c27ee89f265f73fa77ec043e4f2a52c5c3859965.zip |
Add basic Generator class
Diffstat (limited to 'boltzgen/kernel')
-rw-r--r-- | boltzgen/kernel/generator.py | 40 | ||||
-rw-r--r-- | boltzgen/kernel/template/basic.cpp.mako | 6 | ||||
-rw-r--r-- | boltzgen/kernel/template/basic.opencl.mako | 4 |
3 files changed, 29 insertions, 21 deletions
diff --git a/boltzgen/kernel/generator.py b/boltzgen/kernel/generator.py index 59654e2..5853561 100644 --- a/boltzgen/kernel/generator.py +++ b/boltzgen/kernel/generator.py @@ -3,23 +3,31 @@ import sympy from mako.template import Template from pathlib import Path -def source(target, descriptor, moments, collide, boundary_src, float_type, geometry): - return Template(filename = str(Path(__file__).parent/('template/basic.' + target + '.mako'))).render( - descriptor = descriptor, - geometry = geometry, +class Generator: + def __init__(self, descriptor, moments, collision, boundary = ''): + self.descriptor = descriptor + self.moments = moments + self.collision = collision + self.boundary = boundary - moments_subexpr = moments[0], - moments_assignment = moments[1], - collide_subexpr = collide[0], - collide_assignment = collide[1], + def kernel(self, target, precision, geometry): + return Template(filename = str(Path(__file__).parent/('template/basic.' + target + '.mako'))).render( + descriptor = self.descriptor, + geometry = geometry, - float_type = float_type, + moments_subexpr = self.moments[0], + moments_assignment = self.moments[1], - boundary_src = Template(boundary_src).render( - descriptor = descriptor, - geometry = geometry, - float_type = float_type - ), + collision_subexpr = self.collision[0], + collision_assignment = self.collision[1], + + float_type = precision, + + boundary_src = Template(self.boundary).render( + descriptor = self.descriptor, + geometry = geometry, + float_type = precision + ), - ccode = sympy.ccode - ) + ccode = sympy.ccode + ) diff --git a/boltzgen/kernel/template/basic.cpp.mako b/boltzgen/kernel/template/basic.cpp.mako index 1879c35..ef3486f 100644 --- a/boltzgen/kernel/template/basic.cpp.mako +++ b/boltzgen/kernel/template/basic.cpp.mako @@ -52,15 +52,15 @@ void collide_and_stream( ${float_type}* f_next, ${float_type} ${ccode(expr)} % endfor -% for i, expr in enumerate(collide_subexpr): +% for i, expr in enumerate(collision_subexpr): const ${float_type} ${expr[0]} = ${ccode(expr[1])}; % endfor -% for i, expr in enumerate(collide_assignment): +% for i, expr in enumerate(collision_assignment): const ${float_type} ${ccode(expr)} % endfor -% for i, expr in enumerate(collide_assignment): +% for i, expr in enumerate(collision_assignment): preshifted_f_next[${pop_offset(i)}] = m*f_next_${i} + (1.0-m)*${descriptor.w[i].evalf()}; % endfor } diff --git a/boltzgen/kernel/template/basic.opencl.mako b/boltzgen/kernel/template/basic.opencl.mako index 5ddf64c..3ecb16c 100644 --- a/boltzgen/kernel/template/basic.opencl.mako +++ b/boltzgen/kernel/template/basic.opencl.mako @@ -70,11 +70,11 @@ __kernel void collide_and_stream(__global ${float_type}* f_next, ${boundary_src} -% for i, expr in enumerate(collide_subexpr): +% for i, expr in enumerate(collision_subexpr): const ${float_type} ${expr[0]} = ${ccode(expr[1])}; % endfor -% for i, expr in enumerate(collide_assignment): +% for i, expr in enumerate(collision_assignment): const ${float_type} ${ccode(expr)} % endfor |