From d2ca550ff23758e6f81282c77c851f15d79ac445 Mon Sep 17 00:00:00 2001
From: Marcel Koch <marcel.koch@uni-muenster.de>
Date: Tue, 16 Oct 2018 11:36:31 +0200
Subject: [PATCH] reworking some inames

---
 .../dune/perftool/blockstructured/geometry.py | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/python/dune/perftool/blockstructured/geometry.py b/python/dune/perftool/blockstructured/geometry.py
index 489b3b14..aa19404c 100644
--- a/python/dune/perftool/blockstructured/geometry.py
+++ b/python/dune/perftool/blockstructured/geometry.py
@@ -5,7 +5,7 @@ from dune.perftool.generation import (get_backend,
                                       instruction)
 from dune.perftool.tools import get_pymbolic_basename
 from dune.perftool.options import (get_form_option,
-                                   option_switch)
+                                   option_switch, get_option)
 from dune.perftool.pdelab.geometry import (world_dimension,
                                            local_dimension,
                                            apply_to_global_transformation,
@@ -17,6 +17,7 @@ import pymbolic.primitives as prim
 from loopy.match import Writes
 
 
+# TODO warum muss within_inames_is_final=True gesetzt werden?
 def compute_corner_diff(first, second, additional_terms=tuple()):
     corners = name_element_corners()
     simplified_names = tuple("cd" + n.split('_')[2] + n.split('_')[3] for n in additional_terms)
@@ -33,7 +34,8 @@ def compute_corner_diff(first, second, additional_terms=tuple()):
                                      -1 * prim.Subscript(prim.Variable(corners), (second, prim.Variable(diminame))),
                                      -1 * xs_sum)),
                 assignee=prim.Subscript(prim.Variable(name), prim.Variable(diminame)),
-                within_inames=frozenset(), within_inames_is_final=True,
+                within_inames=frozenset({diminame}),
+                within_inames_is_final=True,
                 depends_on=frozenset({Writes(corners)} | {Writes(term) for term in additional_terms}))
     return name
 
@@ -61,7 +63,6 @@ def bilinear_transformation_coefficients():
         raise NotImplementedError()
 
 
-# TODO warum muss within_inames_is_final=True gesetzt werden?
 def compute_jacobian(name):
     pymbolic_pos = get_backend("quad_pos", selector=option_switch("blockstructured"))()
     jac_iname = component_iname(context="jac")
@@ -102,8 +103,7 @@ def compute_jacobian(name):
     for i, expr in enumerate(expr_jac):
         instruction(expression=expr,
                     assignee=prim.Subscript(prim.Variable(name), (prim.Variable(jac_iname), i)),
-                    within_inames=frozenset(sub_element_inames() + get_backend(interface="quad_inames")()),
-                    within_inames_is_final=True,
+                    within_inames=frozenset((jac_iname, ) + sub_element_inames() + get_backend(interface="quad_inames")()),
                     depends_on=frozenset({Writes(get_pymbolic_basename(pymbolic_pos))} | {Writes(cd) for cd in coefficients})
                     )
 
@@ -138,7 +138,6 @@ def compute_determinant(name, matrix):
     instruction(expression=expr_determinant,
                 assignee=prim.Variable(name),
                 within_inames=frozenset(sub_element_inames() + get_backend(interface="quad_inames")()),
-                within_inames_is_final=True,
                 depends_on=frozenset({Writes(matrix)})
                 )
 
@@ -155,7 +154,6 @@ def define_jacobian_determinant_inverse(name):
     return instruction(expression=prim.Quotient(1., prim.Variable(determinant)),
                        assignee=prim.Variable(name),
                        within_inames=frozenset(sub_element_inames() + get_backend(interface="quad_inames")()),
-                       within_inames_is_final=True,
                        depends_on=frozenset({Writes(determinant)})
                        )
 
@@ -166,7 +164,6 @@ def define_jacobian_determinant_abs(name):
     return instruction(expression=prim.Call(prim.Variable("abs"), (prim.Variable(determinant),)),
                        assignee=prim.Variable(name),
                        within_inames=frozenset(sub_element_inames() + get_backend(interface="quad_inames")()),
-                       within_inames_is_final=True,
                        depends_on=frozenset({Writes(determinant)})
                        )
 
@@ -204,7 +201,7 @@ def compute_inverse_transposed(name, det_inv, matrix):
     dim = world_dimension()
     matrix_entry = [[prim.Subscript(prim.Variable(matrix), (i, j)) for j in range(dim)] for i in range(dim)]
     assignee = [[prim.Subscript(prim.Variable(name), (i, j)) for j in range(dim)] for i in range(dim)]
-    exprs = [[None] * dim for _ in range(dim)]
+    exprs = [[None for _ in range(dim)] for _ in range(dim)]
 
     if dim == 2:
         for i in range(2):
@@ -212,8 +209,6 @@ def compute_inverse_transposed(name, det_inv, matrix):
                 sign = 1. if i == j else -1.
                 exprs[i][j] = prim.Product((sign, prim.Variable(det_inv), matrix_entry[1 - i][1 - j]))
     elif dim == 3:
-        exprs = [[None] * 3 for _ in range(3)]
-
         exprs[0][0] = prim.Product((1., prim.Variable(det_inv),
                                     prim.Sum((prim.Product((matrix_entry[1][1], matrix_entry[2][2])),
                                               -1 * prim.Product((matrix_entry[1][2], matrix_entry[2][1]))))))
@@ -302,7 +297,7 @@ 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),
+                    within_inames=frozenset(subelem_inames + get_backend(interface="quad_inames")())
                     )
 
 
-- 
GitLab