3 #ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH
4 #define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH
7 #include <dune/common/concept.hh>
18 using namespace Dune::Concept;
43 template<
class C,
class I>
55 requireType<typename N::size_type>(),
56 requireConvertible<typename N::size_type>(node.size()),
57 requireConvertible<typename N::size_type>(node.localIndex(std::declval<typename N::size_type>())),
58 requireConvertible<typename N::size_type>(node.treeIndex()),
59 requireBaseOf<BasisNodeMixin, N>()
66 template<
class Gr
idView>
71 requireType<typename N::Element>(),
72 requireType<typename N::FiniteElement>(),
73 requireConvertible<typename N::Element>(node.element()),
74 requireConvertible<const typename N::FiniteElement&>(node.finiteElement()),
75 requireSameType<
typename N::Element,
typename GridView::template Codim<0>::Entity>(),
76 requireBaseOf<Dune::Functions::LeafBasisNode, N>()
81 template<
class Gr
idView>
85 template<
class Gr
idView>
97 template<
class Gr
idView>
109 template<
class Gr
idView>
122 template<
class PreBasis>
127 requireType<typename I::size_type>(),
128 requireType<typename I::MultiIndex>(),
129 requireType<typename I::PreBasis>(),
130 requireType<typename I::Node>(),
131 requireSameType<typename I::PreBasis, PreBasis>(),
132 const_cast<I&
>(indexSet).bind(std::declval<typename I::Node>()),
133 const_cast<I&
>(indexSet).unbind(),
134 requireConvertible<typename I::size_type>(indexSet.size()),
135 requireConvertible<
typename std::vector<typename I::MultiIndex>::iterator>(
136 indexSet.indices(std::declval<
typename std::vector<typename I::MultiIndex>::iterator>()))
142 template<
class Gr
idView>
147 requireType<typename PB::GridView>(),
148 requireType<typename PB::size_type>(),
149 requireType<typename PB::MultiIndex>(),
150 requireType<typename PB::SizePrefix>(),
151 requireType<typename PB::Node>(),
152 requireType<typename PB::IndexSet>(),
153 requireSameType<typename PB::GridView, GridView>(),
154 const_cast<PB&
>(preBasis).initializeIndices(),
155 requireConvertible<typename PB::GridView>(preBasis.gridView()),
156 requireConvertible<typename PB::Node>(preBasis.makeNode()),
157 requireConvertible<typename PB::IndexSet>(preBasis.makeIndexSet()),
158 requireConvertible<typename PB::size_type>(preBasis.size()),
159 requireConvertible<typename PB::size_type>(preBasis.size(std::declval<typename PB::SizePrefix>())),
160 requireConvertible<typename PB::size_type>(preBasis.dimension()),
161 requireConvertible<typename PB::size_type>(preBasis.maxNodeSize()),
162 requireSameType<decltype(
const_cast<PB&
>(preBasis).update(preBasis.gridView())),
void>(),
171 template<
class GlobalBasis>
176 requireType<typename V::size_type>(),
177 requireType<typename V::MultiIndex>(),
178 requireType<typename V::GlobalBasis>(),
179 requireType<typename V::Tree>(),
180 requireType<typename V::GridView>(),
181 requireType<typename V::Element>(),
182 requireSameType<typename V::GlobalBasis, GlobalBasis>(),
183 requireSameType<typename V::GridView, typename GlobalBasis::GridView>(),
184 requireSameType<typename V::size_type, typename GlobalBasis::size_type>(),
185 requireSameType<
typename V::Element,
typename GlobalBasis::GridView::template Codim<0>::Entity>(),
186 const_cast<V&
>(localView).bind(std::declval<typename V::Element>()),
187 const_cast<V&
>(localView).unbind(),
188 requireConvertible<typename V::Tree>(localView.tree()),
189 requireConvertible<typename V::size_type>(localView.size()),
190 requireConvertible<typename V::MultiIndex>(localView.index(std::declval<typename V::size_type>())),
191 requireConvertible<typename V::size_type>(localView.maxSize()),
192 requireConvertible<typename V::GlobalBasis>(localView.globalBasis()),
201 template<
class Gr
idView>
206 requireType<typename B::GridView>(),
207 requireType<typename B::size_type>(),
208 requireType<typename B::MultiIndex>(),
209 requireType<typename B::SizePrefix>(),
210 requireType<typename B::LocalView>(),
211 requireSameType<typename B::GridView, GridView>(),
212 requireConvertible<typename B::GridView>(basis.gridView()),
213 requireConvertible<typename B::LocalView>(basis.localView()),
214 requireConvertible<typename B::size_type>(basis.size()),
215 requireConvertible<typename B::size_type>(basis.size(std::declval<typename B::SizePrefix>())),
216 requireConvertible<typename B::size_type>(basis.dimension()),
217 requireSameType<decltype(
const_cast<B&
>(basis).update(basis.gridView())),
void>(),
typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple
Expand tuple arguments as template arguments.
Definition: utility.hh:94
Definition: polynomial.hh:10
Definition: functionspacebases/concepts.hh:22
auto require(C &&c) -> decltype(c.resize(0))
Definition: functionspacebases/concepts.hh:32
auto require(C &&c) -> decltype(c.size())
Definition: functionspacebases/concepts.hh:42
auto require(C &&c, I &&i) -> decltype(c[i])
Definition: functionspacebases/concepts.hh:52
auto require(const N &node) -> decltype(requireType< typename N::size_type >(), requireConvertible< typename N::size_type >(node.size()), requireConvertible< typename N::size_type >(node.localIndex(std::declval< typename N::size_type >())), requireConvertible< typename N::size_type >(node.treeIndex()), requireBaseOf< BasisNodeMixin, N >())
Definition: functionspacebases/concepts.hh:68
auto require(const N &node) -> decltype(requireType< typename N::Element >(), requireType< typename N::FiniteElement >(), requireConvertible< typename N::Element >(node.element()), requireConvertible< const typename N::FiniteElement & >(node.finiteElement()), requireSameType< typename N::Element, typename GridView::template Codim< 0 >::Entity >(), requireBaseOf< Dune::Functions::LeafBasisNode, N >())
Definition: functionspacebases/concepts.hh:111
auto require(const N &node) -> decltype(requireConcept< typename std::conditional< N::isLeaf, LeafBasisNode< GridView >, BasisNode >::type, N >(), requireConcept< typename std::conditional< N::isPower, PowerBasisNode< GridView >, BasisNode >::type, N >(), requireConcept< typename std::conditional< N::isComposite, CompositeBasisNode< GridView >, BasisNode >::type, N >())
Definition: functionspacebases/concepts.hh:87
auto require(const N &node) -> decltype(requireBaseOf< Dune::Functions::PowerBasisNode< typename N::ChildType, N::CHILDREN >, N >(), requireConcept< BasisTree< GridView >, typename N::ChildType >())
Definition: functionspacebases/concepts.hh:99
auto require(const N &node) -> decltype(requireBaseOf< ExpandTuple< Dune::Functions::template CompositeBasisNode, typename N::ChildTypes >, N >(), requireConceptForTupleEntries< BasisTree< GridView >, typename N::ChildTypes >())
Definition: functionspacebases/concepts.hh:124
auto require(const I &indexSet) -> decltype(requireType< typename I::size_type >(), requireType< typename I::MultiIndex >(), requireType< typename I::PreBasis >(), requireType< typename I::Node >(), requireSameType< typename I::PreBasis, PreBasis >(), const_cast< I & >(indexSet).bind(std::declval< typename I::Node >()), const_cast< I & >(indexSet).unbind(), requireConvertible< typename I::size_type >(indexSet.size()), requireConvertible< typename std::vector< typename I::MultiIndex >::iterator >(indexSet.indices(std::declval< typename std::vector< typename I::MultiIndex >::iterator >())))
Definition: functionspacebases/concepts.hh:144
auto require(const PB &preBasis) -> decltype(requireType< typename PB::GridView >(), requireType< typename PB::size_type >(), requireType< typename PB::MultiIndex >(), requireType< typename PB::SizePrefix >(), requireType< typename PB::Node >(), requireType< typename PB::IndexSet >(), requireSameType< typename PB::GridView, GridView >(), const_cast< PB & >(preBasis).initializeIndices(), requireConvertible< typename PB::GridView >(preBasis.gridView()), requireConvertible< typename PB::Node >(preBasis.makeNode()), requireConvertible< typename PB::IndexSet >(preBasis.makeIndexSet()), requireConvertible< typename PB::size_type >(preBasis.size()), requireConvertible< typename PB::size_type >(preBasis.size(std::declval< typename PB::SizePrefix >())), requireConvertible< typename PB::size_type >(preBasis.dimension()), requireConvertible< typename PB::size_type >(preBasis.maxNodeSize()), requireSameType< decltype(const_cast< PB & >(preBasis).update(preBasis.gridView())), void >(), requireConcept< BasisTree< typename PB::GridView >>(preBasis.makeNode()), requireConcept< NodeIndexSet< PB >>(preBasis.makeIndexSet()))
Definition: functionspacebases/concepts.hh:173
auto require(const V &localView) -> decltype(requireType< typename V::size_type >(), requireType< typename V::MultiIndex >(), requireType< typename V::GlobalBasis >(), requireType< typename V::Tree >(), requireType< typename V::GridView >(), requireType< typename V::Element >(), requireSameType< typename V::GlobalBasis, GlobalBasis >(), requireSameType< typename V::GridView, typename GlobalBasis::GridView >(), requireSameType< typename V::size_type, typename GlobalBasis::size_type >(), requireSameType< typename V::Element, typename GlobalBasis::GridView::template Codim< 0 >::Entity >(), const_cast< V & >(localView).bind(std::declval< typename V::Element >()), const_cast< V & >(localView).unbind(), requireConvertible< typename V::Tree >(localView.tree()), requireConvertible< typename V::size_type >(localView.size()), requireConvertible< typename V::MultiIndex >(localView.index(std::declval< typename V::size_type >())), requireConvertible< typename V::size_type >(localView.maxSize()), requireConvertible< typename V::GlobalBasis >(localView.globalBasis()), requireConcept< BasisTree< typename V::GridView >>(localView.tree()), 0)
Definition: functionspacebases/concepts.hh:203
auto require(const B &basis) -> decltype(requireType< typename B::GridView >(), requireType< typename B::size_type >(), requireType< typename B::MultiIndex >(), requireType< typename B::SizePrefix >(), requireType< typename B::LocalView >(), requireSameType< typename B::GridView, GridView >(), requireConvertible< typename B::GridView >(basis.gridView()), requireConvertible< typename B::LocalView >(basis.localView()), requireConvertible< typename B::size_type >(basis.size()), requireConvertible< typename B::size_type >(basis.size(std::declval< typename B::SizePrefix >())), requireConvertible< typename B::size_type >(basis.dimension()), requireSameType< decltype(const_cast< B & >(basis).update(basis.gridView())), void >(), requireConcept< LocalView< B >>(basis.localView()))