dune-localfunctions  2.2.0
q2.hh
Go to the documentation of this file.
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