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