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