From 15b8a14f3b492518c3da001549a798ea71593dd8 Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Fri, 2 Feb 2018 10:32:21 +0100
Subject: [PATCH] Move grid function evaluation to its own module

---
 python/dune/perftool/pdelab/__init__.py |  2 +-
 python/dune/perftool/pdelab/basis.py    | 52 --------------------
 python/dune/perftool/pdelab/function.py | 63 +++++++++++++++++++++++++
 3 files changed, 64 insertions(+), 53 deletions(-)
 create mode 100644 python/dune/perftool/pdelab/function.py

diff --git a/python/dune/perftool/pdelab/__init__.py b/python/dune/perftool/pdelab/__init__.py
index 0cb1ef2f..d3153ca0 100644
--- a/python/dune/perftool/pdelab/__init__.py
+++ b/python/dune/perftool/pdelab/__init__.py
@@ -12,8 +12,8 @@ from dune.perftool.pdelab.argument import (pymbolic_apply_function,
                                            )
 from dune.perftool.pdelab.basis import (pymbolic_basis,
                                         pymbolic_reference_gradient,
-                                        pymbolic_gridfunction,
                                         )
+from dune.perftool.pdelab.function import pymbolic_gridfunction
 from dune.perftool.pdelab.geometry import (component_iname,
                                            pymbolic_cell_volume,
                                            pymbolic_facet_area,
diff --git a/python/dune/perftool/pdelab/basis.py b/python/dune/perftool/pdelab/basis.py
index b786c3be..d4db8834 100644
--- a/python/dune/perftool/pdelab/basis.py
+++ b/python/dune/perftool/pdelab/basis.py
@@ -229,55 +229,3 @@ def evaluate_coefficient_gradient(visitor, element, name, container, restriction
                 forced_iname_deps=frozenset(get_backend("quad_inames")()).union(frozenset({dimindex})),
                 forced_iname_deps_is_final=True,
                 )
-
-
-def local_gridfunction(coeff, restriction, diffOrder):
-    from dune.perftool.pdelab.localoperator import name_gridfunction_member
-    gf = name_gridfunction_member(coeff, diffOrder)
-    name = "{}_local".format(gf)
-    define_local_gridfunction(name, gf)
-    bind_gridfunction_to_element(name, restriction)
-    return name
-
-
-@preamble
-def define_local_gridfunction(name, gf):
-    return "auto {} = localFunction({});".format(name, gf)
-
-
-@preamble
-def bind_gridfunction_to_element(gf, restriction):
-    element = name_cell(restriction)
-    return "{}.bind({});".format(gf, element)
-
-
-def declare_grid_function_range(gridfunction):
-    def _decl(name, *args):
-        return "typename decltype({})::Range {};".format(gridfunction, name)
-
-    return _decl
-
-@kernel_cached
-def pymbolic_evaluate_gridfunction(name, coeff, restriction, grad):
-    diffOrder = 1 if grad else 0
-
-    gridfunction = local_gridfunction(coeff, restriction, diffOrder)
-
-    temporary_variable(name,
-                       shape=(1,) + (world_dimension(),) * diffOrder,
-                       decl_method=declare_grid_function_range(gridfunction),
-                       managed=False,
-                       )
-
-    quadpos = get_backend(interface="qp_in_cell")(restriction)
-    instruction(code="{} = {}({});".format(name, gridfunction, quadpos),
-                assignees=frozenset({name}),
-                within_inames=frozenset(get_backend(interface="quad_inames")()),
-                within_inames_is_final=True,
-                )
-
-
-def pymbolic_gridfunction(coeff, restriction, grad):
-    name = "coeff{}{}".format(coeff.count(), "_grad" if grad else "")
-    pymbolic_evaluate_gridfunction(name, coeff, restriction, grad)
-    return Subscript(Variable(name), (0,))
diff --git a/python/dune/perftool/pdelab/function.py b/python/dune/perftool/pdelab/function.py
new file mode 100644
index 00000000..d5949988
--- /dev/null
+++ b/python/dune/perftool/pdelab/function.py
@@ -0,0 +1,63 @@
+from dune.perftool.generation import (get_backend,
+                                      instruction,
+                                      kernel_cached,
+                                      preamble,
+                                      temporary_variable,
+                                      )
+from dune.perftool.pdelab.geometry import (name_cell,
+                                           world_dimension,
+                                           )
+from dune.perftool.pdelab.localoperator import name_gridfunction_member
+
+import pymbolic.primitives as prim
+
+
+def local_gridfunction(coeff, restriction, diffOrder):
+    gf = name_gridfunction_member(coeff, diffOrder)
+    name = "{}_local".format(gf)
+    define_local_gridfunction(name, gf)
+    bind_gridfunction_to_element(name, restriction)
+    return name
+
+
+@preamble
+def define_local_gridfunction(name, gf):
+    return "auto {} = localFunction({});".format(name, gf)
+
+
+@preamble
+def bind_gridfunction_to_element(gf, restriction):
+    element = name_cell(restriction)
+    return "{}.bind({});".format(gf, element)
+
+
+def declare_grid_function_range(gridfunction):
+    def _decl(name, *args):
+        return "typename decltype({})::Range {};".format(gridfunction, name)
+
+    return _decl
+
+@kernel_cached
+def pymbolic_evaluate_gridfunction(name, coeff, restriction, grad):
+    diffOrder = 1 if grad else 0
+
+    gridfunction = local_gridfunction(coeff, restriction, diffOrder)
+
+    temporary_variable(name,
+                       shape=(1,) + (world_dimension(),) * diffOrder,
+                       decl_method=declare_grid_function_range(gridfunction),
+                       managed=False,
+                       )
+
+    quadpos = get_backend(interface="qp_in_cell")(restriction)
+    instruction(code="{} = {}({});".format(name, gridfunction, quadpos),
+                assignees=frozenset({name}),
+                within_inames=frozenset(get_backend(interface="quad_inames")()),
+                within_inames_is_final=True,
+                )
+
+
+def pymbolic_gridfunction(coeff, restriction, grad):
+    name = "coeff{}{}".format(coeff.count(), "_grad" if grad else "")
+    pymbolic_evaluate_gridfunction(name, coeff, restriction, grad)
+    return prim.Subscript(prim.Variable(name), (0,))
-- 
GitLab