From a6e206d74b2fa0a656f224ee086efd039e2cc635 Mon Sep 17 00:00:00 2001 From: Martin Bauer <martin.bauer@fau.de> Date: Fri, 25 May 2018 16:19:02 +0200 Subject: [PATCH] started with list lbm implementation - extended pystencils - Visualization for list LBM - not yet working --- transformations.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/transformations.py b/transformations.py index 8b288bb4c..32df1ac4d 100644 --- a/transformations.py +++ b/transformations.py @@ -2,6 +2,8 @@ import warnings from collections import defaultdict, OrderedDict, namedtuple from copy import deepcopy from types import MappingProxyType + +import itertools import sympy as sp from sympy.logic.boolalg import Boolean from sympy.tensor import IndexedBase @@ -390,6 +392,12 @@ def resolve_field_accesses(ast_node, read_only_field_names=set(), def visit_sympy_expr(expr, enclosing_block, sympy_assignment): if isinstance(expr, Field.Access): field_access = expr + + if any(isinstance(off, Field.Access) for off in field_access.offsets): + new_offsets = tuple(visit_sympy_expr(off, enclosing_block, sympy_assignment) + for off in field_access.offsets) + field_access = Field.Access(field_access.field, new_offsets, field_access.index) + field = field_access.field if field.name in field_to_base_pointer_info: @@ -711,6 +719,9 @@ class KernelConstraintsCheck: self._update_accesses_rhs(rhs) if isinstance(rhs, Field.Access): self.fields_read.add(rhs.field) + for e in itertools.chain(rhs.offsets, rhs.index): + if isinstance(e, sp.Basic): + self.fields_read.update(access.field for access in e.atoms(Field.Access)) return rhs elif isinstance(rhs, TypedSymbol): return rhs -- GitLab