dune-localfunctions
2.2.0
|
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