Skip to content
Snippets Groups Projects
Commit 9eb4f389 authored by Martin Bauer's avatar Martin Bauer
Browse files

Merge branch 'sweep-from-ast' into 'master'

Allow construction of sweeps from ASTs

See merge request pycodegen/pystencils_walberla!4
parents 55eb1aa0 d482fd91
No related branches found
No related tags found
No related merge requests found
...@@ -6,6 +6,7 @@ from jinja2 import Environment, PackageLoader, StrictUndefined ...@@ -6,6 +6,7 @@ from jinja2 import Environment, PackageLoader, StrictUndefined
from pystencils import ( from pystencils import (
Assignment, AssignmentCollection, Field, FieldType, create_kernel, create_staggered_kernel) Assignment, AssignmentCollection, Field, FieldType, create_kernel, create_staggered_kernel)
from pystencils.astnodes import KernelFunction
from pystencils.backends.cbackend import get_headers from pystencils.backends.cbackend import get_headers
from pystencils.backends.simd_instruction_sets import get_supported_instruction_sets from pystencils.backends.simd_instruction_sets import get_supported_instruction_sets
from pystencils.stencil import inverse_direction, offset_to_direction_string from pystencils.stencil import inverse_direction, offset_to_direction_string
...@@ -29,7 +30,7 @@ def generate_sweep(generation_context, class_name, assignments, ...@@ -29,7 +30,7 @@ def generate_sweep(generation_context, class_name, assignments,
defines where to write generated files, if OpenMP is available or which SIMD instruction defines where to write generated files, if OpenMP is available or which SIMD instruction
set should be used. See waLBerla examples on how to get a context. set should be used. See waLBerla examples on how to get a context.
class_name: name of the generated sweep class class_name: name of the generated sweep class
assignments: list of assignments defining the stencil update rule assignments: list of assignments defining the stencil update rule or a :class:`KernelFunction`
namespace: the generated class is accessible as walberla::<namespace>::<class_name> namespace: the generated class is accessible as walberla::<namespace>::<class_name>
field_swaps: sequence of field pairs (field, temporary_field). The generated sweep only gets the first field field_swaps: sequence of field pairs (field, temporary_field). The generated sweep only gets the first field
as argument, creating a temporary field internally which is swapped with the first field after as argument, creating a temporary field internally which is swapped with the first field after
...@@ -48,7 +49,10 @@ def generate_sweep(generation_context, class_name, assignments, ...@@ -48,7 +49,10 @@ def generate_sweep(generation_context, class_name, assignments,
if not generation_context.cuda and create_kernel_params['target'] == 'gpu': if not generation_context.cuda and create_kernel_params['target'] == 'gpu':
return return
if not staggered: if isinstance(assignments, KernelFunction):
ast = assignments
create_kernel_params['target'] = ast.target
elif not staggered:
ast = create_kernel(assignments, **create_kernel_params) ast = create_kernel(assignments, **create_kernel_params)
else: else:
ast = create_staggered_kernel(assignments, **create_kernel_params) ast = create_staggered_kernel(assignments, **create_kernel_params)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment