1 #ifndef DUNE_ONE_D_GRID_HH
2 #define DUNE_ONE_D_GRID_HH
7 #include <dune/common/misc.hh>
8 #include <dune/common/collectivecommunication.hh>
9 #include <dune/common/tuples.hh>
15 #include <dune/geometry/genericgeometry/topologytypes.hh>
21 #include "onedgrid/onedgridlist.hh"
22 #include "onedgrid/nulliteratorfactory.hh"
23 #include "onedgrid/onedgridentity.hh"
24 #include "onedgrid/onedgridentitypointer.hh"
25 #include "onedgrid/onedgridentityseed.hh"
26 #include "onedgrid/onedgridgeometry.hh"
27 #include "onedgrid/onedgridintersections.hh"
28 #include "onedgrid/onedgridintersectioniterators.hh"
29 #include "onedgrid/onedgridleveliterator.hh"
30 #include "onedgrid/onedgridleafiterator.hh"
31 #include "onedgrid/onedgridhieriterator.hh"
32 #include "onedgrid/onedgridindexsets.hh"
38 template<
int dim,
int dimw>
44 OneDGridEntityPointer,
45 OneDGridLevelIterator,
46 OneDGridLeafIntersection,
47 OneDGridLevelIntersection,
48 OneDGridLeafIntersectionIterator,
49 OneDGridLevelIntersectionIterator,
50 OneDGridHierarchicIterator,
52 OneDGridLevelIndexSet<const OneDGrid>,
53 OneDGridLeafIndexSet<const OneDGrid>,
54 OneDGridIdSet<const OneDGrid>,
56 OneDGridIdSet<const OneDGrid>,
58 CollectiveCommunication<Dune::OneDGrid>,
87 template <
int,
class >
90 template <
int , PartitionIteratorType,
class >
93 friend class OneDGridHierarchicIterator<const
OneDGrid>;
95 template <
int codim_,
int dim_,
class Gr
idImp_>
97 friend class OneDGridHierarchicIterator<
OneDGrid>;
98 friend class OneDGridLeafIntersection<const
OneDGrid>;
99 friend class OneDGridLevelIntersection<const
OneDGrid>;
100 friend class OneDGridLeafIntersectionIterator<const
OneDGrid>;
101 friend class OneDGridLevelIntersectionIterator<const
OneDGrid>;
103 friend class OneDGridLevelIndexSet<const
OneDGrid>;
107 template <
int codim_, PartitionIteratorType PiType_,
class Gr
idImp_>
110 template <
class Gr
idType_>
113 template<
int codim_,
int dim_,
class Gr
idImp_,
template<
int,
int,
class>
class EntityImp_>
140 OneDGrid(
const std::vector<ctype>& coords);
152 int maxLevel()
const {
return entityImps_.size()-1;}
156 typename Traits::template Codim<codim>::LevelIterator
lbegin (
int level)
const;
160 typename Traits::template Codim<codim>::LevelIterator
lend (
int level)
const;
163 template<
int codim, PartitionIteratorType PiType>
164 typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator
lbegin (
int level)
const;
167 template<
int codim, PartitionIteratorType PiType>
168 typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator
lend (
int level)
const;
172 typename Traits::template Codim<codim>::LeafIterator
leafbegin ()
const;
176 typename Traits::template Codim<codim>::LeafIterator
leafend ()
const;
179 template<
int codim, PartitionIteratorType PiType>
180 typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator
leafbegin()
const;
183 template<
int codim, PartitionIteratorType PiType>
184 typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator
leafend()
const;
188 static typename Traits::template Codim<codim>::EntityPointer
197 int size (
int level,
int codim)
const {
198 if (codim<0 || codim>1)
199 DUNE_THROW(
GridError,
"There are no codim " << codim <<
" entities in a OneDGrid!");
202 return elements(level).size();
204 return vertices(level).size();
219 return size(level,1-type.dim());
277 if (! levelIndexSets_[level]) {
278 levelIndexSets_[level] =
280 levelIndexSets_[level]->update();
283 return * levelIndexSets_[level];
289 return leafIndexSet_;
300 bool mark(
int refCount,
const Traits::Codim<0>::Entity& e );
308 int getMark(
const Traits::Codim<0>::Entity& e )
const;
332 refinementType_ = type;
344 template<
class DataHandle>
349 template<
class DataHandle>
363 OneDGridList<OneDEntityImp<0> >& vertices(
int level) {
364 return Dune::get<0>(entityImps_[level]);
368 const OneDGridList<OneDEntityImp<0> >& vertices(
int level)
const {
369 return Dune::get<0>(entityImps_[level]);
373 OneDGridList<OneDEntityImp<1> >& elements(
int level) {
374 return Dune::get<1>(entityImps_[level]);
378 const OneDGridList<OneDEntityImp<1> >& elements(
int level)
const {
379 return Dune::get<1>(entityImps_[level]);
387 unsigned int getNextFreeId(
int codim) {
388 return (codim==0) ? freeElementIdCounter_++ : freeVertexIdCounter_++;
394 OneDGridList<OneDEntityImp<0> >::iterator getLeftUpperVertex(
const OneDEntityImp<1>* eIt);
396 OneDGridList<OneDEntityImp<0> >::iterator getRightUpperVertex(
const OneDEntityImp<1>* eIt);
401 OneDGridList<OneDEntityImp<1> >::iterator getLeftNeighborWithSon(OneDGridList<OneDEntityImp<1> >::iterator eIt);
404 std::vector<tuple<OneDGridList<OneDEntityImp<0> >,
405 OneDGridList<OneDEntityImp<1> > > > entityImps_;
408 mutable std::vector<OneDGridLevelIndexSet<const OneDGrid>* > levelIndexSets_;
414 unsigned int freeVertexIdCounter_;
416 unsigned int freeElementIdCounter_;
421 bool reversedBoundarySegmentNumbering_;
425 namespace Capabilities
441 static const bool v =
true;
442 static const unsigned int topologyId = GenericGeometry :: CubeTopology< 1 > :: type :: id ;
452 static const bool v =
true;
461 static const bool v =
false;
470 static const bool v =
true;
479 static const bool v =
true;
491 #include <dune/grid/onedgrid/onedgridfactory.hh>