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_RAVIARTTHOMAS_CUBE_HH
4 #define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH
5 
6 #include "raviartthomas0cube2d.hh"
7 #include "raviartthomas0cube3d.hh"
8 #include "raviartthomas1cube2d.hh"
9 #include "raviartthomas1cube3d.hh"
10 #include "raviartthomas2cube2d.hh"
11 #include "raviartthomas3cube2d.hh"
12 #include "raviartthomas4cube2d.hh"
13 
14 /**
15  * \file
16  * \brief Convenience header that includes all available Raviart-Thomas
17  *        local finite elements for cubes.
18  */
19 
20 namespace Dune
21 {
22   /**
23    * \brief Raviart-Thomas local finite elements for cubes.
24    *
25    * Convenience class to access all implemented Raviart-Thomas local
26    * finite elements for cubes.
27    * Generic Raviart-Thomas local finite elements for cubes like for
28    * simpleces could be written.
29    *
30    * \ingroup RaviartThomas
31    *
32    * \tparam D type to represent the field in the domain.
33    * \tparam R type to represent the field in the range.
34    * \tparam dim dimension of the reference elements, must be 2 or 3.
35    * \tparam order order of the element, depending on \a dim it can be 0, 1, or 2.
36    */
37   template<class D, class R, unsigned int dim, unsigned int order>
38   class RaviartThomasCubeLocalFiniteElement;
39 
40   /**
41    * \brief Raviart-Thomas local finite elements for cubes with dimension 2 and order 0.
42    */
43   template<class D, class R>
44   class RaviartThomasCubeLocalFiniteElement<D, R, 2, 0>
45     : public RT0Cube2DLocalFiniteElement<D, R>
46   {
47   public:
RaviartThomasCubeLocalFiniteElement()48     RaviartThomasCubeLocalFiniteElement()
49       : RT0Cube2DLocalFiniteElement<D, R>::RT0Cube2DLocalFiniteElement()
50     {}
51 
RaviartThomasCubeLocalFiniteElement(int s)52     RaviartThomasCubeLocalFiniteElement(int s)
53       : RT0Cube2DLocalFiniteElement<D, R>::RT0Cube2DLocalFiniteElement(s)
54     {}
55   };
56 
57   /**
58    * \brief Raviart-Thomas local finite elements for cubes with dimension 2 and order 1.
59    */
60   template<class D, class R>
61   class RaviartThomasCubeLocalFiniteElement<D, R, 2, 1>
62     : public RT1Cube2DLocalFiniteElement<D, R>
63   {
64   public:
RaviartThomasCubeLocalFiniteElement()65     RaviartThomasCubeLocalFiniteElement()
66       : RT1Cube2DLocalFiniteElement<D, R>::RT1Cube2DLocalFiniteElement()
67     {}
68 
RaviartThomasCubeLocalFiniteElement(int s)69     RaviartThomasCubeLocalFiniteElement(int s)
70       : RT1Cube2DLocalFiniteElement<D, R>::RT1Cube2DLocalFiniteElement(s)
71     {}
72   };
73 
74   /**
75    * \brief Raviart-Thomas local finite elements for cubes with dimension 2 and order 2.
76    */
77   template<class D, class R>
78   class RaviartThomasCubeLocalFiniteElement<D, R, 2, 2>
79     : public RT2Cube2DLocalFiniteElement<D, R>
80   {
81   public:
RaviartThomasCubeLocalFiniteElement()82     RaviartThomasCubeLocalFiniteElement()
83       : RT2Cube2DLocalFiniteElement<D, R>::RT2Cube2DLocalFiniteElement()
84     {}
85 
RaviartThomasCubeLocalFiniteElement(int s)86     RaviartThomasCubeLocalFiniteElement(int s)
87       : RT2Cube2DLocalFiniteElement<D, R>::RT2Cube2DLocalFiniteElement(s)
88     {}
89   };
90 
91   /**
92    * \brief Raviart-Thomas local finite elements for cubes with dimension 2 and order 3.
93    */
94   template<class D, class R>
95   class RaviartThomasCubeLocalFiniteElement<D, R, 2, 3>
96     : public RT3Cube2DLocalFiniteElement<D, R>
97   {
98   public:
RaviartThomasCubeLocalFiniteElement()99     RaviartThomasCubeLocalFiniteElement()
100       : RT3Cube2DLocalFiniteElement<D, R>::RT3Cube2DLocalFiniteElement()
101     {}
102 
RaviartThomasCubeLocalFiniteElement(int s)103     RaviartThomasCubeLocalFiniteElement(int s)
104       : RT3Cube2DLocalFiniteElement<D, R>::RT3Cube2DLocalFiniteElement(s)
105     {}
106   };
107 
108   /**
109    * \brief Raviart-Thomas local finite elements for cubes with dimension 2 and order 4.
110    */
111   template<class D, class R>
112   class RaviartThomasCubeLocalFiniteElement<D, R, 2, 4>
113     : public RT4Cube2DLocalFiniteElement<D, R>
114   {
115   public:
RaviartThomasCubeLocalFiniteElement()116     RaviartThomasCubeLocalFiniteElement()
117       : RT4Cube2DLocalFiniteElement<D, R>::RT4Cube2DLocalFiniteElement()
118     {}
119 
RaviartThomasCubeLocalFiniteElement(int s)120     RaviartThomasCubeLocalFiniteElement(int s)
121       : RT4Cube2DLocalFiniteElement<D, R>::RT4Cube2DLocalFiniteElement(s)
122     {}
123   };
124 
125   /**
126    * \brief Raviart-Thomas local finite elements for cubes with dimension 3 and order 0.
127    */
128   template<class D, class R>
129   class RaviartThomasCubeLocalFiniteElement<D, R, 3, 0>
130     : public RT0Cube3DLocalFiniteElement<D, R>
131   {
132   public:
RaviartThomasCubeLocalFiniteElement()133     RaviartThomasCubeLocalFiniteElement()
134       : RT0Cube3DLocalFiniteElement<D, R>::RT0Cube3DLocalFiniteElement()
135     {}
136 
RaviartThomasCubeLocalFiniteElement(int s)137     RaviartThomasCubeLocalFiniteElement(int s)
138       : RT0Cube3DLocalFiniteElement<D, R>::RT0Cube3DLocalFiniteElement(s)
139     {}
140   };
141 
142   /**
143    * \brief Raviart-Thomas local finite elements for cubes with dimension 3 and order 1.
144    */
145   template<class D, class R>
146   class RaviartThomasCubeLocalFiniteElement<D, R, 3, 1>
147     : public RT1Cube3DLocalFiniteElement<D, R>
148   {
149   public:
RaviartThomasCubeLocalFiniteElement()150     RaviartThomasCubeLocalFiniteElement()
151       : RT1Cube3DLocalFiniteElement<D, R>::RT1Cube3DLocalFiniteElement()
152     {}
153 
RaviartThomasCubeLocalFiniteElement(int s)154     RaviartThomasCubeLocalFiniteElement(int s)
155       : RT1Cube3DLocalFiniteElement<D, R>::RT1Cube3DLocalFiniteElement(s)
156     {}
157   };
158 } // namespace Dune
159 
160 #endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH
161