4 #ifndef DUNE_MONOMLOCALFINITEELEMENT_HH
5 #define DUNE_MONOMLOCALFINITEELEMENT_HH
12 #include <dune/common/shared_ptr.hh>
13 #include <dune/common/static_assert.hh>
15 #include <dune/geometry/type.hh>
37 template<
class D,
class R,
int d,
int p,
int diffOrder = p>
53 : basis(), interpolation(gt_, basis), gt(gt_)
104 template<
class Geometry,
class RF, std::
size_t p>
106 typedef typename Geometry::ctype DF;
107 static const std::size_t dim = Geometry::mydimension;
111 std::vector<shared_ptr<const LocalFE> > localFEs;
113 void init(
const GeometryType >) {
114 std::size_t index = gt.id() >> 1;
115 if(localFEs.size() <= index)
116 localFEs.resize(index+1);
117 localFEs[index].reset(
new LocalFE(gt));
129 template<
class ForwardIterator>
131 const ForwardIterator &end)
133 for(ForwardIterator it = begin; it != end; ++it)
149 dune_static_assert(dim <= 3,
"MonomFiniteElementFactory knows the "
150 "available geometry types only up to dimension 3");
155 gt.makeVertex(); init(gt);
158 gt.makeLine(); init(gt);
161 gt.makeTriangle(); init(gt);
162 gt.makeQuadrilateral(); init(gt);
165 gt.makeTetrahedron(); init(gt);
166 gt.makePyramid(); init(gt);
167 gt.makePrism(); init(gt);
168 gt.makeHexahedron(); init(gt);
189 std::size_t index = geometry.
type().id() >> 1;
190 assert(localFEs.size() > index && localFEs[index]);
196 #endif // DUNE_MONOMLOCALFINITEELEMENT_HH