From ded892a00b9f360d38779c11630f844ce00f105f Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Mon, 23 Jan 2017 16:51:32 +0100
Subject: [PATCH] Ensure CSE of integration factor

---
 python/dune/perftool/pdelab/localoperator.py | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index 3d39a243..5d53d25d 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)
 
 
-- 
GitLab