Skip to content

Commit 42a289a

Browse files
committed
dsl: Patch issue #1578 (Check legality of symbolic derivatives)
1 parent 4471237 commit 42a289a

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

devito/finite_differences/derivative.py

+8
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,14 @@ def evaluate(self):
312312
# Evaluate finite-difference.
313313
# Note: evaluate and _eval_fd splitted for potential future different
314314
# types of discretizations.
315+
do = self.deriv_order
316+
if isinstance(do, int):
317+
do = (do,)
318+
for i, d in enumerate(self.dims):
319+
expr_order = self.expr.time_order if d.is_Time else self.expr.space_order
320+
if do[i] > expr_order:
321+
raise ValueError("Expression order must be equal or greater than "
322+
"Derivative order")
315323
return self._eval_fd(self.expr)
316324

317325
@property

tests/test_derivatives.py

+13
Original file line numberDiff line numberDiff line change
@@ -488,3 +488,16 @@ def test_shifted_grad(self, shift, ndim):
488488
x0 = (None if shift is None else d + shift[i] * d.spacing if
489489
type(shift) is tuple else d + shift * d.spacing)
490490
assert gi == getattr(f, 'd%s' % d.name)(x0=x0).evaluate
491+
492+
def test_lower_order_derivatives(self):
493+
grid = Grid(tuple([11]*2))
494+
u = TimeFunction(name="u", grid=grid, space_order=2, time_order=2)
495+
m = TimeFunction(name="m", grid=grid, space_order=1, time_order=1)
496+
try:
497+
Operator(Eq(u.forward, u.biharmonic(1/m)))
498+
Operator(Eq(u.forward, (u * m).dx2))
499+
Operator(Eq(u.forward, (u * m).dt2))
500+
except ValueError:
501+
assert True
502+
else:
503+
assert False

0 commit comments

Comments
 (0)