From c412ba7fea5d405430ddb18ef1c90273c628b279 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene.hess@iwr.uni-heidelberg.de>
Date: Tue, 10 Jul 2018 10:42:25 +0200
Subject: [PATCH] Make quadrature_preamble a backend function

---
 python/dune/perftool/pdelab/geometry.py   | 46 ++++++++++++-----------
 python/dune/perftool/pdelab/quadrature.py |  1 +
 2 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/python/dune/perftool/pdelab/geometry.py b/python/dune/perftool/pdelab/geometry.py
index 80ab0387..e3026745 100644
--- a/python/dune/perftool/pdelab/geometry.py
+++ b/python/dune/perftool/pdelab/geometry.py
@@ -204,14 +204,14 @@ def name_in_cell_geometry(restriction):
 # TODO is it always necessary to add quadrature inames?
 def apply_in_cell_transformation(name, local, restriction):
     geo = name_in_cell_geometry(restriction)
-    return quadrature_preamble("{} = {}.global({});".format(name,
-                                                            geo,
-                                                            str(local),
-                                                            ),
-                               assignees=frozenset({name}),
-                               read_variables=frozenset({get_pymbolic_basename(local)}),
-                               depends_on=frozenset({Writes(get_pymbolic_basename(local))}),
-                               )
+    return get_backend("quadrature_preamble")("{} = {}.global({});".format(name,
+                                                                           geo,
+                                                                           str(local),
+                                                                           ),
+                                              assignees=frozenset({name}),
+                                              read_variables=frozenset({get_pymbolic_basename(local)}),
+                                              depends_on=frozenset({Writes(get_pymbolic_basename(local))}),
+                                              )
 
 
 def pymbolic_in_cell_coordinates(local, restriction):
@@ -339,14 +339,15 @@ def define_jacobian_inverse_transposed(name, restriction):
     temporary_variable(name, decl_method=define_jacobian_inverse_transposed_temporary(restriction), shape=(dim, dim))
     geo = name_cell_geometry(restriction)
     pos = get_backend("qp_in_cell", selector=option_switch(("blockstructured", "sumfact")))(restriction)
-    return quadrature_preamble("{} = {}.jacobianInverseTransposed({});".format(name,
-                                                                               geo,
-                                                                               str(pos),
-                                                                               ),
-                               assignees=frozenset({name}),
-                               read_variables=frozenset({get_pymbolic_basename(pos)}),
-                               depends_on=frozenset({Writes(get_pymbolic_basename(pos))}),
-                               )
+
+    return get_backend("quadrature_preamble")("{} = {}.jacobianInverseTransposed({});".format(name,
+                                                                                              geo,
+                                                                                              str(pos),
+                                                                                              ),
+                                              assignees=frozenset({name}),
+                                              read_variables=frozenset({get_pymbolic_basename(pos)}),
+                                              depends_on=frozenset({Writes(get_pymbolic_basename(pos))}),
+                                              )
 
 
 @backend(interface="name_jit", name="default")
@@ -390,16 +391,17 @@ def define_constant_jacobian_determinant(name):
 def define_jacobian_determinant(name):
     temporary_variable(name, shape=())
     geo = name_geometry()
-    pos = get_backend("quad_pos", selector=option_switch("blockstructured"))()
+    pos = get_backend("quad_pos", selector=option_switch(("blockstructured", "sumfact")))()
     code = "{} = {}.integrationElement({});".format(name,
                                                     geo,
                                                     str(pos),
                                                     )
-    return quadrature_preamble(code,
-                               assignees=frozenset({name}),
-                               read_variables=frozenset({get_pymbolic_basename(pos)}),
-                               depends_on=frozenset({Writes(get_pymbolic_basename(pos))}),
-                               )
+
+    return get_backend("quadrature_preamble")(code,
+                                              assignees=frozenset({name}),
+                                              read_variables=frozenset({get_pymbolic_basename(pos)}),
+                                              depends_on=frozenset({Writes(get_pymbolic_basename(pos))}),
+                                              )
 
 
 @backend(interface="fdetjac", name="constant_transformation_matrix")
diff --git a/python/dune/perftool/pdelab/quadrature.py b/python/dune/perftool/pdelab/quadrature.py
index 031d97b0..61008799 100644
--- a/python/dune/perftool/pdelab/quadrature.py
+++ b/python/dune/perftool/pdelab/quadrature.py
@@ -61,6 +61,7 @@ def quadrature_inames():
     return (quadrature_iname(),)
 
 
+@backend(interface="quadrature_preamble")
 def quadrature_preamble(code, **kw):
     kw['tags'] = kw.get('tags', frozenset({})).union(frozenset({"quad"}))
     return instruction(inames=get_backend(interface="quad_inames")(), code=code, **kw)
-- 
GitLab