1 #ifndef DUNE_GENERIC_LOCALFINITEELEMENT_HH
2 #define DUNE_GENERIC_LOCALFINITEELEMENT_HH
4 #include <dune/geometry/type.hh>
5 #include <dune/geometry/genericgeometry/conversion.hh>
19 template<
class BasisF,
class CoeffF,
class InterpolF>
24 typename CoeffF::Object,
27 typedef typename BasisF::Key
Key;
28 static const unsigned int dimDomain = BasisF::dimension;
35 "incompatible keys between BasisCreator and CoefficientsCreator" );
37 "incompatible keys between BasisCreator and InterpolationCreator" );
45 GenericGeometry::IfTopology< FiniteElement::template Maker, dimDomain >::apply( topologyId_, key_, finiteElement_ );
50 : topologyId_( gt.id() ),
54 GenericGeometry::IfTopology< FiniteElement::template Maker, dimDomain >::apply( topologyId_, key_, finiteElement_ );
59 : topologyId_( other.topologyId_ ),
63 GenericGeometry::IfTopology< FiniteElement::template Maker, dimDomain >::apply( topologyId_, key_, finiteElement_ );
68 finiteElement_.release();
75 return *(finiteElement_.basis_);
82 return *(finiteElement_.coeff_);
89 return *(finiteElement_.interpol_);
96 return GeometryType(topologyId_,
dimDomain);
113 FiniteElement() : basis_(0), coeff_(0), interpol_(0) {}
114 template <
class Topology>
115 void create(
const Key &key )
118 basis_ = BasisF::template create<Topology>(key);
119 coeff_ = CoeffF::template create<Topology>(key);
120 interpol_ = InterpolF::template create<Topology>(key);
125 BasisF::release(basis_);
127 CoeffF::release(coeff_);
129 InterpolF::release(interpol_);
134 template<
class Topology >
137 static void apply (
const Key &key, FiniteElement &finiteElement )
139 finiteElement.template create<Topology>(key);
146 unsigned int topologyId_;
148 FiniteElement finiteElement_;
160 DGLocalCoefficientsFactory< typename FE::BasisFactory >,
161 typename FE::InterpolationFactory>
165 typename FE::InterpolationFactory>
Base;
191 DGLocalCoefficientsFactory< typename FE::BasisFactory >,
192 LocalL2InterpolationFactory< typename FE::BasisFactory, false > >