diff options
Diffstat (limited to 'lid_driven_cavity/cuda/generate.py')
-rwxr-xr-x | lid_driven_cavity/cuda/generate.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lid_driven_cavity/cuda/generate.py b/lid_driven_cavity/cuda/generate.py new file mode 100755 index 0000000..27ce511 --- /dev/null +++ b/lid_driven_cavity/cuda/generate.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python + +import argparse + +from boltzgen import Generator, Geometry +from boltzgen.lbm.model import BGK + +import config + +argparser = argparse.ArgumentParser( + description = 'Generate a CUDA implementation of a lid driven cavity simulation using LBM') +argparser.add_argument( + '--output', required = False, help = 'Target directory for the generated sources') + +args = argparser.parse_args() + +generator = Generator( + model = BGK(config.descriptor, tau = config.tau), + target = 'cuda', + precision = config.precision, + streaming = config.streaming, + index = 'XYZ', + layout = 'SOA') + +if args.output is None: + args.output = '.' + +functions = ['collide_and_stream', 'equilibrilize', 'collect_moments', 'momenta_boundary'] + +if config.streaming == 'SSS': + functions += ['update_sss_control_structure'] + +extras = ['cell_list_dispatch'] + +with open('%s/kernel.h' % args.output, 'w') as kernel: + kernel.write(generator.kernel(config.geometry, functions, extras)) + +ldc_src = '' +with open('ldc.cuda.%s.mako' % config.streaming, 'r') as template: + ldc_src = template.read() + +with open('%s/ldc.cu' % args.output, 'w') as app: + app.write(generator.custom(config.geometry, ldc_src)) |