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