3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
6#include <dune/common/exceptions.hh>
7#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>
11#include <dune/grid/common/mcmgmapper.hh>
32 template<
typename GV,
int k,
typename R=
double>
33 class HierarchicalLagrangeNode;
35 template<
typename GV,
int k,
typename R=
double>
36 class HierarchicalLagrangePreBasis;
47 template<
typename GV,
int k,
typename R>
50 static const int dim = GV::dimension;
106 template<
class SizePrefix>
109 assert(prefix.size() == 0 || prefix.size() == 1);
110 return (prefix.size() == 0) ?
size() : 0;
126 return Dune::binomial(std::size_t(
order() + (
unsigned int)GV::dimension),std::size_t(
order()));
129 template<
typename It>
134 Dune::LocalKey localKey = node.
finiteElement().localCoefficients().localKey(i);
135 const auto& element = node.
element();
157 static auto p2Layout()
159 return [](Dune::GeometryType type,
int gridDim)
165 if (type.isTriangle())
167 assert(type.isTetrahedron());
175 template<
typename GV,
int k,
typename R>
179 static const int dim = GV::dimension;
184 using Element =
typename GV::template Codim<0>::Entity;
185 using FiniteElement = HierarchicalP2LocalFiniteElement<typename GV::ctype,R,dim>;
213 DUNE_THROW(Dune::Exception,
214 "HierarchicalLagrange-elements do not exist for elements of type " << e.type());
232 namespace BasisFactory {
242 template<std::
size_t k,
typename R=
double>
245 return [](
const auto& gridView) {
262 template<
typename GV,
int k,
typename R=
double>
auto hierarchicalLagrange()
Create a pre-basis factory that can create a HierarchicalLagrange pre-basis.
Definition: hierarchicallagrangebasis.hh:243
Definition: polynomial.hh:10
Global basis for given pre-basis.
Definition: defaultglobalbasis.hh:46
Definition: hierarchicallagrangebasis.hh:178
HierarchicalP2LocalFiniteElement< typename GV::ctype, R, dim > FiniteElement
Definition: hierarchicallagrangebasis.hh:185
const Element & element() const
Return current element, throw if unbound.
Definition: hierarchicallagrangebasis.hh:193
void bind(const Element &e)
Bind to element.
Definition: hierarchicallagrangebasis.hh:208
const FiniteElement & finiteElement() const
Return the LocalFiniteElement for the element we are bound to.
Definition: hierarchicallagrangebasis.hh:202
const Element * element_
Definition: hierarchicallagrangebasis.hh:227
const FiniteElement finiteElement_
Definition: hierarchicallagrangebasis.hh:226
unsigned int order() const
Definition: hierarchicallagrangebasis.hh:221
HierarchicalLagrangeNode()
Definition: hierarchicallagrangebasis.hh:187
std::size_t size_type
Definition: hierarchicallagrangebasis.hh:183
typename GV::template Codim< 0 >::Entity Element
Definition: hierarchicallagrangebasis.hh:184
A pre-basis for a hierarchical basis.
Definition: hierarchicallagrangebasis.hh:49
std::size_t size_type
Type used for indices and size information.
Definition: hierarchicallagrangebasis.hh:58
unsigned int order() const
Definition: hierarchicallagrangebasis.hh:145
Node makeNode() const
Create tree node.
Definition: hierarchicallagrangebasis.hh:94
size_type maxNodeSize() const
Get the maximal number of DOFs associated to node for any element.
Definition: hierarchicallagrangebasis.hh:123
static constexpr size_type multiIndexBufferSize
Definition: hierarchicallagrangebasis.hh:65
void update(const GridView &gv)
Update the stored grid view & MultipleCodimMultipleGeomTypeMapper, to be called if the grid has chang...
Definition: hierarchicallagrangebasis.hh:85
MultipleCodimMultipleGeomTypeMapper< GridView > mcmgMapper_
Definition: hierarchicallagrangebasis.hh:150
size_type dimension() const
Get the total dimension of the space spanned by this basis.
Definition: hierarchicallagrangebasis.hh:114
GV GridView
The grid view that the FE basis is defined on.
Definition: hierarchicallagrangebasis.hh:55
HierarchicalLagrangePreBasis(const GridView &gv)
Constructor for a given grid view object with layout for second order.
Definition: hierarchicallagrangebasis.hh:71
static constexpr size_type maxMultiIndexSize
Definition: hierarchicallagrangebasis.hh:63
size_type size(const SizePrefix prefix) const
Return number of possible values for next position in multi index.
Definition: hierarchicallagrangebasis.hh:107
const GridView & gridView() const
Obtain the grid view that the basis is defined on.
Definition: hierarchicallagrangebasis.hh:79
GridView gridView_
Definition: hierarchicallagrangebasis.hh:143
size_type size() const
Same as size(prefix) with empty prefix.
Definition: hierarchicallagrangebasis.hh:100
void initializeIndices()
Initialize the global indices.
Definition: hierarchicallagrangebasis.hh:75
It indices(const Node &node, It it) const
Definition: hierarchicallagrangebasis.hh:130
static constexpr size_type minMultiIndexSize
Definition: hierarchicallagrangebasis.hh:64
void setSize(const size_type size)
Definition: nodes.hh:164