From c4a0d4caec8f3d5b9a3de78a8a89a1687cb377c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene@debian>
Date: Wed, 5 Oct 2016 14:11:24 +0200
Subject: [PATCH] Pass RF as template parameter to lop

---
 python/dune/perftool/pdelab/driver.py        |  3 ++-
 python/dune/perftool/pdelab/localoperator.py | 23 ++++++++++++++++++--
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py
index bc76d54b..5bf9b95c 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 ed4d5a45..c0701b39 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
-- 
GitLab