From c27ee89f265f73fa77ec043e4f2a52c5c3859965 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Tue, 22 Oct 2019 10:49:44 +0200 Subject: Add basic Generator class --- boltzgen/kernel/generator.py | 40 ++++++++++++++++++------------ boltzgen/kernel/template/basic.cpp.mako | 6 ++--- boltzgen/kernel/template/basic.opencl.mako | 4 +-- 3 files changed, 29 insertions(+), 21 deletions(-) (limited to 'boltzgen/kernel') 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 -- cgit v1.2.3