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