From b2e99751776399732d407a70cbb8b8e7fbf0ce5b 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, 22 Aug 2016 11:38:54 +0200
Subject: [PATCH] Give name to forms in heatequation.ufl

---
 python/dune/perftool/compile.py              | 12 +++++++++--
 python/dune/perftool/pdelab/driver.py        |  3 +--
 python/dune/perftool/pdelab/localoperator.py | 21 ++++++++++++++++----
 test/heatequation/heatequation.ufl           |  8 +++-----
 4 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/python/dune/perftool/compile.py b/python/dune/perftool/compile.py
index a40a1782..8e8f9f45 100644
--- a/python/dune/perftool/compile.py
+++ b/python/dune/perftool/compile.py
@@ -90,9 +90,18 @@ def compile_form():
             with cache_context('driver', delete=True):
                 generate_driver(formdatas[0].preprocessed_form, get_option("driver_file"))
 
+    # In case of multiple forms: Genarate one file that includes all localoperator files
+    if len(formdatas) > 1:
+        from dune.perftool.pdelab.localoperator import generate_localoperator_basefile
+        generate_localoperator_basefile(formdatas, data)
+
     # Generate local operator files
-    for formdata in formdatas:
+    for index, formdata in enumerate(formdatas):
         with global_context(data=data, formdata=formdata):
+            # Make sure cache is empty
+            from dune.perftool.generation import delete_cache_items
+            delete_cache_items()
+
             if get_option("operator_file"):
                 from dune.perftool.pdelab.localoperator import generate_localoperator_kernels
                 kernels = generate_localoperator_kernels(formdata, data)
@@ -108,4 +117,3 @@ def compile_form():
 
                 from dune.perftool.pdelab.localoperator import generate_localoperator_file
                 generate_localoperator_file(kernels, filename)
-            break
diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py
index 9a3ad147..011c2dac 100644
--- a/python/dune/perftool/pdelab/driver.py
+++ b/python/dune/perftool/pdelab/driver.py
@@ -610,8 +610,7 @@ def typedef_localoperator(name):
     from dune.perftool.generation import get_global_context_value
     data = get_global_context_value("data")
     formdata = get_global_context_value("formdata")
-    from dune.perftool.pdelab.localoperator import name_localoperator_file
-    filename = name_localoperator_file(formdata, data)
+    filename = get_option("operator_file")
     include_file(filename, filetag="driver")
     from dune.perftool.pdelab.localoperator import localoperator_basename
     lopname = localoperator_basename(formdata, data)
diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index dde94934..b4990c0f 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -34,10 +34,13 @@ def name_form(formdata, data):
 
 
 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
+    if len(data.forms) == 1:
+        filename = get_option("operator_file")
+    else:
+        suffix = '_' + name_form(formdata, data)
+        basename, extension = splitext(get_option("operator_file"))
+        filename = basename + suffix + extension
     return filename
 
 
@@ -128,7 +131,7 @@ def name_initree_member():
 @class_basename("operator")
 def localoperator_basename(formdata, data):
     form_name = name_form(formdata, data)
-    return "LocalOperator"+form_name.capitalize()
+    return "LocalOperator" + form_name.capitalize()
 
 
 def class_type_from_cache(classtag):
@@ -447,3 +450,13 @@ def generate_localoperator_file(kernels, filename):
     # TODO take the name of this thing from the UFL file
     lop = cgen_class_from_cache("operator", members=operator_methods)
     generate_file(filename, "operatorfile", [param, lop])
+
+
+def generate_localoperator_basefile(formdatas, data):
+    filename = get_option("operator_file")
+    for formdata in formdatas:
+        lop_filename = name_localoperator_file(formdata, data)
+        include_file(lop_filename, filetag="operatorbasefile")
+
+    from dune.perftool.file import generate_file
+    generate_file(filename, "operatorbasefile", [])
diff --git a/test/heatequation/heatequation.ufl b/test/heatequation/heatequation.ufl
index 8392d99e..d883d345 100644
--- a/test/heatequation/heatequation.ufl
+++ b/test/heatequation/heatequation.ufl
@@ -5,9 +5,7 @@ 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 = [(u*v)*dx,(inner(grad(u), grad(v)) - f*v)*dx]
\ No newline at end of file
+forms = [poisson,mass]
\ No newline at end of file
-- 
GitLab