Skip to content

Commit

Permalink
compiler: Introduced additional mappings for indexed Arrays
Browse files Browse the repository at this point in the history
  • Loading branch information
EdCaunt committed Jul 30, 2024
1 parent 465c0d3 commit 4fb77f6
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 11 deletions.
17 changes: 15 additions & 2 deletions devito/ir/equations/algorithms.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
from collections.abc import Iterable
from functools import singledispatch

from devito.symbolics import retrieve_indexed, uxreplace, retrieve_dimensions
from devito.symbolics import (retrieve_indexed, uxreplace, retrieve_dimensions,
retrieve_functions)
from devito.tools import Ordering, as_tuple, flatten, filter_sorted, filter_ordered
from devito.types import (Dimension, Eq, IgnoreDimSort, SubDimension,
ConditionalDimension)
from devito.types.basic import AbstractFunction
from devito.types.grid import MultiSubDimension
from devito.types.dimension import MultiSubDimension

__all__ = ['dimension_sort', 'lower_exprs', 'concretize_subdims']

Expand Down Expand Up @@ -168,6 +169,17 @@ def concretize_subdims(exprs, **kwargs):
if not mapper:
return exprs

# There may be indexed Arrays defined on SubDimensions in the expressions.
# These must have their dimensions replaced and their .function attribute
# reset to prevent recovery of the original SubDimensions.
functions = set().union(*[set(retrieve_functions(e)) for e in exprs])
functions = {f for f in functions if f.is_Array}
for f in functions:
dimensions = tuple(mapper[d] if d in mapper else d for d in f.dimensions)
if dimensions != f.dimensions: # A dimension has been rebuilt
# So build a mapper for Indexed
mapper[f.indexed] = f._rebuild(dimensions=dimensions, function=None).indexed

processed = [uxreplace(e, mapper) for e in exprs]

return processed
Expand Down Expand Up @@ -263,6 +275,7 @@ def _(d, mapper, rebuilt, sregistry):

fdims = (idim1,) + (d.functions.dimensions[1:])
frebuilt = d.functions._rebuild(dimensions=fdims, function=None,
halo=None, padding=None,
initializer=d.functions.data)
rebuilt[d.functions] = functions = frebuilt

Expand Down
18 changes: 9 additions & 9 deletions examples/cfd/01_convection_revisited.ipynb

Large diffs are not rendered by default.

0 comments on commit 4fb77f6

Please sign in to comment.