diff --git a/python/dune/perftool/ufl/preprocess.py b/python/dune/perftool/ufl/preprocess.py index 5d7c93a371f9b003f502aabbb4eceb5b3e1476c9..a376f97c72a56feef5759190edea78668f1b70ee 100644 --- a/python/dune/perftool/ufl/preprocess.py +++ b/python/dune/perftool/ufl/preprocess.py @@ -3,6 +3,9 @@ import ufl.classes as uc import ufl.algorithms.apply_function_pullbacks as afp import ufl.algorithms.apply_algebra_lowering as aal +import ufl.algorithms.apply_derivatives as ad + +from dune.perftool.options import get_form_option from pytools import memoize @@ -60,4 +63,6 @@ def apply_default_transformations(form): # Monkey patch UFL, such that we invert matrices in C++ instead of Python. # The latter only works for very small matrices. If this causes a problem at # some point, we should guard this monkey patch with an option. + aal.LowerCompoundAlgebra.inverse = lambda s, o, A: s.reuse_if_untouched(o, A) +ad.GenericDerivativeRuleset.inverse = lambda s, o, A: -uc.Dot(uc.Dot(o, A), o)