diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py index 3d39a24368659e3272c09f2a92b497258fa4f834..5d53d25d0d6fe6ae8a4e29f5306d05d1d4e4a1f5 100644 --- a/python/dune/perftool/pdelab/localoperator.py +++ b/python/dune/perftool/pdelab/localoperator.py @@ -34,6 +34,7 @@ from pymbolic.primitives import Variable import pymbolic.primitives as prim from pytools import Record +import ufl.classes as uc import loopy as lp import cgen @@ -420,6 +421,13 @@ def visit_integrals(integrals): if name.startswith("cse"): subst_rule(name, expr, visitor) + # Ensure CSE on detjac * quadrature weight + domain = term.argument.argexpr.ufl_domain() + if term.argument.restriction: + subst_rule("integration_factor", uc.FacetJacobianDeterminant(domain)*uc.QuadratureWeight(domain), visitor) + else: + subst_rule("integration_factor", uc.JacobianDeterminant(domain)*uc.QuadratureWeight(domain), visitor) + get_backend(interface="accum_insn")(visitor, term, measure, subdomain_id)