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

[!299] Provide fallback for sum factorized geometry mixins if not using sum factorization

Merge branch 'feature/geometry-mixins-fallbacks' into 'master'

ref:extensions/dune-codegen We can disable sum factorization on boundary
integrals. This commit allows us to use a different mixin for those integrals.

See merge request [extensions/dune-codegen!299]

  [extensions/dune-codegen!299]: gitlab.dune-project.org/extensions/dune-codegen/merge_requests/299
parents a5d3e142 5500ecfe
No related branches found
No related tags found
No related merge requests found
...@@ -56,6 +56,9 @@ import loopy as lp ...@@ -56,6 +56,9 @@ import loopy as lp
@geometry_mixin("sumfact_multilinear") @geometry_mixin("sumfact_multilinear")
class SumfactMultiLinearGeometryMixin(GenericPDELabGeometryMixin): class SumfactMultiLinearGeometryMixin(GenericPDELabGeometryMixin):
def nonsumfact_fallback(self):
return "generic"
def _jacobian_inverse(self): def _jacobian_inverse(self):
return "jit" return "jit"
...@@ -243,6 +246,9 @@ class SumfactMultiLinearGeometryMixin(GenericPDELabGeometryMixin): ...@@ -243,6 +246,9 @@ class SumfactMultiLinearGeometryMixin(GenericPDELabGeometryMixin):
@geometry_mixin("sumfact_axiparallel") @geometry_mixin("sumfact_axiparallel")
class SumfactAxiParallelGeometryMixin(AxiparallelGeometryMixin): class SumfactAxiParallelGeometryMixin(AxiparallelGeometryMixin):
def nonsumfact_fallback(self):
return "axiparallel"
def facet_normal(self, o): def facet_normal(self, o):
i, = self.indices i, = self.indices
self.indices = None self.indices = None
...@@ -260,6 +266,9 @@ class SumfactAxiParallelGeometryMixin(AxiparallelGeometryMixin): ...@@ -260,6 +266,9 @@ class SumfactAxiParallelGeometryMixin(AxiparallelGeometryMixin):
@geometry_mixin("sumfact_equidistant") @geometry_mixin("sumfact_equidistant")
class SumfactEqudistantGeometryMixin(EquidistantGeometryMixin, SumfactAxiParallelGeometryMixin): class SumfactEqudistantGeometryMixin(EquidistantGeometryMixin, SumfactAxiParallelGeometryMixin):
def nonsumfact_fallback(self):
return "equidistant"
def facet_jacobian_determinant(self, o): def facet_jacobian_determinant(self, o):
name = "fdetjac" name = "fdetjac"
self.define_facet_jacobian_determinant(name) self.define_facet_jacobian_determinant(name)
......
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
import csv import csv
from dune.codegen.generation import (get_global_context_value, from dune.codegen.generation import (construct_from_mixins,
get_global_context_value,
global_context, global_context,
) )
from dune.codegen.pdelab.geometry import world_dimension from dune.codegen.pdelab.geometry import world_dimension
...@@ -26,8 +27,18 @@ def sumfact_generate_kernels_per_integral(integrals): ...@@ -26,8 +27,18 @@ def sumfact_generate_kernels_per_integral(integrals):
# Maybe skip sum factorization on boundary integrals # Maybe skip sum factorization on boundary integrals
if not get_form_option("sumfact_on_boundary"): if not get_form_option("sumfact_on_boundary"):
set_form_option("sumfact", False) set_form_option("sumfact", False)
# Try to find a fallback for sum factorized geometry mixins
geometry_backup = get_form_option("geometry_mixins")
mixin = construct_from_mixins(mixins=[geometry_backup])()
if hasattr(mixin, "nonsumfact_fallback"):
set_form_option("geometry_mixins", mixin.nonsumfact_fallback())
for k in generate_kernels_per_integral(integrals): for k in generate_kernels_per_integral(integrals):
yield k yield k
# Reset state
set_form_option("geometry_mixins", geometry_backup)
set_form_option("sumfact", True) set_form_option("sumfact", True)
return return
......
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