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_ALBERTAGRID_GRIDFAMILTY_HH
4 #define DUNE_ALBERTAGRID_GRIDFAMILTY_HH
5 
6 /** \file
7  *  \author Martin Nolte
8  *  \brief  provides the GridFamily for AlbertaGrid
9  */
10 
11 #include <dune/common/parallel/communication.hh>
12 
13 #include <dune/grid/common/entity.hh>
14 #include <dune/grid/common/geometry.hh>
15 #include <dune/grid/common/intersection.hh>
16 #include <dune/grid/common/intersectioniterator.hh>
17 #include <dune/grid/common/entityiterator.hh>
18 
19 #include <dune/grid/albertagrid/misc.hh>
20 #include <dune/grid/albertagrid/gridview.hh>
21 #include <dune/grid/albertagrid/geometryreference.hh>
22 
23 #if HAVE_ALBERTA
24 
25 namespace Dune
26 {
27 
28   // External Forward Declarations
29   // -----------------------------
30 
31   template< int dim, int dimworld >
32   class AlbertaGrid;
33 
34   template< int codim, int dim, class GridImp >
35   class AlbertaGridEntity;
36 
37   template< int codim, class GridImp >
38   class AlbertaGridEntityPointer;
39 
40   template< int codim, class Grid >
41   class AlbertaGridEntitySeed;
42 
43   template< int mydim, int cdim, class GridImp >
44   class AlbertaGridGeometry;
45 
46   template< int mydim, int cdim, class GridImp >
47   class AlbertaGridGlobalGeometry;
48 
49   template< int dim, int dimworld >
50   class AlbertaGridHierarchicIndexSet;
51 
52   template< class GridImp >
53   class AlbertaGridHierarchicIterator;
54 
55   template< class GridImp >
56   class AlbertaGridLeafIntersection;
57 
58   template< class GridImp >
59   class AlbertaGridLeafIntersectionIterator;
60 
61   template< int dim, int dimworld >
62   class AlbertaGridIdSet;
63 
64   template< int dim, int dimworld >
65   class AlbertaGridIndexSet;
66 
67   template< int codim, PartitionIteratorType pitype, class GridImp >
68   class AlbertaGridLeafIterator;
69 
70   template< int codim, PartitionIteratorType pitype, class GridImp >
71   class AlbertaGridLevelIterator;
72 
73 
74 
75 
76   // AlbertaGridFamily
77   // -----------------
78 
79   template <int dim, int dimworld>
80   struct AlbertaGridFamily
81   {
82     typedef AlbertaGrid< dim, dimworld > GridImp;
83 
84     typedef Alberta::Real ctype;
85 
86     static const int dimension = dim;
87     static const int dimensionworld = dimworld;
88 
89     typedef AlbertaGridIndexSet< dim, dimworld > LevelIndexSetImp;
90     typedef AlbertaGridIndexSet< dim, dimworld > LeafIndexSetImp;
91 
92     typedef AlbertaGridIdSet< dim, dimworld > IdSetImp;
93     typedef unsigned int IdType;
94 
95     struct Traits
96     {
97       typedef GridImp Grid;
98 
99       typedef Dune::Intersection< const GridImp, AlbertaGridLeafIntersection< const GridImp > > LeafIntersection;
100       typedef Dune::Intersection< const GridImp, AlbertaGridLeafIntersection< const GridImp > > LevelIntersection;
101       typedef Dune::IntersectionIterator
102       < const GridImp, AlbertaGridLeafIntersectionIterator< const GridImp >, AlbertaGridLeafIntersection< const GridImp > >
103       LeafIntersectionIterator;
104       typedef Dune::IntersectionIterator
105       < const GridImp, AlbertaGridLeafIntersectionIterator< const GridImp >, AlbertaGridLeafIntersection< const GridImp > >
106       LevelIntersectionIterator;
107 
108       typedef Dune::EntityIterator< 0, const GridImp, AlbertaGridHierarchicIterator< const GridImp > > HierarchicIterator;
109 
110       typedef IdType GlobalIdType;
111       typedef IdType LocalIdType;
112 
113       template< int cd >
114       struct Codim
115       {
116         typedef AlbertaGridGlobalGeometry< dim-cd, dimworld, const Grid > GeometryImpl;
117         typedef AlbertaGridGeometry< dim-cd, dim, const Grid > LocalGeometryImpl;
118         typedef Dune::Geometry< dim-cd, dimworld, const Grid, AlbertaGridGlobalGeometry > Geometry;
119         typedef Dune::Geometry< dim-cd, dim, const Grid, LocalGeometryReference > LocalGeometry;
120 
121         typedef AlbertaGridEntity< cd, dim, const GridImp > EntityImpl;
122         typedef Dune::Entity< cd, dim, const GridImp, AlbertaGridEntity > Entity;
123 
124         typedef Dune::EntitySeed< const GridImp, AlbertaGridEntitySeed< cd, const GridImp > > EntitySeed;
125 
126         template <PartitionIteratorType pitype>
127         struct Partition
128         {
129           typedef Dune::EntityIterator< cd, const GridImp, AlbertaGridLevelIterator< cd, pitype, const GridImp > > LevelIterator;
130           typedef Dune::EntityIterator< cd, const GridImp, AlbertaGridLeafIterator< cd, pitype, const GridImp > > LeafIterator;
131         };
132 
133         typedef typename Partition< All_Partition >::LevelIterator LevelIterator;
134         typedef typename Partition< All_Partition >::LeafIterator LeafIterator;
135       };
136 
137       typedef Dune::GridView< AlbertaLevelGridViewTraits< const GridImp > > LevelGridView;
138       typedef Dune::GridView< AlbertaLeafGridViewTraits< const GridImp > > LeafGridView;
139 
140       typedef IndexSet< GridImp, LevelIndexSetImp, int, std::array< GeometryType, 1 > > LevelIndexSet;
141       typedef IndexSet< GridImp, LeafIndexSetImp, int, std::array< GeometryType, 1 > > LeafIndexSet;
142       typedef AlbertaGridHierarchicIndexSet< dim, dimworld > HierarchicIndexSet;
143       typedef IdSet<GridImp,IdSetImp,IdType> GlobalIdSet;
144       typedef IdSet<GridImp,IdSetImp,IdType> LocalIdSet;
145 
146       typedef Dune::CollectiveCommunication< No_Comm > CollectiveCommunication;
147     };
148   };
149 
150 }
151 
152 #endif // #if HAVE_ALBERTA
153 
154 #endif // #ifndef DUNE_ALBERTAGRID_GRIDFAMILTY_HH
155