3 #ifndef DUNE_ONE_D_GRID_HH
4 #define DUNE_ONE_D_GRID_HH
9 #include <dune/common/parallel/collectivecommunication.hh>
10 #include <dune/common/tuples.hh>
16 #include <dune/geometry/genericgeometry/topologytypes.hh>
22 #include "onedgrid/onedgridlist.hh"
23 #include "onedgrid/nulliteratorfactory.hh"
24 #include "onedgrid/onedgridentity.hh"
25 #include "onedgrid/onedgridentitypointer.hh"
26 #include "onedgrid/onedgridentityseed.hh"
27 #include "onedgrid/onedgridgeometry.hh"
28 #include "onedgrid/onedgridintersections.hh"
29 #include "onedgrid/onedgridintersectioniterators.hh"
30 #include "onedgrid/onedgridleveliterator.hh"
31 #include "onedgrid/onedgridleafiterator.hh"
32 #include "onedgrid/onedgridhieriterator.hh"
33 #include "onedgrid/onedgridindexsets.hh"
39 template<
int dim,
int dimw>
45 OneDGridEntityPointer,
46 OneDGridLevelIterator,
47 OneDGridLeafIntersection,
48 OneDGridLevelIntersection,
49 OneDGridLeafIntersectionIterator,
50 OneDGridLevelIntersectionIterator,
51 OneDGridHierarchicIterator,
53 OneDGridLevelIndexSet<const OneDGrid>,
54 OneDGridLeafIndexSet<const OneDGrid>,
55 OneDGridIdSet<const OneDGrid>,
57 OneDGridIdSet<const OneDGrid>,
59 CollectiveCommunication<Dune::OneDGrid>,
89 template <
int,
class >
92 template <
int , PartitionIteratorType,
class >
95 friend class OneDGridHierarchicIterator<const
OneDGrid>;
97 template <
int codim_,
int dim_,
class Gr
idImp_>
99 friend class OneDGridHierarchicIterator<
OneDGrid>;
100 friend class OneDGridLeafIntersection<const
OneDGrid>;
101 friend class OneDGridLevelIntersection<const
OneDGrid>;
102 friend class OneDGridLeafIntersectionIterator<const
OneDGrid>;
103 friend class OneDGridLevelIntersectionIterator<const
OneDGrid>;
105 friend class OneDGridLevelIndexSet<const
OneDGrid>;
109 template <
int codim_, PartitionIteratorType PiType_,
class Gr
idImp_>
112 template <
class Gr
idType_>
115 template<
int codim_,
int dim_,
class Gr
idImp_,
template<
int,
int,
class>
class EntityImp_>
142 OneDGrid(
const std::vector<ctype>& coords);
154 int maxLevel()
const {
return entityImps_.size()-1;}
158 typename Traits::template Codim<codim>::LevelIterator
lbegin (
int level)
const;
162 typename Traits::template Codim<codim>::LevelIterator
lend (
int level)
const;
165 template<
int codim, PartitionIteratorType PiType>
166 typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator
lbegin (
int level)
const;
169 template<
int codim, PartitionIteratorType PiType>
170 typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator
lend (
int level)
const;
174 typename Traits::template Codim<codim>::LeafIterator
leafbegin ()
const;
178 typename Traits::template Codim<codim>::LeafIterator
leafend ()
const;
181 template<
int codim, PartitionIteratorType PiType>
182 typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator
leafbegin()
const;
185 template<
int codim, PartitionIteratorType PiType>
186 typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator
leafend()
const;
189 template <
typename Seed>
190 static typename Traits::template Codim<Seed::codimension>::EntityPointer
193 enum {codim = Seed::codimension};
200 int size (
int level,
int codim)
const {
201 if (codim<0 || codim>1)
202 DUNE_THROW(
GridError,
"There are no codim " << codim <<
" entities in a OneDGrid!");
205 return elements(level).size();
207 return vertices(level).size();
222 return size(level,1-type.dim());
280 if (! levelIndexSets_[level]) {
281 levelIndexSets_[level] =
283 levelIndexSets_[level]->update();
286 return * levelIndexSets_[level];
292 return leafIndexSet_;
303 bool mark(
int refCount,
const Traits::Codim<0>::Entity& e );
311 int getMark(
const Traits::Codim<0>::Entity& e )
const;
336 refinementType_ = type;
348 template<
class DataHandle>
352 template<
class DataHandle>
365 OneDGridList<OneDEntityImp<0> >& vertices(
int level) {
366 return Dune::get<0>(entityImps_[level]);
370 const OneDGridList<OneDEntityImp<0> >& vertices(
int level)
const {
371 return Dune::get<0>(entityImps_[level]);
375 OneDGridList<OneDEntityImp<1> >& elements(
int level) {
376 return Dune::get<1>(entityImps_[level]);
380 const OneDGridList<OneDEntityImp<1> >& elements(
int level)
const {
381 return Dune::get<1>(entityImps_[level]);
389 unsigned int getNextFreeId(
int codim) {
390 return (codim==0) ? freeElementIdCounter_++ : freeVertexIdCounter_++;
396 OneDGridList<OneDEntityImp<0> >::iterator getLeftUpperVertex(
const OneDEntityImp<1>* eIt);
398 OneDGridList<OneDEntityImp<0> >::iterator getRightUpperVertex(
const OneDEntityImp<1>* eIt);
403 OneDGridList<OneDEntityImp<1> >::iterator getLeftNeighborWithSon(OneDGridList<OneDEntityImp<1> >::iterator eIt);
406 std::vector<tuple<OneDGridList<OneDEntityImp<0> >,
407 OneDGridList<OneDEntityImp<1> > > > entityImps_;
410 mutable std::vector<OneDGridLevelIndexSet<const OneDGrid>* > levelIndexSets_;
416 unsigned int freeVertexIdCounter_;
418 unsigned int freeElementIdCounter_;
423 bool reversedBoundarySegmentNumbering_;
427 namespace Capabilities
443 static const bool v =
true;
444 static const unsigned int topologyId = GenericGeometry :: CubeTopology< 1 > :: type :: id ;
454 static const bool v =
true;
463 static const bool v =
false;
472 static const bool v =
true;
481 static const bool v =
true;
493 #include <dune/grid/onedgrid/onedgridfactory.hh>