From 82fecff990dbc9ba609462e18452964a0a57a812 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene.hess@iwr.uni-heidelberg.de>
Date: Mon, 10 Oct 2016 10:46:25 +0200
Subject: [PATCH] Use estimade degrees from metadata

---
 patches/ufl/ufl.patch                        | 30 --------------------
 python/dune/perftool/pdelab/localoperator.py |  7 +++--
 python/dune/perftool/pdelab/quadrature.py    |  4 +--
 3 files changed, 6 insertions(+), 35 deletions(-)
 delete mode 100644 patches/ufl/ufl.patch

diff --git a/patches/ufl/ufl.patch b/patches/ufl/ufl.patch
deleted file mode 100644
index 9680ee42..00000000
--- a/patches/ufl/ufl.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 7f4831b0b8220365ca4427922fcbeba07e934b5f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene.hess@iwr.uni-heidelberg.de>
-Date: Fri, 7 Oct 2016 14:34:38 +0200
-Subject: [PATCH] Function view degree estimation for ReferenceValue
-
----
- ufl/algorithms/estimate_degrees.py | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/ufl/algorithms/estimate_degrees.py b/ufl/algorithms/estimate_degrees.py
-index caa9f19..d2d4e69 100644
---- a/ufl/algorithms/estimate_degrees.py
-+++ b/ufl/algorithms/estimate_degrees.py
-@@ -76,7 +76,12 @@ class SumDegreeEstimator(MultiFunction):
-     def function_view(self, v, a, i):
-         # TODO How would the element_replace_map interfere with the function_view class?
-         from ufl.functionview import select_subelement
--        return select_subelement(v.ufl_operands[0].ufl_element(), v.ufl_operands[1]).degree()
-+        from ufl.referencevalue import ReferenceValue
-+        if isinstance(v.ufl_operands[0], ReferenceValue):
-+            return select_subelement(v.ufl_operands[0].ufl_operands[0].ufl_element(), v.ufl_operands[1]).degree()
-+        else:
-+            return select_subelement(v.ufl_operands[0].ufl_element(), v.ufl_operands[1]).degree()
-+
- 
-     def _reduce_degree(self, v, f):
-         """Reduces the estimated degree by one; used when derivatives
--- 
-2.9.3
-
diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index b7ad0e72..2c49b7e3 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -429,7 +429,8 @@ def generate_localoperator_kernels(formdata, data):
     include_file('dune/pdelab/localoperator/flags.hh', filetag="operatorfile")
     include_file('dune/pdelab/localoperator/pattern.hh', filetag="operatorfile")
 
-    # Trigger this one once early on to avoid wrong stuff happening
+    # Trigger this one once early on to assure that template
+    # parameters are set in the right order
     localoperator_basename(formdata, data)
     lop_template_ansatz_gfs()
     lop_template_test_gfs()
@@ -443,11 +444,13 @@ def generate_localoperator_kernels(formdata, data):
     from dune.perftool.pdelab.parameter import name_paramclass
     name_paramclass()
 
+    # Add right base classes for stationary/instationary operators
     base_class('Dune::PDELab::LocalOperatorDefaultFlags', classtag="operator")
     from dune.perftool.pdelab.driver import is_stationary
     if not is_stationary():
         rf = lop_template_range_field()
-        base_class('Dune::PDELab::InstationaryLocalOperatorDefaultMethods<{}>'.format(rf), classtag="operator")
+        base_class('Dune::PDELab::InstationaryLocalOperatorDefaultMethods<{}>'
+                   .format(rf), classtag="operator")
 
         # Create set time method in parameter class
         from dune.perftool.pdelab.parameter import define_set_time_method
diff --git a/python/dune/perftool/pdelab/quadrature.py b/python/dune/perftool/pdelab/quadrature.py
index 64f015ed..bf943177 100644
--- a/python/dune/perftool/pdelab/quadrature.py
+++ b/python/dune/perftool/pdelab/quadrature.py
@@ -1,5 +1,3 @@
-from ufl.algorithms import estimate_total_polynomial_degree
-
 from dune.perftool import Restriction
 from dune.perftool.generation import (cached,
                                       domain,
@@ -81,7 +79,7 @@ def estimate_quadrature_order():
     integrals = form.integrals_by_type(integral_type)
     polynomial_degree = 0
     for i in integrals:
-        polynomial_degree = max(polynomial_degree, estimate_total_polynomial_degree(i))
+        polynomial_degree = max(polynomial_degree, i.metadata()['estimated_polynomial_degree'])
 
     # Note: In PDELab quadrature order m means that integration of
     # polynomials of degree m is exact.
-- 
GitLab