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