dune-localfunctions  2.2.0
mimeticall.hh
Go to the documentation of this file.
00001 // -*- tab-width: 4; indent-tabs-mode: nil -*-
00002 #ifndef DUNE_MIMETIC_ALL_HH
00003 #define DUNE_MIMETIC_ALL_HH
00004 
00005 #include <cstddef>
00006 
00007 #include <dune/common/exceptions.hh>
00008 #include <dune/common/fvector.hh>
00009 #include <dune/common/fmatrix.hh>
00010 
00011 #include <dune/geometry/type.hh>
00012 
00013 #include "../common/localbasis.hh"
00014 #include "../common/localkey.hh"
00015 
00016 namespace Dune 
00017 {
00018   template<class D, class R, int dim>
00019   class MimeticLocalBasis 
00020   {
00021   public:
00022         typedef Dune::LocalBasisTraits<D,dim,Dune::FieldVector<D,dim>,
00023                                                                          R,1,Dune::FieldVector<R,1>, Dune::FieldMatrix<R,1,dim> > Traits;
00024 
00025         MimeticLocalBasis (unsigned int variant_)
00026           : variant(variant_)
00027         {
00028         }
00029         
00030         MimeticLocalBasis ()
00031           : variant(0)
00032         {
00033         }
00034 
00035         unsigned int size () const { return variant; }
00036 
00038         inline void evaluateFunction (
00039                                                                   const typename Traits::DomainType& in,
00040                                                                   std::vector<typename Traits::RangeType>& out) const 
00041         { 
00042           DUNE_THROW(Dune::Exception,"mimetic basis evaluation not available");    
00043         }
00044   
00046         inline void evaluateJacobian (
00047                                                                   const typename Traits::DomainType& in,
00048                                                                   std::vector<typename Traits::JacobianType>& out) const 
00049         { 
00050           DUNE_THROW(Dune::Exception,"mimetic basis Jacobian evaluation not available");    
00051         }
00052 
00054         unsigned int order () const  
00055         {
00056           DUNE_THROW(Dune::Exception,"mimetic order evaluation not available");    
00057         }
00058 
00059   private:
00060         unsigned int variant;
00061   };
00062 
00063   template<class LB>
00064   class MimeticLocalInterpolation 
00065   {
00066   public:
00067 
00069         template<typename F, typename C>
00070         void interpolate (const F& f, std::vector<C>& out) const {
00071           DUNE_THROW(Dune::Exception,"mimetic local interpolation not available");    
00072         }
00073   };
00074 
00078   class MimeticLocalCoefficients 
00079   {
00080   public:
00081         MimeticLocalCoefficients (unsigned int variant_) 
00082           : variant(variant_), li(variant_)  
00083         {
00084         for (unsigned int i=0; i<variant; i++) 
00085             li[i] = Dune::LocalKey(i,Dune::LocalKey::intersectionCodim,0);
00086         }
00087   
00088         MimeticLocalCoefficients () 
00089           : variant(0), li(0)  
00090         {
00091         }
00092   
00094         std::size_t size () const { return variant; }
00095   
00097         const Dune::LocalKey& localKey (std::size_t i) const  {
00098           return li[i];
00099         }
00100   
00101   private:
00102         unsigned int variant;
00103         std::vector<Dune::LocalKey> li;
00104   };
00105 }
00106 
00107 #endif