-
Notifications
You must be signed in to change notification settings - Fork 238
Open
Labels
Description
This may not be the right way to approach this... but the code below generates a pretty funky and not-very-helpful error :)
from devito import Grid, Function, TimeFunction, Operator, Eq, left, right, solve
nx = 50
ny = 50
nz = 50
grid = Grid(shape=(nx + 2, ny + 2, nz + 2,), extent=(2.0, 2.0, 2.0),)
u = TimeFunction(name="u", grid=grid, space_order=1)
time_dim = grid.time_dim
array_func = Function(name="array_func", shape=(10,), dimensions=(time_dim,))
t0 = Function(name="t0", grid=grid, space_order=1)
t1 = Function(name="t1", grid=grid, space_order=1)
eq = Eq(u.dt, array_func * ((t0 * u.dx).dx + (t1 * u.dy).dx), subdomain=grid.interior,)
stencil = solve(eq, u.forward)
eq_stencil = Eq(u.forward, stencil)
# -----ERRORS HERE!-----
op = Operator([eq_stencil])
Traceback below:
Traceback (most recent call last):
File "test_crash_devito3.py", line 19, in <module>
op = Operator([eq_stencil])
File "/redacted/devito/operator/operator.py", line 157, in __new__
op = cls._build(expressions, **kwargs)
File "/redacted/devito/operator/operator.py", line 181, in _build
expressions = cls._lower_exprs(expressions, **kwargs)
File "/redacted/devito/tools/timing.py", line 76, in __call__
retval = self.func(*args, **kwargs)
File "/redacted/devito/operator/operator.py", line 278, in _lower_exprs
expressions = flatten([i.evaluate for i in expressions])
File "/redacted/devito/operator/operator.py", line 278, in <listcomp>
expressions = flatten([i.evaluate for i in expressions])
File "/redacted/lib/python3.9/site-packages/cached_property.py", line 36, in __get__
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/redacted/devito/types/equation.py", line 86, in evaluate
lhs, rhs = self.lhs.evaluate, self.rhs._eval_at(self.lhs).evaluate
File "/redacted/devito/types/lazy.py", line 47, in evaluate
args = self._evaluate_args()
File "/redacted/devito/types/lazy.py", line 42, in _evaluate_args
return [Evaluable._evaluate_maybe_nested(i) for i in self.args]
File "/redacted/devito/types/lazy.py", line 42, in <listcomp>
return [Evaluable._evaluate_maybe_nested(i) for i in self.args]
File "/redacted/devito/types/lazy.py", line 16, in _evaluate_maybe_nested
return maybe_evaluable.evaluate
File "/redacted/devito/finite_differences/derivative.py", line 319, in evaluate
return self._eval_fd(self.expr)
File "/redacted/devito/finite_differences/derivative.py", line 352, in _eval_fd
res = generic_derivative(expr, *self.dims, self.fd_order, self.deriv_order,
File "/redacted/devito/finite_differences/tools.py", line 50, in wrapper
return S.Zero if expr.is_Number else func(expr, *args, **kwargs)
File "/redacted/devito/finite_differences/tools.py", line 67, in wrapper
return func(expr, *args, **kwargs)
File "/redacted/devito/finite_differences/finite_difference.py", line 261, in generic_derivative
return indices_weights_to_fd(expr, dim, indices, c, matvec=matvec.val)
File "/redacted/devito/finite_differences/finite_difference.py", line 283, in indices_weights_to_fd
terms.append(expr._subs(dim, iloc - (expr.indices_ref[dim] - dim)) * c)
File "/redacted/devito/tools/data_structures.py", line 47, in __getitem__
return self.__getitem_hook__(key)
File "/redacted/devito/types/utils.py", line 27, in __getitem_hook__
raise KeyError
KeyError
Bizarrely, it depends on the name
of the array_func
. If I change it to e.g. time_varying_func
, there is no issue.
Any help would be much appreciated!
Thanks,
Tim