From cfefc59d5608a31a60af39b9a8b1c605c70c0438 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene.hess@iwr.uni-heidelberg.de>
Date: Thu, 18 Aug 2016 17:16:35 +0200
Subject: [PATCH] Operator file names by index

---
 python/dune/perftool/compile.py              | 36 ++++++++++----------
 python/dune/perftool/pdelab/localoperator.py | 16 +++++++--
 test/heatequation/heatequation.ufl           |  8 +++--
 3 files changed, 36 insertions(+), 24 deletions(-)

diff --git a/python/dune/perftool/compile.py b/python/dune/perftool/compile.py
index 2284e14a..452aec89 100644
--- a/python/dune/perftool/compile.py
+++ b/python/dune/perftool/compile.py
@@ -90,21 +90,21 @@ def compile_form():
             with cache_context('driver', delete=True):
                 generate_driver(formdatas[0].preprocessed_form, get_option("driver_file"))
 
-        # Generate local operator files
-        for formdata in formdatas:
-            with global_context(formdata=formdata):
-                if get_option("operator_file"):
-                    from dune.perftool.pdelab.localoperator import generate_localoperator_kernels
-                    kernels = generate_localoperator_kernels(formdata, data)
-
-                # TODO insert sophisticated analysis/feedback loops here
-                if get_option("interactive"):
-                    from dune.perftool.interactive import start_interactive_session
-                    start_interactive_session(kernels)
-
-                if get_option("operator_file"):
-                    from dune.perftool.pdelab.localoperator import name_localoperator_file
-                    filename = name_localoperator_file(formdata, data)
-
-                    from dune.perftool.pdelab.localoperator import generate_localoperator_file
-                    generate_localoperator_file(kernels, filename)
+    # Generate local operator files
+    for formdata in formdatas:
+        with global_context(data=data, formdata=formdata):
+            if get_option("operator_file"):
+                from dune.perftool.pdelab.localoperator import generate_localoperator_kernels
+                kernels = generate_localoperator_kernels(formdata, data)
+
+            # TODO insert sophisticated analysis/feedback loops here
+            if get_option("interactive"):
+                from dune.perftool.interactive import start_interactive_session
+                start_interactive_session(kernels)
+
+            if get_option("operator_file"):
+                from dune.perftool.pdelab.localoperator import name_localoperator_file
+                filename = name_localoperator_file(formdata, data)
+
+                from dune.perftool.pdelab.localoperator import generate_localoperator_file
+                generate_localoperator_file(kernels, filename)
diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index a072bc9d..cf5bf30b 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -19,12 +19,22 @@ from dune.perftool.cgen.clazz import (AccessModifier,
 from dune.perftool import Restriction
 
 
-def name_localoperator_file(formdata, data):
+def name_form(formdata, data):
     # Check wether the formdata has a name in UFL
     try:
-        suffix = '_' + data.object_names[id(formdata.original_form)]
+        name = data.object_names[id(formdata.original_form)]
+        return name
     except:
-        suffix = ''
+        for index, form in enumerate(data.forms):
+            if formdata.preprocessed_form.equals(form):
+                name = str(index)
+                return name
+    # If the form has no name and can not be found in data.forms something went wrong
+    assert False
+
+
+def name_localoperator_file(formdata, data):
+    suffix = '_' + name_form(formdata, data)
     from dune.perftool.options import get_option
     basename, extension = splitext(get_option("operator_file"))
     filename = basename + suffix + extension
diff --git a/test/heatequation/heatequation.ufl b/test/heatequation/heatequation.ufl
index 922c3276..8392d99e 100644
--- a/test/heatequation/heatequation.ufl
+++ b/test/heatequation/heatequation.ufl
@@ -5,7 +5,9 @@ V = FiniteElement("CG", "triangle", 1, dirichlet_expression=g)
 u = TrialFunction(V)
 v = TestFunction(V)
 
-mass = (u*v)*dx
-poisson = (inner(grad(u), grad(v)) - f*v)*dx
+# mass = (u*v)*dx
+# poisson = (inner(grad(u), grad(v)) - f*v)*dx
 
-forms = [poisson,mass]
+# forms = [poisson,mass]
+
+forms = [(u*v)*dx,(inner(grad(u), grad(v)) - f*v)*dx]
\ No newline at end of file
-- 
GitLab