3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
7#include <dune/common/exceptions.hh>
33template<
typename GV,
int k>
36template<
typename GV,
int k,
class MI>
39 static const int dim = GV::dimension;
61 using IndexSet = Impl::DefaultNodeIndexSet<LagrangeDGPreBasis>;
126 [[deprecated(
"Warning: The IndexSet typedef and the makeIndexSet method are deprecated. "\
127 "As a replacement use the indices() method of the PreBasis directly.")]]
151 DUNE_THROW(Dune::NotImplemented,
"No size method for " << dim <<
"d grids available yet!");
157 assert(prefix.size() == 0 || prefix.size() == 1);
158 return (prefix.size() == 0) ?
size() : 0;
169 return StaticPower<(k+1),GV::dimension>::power;
172 template<
typename It>
175 const auto& gridIndexSet =
gridView().indexSet();
176 const auto& element = node.
element();
178 for (
size_type i = 0, end = node.
size() ; i < end ; ++i, ++it)
184 *it = {
dofsPerEdge*gridIndexSet.subIndex(element,0,0) + i};
189 if (element.type().isTriangle())
194 else if (element.type().isQuadrilateral())
200 DUNE_THROW(Dune::NotImplemented,
"2d elements have to be triangles or quadrilaterals");
204 if (element.type().isTetrahedron())
209 else if (element.type().isPrism())
214 else if (element.type().isHexahedron())
219 else if (element.type().isPyramid())
225 DUNE_THROW(Dune::NotImplemented,
"3d elements have to be tetrahedrons, prisms, hexahedrons or pyramids");
228 DUNE_THROW(Dune::NotImplemented,
"No index method for " << dim <<
"d grids available yet!");
245namespace BasisFactory {
249template<std::
size_t k>
250class LagrangeDGPreBasisFactory
253 static const std::size_t requiredMultiIndexSize = 1;
255 template<
class MultiIndex,
class Gr
idView>
256 auto makePreBasis(
const GridView& gridView)
const
274template<std::
size_t k>
277 return Imp::LagrangeDGPreBasisFactory<k>();
295template<
typename GV,
int k>
auto lagrangeDG()
Create a pre-basis factory that can create a LagrangeDG pre-basis.
Definition: lagrangedgbasis.hh:275
Definition: polynomial.hh:10
Global basis for given pre-basis.
Definition: defaultglobalbasis.hh:47
Definition: lagrangebasis.hh:406
const Element & element() const
Return current element, throw if unbound.
Definition: lagrangebasis.hh:458
Definition: lagrangedgbasis.hh:38
size_t pyramidOffset_
Definition: lagrangedgbasis.hh:238
static const int dofsPerPyramid
Definition: lagrangedgbasis.hh:55
Node makeNode() const
Create tree node.
Definition: lagrangedgbasis.hh:114
size_type maxNodeSize() const
Definition: lagrangedgbasis.hh:167
GridView gridView_
Definition: lagrangedgbasis.hh:235
GV GridView
The grid view that the FE space is defined on.
Definition: lagrangedgbasis.hh:44
size_type dimension() const
Definition: lagrangedgbasis.hh:162
Dune::ReservedVector< size_type, 1 > SizePrefix
Definition: lagrangedgbasis.hh:66
static const int dofsPerHexahedron
Definition: lagrangedgbasis.hh:54
static const int dofsPerEdge
Definition: lagrangedgbasis.hh:49
std::size_t size_type
Definition: lagrangedgbasis.hh:45
static const int dofsPerQuad
Definition: lagrangedgbasis.hh:51
size_t hexahedronOffset_
Definition: lagrangedgbasis.hh:240
Impl::DefaultNodeIndexSet< LagrangeDGPreBasis > IndexSet
Type of created tree node index set.
Definition: lagrangedgbasis.hh:61
static const int dofsPerPrism
Definition: lagrangedgbasis.hh:53
void update(const GridView &gv)
Definition: lagrangedgbasis.hh:106
static const int dofsPerTriangle
Definition: lagrangedgbasis.hh:50
LagrangeDGPreBasis(const GridView &gv)
Constructor for a given grid view object.
Definition: lagrangedgbasis.hh:69
IndexSet makeIndexSet() const
Create tree node index set.
Definition: lagrangedgbasis.hh:128
size_type size(const SizePrefix prefix) const
Return number possible values for next position in multi index.
Definition: lagrangedgbasis.hh:155
size_type size() const
Definition: lagrangedgbasis.hh:133
static const int dofsPerTetrahedron
Definition: lagrangedgbasis.hh:52
MI MultiIndex
Type used for global numbering of the basis vectors.
Definition: lagrangedgbasis.hh:64
size_t prismOffset_
Definition: lagrangedgbasis.hh:239
size_t quadrilateralOffset_
Definition: lagrangedgbasis.hh:237
It indices(const Node &node, It it) const
Definition: lagrangedgbasis.hh:173
const GridView & gridView() const
Obtain the grid view that the basis is defined on.
Definition: lagrangedgbasis.hh:101
void initializeIndices()
Definition: lagrangedgbasis.hh:74
size_type size() const
Definition: nodes.hh:140