From fd3fe07c747b922e13477d5fe8addc20103ded4f Mon Sep 17 00:00:00 2001
From: Marcel Koch <marcel.koch@uni-muenster.de>
Date: Mon, 21 Jan 2019 10:57:29 +0100
Subject: [PATCH] use mixin to get quadrature inames

---
 python/dune/codegen/blockstructured/geometry.py   | 8 ++++----
 python/dune/codegen/blockstructured/quadrature.py | 8 ++++++--
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/python/dune/codegen/blockstructured/geometry.py b/python/dune/codegen/blockstructured/geometry.py
index f19202ec..a2bfd1de 100644
--- a/python/dune/codegen/blockstructured/geometry.py
+++ b/python/dune/codegen/blockstructured/geometry.py
@@ -307,7 +307,7 @@ def name_jacobian_inverse_transposed(restriction):
 
 
 # translate a point in the micro element into macro coordinates
-def define_point_in_macro(name, point_in_micro):
+def define_point_in_macro(name, point_in_micro, visitor):
     dim = local_dimension()
     if get_form_option('vectorization_blockstructured'):
         temporary_variable(name, shape=(dim,), managed=True)
@@ -327,17 +327,17 @@ def define_point_in_macro(name, point_in_micro):
         # TODO relax within inames
         instruction(assignee=prim.Subscript(prim.Variable(name), (i,)),
                     expression=expr,
-                    within_inames=frozenset(subelem_inames + get_backend(interface="quad_inames")()),
+                    within_inames=frozenset(subelem_inames + visitor.quadrature_inames()),
                     tags=frozenset({subelem_inames[i]})
                     )
 
 
 # TODO add subelem inames if this function gets called
 # TODO change input parameter to string
-def name_point_in_macro(point_in_micro):
+def name_point_in_macro(point_in_micro, visitor):
     assert isinstance(point_in_micro, prim.Expression)
     name = get_pymbolic_basename(point_in_micro) + "_macro"
-    define_point_in_macro(name, point_in_micro)
+    define_point_in_macro(name, point_in_micro, visitor)
     return name
 
 
diff --git a/python/dune/codegen/blockstructured/quadrature.py b/python/dune/codegen/blockstructured/quadrature.py
index d2875435..f69ddae8 100644
--- a/python/dune/codegen/blockstructured/quadrature.py
+++ b/python/dune/codegen/blockstructured/quadrature.py
@@ -8,9 +8,13 @@ import pymbolic.primitives as prim
 
 @quadrature_mixin("blockstructured")
 class BlockstructuredQuadratureMixin(GenericQuadratureMixin):
-    def quadrature_position(self):
+    def quadrature_position(self, index=None):
         original = GenericQuadratureMixin.quadrature_position(self)
-        return prim.Variable(name_point_in_macro(original))
+        qp =  prim.Variable(name_point_in_macro(original, self), )
+        if index is not None:
+            return prim.Subscript(qp, (index,))
+        else:
+            return qp
 
 #
 # @backend(interface="quad_pos", name='blockstructured')
-- 
GitLab