From c85ca159db82e8a2d7a134be95b713b567c78635 Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Fri, 23 Mar 2018 11:38:48 +0100
Subject: [PATCH] Additional fix for non-fastdg

---
 python/dune/perftool/sumfact/accumulation.py | 8 +++++++-
 python/dune/perftool/sumfact/realization.py  | 6 ------
 python/dune/perftool/sumfact/symbolic.py     | 9 +++++----
 3 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/python/dune/perftool/sumfact/accumulation.py b/python/dune/perftool/sumfact/accumulation.py
index 12aab706..6957b408 100644
--- a/python/dune/perftool/sumfact/accumulation.py
+++ b/python/dune/perftool/sumfact/accumulation.py
@@ -203,7 +203,13 @@ class AccumulationOutput(SumfactKernelOutputBase, ImmutableRecord):
     @property
     def fastdg_args(self):
         if get_form_option("fastdg"):
-            return ("{}.data()".format(self.accumvar),)
+            ret = ("{}.data()".format(self.accumvar),)
+            if get_form_option("fastdg") and sf.within_inames:
+                element = get_leaf(sf.output.trial_element, sf.output.trial_element_index)
+                shape = tuple(element.degree() + 1 for e in range(element.cell().geometric_dimension()))
+                jacobian_index = flatten_index(tuple(prim.Variable(i) for i in sf.within_inames), shape, order="f")
+                ret = ret + (str(jacobian_index),)
+            return ret
         else:
             return ()
 
diff --git a/python/dune/perftool/sumfact/realization.py b/python/dune/perftool/sumfact/realization.py
index d1d8a9f2..1a7188e9 100644
--- a/python/dune/perftool/sumfact/realization.py
+++ b/python/dune/perftool/sumfact/realization.py
@@ -153,12 +153,6 @@ def _realize_sum_factorization_kernel(sf):
     if sf.stage == 3:
         fastdg_args = sf.output.fastdg_args
 
-        if sf.within_inames:
-            element = get_leaf(sf.output.trial_element, sf.output.trial_element_index)
-            shape = tuple(element.degree() + 1 for e in range(element.cell().geometric_dimension()))
-            jacobian_index = flatten_index(tuple(prim.Variable(i) for i in sf.within_inames), shape, order="f")
-            fastdg_args = fastdg_args + (str(jacobian_index),)
-
     # Call the function
     code = "{}({});".format(funcname, ", ".join(buffers + fastdg_args))
     tag = "sumfact_stage{}".format(sf.stage)
diff --git a/python/dune/perftool/sumfact/symbolic.py b/python/dune/perftool/sumfact/symbolic.py
index be90a1dc..45d6d0cf 100644
--- a/python/dune/perftool/sumfact/symbolic.py
+++ b/python/dune/perftool/sumfact/symbolic.py
@@ -282,10 +282,11 @@ class SumfactKernel(SumfactKernelBase, ImmutableRecord, prim.Variable):
     def function_key(self):
         """ Kernels sharing this key may use the same kernel implementation function """
         fastdg = ()
-        if self.stage == 1:
-            fastdg = (self.input.element, self.input.element_index)
-        if self.stage == 3:
-            fastdg = (self.output.test_element, self.output.test_element_index, self.output.trial_element, self.output.trial_element_index)
+        if get_form_option("fastdg"):
+            if self.stage == 1:
+                fastdg = (self.input.element, self.input.element_index)
+            if self.stage == 3:
+                fastdg = (self.output.test_element, self.output.test_element_index, self.output.trial_element, self.output.trial_element_index)
         return tuple(str(m) for m in self.matrix_sequence) + fastdg
 
     @property
-- 
GitLab