From 043452fab21ce4bdd53ac1b65e490994b5f8c993 Mon Sep 17 00:00:00 2001
From: Marcel Koch <marcel.koch@uni-muenster.de>
Date: Thu, 13 Jul 2017 14:07:21 +0200
Subject: [PATCH] Changes template parameter of LocalBasisCache

---
 dune/perftool/localbasiscache.hh      |  5 ++---
 python/dune/perftool/pdelab/basis.py  | 20 +++++++++++++++++++-
 python/dune/perftool/pdelab/driver.py | 12 ++++++++----
 3 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/dune/perftool/localbasiscache.hh b/dune/perftool/localbasiscache.hh
index 74896ec9..f9370436 100644
--- a/dune/perftool/localbasiscache.hh
+++ b/dune/perftool/localbasiscache.hh
@@ -31,11 +31,10 @@ class CacheReturnProxy
   const std::vector<T>* v;
 };
 
-
-template<typename FS>
+//TODO FS hier entfernen und nur LocalBasisType benutzen
+template<typename LocalBasisType >
 class LocalBasisCacheWithoutReferences
 {
-  using LocalBasisType = typename FS::Traits::FiniteElementMap::Traits::FiniteElementType::Traits::LocalBasisType;
   using Cache = typename Dune::PDELab::LocalBasisCache<LocalBasisType>;
   using DomainFieldType = typename LocalBasisType::Traits::DomainFieldType;
   using DomainType = typename LocalBasisType::Traits::DomainType;
diff --git a/python/dune/perftool/pdelab/basis.py b/python/dune/perftool/pdelab/basis.py
index 92113832..2195e21f 100644
--- a/python/dune/perftool/pdelab/basis.py
+++ b/python/dune/perftool/pdelab/basis.py
@@ -23,13 +23,31 @@ from dune.perftool.tools import (get_pymbolic_basename,
                                  )
 from dune.perftool.pdelab.driver import FEM_name_mangling
 from dune.perftool.pdelab.restriction import restricted_name
+from dune.perftool.pdelab.driver import (type_domainfield,
+                                         basetype_range,
+                                         isPk,
+                                         isQk,)
 from pymbolic.primitives import Product, Subscript, Variable
 import pymbolic.primitives as prim
 from loopy import Reduction
 
 
+def type_localbasis(element):
+    df = "typename {}::Traits::GridView::ctype".format(type_gfs(element))
+    r = basetype_range()
+    dim = world_dimension()
+    # if isPk(element):
+    #     include_file("dune/localfunctions/lagrange/pk/pklocalbasis.hh", filetag="operatorfile")
+    #     return "Dune::PkLocalBasis<{}, {}, {}, {}>".format(df, r, dim, element._degree)
+    if isQk(element):
+        include_file("dune/localfunctions/lagrange/qk/qklocalbasis.hh", filetag="operatorfile")
+        return "Dune::QkLocalBasis<{}, {}, {}, {}>".format(df, r, dim, element._degree)
+    #TODO add dg support
+    raise NotImplementedError("Element type not known in code generation")
+
+
 def type_localbasis_cache(element):
-    return "LocalBasisCacheWithoutReferences<{}>".format(type_gfs(element))
+    return "LocalBasisCacheWithoutReferences<{}>".format(type_localbasis(element))
 
 
 @class_member(classtag="operator")
diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py
index ecc6d013..5c8ceed0 100644
--- a/python/dune/perftool/pdelab/driver.py
+++ b/python/dune/perftool/pdelab/driver.py
@@ -285,13 +285,17 @@ def type_domainfield():
     return "DF"
 
 
-@preamble
-def typedef_range(name):
+def basetype_range():
     if get_option('opcounter'):
         setup_timer()
-        return "using {} = oc::OpCounter<double>;".format(name)
+        return "oc::OpCounter<double>"
     else:
-        return "using {} = double;".format(name)
+        return "double"
+
+
+@preamble
+def typedef_range(name):
+    return "using {} = {};".format(name, basetype_range())
 
 
 def type_range():
-- 
GitLab