From fa93ccf197e9fff622b6b54a14b8dc7fc266462d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene.hess@iwr.uni-heidelberg.de> Date: Mon, 17 Dec 2018 15:41:50 +0100 Subject: [PATCH] [skip ci] Key-wordify sumfact interface classes --- python/dune/codegen/sumfact/accumulation.py | 5 +++-- python/dune/codegen/sumfact/basis.py | 7 ++++--- python/dune/codegen/sumfact/geometry.py | 15 +++++++++++---- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/python/dune/codegen/sumfact/accumulation.py b/python/dune/codegen/sumfact/accumulation.py index 89c43c0b..4219ba26 100644 --- a/python/dune/codegen/sumfact/accumulation.py +++ b/python/dune/codegen/sumfact/accumulation.py @@ -93,7 +93,7 @@ def accum_iname(element, bound, i): class AccumulationOutput(SumfactKernelInterfaceBase, ImmutableRecord): def __init__(self, - matrix_sequence, + matrix_sequence=None, accumvar=None, restriction=None, test_element=None, @@ -116,6 +116,7 @@ class AccumulationOutput(SumfactKernelInterfaceBase, ImmutableRecord): cost_permutation = sumfact_cost_permutation_strategy(matrix_sequence, self.stage) # TODO: Isnt accumvar superfluous in the presence of all the other infos? + # Note: Do not put matrix_sequence into the Record. That screws up the vectorization strategy! ImmutableRecord.__init__(self, accumvar=accumvar, restriction=restriction, @@ -505,7 +506,7 @@ def generate_accumulation_instruction(expr, visitor): if priority is None: priority = 3 - output = AccumulationOutput(matrix_sequence, + output = AccumulationOutput(matrix_sequence=matrix_sequence, accumvar=accumvar, restriction=(test_info.restriction, trial_info.restriction), test_element=test_info.element, diff --git a/python/dune/codegen/sumfact/basis.py b/python/dune/codegen/sumfact/basis.py index a856c5a9..fb0b905f 100644 --- a/python/dune/codegen/sumfact/basis.py +++ b/python/dune/codegen/sumfact/basis.py @@ -59,7 +59,7 @@ import pymbolic.primitives as prim class LFSSumfactKernelInput(SumfactKernelInterfaceBase, ImmutableRecord): def __init__(self, - matrix_sequence, + matrix_sequence=None, coeff_func=None, element=None, element_index=0, @@ -78,6 +78,7 @@ class LFSSumfactKernelInput(SumfactKernelInterfaceBase, ImmutableRecord): matrix_sequence = permute_forward(matrix_sequence, quadrature_permutation) cost_permutation = sumfact_cost_permutation_strategy(matrix_sequence, self.stage) + # Note: Do not put matrix_sequence into the Record. That screws up the vectorization strategy! ImmutableRecord.__init__(self, coeff_func=coeff_func, element=element, @@ -265,7 +266,7 @@ def pymbolic_coefficient_gradient(element, restriction, index, coeff_func, visit basis_size=basis_size, ) - inp = LFSSumfactKernelInput(matrix_sequence, + inp = LFSSumfactKernelInput(matrix_sequence=matrix_sequence, coeff_func=coeff_func, element=element, element_index=index, @@ -309,7 +310,7 @@ def pymbolic_coefficient(element, restriction, index, coeff_func, visitor): facemod=get_facemod(restriction), basis_size=basis_size) - inp = LFSSumfactKernelInput(matrix_sequence, + inp = LFSSumfactKernelInput(matrix_sequence=matrix_sequence, coeff_func=coeff_func, element=element, element_index=index, diff --git a/python/dune/codegen/sumfact/geometry.py b/python/dune/codegen/sumfact/geometry.py index 8b714a41..7de23836 100644 --- a/python/dune/codegen/sumfact/geometry.py +++ b/python/dune/codegen/sumfact/geometry.py @@ -62,7 +62,10 @@ def global_corner_iname(restriction): class GeoCornersInput(SumfactKernelInterfaceBase, ImmutableRecord): - def __init__(self, matrix_sequence, direction, restriction): + def __init__(self, + matrix_sequence=None, + direction=None, + restriction=None): """Base class for sum-factorized evaluation of geometry mappings At the moment we only do this for cells and not faces. For @@ -86,6 +89,7 @@ class GeoCornersInput(SumfactKernelInterfaceBase, ImmutableRecord): matrix_sequence = permute_forward(matrix_sequence, quadrature_permutation) cost_permutation = sumfact_cost_permutation_strategy(matrix_sequence, self.stage) + # Note: Do not put matrix_sequence into the Record. That screws up the vectorization strategy! ImmutableRecord.__init__(self, direction=direction, restriction=restriction, @@ -213,7 +217,9 @@ def pymbolic_spatial_coordinate_multilinear(do_predicates, visitor): matrix_sequence = construct_basis_matrix_sequence(facedir=get_facedir(restriction), facemod=get_facemod(restriction), basis_size=(2,) * world_dimension()) - inp = GeoCornersInput(matrix_sequence, visitor.indices[0], restriction) + inp = GeoCornersInput(matrix_sequence=matrix_sequence, + direction=visitor.indices[0], + restriction=restriction) sf = SumfactKernel(matrix_sequence=matrix_sequence, interface=inp, ) @@ -590,8 +596,9 @@ def _name_jacobian(i, j, restriction, visitor): basis_size=(2,) * world_dimension()) # Sum factorization input for the i'th component of the geometry mapping - inp = GeoCornersInput(matrix_sequence, i, restriction) - + inp = GeoCornersInput(matrix_sequence=matrix_sequence, + direction=i, + restriction=restriction) sf = SumfactKernel(matrix_sequence=matrix_sequence, interface=inp, ) -- GitLab