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

Remove interface entirely

parent 62597a4f
No related branches found
No related tags found
No related merge requests found
...@@ -4,25 +4,3 @@ import dune.codegen.blockstructured.geometry ...@@ -4,25 +4,3 @@ import dune.codegen.blockstructured.geometry
import dune.codegen.blockstructured.spaces import dune.codegen.blockstructured.spaces
import dune.codegen.blockstructured.basis import dune.codegen.blockstructured.basis
import dune.codegen.blockstructured.transformations import dune.codegen.blockstructured.transformations
from dune.codegen.options import get_form_option
from dune.codegen.blockstructured.spaces import lfs_inames
from dune.codegen.blockstructured.basis import (pymbolic_reference_gradient,
pymbolic_basis)
from dune.codegen.blockstructured.geometry import (pymbolic_jacobian_inverse,
pymbolic_jacobian_determinant,
pymbolic_facet_jacobian_determinant,
to_global)
from dune.codegen.blockstructured.tools import sub_element_inames
from dune.codegen.pdelab import PDELabInterface
class BlockStructuredInterface(PDELabInterface):
def __init__(self):
PDELabInterface.__init__(self)
def generate_accumulation_instruction(self, expr, visitor):
if get_form_option('vectorization_blockstructured'):
from dune.codegen.blockstructured.accumulation import generate_accumulation_instruction
return generate_accumulation_instruction(expr, visitor)
else:
return PDELabInterface.generate_accumulation_instruction(self, expr, visitor)
from dune.codegen.generation import instruction from dune.codegen.generation import accumulation_mixin, instruction
from dune.codegen.loopy.target import dtype_floatingpoint from dune.codegen.loopy.target import dtype_floatingpoint
from dune.codegen.options import get_form_option from dune.codegen.options import get_form_option
from dune.codegen.pdelab.geometry import world_dimension from dune.codegen.pdelab.geometry import world_dimension
from dune.codegen.pdelab.localoperator import determine_accumulation_space from dune.codegen.pdelab.localoperator import determine_accumulation_space, GenericAccumulationMixin
from dune.codegen.pdelab.argument import name_accumulation_variable from dune.codegen.pdelab.argument import name_accumulation_variable
from dune.codegen.pdelab.localoperator import boundary_predicates from dune.codegen.pdelab.localoperator import boundary_predicates
from dune.codegen.generation.loopy import function_mangler, globalarg from dune.codegen.generation.loopy import function_mangler, globalarg
...@@ -12,6 +12,15 @@ import pymbolic.primitives as prim ...@@ -12,6 +12,15 @@ import pymbolic.primitives as prim
from loopy.match import Writes from loopy.match import Writes
@accumulation_mixin("blockstructured")
class BlockStructuredAccumulationMixin(GenericAccumulationMixin):
def generate_accumulation_instruction(self, expr):
if get_form_option('vectorization_blockstructured'):
return generate_accumulation_instruction(expr, self)
else:
return GenericAccumulationMixin.generate_accumulation_instruction(self, expr)
def name_accumulation_alias(container, accumspace): def name_accumulation_alias(container, accumspace):
name = container + "_" + accumspace.lfs.name + "_alias" name = container + "_" + accumspace.lfs.name + "_alias"
name_tail = container + "_" + accumspace.lfs.name + "_alias_tail" name_tail = container + "_" + accumspace.lfs.name + "_alias_tail"
......
...@@ -110,7 +110,7 @@ class CodegenFormOptionsArray(ImmutableRecord): ...@@ -110,7 +110,7 @@ class CodegenFormOptionsArray(ImmutableRecord):
geometry_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for geometries. Currently implemented mixins: generic, axiparallel, equidistant, sumfact_multilinear, sumfact_axiparallel, sumfact_equidistant") geometry_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for geometries. Currently implemented mixins: generic, axiparallel, equidistant, sumfact_multilinear, sumfact_axiparallel, sumfact_equidistant")
quadrature_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for quadrature. Currently implemented: generic, sumfact") quadrature_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for quadrature. Currently implemented: generic, sumfact")
basis_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for basis function evaluation. Currently implemented: generic, sumfact") basis_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for basis function evaluation. Currently implemented: generic, sumfact")
accumulation_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for accumulation. Currently implemented: generic, sumfact, control") accumulation_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for accumulation. Currently implemented: generic, sumfact, control, blockstructured")
# Until more sophisticated logic is needed, we keep the actual option data in this module # Until more sophisticated logic is needed, we keep the actual option data in this module
_global_options = CodegenGlobalOptionsArray() _global_options = CodegenGlobalOptionsArray()
......
""" The pdelab specific parts of the code generation process """
# Trigger some imports that are needed to have all backend implementations visible
# to the selection mechanisms
class PDELabInterface(object):
def __init__(self):
# The visitor instance will be registered by its init method
self.visitor = None
...@@ -14,8 +14,7 @@ def set_lop_to_starting_time(): ...@@ -14,8 +14,7 @@ def set_lop_to_starting_time():
class DriverUFL2PymbolicVisitor(UFL2LoopyVisitor): class DriverUFL2PymbolicVisitor(UFL2LoopyVisitor):
def __init__(self): def __init__(self):
from dune.codegen.pdelab import PDELabInterface UFL2LoopyVisitor.__init__(self, "exterior_facet", {})
UFL2LoopyVisitor.__init__(self, PDELabInterface(), "exterior_facet", {})
def __call__(self, expr): def __call__(self, expr):
self.preambles = [] self.preambles = []
......
...@@ -464,17 +464,6 @@ def generate_accumulation_instruction(expr, visitor): ...@@ -464,17 +464,6 @@ def generate_accumulation_instruction(expr, visitor):
def get_visitor(measure, subdomain_id): def get_visitor(measure, subdomain_id):
# Get a transformer instance for this kernel
if get_form_option('sumfact'):
from dune.codegen.sumfact import SumFactInterface
interface = SumFactInterface()
elif get_form_option('blockstructured'):
from dune.codegen.blockstructured import BlockStructuredInterface
interface = BlockStructuredInterface()
else:
from dune.codegen.pdelab import PDELabInterface
interface = PDELabInterface()
# Construct the visitor taking into account geometry mixins # Construct the visitor taking into account geometry mixins
from dune.codegen.ufl.visitor import UFL2LoopyVisitor from dune.codegen.ufl.visitor import UFL2LoopyVisitor
mixins = get_form_option("geometry_mixins").split(",") mixins = get_form_option("geometry_mixins").split(",")
...@@ -492,7 +481,7 @@ def get_visitor(measure, subdomain_id): ...@@ -492,7 +481,7 @@ def get_visitor(measure, subdomain_id):
mixins = get_form_option("accumulation_mixins").split(",") mixins = get_form_option("accumulation_mixins").split(",")
VisitorType = construct_from_mixins(base=VisitorType, mixins=mixins, mixintype="accumulation", name="UFLVisitor") VisitorType = construct_from_mixins(base=VisitorType, mixins=mixins, mixintype="accumulation", name="UFLVisitor")
return VisitorType(interface, measure, subdomain_id) return VisitorType(measure, subdomain_id)
def visit_integral(integral): def visit_integral(integral):
......
import dune.codegen.sumfact.geometry import dune.codegen.sumfact.geometry
import dune.codegen.sumfact.accumulation import dune.codegen.sumfact.accumulation
import dune.codegen.sumfact.switch import dune.codegen.sumfact.switch
from dune.codegen.pdelab import PDELabInterface
class SumFactInterface(PDELabInterface):
pass
...@@ -42,9 +42,7 @@ import numpy as np ...@@ -42,9 +42,7 @@ import numpy as np
class UFL2LoopyVisitor(ModifiedTerminalTracker): class UFL2LoopyVisitor(ModifiedTerminalTracker):
def __init__(self, interface, measure, subdomain_id): def __init__(self, measure, subdomain_id):
self.interface = interface
self.interface.visitor = self
self.measure = measure self.measure = measure
self.subdomain_id = subdomain_id self.subdomain_id = subdomain_id
...@@ -271,7 +269,7 @@ class UFL2LoopyVisitor(ModifiedTerminalTracker): ...@@ -271,7 +269,7 @@ class UFL2LoopyVisitor(ModifiedTerminalTracker):
def inverse(self, o): def inverse(self, o):
from dune.codegen.pdelab.tensors import pymbolic_matrix_inverse from dune.codegen.pdelab.tensors import pymbolic_matrix_inverse
return self.interface.pymbolic_matrix_inverse(o) return pymbolic_matrix_inverse(o, self)
# #
# Handlers for arithmetic operators and functions # Handlers for arithmetic operators and functions
......
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