diff --git a/python/dune/perftool/cgen/clazz.py b/python/dune/perftool/cgen/clazz.py index fa00c0a126d16b241278ec15f437b3f32f93049e..2586614a41e555e058a59e3a0c65bbb6410c67e6 100644 --- a/python/dune/perftool/cgen/clazz.py +++ b/python/dune/perftool/cgen/clazz.py @@ -36,9 +36,13 @@ class ClassMember(Generable): self.member = member self.access = access + if isinstance(member, str): + from cgen import Line + self.member = Line(member) + # We only consider a Generable or a list thereof as member from collections import Iterable - assert isinstance(member, Generable) or (isinstance(member, Iterable) and all(isinstance(m, Generable) for m in member)) + assert isinstance(self.member, Generable) or (isinstance(self.member, Iterable) and all(isinstance(m, Generable) for m in self.member)) def generate(self): yield "\n\n" diff --git a/python/dune/perftool/generation/cpp.py b/python/dune/perftool/generation/cpp.py index 6a73a9b25b6a307ca052caca1edc6ac757f446d0..4a0757cb28789d42f484ebe95436ffacb00e2ad5 100644 --- a/python/dune/perftool/generation/cpp.py +++ b/python/dune/perftool/generation/cpp.py @@ -40,7 +40,7 @@ def class_member(classtag=None, access=AccessModifier.PRIVATE): from cgen import Value from dune.perftool.cgen.clazz import ClassMember - return generator_factory(item_tags=(classtag, "member"), on_store=lambda t, n: ClassMember(Value(t, n), access=access), counted=True) + return generator_factory(item_tags=(classtag, "member"), on_store=lambda m: ClassMember(m, access=access), counted=True) def constructor_parameter(_type, name, classtag=None, constructortag=None): diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py index e11f3e636e7e3951622a987f886fbb0417dc0078..294a7b0e3165e226c1c3180217522ff5aa495a58 100644 --- a/python/dune/perftool/pdelab/localoperator.py +++ b/python/dune/perftool/pdelab/localoperator.py @@ -2,7 +2,7 @@ from __future__ import absolute_import from dune.perftool.options import get_option from dune.perftool.generation import include_file, base_class, symbol, initializer_list, class_member, constructor_parameter -from dune.perftool.cgen.clazz import BaseClass, ClassMember +from dune.perftool.cgen.clazz import AccessModifier, BaseClass, ClassMember from pytools import memoize @@ -19,7 +19,17 @@ def define_initree(name): constructor_parameter("const Dune::ParameterTree&", param_name, classtag="operator", constructortag="iniconstructor") initializer_list(name, [param_name], classtag="operator") - return ("const Dune::ParameterTree&", name) + return "const Dune::ParameterTree& {};".format(name) + + +@class_member(classtag="operator", access=AccessModifier.PUBLIC) +def enum_pattern(which): + return "enum {{ doPattern{} = true }};".format(which) + + +@class_member(classtag="operator", access=AccessModifier.PUBLIC) +def enum_alpha(which): + return "enum {{ doAlpha{} = true }};".format(which) @symbol @@ -56,6 +66,8 @@ def measure_specific_details(measure): if measure == "cell": base_class('Dune::PDELab::FullVolumePattern', classtag="operator") numerical_jacobian("Volume") + enum_pattern("Volume") + enum_alpha("Volume") ret["residual_signature"] = ['template<typename EG, typename LFSU, typename X, typename LFSV, typename R>', 'void alpha_volume(const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, R& r) const'] @@ -65,6 +77,8 @@ def measure_specific_details(measure): if measure == "exterior_facet": base_class('Dune::PDELab::FullBoundaryPattern', classtag="operator") numerical_jacobian("Boundary") + enum_pattern("Boundary") + enum_alpha("Boundary") ret["residual_signature"] = ['template<typename IG, typename LFSV0, typename X, typename LFSV1, typename R>', 'void alpha_boundary(const IG& ig, const LFSV0& lfsv0, const X& x, const LFSV1& lfsv1, R& r) const'] @@ -74,6 +88,8 @@ def measure_specific_details(measure): if measure == "interior_facet": base_class('Dune::PDELab::FullSkeletonPattern', classtag="operator") numerical_jacobian("Skeleton") + enum_pattern("Skeleton") + enum_alpha("Skeleton") ret["residual_signature"] = ['template<typename IG, typename LFSV0_S, typename X, typename LFSV1_S, typename LFSV0_N, typename R, typename LFSV1_N>', 'void alpha_skeleton(const IG& ig, const LFSV0_S& lfsv0_s, const X& x_s, const LFSV1_S& lfsv1_s, const LFSV0_N& lfsv0_n, const X& x_n, const LFSV1_N& lfsv1_n, R& r_s, R& r_n) const']