From ad360799e33ff7a8eee62a57b3c28a2dcc93844e Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Tue, 17 Jan 2017 14:08:18 +0100
Subject: [PATCH] Implement ListTensors with dimension > 1.

---
 python/dune/perftool/pdelab/tensors.py | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/python/dune/perftool/pdelab/tensors.py b/python/dune/perftool/pdelab/tensors.py
index 16cf6bb6..0b5789ce 100644
--- a/python/dune/perftool/pdelab/tensors.py
+++ b/python/dune/perftool/pdelab/tensors.py
@@ -10,10 +10,14 @@ import pymbolic.primitives as prim
 import numpy as np
 
 
-def define_list_tensor(name, expr, visitor):
+def define_list_tensor(name, expr, visitor, stack=()):
     for i, child in enumerate(expr.ufl_operands):
-        instruction(assignee=prim.Subscript(prim.Variable(name), (i,)),
-                    expression=visitor.call(child))
+        from ufl.classes import ListTensor
+        if isinstance(child, ListTensor):
+            define_list_tensor(name, child, visitor, stack=stack + (i,))
+        else:
+            instruction(assignee=prim.Subscript(prim.Variable(name), stack + (i,)),
+                        expression=visitor.call(child))
 
 
 @kernel_cached
@@ -22,6 +26,7 @@ def pymbolic_list_tensor(expr, visitor):
     temporary_variable(name,
                        shape=expr.ufl_shape,
                        dtype=np.float64,
+                       managed=True,
                        )
     define_list_tensor(name, expr, visitor)
     return prim.Variable(name)
-- 
GitLab