diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py index bc76d54bb196d781df1f9f12617fd2eb0cf6524d..5bf9b95c949e46abf6e88c9e982d0879c3ecedb2 100644 --- a/python/dune/perftool/pdelab/driver.py +++ b/python/dune/perftool/pdelab/driver.py @@ -623,7 +623,8 @@ def typedef_localoperator(name, formdata): include_file(filename, filetag="driver") from dune.perftool.pdelab.localoperator import localoperator_basename lopname = localoperator_basename(formdata, data) - return "using {} = {}<{}, {}>;".format(name, lopname, ugfs, vgfs) + range_type = type_range() + return "using {} = {}<{}, {}, {}>;".format(name, lopname, ugfs, vgfs, range_type) def type_localoperator(formdata): diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py index ed4d5a45aa3f68efe288c3dc6204f76b86844224..c0701b397ba1c4b8dd91c07aa4459bbefa45a9d2 100644 --- a/python/dune/perftool/pdelab/localoperator.py +++ b/python/dune/perftool/pdelab/localoperator.py @@ -56,6 +56,24 @@ def lop_template_test_gfs(): return "GFSV" +@template_parameter("operator") +def lop_template_range_field(): + return "RF" + + +@class_member("operator") +def lop_domain_field(name): + # TODO: Rethink for not Galerkin Method + gfs = lop_template_ansatz_gfs() + return "using {} = typename {}::Traits::GridView::ctype;".format(name, gfs) + + +def name_domain_field(): + name = "DF" + lop_domain_field(name) + return name + + def lop_template_gfs(ma): from ufl.classes import Argument, Coefficient if isinstance(ma.argexpr, Argument): @@ -414,6 +432,7 @@ def generate_localoperator_kernels(formdata, data): localoperator_basename(formdata, data) lop_template_ansatz_gfs() lop_template_test_gfs() + lop_template_range_field() from dune.perftool.pdelab.parameter import parameterclass_basename parameterclass_basename(formdata, data) @@ -426,8 +445,8 @@ def generate_localoperator_kernels(formdata, data): base_class('Dune::PDELab::LocalOperatorDefaultFlags', classtag="operator") from dune.perftool.pdelab.driver import is_stationary if not is_stationary(): - # TODO replace double with clever typename stuff - base_class('Dune::PDELab::InstationaryLocalOperatorDefaultMethods<double>', classtag="operator") + rf = lop_template_range_field() + base_class('Dune::PDELab::InstationaryLocalOperatorDefaultMethods<{}>'.format(rf), classtag="operator") # Create set time method in parameter class from dune.perftool.pdelab.parameter import define_set_time_method