diff --git a/dune/perftool/localbasiscache.hh b/dune/perftool/localbasiscache.hh index 74896ec9dbbf17390ecb57200f8a73a1658c981d..f9370436eb2176a4a4750072216bf026a5873160 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 92113832c66b0176188f99818050eee1c2a91446..2195e21f70338be438b71c5ff913e1760bfd388b 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 ecc6d013ec74ddbbca6ed0fc832db31f07cae5a7..5c8ceed0f2b35a81176c511ffa721056d9a1718a 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():