From ed81ca1ba1cd05e93a5aa382131b9ca1b1ee77c6 Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Fri, 9 Sep 2016 14:13:44 +0200
Subject: [PATCH] [bugfix] only arguments should introduce dimension index
 aliases

---
 python/dune/perftool/ufl/dimensionindex.py | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/python/dune/perftool/ufl/dimensionindex.py b/python/dune/perftool/ufl/dimensionindex.py
index e5fb3e9f..62651b21 100644
--- a/python/dune/perftool/ufl/dimensionindex.py
+++ b/python/dune/perftool/ufl/dimensionindex.py
@@ -9,6 +9,7 @@ class _DimensionIndexMapping(MultiFunction):
     def __call__(self, o):
         self.shape = 0
         self.dimension_index_dict = {}
+        self.component = None
         self.call(o)
 
         return self.dimension_index_dict
@@ -18,12 +19,15 @@ class _DimensionIndexMapping(MultiFunction):
             self.call(op)
 
     def function_view(self, o):
-        from ufl.functionview import select_subelement
-        subelement = select_subelement(o.ufl_operands[0].ufl_element(), o.ufl_operands[1])
-        self.shape = len(subelement.value_shape())
+        self.component = o.ufl_operands[1]
+        self.call(o.ufl_operands[0])
+        self.component = None
 
-    def coefficient(self, o):
-        self.shape = len(o.ufl_element().value_shape())
+    def argument(self, o):
+        if self.component:
+            from ufl.functionview import select_subelement
+            subelement = select_subelement(o.ufl_element(), self.component)
+            self.shape = len(subelement.value_shape())
 
     def indexed(self, o):
         self.call(o.ufl_operands[0])
-- 
GitLab