7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
10#include <dune/common/reservedvector.hh>
11#include <dune/common/typeutilities.hh>
12#include <dune/common/concept.hh>
27 template<
class... Inner,
class... Outer>
28 auto joinTreePaths(
const TypeTree::HybridTreePath<Inner...>& inner,
const TypeTree::HybridTreePath<Outer...> outer)
30 return TypeTree::HybridTreePath<Inner..., Outer...>(std::tuple_cat(inner._data, outer._data));
33 template<
class InnerTP,
class OuterTP>
34 using JoinTreePath_t = std::decay_t<decltype(joinTreePaths(std::declval<InnerTP>(), std::declval<OuterTP>()))>;
40template<
class RB,
class TP>
76 template<
class RootRootBasis,
class InnerTP,
class OuterTP>
134template<
class RB,
class TP>
138template<
class RootRootBasis,
class InnerTP,
class OuterTP>
140 ->
SubspaceBasis<std::decay_t<
decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t<InnerTP, OuterTP>>;
154template<
class RootBasis,
class... PrefixTreeIndices>
155auto subspaceBasis(
const RootBasis& rootBasis,
const TypeTree::HybridTreePath<PrefixTreeIndices...>& prefixPath)
160template<
class RootBasis,
class... PrefixTreeIndices>
161auto subspaceBasis(
const RootBasis& rootBasis,
const PrefixTreeIndices&... prefixTreeIndices)
163 return subspaceBasis(rootBasis, TypeTree::hybridTreePath(prefixTreeIndices...));
Definition polynomial.hh:17
auto subspaceBasis(const RootBasis &rootBasis, const TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)
Create SubspaceBasis from a root basis and a prefixPath.
Definition subspacebasis.hh:155
Definition subspacebasis.hh:42
typename RootBasis::LocalView RootLocalView
Definition subspacebasis.hh:47
LocalView localView() const
Return local view for basis.
Definition subspacebasis.hh:112
const RootBasis * rootBasis_
Definition subspacebasis.hh:128
typename RootBasis::SizePrefix SizePrefix
Definition subspacebasis.hh:62
TP PrefixPath
Definition subspacebasis.hh:49
SubspaceLocalView< RootLocalView, PrefixPath > LocalView
Type of the local view on the restriction of the basis to a single element.
Definition subspacebasis.hh:60
size_type size(const SizePrefix &prefix) const
Return number possible values for next position in multi index.
Definition subspacebasis.hh:104
typename RootBasis::GridView GridView
The grid view that the FE space is defined on.
Definition subspacebasis.hh:52
const PrefixPath & prefixPath() const
Definition subspacebasis.hh:122
SubspaceBasis(const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const OuterTP &prefixPath)
Constructor from another SubspaceBasis.
Definition subspacebasis.hh:77
const GridView & gridView() const
Obtain the grid view that the basis is defined on.
Definition subspacebasis.hh:84
RB RootBasis
Definition subspacebasis.hh:45
PrefixPath prefixPath_
Definition subspacebasis.hh:129
size_type size() const
Return number of possible values for next position in empty multi index.
Definition subspacebasis.hh:98
const RootBasis & rootBasis() const
Definition subspacebasis.hh:117
typename RootBasis::MultiIndex MultiIndex
Type used for global numbering of the basis vectors.
Definition subspacebasis.hh:55
size_type dimension() const
Definition subspacebasis.hh:92
std::size_t size_type
Definition subspacebasis.hh:57
SubspaceBasis(const RootBasis &rootBasis, const PrefixPath &prefixPath)
Constructor for a given grid view object.
Definition subspacebasis.hh:66
The restriction of a finite element basis to a single element.
Definition subspacelocalview.hh:34