From 7d3a643f38d4be1aa5949c46ccef193e2653e371 Mon Sep 17 00:00:00 2001
From: Marcel Koch <marcel.koch@uni-muenster.de>
Date: Mon, 18 Feb 2019 13:49:46 +0100
Subject: [PATCH] restore old code path for matrices > 3x3

---
 python/dune/codegen/pdelab/tensors.py | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/python/dune/codegen/pdelab/tensors.py b/python/dune/codegen/pdelab/tensors.py
index 6c6c5591..70a0115d 100644
--- a/python/dune/codegen/pdelab/tensors.py
+++ b/python/dune/codegen/pdelab/tensors.py
@@ -123,12 +123,6 @@ def name_matrix_inverse(name, shape, visitor):
     return name_inv
 
 
-def matrix_inverse(name, shape, visitor):
-    name_inv = name_matrix_inverse(name, shape, visitor)
-
-    return prim.Variable(name_inv)
-
-
 def define_assembled_tensor(name, expr, visitor):
     temporary_variable(name,
                        shape=expr.ufl_shape,
@@ -157,6 +151,18 @@ def pymbolic_matrix_inverse(o, visitor):
     indices = visitor.indices
     visitor.indices = None
     name = name_assembled_tensor(expr, visitor)
+
+    if expr.shape[0] <= 3:
+        name = name_matrix_inverse(name, expr.ufl_shape, visitor)
+    else:
+        instruction(code="{}.invert();".format(name),
+                    within_inames=frozenset(visitor.quadrature_inames()),
+                    depends_on=frozenset({lp.match.Writes(name),
+                                          lp.match.Tagged("sumfact_stage1"),
+                                          }),
+                    tags=frozenset({"quad"}),
+                    )
+
     visitor.indices = indices
 
-    return matrix_inverse(name, expr.ufl_shape, visitor)
+    return prim.Variable(name)
-- 
GitLab