From 84b37e952c5257fea2dfa2bad6fd1e0ab2d30a63 Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Tue, 26 Apr 2016 17:24:47 +0200
Subject: [PATCH] Implement poisson_neumann_symdiff!

and split mini files to avoid reuse of old vtu files!
---
 python/dune/perftool/pdelab/localoperator.py      | 11 ++++++++++-
 test/poisson/CMakeLists.txt                       | 15 ++++++++++++---
 test/poisson/poisson_neumann_numdiff.mini         | 11 +++++++++++
 test/poisson/poisson_neumann_symdiff.mini         | 11 +++++++++++
 .../{poisson.mini => poisson_numdiff.mini}        |  4 ++--
 test/poisson/poisson_symdiff.mini                 | 11 +++++++++++
 6 files changed, 57 insertions(+), 6 deletions(-)
 create mode 100644 test/poisson/poisson_neumann_numdiff.mini
 create mode 100644 test/poisson/poisson_neumann_symdiff.mini
 rename test/poisson/{poisson.mini => poisson_numdiff.mini} (77%)
 create mode 100644 test/poisson/poisson_symdiff.mini

diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index 370ef617..90555510 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -213,7 +213,8 @@ class AssemblyMethod(ClassMember):
         from cgen import LiteralLines, Block
         content = signature
         content.append('{')
-        content.extend('  ' + l for l in generate_code(kernel)[0].split('\n'))
+        if kernel is not None:
+            content.extend('  ' + l for l in generate_code(kernel)[0].split('\n'))
         content.append('}')
         ClassMember.__init__(self, content)
 
@@ -314,6 +315,14 @@ def generate_localoperator_kernels(formdata, namedata):
                         kernel = generate_kernel(integral)
                     operator_kernels[(integral.integral_type(), 'jacobian')] = kernel
 
+                # Generate dummy functions for those kernels, that vanished in the differentiation process
+                # We *could* solve this problem by using lambda_* terms but we do not really want that, so
+                # we use empty jacobian assembly methods instead
+                alpha_measures = set(i.integral_type() for i in form.integrals())
+                jacobian_measures = set(i.integral_type() for i in jacform.integrals())
+                for it in alpha_measures - jacobian_measures:
+                    operator_kernels[(it, 'jacobian')] = None
+
         # TODO: JacobianApply for matrix-free computations.
 
     # Return the set of generated kernels
diff --git a/test/poisson/CMakeLists.txt b/test/poisson/CMakeLists.txt
index c4e3a69d..d18236b9 100644
--- a/test/poisson/CMakeLists.txt
+++ b/test/poisson/CMakeLists.txt
@@ -5,7 +5,7 @@ add_generated_executable(UFLFILE poisson.ufl
                          )
 
 dune_add_system_test(TARGET poisson_numdiff
-                     INIFILE poisson.mini
+                     INIFILE poisson_numdiff.mini
                      SCRIPT dune_vtkcompare.py
                      )
 
@@ -19,7 +19,7 @@ add_generated_executable(UFLFILE poisson.ufl
                          )
 
 dune_add_system_test(TARGET poisson_symdiff
-                     INIFILE poisson.mini
+                     INIFILE poisson_symdiff.mini
                      SCRIPT dune_vtkcompare.py
                      )
 
@@ -30,6 +30,15 @@ add_generated_executable(UFLFILE poisson_neumann.ufl
                          )
 
 dune_add_system_test(TARGET poisson_neumann_numdiff
-                     INIFILE poisson.mini
+                     INIFILE poisson_neumann_numdiff.mini
                      SCRIPT dune_vtkcompare.py
                      )
+
+# 4. Poisson Test Case: source f, mixed neumann/dirichlet boundary + symbolic differentiation
+add_generated_executable(UFLFILE poisson_neumann.ufl
+                         TARGET poisson_neumann_symdiff
+                         )
+
+dune_add_system_test(TARGET poisson_neumann_symdiff
+                     INIFILE poisson_neumann_symdiff.mini
+                     )
diff --git a/test/poisson/poisson_neumann_numdiff.mini b/test/poisson/poisson_neumann_numdiff.mini
new file mode 100644
index 00000000..5c779a14
--- /dev/null
+++ b/test/poisson/poisson_neumann_numdiff.mini
@@ -0,0 +1,11 @@
+__name = poisson_neumann_numdiff
+
+lowerleft = 0.0 0.0
+upperright = 1.0 1.0
+elements = 32 32
+elementType = simplical
+
+[wrapper.vtkcompare]
+name = {__name}
+reference = poisson_ref
+extension = vtu
diff --git a/test/poisson/poisson_neumann_symdiff.mini b/test/poisson/poisson_neumann_symdiff.mini
new file mode 100644
index 00000000..8e2c2fb0
--- /dev/null
+++ b/test/poisson/poisson_neumann_symdiff.mini
@@ -0,0 +1,11 @@
+__name = poisson_neumann_symdiff
+
+lowerleft = 0.0 0.0
+upperright = 1.0 1.0
+elements = 32 32
+elementType = simplical
+
+[wrapper.vtkcompare]
+name = {__name}
+reference = poisson_ref
+extension = vtu
diff --git a/test/poisson/poisson.mini b/test/poisson/poisson_numdiff.mini
similarity index 77%
rename from test/poisson/poisson.mini
rename to test/poisson/poisson_numdiff.mini
index 0abecdd8..6d450718 100644
--- a/test/poisson/poisson.mini
+++ b/test/poisson/poisson_numdiff.mini
@@ -1,4 +1,4 @@
-__name = laplace
+__name = poisson_numdiff
 
 lowerleft = 0.0 0.0
 upperright = 1.0 1.0
@@ -6,6 +6,6 @@ elements = 32 32
 elementType = simplical
 
 [wrapper.vtkcompare]
-name = poisson
+name = {__name}
 reference = poisson_ref
 extension = vtu
diff --git a/test/poisson/poisson_symdiff.mini b/test/poisson/poisson_symdiff.mini
new file mode 100644
index 00000000..e3fa2f3f
--- /dev/null
+++ b/test/poisson/poisson_symdiff.mini
@@ -0,0 +1,11 @@
+__name = poisson_symdiff
+
+lowerleft = 0.0 0.0
+upperright = 1.0 1.0
+elements = 32 32
+elementType = simplical
+
+[wrapper.vtkcompare]
+name = {__name}
+reference = poisson_ref
+extension = vtu
-- 
GitLab