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_ALBERTA_CAPABILITIES_HH
4 #define DUNE_ALBERTA_CAPABILITIES_HH
5 
6 #include <dune/geometry/type.hh>
7 
8 #include <dune/grid/common/capabilities.hh>
9 
10 #if HAVE_ALBERTA
11 
12 namespace Dune
13 {
14 
15   // External Forward Declarations
16   // -----------------------------
17 
18   template< int dim, int dimworld >
19   class AlbertaGrid;
20 
21 
22 
23   // Capabilities
24   // ------------
25 
26   namespace Capabilities
27   {
28 
29     /** \brief AlbertaGrid has only one geometry type for codim 0 entities
30        \ingroup AlbertaGrid
31      */
32     template< int dim, int dimworld >
33     struct hasSingleGeometryType< AlbertaGrid< dim, dimworld > >
34     {
35       static const bool v = true;
36       static const unsigned int topologyId = GeometryTypes::simplex(dim).id();
37     };
38 
39 
40     /** \brief   AlbertaGrid has entities for all codimensions
41      *  \ingroup AlbertaGrid
42      */
43     template< int dim, int dimworld, int codim >
44     struct hasEntity< AlbertaGrid< dim, dimworld >, codim >
45     {
46       static const bool v = true;
47     };
48 
49     /**
50      * \brief AlbertaGrid can iterate over all codimensions
51      *
52      * \ingroup AlbertaGrid
53      **/
54     template< int dim, int dimworld, int codim >
55     struct hasEntityIterator< AlbertaGrid< dim, dimworld >, codim >
56     {
57       static const bool v = true;
58     };
59 
60     /** \brief   AlbertaGrid is not levelwise conforming
61      *           (since it uses bisection)
62      *  \ingroup AlbertaGrid
63      */
64     template< int dim, int dimworld >
65     struct isLevelwiseConforming< AlbertaGrid< dim, dimworld > >
66     {
67       static const bool v = false;
68     };
69 
70     /** \brief   AlbertaGrid is leafwise conforming
71      * \ingroup AlbertaGrid
72      */
73     template< int dim, int dimworld >
74     struct isLeafwiseConforming< AlbertaGrid< dim, dimworld > >
75     {
76       static const bool v = true;
77     };
78 
79     /** \brief   AlbertaGrid has backup and restore facilities
80      *  \ingroup AlbertaGrid
81      */
82     template< int dim, int dimworld >
83     struct hasBackupRestoreFacilities< AlbertaGrid< dim, dimworld > >
84     {
85       static const bool v = true;
86     };
87 
88 
89 
90     // non-standard capabilities
91     // -------------------------
92 
93     template< class Grid >
94     struct hasHierarchicIndexSet;
95 
96     template< int dim, int dimworld >
97     struct hasHierarchicIndexSet< AlbertaGrid< dim, dimworld > >
98     {
99       static const bool v = true;
100     };
101 
102   }
103 
104 }
105 
106 #endif // #if HAVE_ALBERTA
107 
108 #endif // #ifndef DUNE_ALBERTA_CAPABILITIES_HH
109