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