Skip to content
Snippets Groups Projects
Commit f17a9264 authored by Dominic Kempf's avatar Dominic Kempf
Browse files

Treat integrals that vanish due to unfulfillable boundary predicates

parent 3d3f0a71
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment