dune-localfunctions 3.0-git
pqkfactory.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3#ifndef DUNE_PQK_FACTORY_HH
4#define DUNE_PQK_FACTORY_HH
5
6#include <map>
7
8#include <dune/geometry/type.hh>
9
12
21
22namespace Dune
23{
24
29 template<class D, class R, int d, int k>
40
45 template<class D, class R, int k>
47 {
53
55 static LocalFiniteElementVirtualInterface<T>* create(const GeometryType& gt)
56 {
57 if ((gt.isPrism())and (k==1))
59 if ((gt.isPrism())and (k==2))
61 if ((gt.isPyramid())and (k==1))
63 if ((gt.isPyramid())and (k==2))
65 return 0;
66 }
67 };
68
69
73 template<class D, class R, int dim, int k>
98
99
100
111 template<class D, class R, int dim, int k>
113 {
114 protected:
117 typedef typename std::map<GeometryType,FE*> FEMap;
118
119 public:
122
125
128 {
129 typename FEMap::iterator it = other.cache_.begin();
130 typename FEMap::iterator end = other.cache_.end();
131 for(; it!=end; ++it)
132 cache_[it->first] = (it->second)->clone();
133 }
134
136 {
137 typename FEMap::iterator it = cache_.begin();
138 typename FEMap::iterator end = cache_.end();
139 for(; it!=end; ++it)
140 delete it->second;
141 }
142
144 const FiniteElementType& get(const GeometryType& gt) const
145 {
146 typename FEMap::const_iterator it = cache_.find(gt);
147 if (it==cache_.end())
148 {
150 if (fe==0)
151 DUNE_THROW(Dune::NotImplemented,"No Pk/Qk like local finite element available for geometry type " << gt << " and order " << k);
152
153 cache_[gt] = fe;
154 return *fe;
155 }
156 return *(it->second);
157 }
158
159 protected:
160 mutable FEMap cache_;
161
162 };
163
164}
165
166#endif
Definition brezzidouglasmarini1cube2d.hh:14
Construct LocalBasisTraits with fixed diff order.
Definition virtualinterface.hh:58
virtual base class for local finite elements with functions
Definition virtualinterface.hh:393
class for wrapping a finite element using the virtual interface
Definition virtualwrappers.hh:308
The local p0 finite element on all types of reference elements.
Definition p0.hh:23
General Lagrange finite element with arbitrary dimension and polynomial order.
Definition pk.hh:25
Factory that only creates dimension specific local finite elements.
Definition pqkfactory.hh:31
static LocalFiniteElementVirtualInterface< T > * create(const GeometryType &gt)
create finite element for given GeometryType
Definition pqkfactory.hh:35
FixedOrderLocalBasisTraits< typenameP0LocalFiniteElement< D, R, d >::Traits::LocalBasisType::Traits, 0 >::Traits T
Definition pqkfactory.hh:32
FixedOrderLocalBasisTraits< typenameP0LocalFiniteElement< D, R, 3 >::Traits::LocalBasisType::Traits, 0 >::Traits T
Definition pqkfactory.hh:48
static LocalFiniteElementVirtualInterface< T > * create(const GeometryType &gt)
create finite element for given GeometryType
Definition pqkfactory.hh:55
PyramidP1LocalFiniteElement< D, R > PyramidP1
Definition pqkfactory.hh:51
PrismP2LocalFiniteElement< D, R > PrismP2
Definition pqkfactory.hh:50
PyramidP2LocalFiniteElement< D, R > PyramidP2
Definition pqkfactory.hh:52
PrismP1LocalFiniteElement< D, R > PrismP1
Definition pqkfactory.hh:49
Factory to create any kind of Pk/Qk like element wrapped for the virtual interface.
Definition pqkfactory.hh:75
QkLocalFiniteElement< D, R, dim, k > Qk
Definition pqkfactory.hh:80
P0LocalFiniteElement< D, R, dim > P0
Definition pqkfactory.hh:78
LocalFiniteElementVirtualInterface< T > FiniteElementType
Definition pqkfactory.hh:77
static FiniteElementType * create(const GeometryType &gt)
create finite element for given GeometryType
Definition pqkfactory.hh:84
FixedOrderLocalBasisTraits< typenameP0LocalFiniteElement< D, R, dim >::Traits::LocalBasisType::Traits, 0 >::Traits T
Definition pqkfactory.hh:76
PkLocalFiniteElement< D, R, dim, k > Pk
Definition pqkfactory.hh:79
A cache that stores all available Pk/Qk like local finite elements for the given dimension and order.
Definition pqkfactory.hh:113
LocalFiniteElementVirtualInterface< T > FE
Definition pqkfactory.hh:116
PQkLocalFiniteElementCache()
Default constructor.
Definition pqkfactory.hh:124
FE FiniteElementType
Type of the finite elements stored in this cache.
Definition pqkfactory.hh:121
std::map< GeometryType, FE * > FEMap
Definition pqkfactory.hh:117
const FiniteElementType & get(const GeometryType &gt) const
Get local finite element for given GeometryType.
Definition pqkfactory.hh:144
FEMap cache_
Definition pqkfactory.hh:160
~PQkLocalFiniteElementCache()
Definition pqkfactory.hh:135
FixedOrderLocalBasisTraits< typenameP0LocalFiniteElement< D, R, dim >::Traits::LocalBasisType::Traits, 0 >::Traits T
Definition pqkfactory.hh:115
PQkLocalFiniteElementCache(const PQkLocalFiniteElementCache &other)
Copy constructor.
Definition pqkfactory.hh:127
First-order Lagrangian finite element on a prism.
Definition prismp1.hh:21
Definition prismp2.hh:20
First-order Lagrangian finite element on a prism.
Definition pyramidp1.hh:22
Definition pyramidp2.hh:20
General Lagrange finite element for cubes with arbitrary dimension and polynomial order.
Definition qk.hh:22