dune-localfunctions  2.1.1
dglocalcoefficients.hh
Go to the documentation of this file.
00001 #ifndef DUNE_DGLOCALCOEFFICIENTS_HH
00002 #define DUNE_DGLOCALCOEFFICIENTS_HH
00003 
00004 #include <cassert>
00005 #include <vector>
00006 
00007 #include <dune/grid/common/topologyfactory.hh>
00008 #include <dune/localfunctions/common/localkey.hh>
00009 
00010 namespace Dune
00011 {
00012 
00013   // DGLocalCoefficients
00014   // -------------------
00015   
00019   class DGLocalCoefficients
00020   {
00021     typedef DGLocalCoefficients This;
00022 
00023   public:
00025     DGLocalCoefficients ( const unsigned int n )
00026     : localKey_( n )
00027     {
00028       for( unsigned i = 0; i < n; ++i )
00029         localKey_[ i ] = LocalKey( 0, 0, i );
00030     }
00031 
00032     const LocalKey &localKey ( const unsigned int i ) const
00033     {
00034       assert( i < size() );
00035       return localKey_[ i ];
00036     }
00037 
00038     unsigned int size () const
00039     {
00040       return localKey_.size();
00041     }
00042 
00043   private:
00044     std::vector< LocalKey > localKey_;
00045   };
00046 
00047 
00048 
00049   // DGLocalCoefficientsFactory
00050   // --------------------------
00054   template< class BasisCreator >
00055   struct DGLocalCoefficientsFactory;
00056   template< class BasisFactory >
00057   struct DGLocalCoefficientsFactoryTraits
00058   {
00059     static const unsigned int dimension = BasisFactory::dimension;
00060     typedef typename BasisFactory::Key Key;
00061     typedef DGLocalCoefficients LocalCoefficients;
00062     typedef const DGLocalCoefficients Object;
00063     typedef DGLocalCoefficientsFactory<BasisFactory> Factory;
00064   };
00065 
00066   template< class BasisFactory >
00067   struct DGLocalCoefficientsFactory :
00068     public TopologyFactory< DGLocalCoefficientsFactoryTraits<BasisFactory> >
00069   {
00070     typedef DGLocalCoefficientsFactoryTraits<BasisFactory> Traits;
00071 
00072     static const unsigned int dimension = Traits::dimension;
00073     typedef typename Traits::Key Key;
00074     typedef typename Traits::Object Object;
00075 
00076     template< class Topology >
00077     static Object *createObject ( const Key &key )
00078     {
00079       const typename BasisFactory::Object *basis
00080         = BasisFactory::template create< Topology >( key );
00081       Object *coefficients = new Object( basis->size() );
00082       BasisFactory::release( basis );
00083       return coefficients;
00084     }
00085   };
00086 
00087 }
00088 
00089 #endif // #ifndef DUNE_DGLOCALCOEFFICIENTS_HH