diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py index 4fb6371057905f1d5cc0d301306522352236fac8..4daeb45a7627f7bda1d83c178e83a20a5362607c 100644 --- a/python/dune/perftool/pdelab/localoperator.py +++ b/python/dune/perftool/pdelab/localoperator.py @@ -766,14 +766,17 @@ def generate_residual_kernels(form, original_form): for measure in set(i.integral_type() for i in form.integrals()): logger.info("generate_residual_kernels: measure {}".format(measure)) with global_context(integral_type=measure): - enum_pattern() - pattern_baseclass() - enum_alpha() - from dune.perftool.pdelab.signatures import assembler_routine_name with global_context(kernel=assembler_routine_name()): kernel = [k for k in get_backend(interface="generate_kernels_per_integral")(form.integrals_by_type(measure))] + # The integrals might vanish due to unfulfillable boundary conditions. + # We only generate the local operator enums/base classes if they did not. + if kernel: + enum_pattern() + pattern_baseclass() + enum_alpha() + # Maybe add numerical differentiation if get_form_option("numerical_jacobian"): # Include headers for numerical methods @@ -908,10 +911,6 @@ def generate_control_kernels(forms): for measure in set(i.integral_type() for form in forms for i in form.integrals()): logger.info("generate_control_kernels: measure {}".format(measure)) with global_context(integral_type=measure): - enum_pattern() - pattern_baseclass() - enum_alpha() - from dune.perftool.pdelab.signatures import assembler_routine_name with global_context(kernel=assembler_routine_name()): # TODO: Sumfactorization not yet implemented @@ -921,6 +920,13 @@ def generate_control_kernels(forms): forms_measure = [form.integrals_by_type(measure) for form in forms] kernel = [k for k in control_generate_kernels_per_integral(forms_measure)] + # The integrals might vanish due to unfulfillable boundary conditions. + # We only generate the local operator enums/base classes if they did not. + if kernel: + enum_pattern() + pattern_baseclass() + enum_alpha() + operator_kernels[(measure, 'residual')] = kernel return operator_kernels diff --git a/python/dune/perftool/sumfact/realization.py b/python/dune/perftool/sumfact/realization.py index 2c5f8a3c3b44e1dd473816464b7856432bdc37b4..12f7115662533b6f279e6e340130de95b64992d9 100644 --- a/python/dune/perftool/sumfact/realization.py +++ b/python/dune/perftool/sumfact/realization.py @@ -137,6 +137,9 @@ class BufferSwitcher(object): def realize_sumfact_kernel_function(sf): + # Remove anything kernel related from caches + delete_cache_items("kernel_default") + # Get a buffer switcher instance buffer = BufferSwitcher() insn_dep = frozenset()