diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py index 370ef617c360a2b5eac0f008915571a6354c0d4f..9055551002293e1611f03edced37ccecc43c5d00 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 c4e3a69df2b61b5f5b6bee118960e2c5725d5e46..d18236b90f5e2a6e36959f4e152f9de6bdad0225 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 0000000000000000000000000000000000000000..5c779a14edfb5059c96fe23a8095159840d57191 --- /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 0000000000000000000000000000000000000000..8e2c2fb03673468f9f5fcdf67ab509ef339bfdfe --- /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 0abecdd87d20b7d2be4b44f625c1ab735544a267..6d4507180f6f46f026231e4fc4bb3f7f8eb0ca6f 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 0000000000000000000000000000000000000000..e3fa2f3fb8508f2204f4547e1c9ba33c8c2d2fe0 --- /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