dune-localfunctions  2.3beta2
dualpq1factory.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_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
4 #define DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
5 
8 
10 
11 namespace Dune {
12 
13 template<class D, class R, int dim>
15 {
16 protected:
21  typedef std::map<Dune::GeometryType,FE*> FEMap;
22 
23 public:
26 
28  {
29  typename FEMap::iterator it = cache_.begin();
30  typename FEMap::iterator end = cache_.end();
31  for(; it!=end; ++it)
32  delete it->second;
33  }
34 
36  static FE* create(const Dune::GeometryType& gt)
37  {
38  if (gt.isSimplex())
40  if (gt.isCube())
42  return 0;
43  }
44 
46  const FiniteElementType& get(const Dune::GeometryType& gt) const
47  {
48  typename FEMap::const_iterator it = cache_.find(gt);
49  if (it==cache_.end())
50  {
51  FiniteElementType* fe = create(gt);
52 
53  if (fe==0)
54  DUNE_THROW(Dune::NotImplemented,"No Dual P/Q1 like local finite element available for geometry type " << gt);
55 
56  cache_[gt] = fe;
57  return *fe;
58  }
59  return *(it->second);
60  }
61 
62 protected:
63  mutable FEMap cache_;
64 };
65 
66 } // namespace Dune
67 
68 #endif // DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH