dune-localfunctions
2.2.0
|
00001 // -*- tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- 00002 // vi: set et ts=2 sw=2 sts=2: 00003 #ifndef DUNE_Q2_LOCALFINITEELEMENT_HH 00004 #define DUNE_Q2_LOCALFINITEELEMENT_HH 00005 00006 #include <dune/geometry/type.hh> 00007 00008 #include <dune/localfunctions/common/localfiniteelementtraits.hh> 00009 #include <dune/localfunctions/common/localtoglobaladaptors.hh> 00010 #include "q2/q2localbasis.hh" 00011 #include "q2/q2localcoefficients.hh" 00012 #include "q2/q2localinterpolation.hh" 00013 00014 namespace Dune 00015 { 00016 00022 template<class D, class R, int dim> 00023 class Q2LocalFiniteElement 00024 { 00025 public: 00028 typedef LocalFiniteElementTraits<Q2LocalBasis<D,R,dim>,Q2LocalCoefficients<dim>, 00029 Q2LocalInterpolation<Q2LocalBasis<D,R,dim> > > Traits; 00030 00033 Q2LocalFiniteElement () 00034 { 00035 gt.makeCube(dim); 00036 } 00037 00040 const typename Traits::LocalBasisType& localBasis () const 00041 { 00042 return basis; 00043 } 00044 00047 const typename Traits::LocalCoefficientsType& localCoefficients () const 00048 { 00049 return coefficients; 00050 } 00051 00054 const typename Traits::LocalInterpolationType& localInterpolation () const 00055 { 00056 return interpolation; 00057 } 00058 00061 GeometryType type () const 00062 { 00063 return gt; 00064 } 00065 00066 private: 00067 Q2LocalBasis<D,R,dim> basis; 00068 Q2LocalCoefficients<dim> coefficients; 00069 Q2LocalInterpolation<Q2LocalBasis<D,R,dim> > interpolation; 00070 GeometryType gt; 00071 }; 00072 00074 00079 template<class Geometry, class RF> 00080 class Q2FiniteElementFactory : 00081 public ScalarLocalToGlobalFiniteElementAdaptorFactory< 00082 Q2LocalFiniteElement<typename Geometry::ctype, RF, Geometry::mydimension>, Geometry 00083 > 00084 { 00085 typedef Q2LocalFiniteElement<typename Geometry::ctype, RF, Geometry::mydimension> LFE; 00086 typedef ScalarLocalToGlobalFiniteElementAdaptorFactory<LFE, Geometry> Base; 00087 00088 static const LFE lfe; 00089 00090 public: 00092 Q2FiniteElementFactory() : Base(lfe) {} 00093 }; 00094 00095 template<class Geometry, class RF> 00096 const typename Q2FiniteElementFactory<Geometry, RF>::LFE 00097 Q2FiniteElementFactory<Geometry, RF>::lfe; 00098 } 00099 00100 #endif