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 #include <dune/common/geometrytype.hh>
00016 
00017 #include <dune/localfunctions/common/localkey.hh>
00018 
00019 namespace Dune {
00020 
00022   class FiniteElementInterface
00023   {
00024     struct ImplementationDefined;
00025 
00026   public:
00028 
00031     struct Traits
00032     {
00034 
00039       typedef ImplementationDefined Basis;
00041 
00046       typedef ImplementationDefined Coefficients;
00048 
00053       typedef ImplementationDefined Interpolation;
00054     };
00055 
00057 
00064     FiniteElementInterface(...);
00066     FiniteElementInterface(const FiniteElementInterface&);
00067 
00069 
00073     const Traits::Basis& basis() const;
00075 
00079     const Traits::Coefficients& coefficients() const;
00081 
00085     const Traits::Interpolation& interpolation() const;
00087     GeometryType type() const;
00088   };
00089 
00091 
00111   template<class Geometry, class VertexOrder>
00112   class FiniteElementFactoryInterface
00113   {
00114     struct ImplementationDefined;
00115 
00116   public:
00118 
00123     typedef ImplementationDefined FiniteElement;
00124 
00126 
00129     FiniteElementFactoryInterface(...);
00130 
00150 
00151 
00153     const FiniteElement make(const Geometry&, const VertexOrder&, ...);
00155     const FiniteElement make(const Geometry&, ...);
00157     const FiniteElement make(const VertexOrder&, ...);
00159 
00163     const FiniteElement make(const GeometryType&, ...);
00165     const FiniteElement make(...);
00166 
00168 
00169   };
00170 
00172   class BasisInterface
00173   {
00174     struct ImplementationDefined;
00175     enum { implementationDefined };
00176 
00177   public:
00179 
00184     struct Traits
00185     {
00188 
00190       typedef ImplementationDefined DomainField;
00192       static const std::size_t dimDomainLocal = implementationDefined;
00194       static const std::size_t dimDomainGlobal = implementationDefined;
00196       typedef ImplementationDefined DomainLocal;
00198       typedef ImplementationDefined DomainGlobal;
00199 
00201 
00204 
00206       typedef ImplementationDefined RangeField;
00208       static const std::size_t dimRange = implementationDefined;
00210       typedef ImplementationDefined Range;
00211 
00213 
00215 
00219       typedef ImplementationDefined Jacobian;
00220 
00222       static const std::size_t diffOrder = implementationDefined;
00223     };
00224 
00226     std::size_t size () const;
00228     std::size_t order () const;
00229 
00231     void evaluateFunction(const Traits::DomainLocal& in,
00232                           std::vector<Traits::Range>& out) const;
00233 
00235 
00238     void evaluateJacobian(const Traits::DomainLocal& in,
00239                           std::vector<Traits::Jacobian>& out) const;
00240 
00242 
00245     void evaluate
00246     ( const array<std::size_t, Traits::dimDomainGlobal>& directions,
00247       const Traits::DomainLocal& in,
00248       std::vector<Traits::Range>& out) const;
00249   };
00250 
00252   struct InterpolationInterface
00253   {
00255 
00258     typedef BasisInterface::Traits Traits;
00259 
00261 
00270     template<typename F, typename C>
00271     void interpolate (const F& f, std::vector<C>& out) const;
00272   };
00273 
00275 
00280   struct CoefficientsInterface
00281   {
00283     std::size_t size() const;
00284 
00286     const LocalKey& localKey(std::size_t i) const;
00287   };
00288 }
00289 #endif // DUNE_LOCALFUNCTIONS_INTERFACE_HH

Generated on Fri Apr 29 2011 with Doxygen (ver 1.7.1) [doxygen-log,error-log].