From 01d103c2a1b4178ab83cee36257021f7bbbfda9b Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Fri, 24 Nov 2017 09:29:52 +0100
Subject: [PATCH] Beautify the storage mechanism of custom quadrature order a
 bit

Still not beautiful...
---
 python/dune/perftool/pdelab/localoperator.py  |  4 ++++
 python/dune/perftool/sumfact/tabulation.py    | 17 ++++++++++-------
 python/dune/perftool/sumfact/vectorization.py |  4 ++--
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index 853ca80c..7a9f4169 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -471,6 +471,10 @@ def generate_kernel(integrals):
     knl = extract_kernel_from_cache("kernel_default")
     delete_cache_items("kernel_default")
 
+    # Reset the quadrature degree
+    from dune.perftool.sumfact.tabulation import set_quadrature_points
+    set_quadrature_points(None)
+
     # Clean the cache from any data collected after the dry run
     delete_cache_items("dryrundata")
 
diff --git a/python/dune/perftool/sumfact/tabulation.py b/python/dune/perftool/sumfact/tabulation.py
index b56ac462..e9af4d94 100644
--- a/python/dune/perftool/sumfact/tabulation.py
+++ b/python/dune/perftool/sumfact/tabulation.py
@@ -206,16 +206,19 @@ class BasisTabulationMatrixArray(BasisTabulationMatrixBase):
         return True
 
 
-@generator_factory(context_tags=("kernel",),
-                   cache_key_generator=lambda q: 0 if q is None else 1)
-def set_quadrature_points_per_direction(quad):
-    return quad
+_quad = None
+
+
+def set_quadrature_points(quad):
+    assert quad is None or isinstance(quad, tuple)
+    global _quad
+    _quad = quad
 
 
 def quadrature_points_per_direction():
-    custom = set_quadrature_points_per_direction(None)
-    if custom is not None:
-        return custom
+    global _quad
+    if _quad is not None:
+        return _quad
 
     # Quadrature order per direction
     q = quadrature_order()
diff --git a/python/dune/perftool/sumfact/vectorization.py b/python/dune/perftool/sumfact/vectorization.py
index af92c696..a8cd0189 100644
--- a/python/dune/perftool/sumfact/vectorization.py
+++ b/python/dune/perftool/sumfact/vectorization.py
@@ -13,7 +13,7 @@ from dune.perftool.pdelab.restriction import (Restriction,
                                               )
 from dune.perftool.sumfact.tabulation import (BasisTabulationMatrixArray,
                                               quadrature_points_per_direction,
-                                              set_quadrature_points_per_direction,
+                                              set_quadrature_points,
                                               )
 from dune.perftool.error import PerftoolError
 from dune.perftool.options import get_option
@@ -74,7 +74,7 @@ def vertical_vectorization_strategy(sumfact, depth):
             elif get_option("vectorize_allow_quadrature_changes") and mat.quadrature_size != 1:
                 quad = list(quadrature_points_per_direction())
                 quad[i] = round_to_multiple(quad[i], depth)
-                set_quadrature_points_per_direction(tuple(quad))
+                set_quadrature_points(tuple(quad))
                 return i
             elif mat.quadrature_size != 1:
                 raise PerftoolError("Vertical vectorization is not possible!")
-- 
GitLab