Skip to content

ConditionalDimension + implicit_dims fails when combined with SubDomain #2803

@ZoeLeibowitz

Description

@ZoeLeibowitz

The following code fails when a ConditionalDimension is supplied through implicit_dims together with subdomain=grid.interior :

grid = Grid((2,2))
_, y = grid.dimensions

u = Function(name='u', grid=grid, space_order=2)
v = Function(name='v', grid=grid, space_order=2)

c1 = ConditionalDimension(name='c1', parent=y, condition=Gt(u, 0))
update_u = Eq(u, v, implicit_dims=c1, subdomain=grid.interior)
op = Operator(update_u)

Error:

  File "/home/zl5621/devito_original/devito/mfe.py", line 13, in <module>
    op = Operator(update_u)
         ^^^^^^^^^^^^^^^^^^
  File "/home/zl5621/devito_original/devito/devito/operator/operator.py", line 174, in __new__
    op = cls._build(expressions, **kwargs)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/zl5621/devito_original/devito/devito/operator/operator.py", line 207, in _build
    irs, byproduct = cls._lower(expressions, profiler=profiler, **kwargs)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/zl5621/devito_original/devito/devito/operator/operator.py", line 292, in _lower
    clusters = cls._lower_clusters(expressions, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/zl5621/devito_original/devito/devito/tools/timing.py", line 76, in __call__
    retval = self.func(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/zl5621/devito_original/devito/devito/operator/operator.py", line 396, in _lower_clusters
    clusters = clusterize(expressions, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/zl5621/devito_original/devito/devito/ir/clusters/algorithms.py", line 44, in clusterize
    clusters = guard(clusters)
               ^^^^^^^^^^^^^^^
  File "/home/zl5621/devito_original/devito/devito/tools/timing.py", line 76, in __call__
    retval = self.func(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/zl5621/devito_original/devito/devito/ir/clusters/algorithms.py", line 246, in guard
    k = max(dims, default=d, key=lambda i: c.ispace.index(i))
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/zl5621/devito_original/devito/devito/ir/clusters/algorithms.py", line 246, in <lambda>
    k = max(dims, default=d, key=lambda i: c.ispace.index(i))
                                           ^^^^^^^^^^^^^^^^^
  File "/home/zl5621/devito_original/devito/devito/ir/support/space.py", line 866, in index
    return self.intervals.index(key)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/zl5621/devito_original/devito/devito/ir/support/space.py", line 542, in index
    return super().index(self[key])
           ^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: tuple.index(x): x not in tuple

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions