dune-localfunctions  2.2.0
interface.hh
Go to the documentation of this file.
00001 // -*- tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
00002 // vi: set et ts=8 sw=2 sts=2:
00003 
00004 #ifndef DUNE_LOCALFUNCTIONS_INTERFACE_HH
00005 #define DUNE_LOCALFUNCTIONS_INTERFACE_HH
00006 
00007 #ifndef HEADERCHECK
00008 #error This header exists for documentation purposes only and should never be included directly.
00009 #endif
00010 
00011 #include <cstddef>
00012 #include <vector>
00013 
00014 #include <dune/common/array.hh>
00015 
00016 #include <dune/geometry/type.hh>
00017 
00018 #include <dune/localfunctions/common/localkey.hh>
00019 
00020 namespace Dune {
00021 
00023   class FiniteElementInterface
00024   {
00025     struct ImplementationDefined;
00026 
00027   public:
00029 
00032     struct Traits
00033     {
00035 
00040       typedef ImplementationDefined Basis;
00042 
00047       typedef ImplementationDefined Coefficients;
00049 
00054       typedef ImplementationDefined Interpolation;
00055     };
00056 
00058 
00065     FiniteElementInterface(...);
00067     FiniteElementInterface(const FiniteElementInterface&);
00068 
00070 
00074     const Traits::Basis& basis() const;
00076 
00080     const Traits::Coefficients& coefficients() const;
00082 
00086     const Traits::Interpolation& interpolation() const;
00088     GeometryType type() const;
00089   };
00090 
00092 
00112   template<class Geometry, class VertexOrder>
00113   class FiniteElementFactoryInterface
00114   {
00115     struct ImplementationDefined;
00116 
00117   public:
00119 
00124     typedef ImplementationDefined FiniteElement;
00125 
00127 
00130     FiniteElementFactoryInterface(...);
00131 
00151 
00152 
00154     const FiniteElement make(const Geometry&, const VertexOrder&, ...);
00156     const FiniteElement make(const Geometry&, ...);
00158     const FiniteElement make(const VertexOrder&, ...);
00160 
00164     const FiniteElement make(const GeometryType&, ...);
00166     const FiniteElement make(...);
00167 
00169 
00170   };
00171 
00173   class BasisInterface
00174   {
00175     struct ImplementationDefined;
00176     enum { implementationDefined };
00177 
00178   public:
00180 
00185     struct Traits
00186     {
00189 
00191       typedef ImplementationDefined DomainField;
00193       static const std::size_t dimDomainLocal = implementationDefined;
00195       static const std::size_t dimDomainGlobal = implementationDefined;
00197       typedef ImplementationDefined DomainLocal;
00199       typedef ImplementationDefined DomainGlobal;
00200 
00202 
00205 
00207       typedef ImplementationDefined RangeField;
00209       static const std::size_t dimRange = implementationDefined;
00211       typedef ImplementationDefined Range;
00212 
00214 
00216 
00220       typedef ImplementationDefined Jacobian;
00221 
00223       static const std::size_t diffOrder = implementationDefined;
00224     };
00225 
00227     std::size_t size () const;
00229     std::size_t order () const;
00230 
00232     void evaluateFunction(const Traits::DomainLocal& in,
00233                           std::vector<Traits::Range>& out) const;
00234 
00236 
00239     void evaluateJacobian(const Traits::DomainLocal& in,
00240                           std::vector<Traits::Jacobian>& out) const;
00241 
00243 
00246     void evaluate
00247     ( const array<std::size_t, Traits::dimDomainGlobal>& directions,
00248       const Traits::DomainLocal& in,
00249       std::vector<Traits::Range>& out) const;
00250   };
00251 
00253   struct InterpolationInterface
00254   {
00256 
00259     typedef BasisInterface::Traits Traits;
00260 
00262 
00271     template<typename F, typename C>
00272     void interpolate (const F& f, std::vector<C>& out) const;
00273   };
00274 
00276 
00281   struct CoefficientsInterface
00282   {
00284     std::size_t size() const;
00285 
00287     const LocalKey& localKey(std::size_t i) const;
00288   };
00289 }
00290 #endif // DUNE_LOCALFUNCTIONS_INTERFACE_HH