dune-pdelab  2.0.0
raviartthomasfem.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil -*-
2 #ifndef DUNE_PDELAB_FINITEELEMENTMAP_RAVIARTTHOMASFEM_HH
3 #define DUNE_PDELAB_FINITEELEMENTMAP_RAVIARTTHOMASFEM_HH
4 
5 #include <dune/common/static_assert.hh>
6 #include <dune/grid/common/capabilities.hh>
7 
16 
17 
18 namespace Dune {
19  namespace PDELab {
20 
21 #ifndef DOXYGEN
22 
23  namespace detail {
24 
26 
31  template<typename GV, int dim, GeometryType::BasicType basic_type, typename D, typename R, std::size_t k>
32  struct RaviartThomasLocalFiniteElementMapBaseSelector
33  {
34  dune_static_assert((AlwaysFalse<GV>::value),"The requested type of Raviart-Thomas element is not implemented, sorry!");
35  };
36 
37 
38  // ********************************************************************************
39  // Specializations
40  // ********************************************************************************
41 
42  template<typename GV, typename D, typename R>
43  struct RaviartThomasLocalFiniteElementMapBaseSelector<GV,2,GeometryType::simplex,D,R,0>
44  {
45  typedef RT0Simplex2DLocalFiniteElementMap<GV,D,R> type;
46  };
47 
48  template<typename GV, typename D, typename R>
49  struct RaviartThomasLocalFiniteElementMapBaseSelector<GV,2,GeometryType::simplex,D,R,1>
50  {
51  typedef RT1Simplex2DLocalFiniteElementMap<GV,D,R> type;
52  };
53 
54 
55  template<typename GV, typename D, typename R>
56  struct RaviartThomasLocalFiniteElementMapBaseSelector<GV,2,GeometryType::cube,D,R,0>
57  {
58  typedef RT0Cube2DLocalFiniteElementMap<GV,D,R> type;
59  };
60 
61  template<typename GV, typename D, typename R>
62  struct RaviartThomasLocalFiniteElementMapBaseSelector<GV,2,GeometryType::cube,D,R,1>
63  {
64  typedef RT1Cube2DLocalFiniteElementMap<GV,D,R> type;
65  };
66 
67  template<typename GV, typename D, typename R>
68  struct RaviartThomasLocalFiniteElementMapBaseSelector<GV,2,GeometryType::cube,D,R,2>
69  {
70  typedef RT2Cube2DLocalFiniteElementMap<GV,D,R> type;
71  };
72 
73 
74  template<typename GV, typename D, typename R>
75  struct RaviartThomasLocalFiniteElementMapBaseSelector<GV,3,GeometryType::cube,D,R,0>
76  {
77  typedef RT0Cube3DLocalFiniteElementMap<GV,D,R> type;
78  };
79 
80  template<typename GV, typename D, typename R>
81  struct RaviartThomasLocalFiniteElementMapBaseSelector<GV,3,GeometryType::cube,D,R,1>
82  {
83  typedef RT1Cube3DLocalFiniteElementMap<GV,D,R> type;
84  };
85 
86  } // end namespace detail
87 
88 #endif // DOXYGEN
89 
90 
92 
113  template<typename GV,
114  typename D,
115  typename R,
116  std::size_t k,
117  GeometryType::BasicType basic_type = BasicTypeFromDimensionAndTopologyId<
118  GV::dimension,
119  Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId
120  >::value
121  >
123  public detail::RaviartThomasLocalFiniteElementMapBaseSelector<GV,GV::dimension,basic_type,D,R,k>::type
124  {
125 
126  public:
127 
130  : detail::RaviartThomasLocalFiniteElementMapBaseSelector<GV,GV::dimension,basic_type,D,R,k>::type(gv)
131  {}
132 
133  };
134 
135 #ifndef DOXYGEN
136 
137  // Specialization for grids that don't provide a valid topology id for their cells.
138  template<typename GV, typename D, typename R, std::size_t k>
139  class RaviartThomasLocalFiniteElementMap<GV,D,R,k,GeometryType::none>
140  {
141  dune_static_assert((AlwaysFalse<GV>::value),
142  "Your chosen grid does not export a usable topology id for its cells."
143  "Please provide the correct GeometryType::BasicType as an additional template parameter.");
144  };
145 
146 #endif // DOXYGEN
147 
148  } // end namespace PDELab
149 } // end namespace Dune
150 
151 #endif // DUNE_PDELAB_FINITEELEMENTMAP_RAVIARTTHOMASFEM_HH
RaviartThomasLocalFiniteElementMap(const GV &gv)
Constructs a finite element map on the GridView gv.
Definition: raviartthomasfem.hh:129
Raviart-Thomas elements of order k.
Definition: raviartthomasfem.hh:122
static const unsigned int value
Definition: gridfunctionspace/tags.hh:175