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>
void setRefinementType(RefinementType type)
Sets the type of grid refinement.
Definition: onedgrid.hh:335
const Traits::GlobalIdSet & globalIdSet() const
Get the set of global ids.
Definition: onedgrid.hh:266
New level consists of the refined elements and the unrefined ones, too.
Definition: onedgrid.hh:331
static ReturnImplementationType< InterfaceType >::ImplementationType & getRealImplementation(InterfaceType &i)
return real implementation of interface class
Definition: common/grid.hh:1223
static const bool v
Definition: common/capabilities.hh:57
Definition: defaultgridview.hh:223
bool adapt()
Triggers the grid refinement process.
friend class OneDGridLevelIndexSet< const OneDGrid >
Definition: onedgrid.hh:105
int size(GeometryType type) const
number of leaf entities per geometry type in this process
Definition: onedgrid.hh:226
New level consists only of the refined elements.
Definition: onedgrid.hh:329
Wrapper class for entities.
Definition: common/entity.hh:56
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
friend class OneDGridLeafIterator
Definition: onedgrid.hh:110
size_t numBoundarySegments() const
Return the number of coarse grid boundary segments.
Definition: onedgrid.hh:236
static const bool v
Definition: common/capabilities.hh:66
Index Set Interface base class.
Definition: common/grid.hh:359
static Traits::template Codim< Seed::codimension >::EntityPointer entityPointer(const Seed &seed)
Create an EntityPointer from an EntitySeed.
Definition: onedgrid.hh:191
OneDGridFamily< dim, dimworld > GridFamily
GridFamily of OneDGrid.
Definition: onedgrid.hh:136
bool mark(int refCount, const Traits::Codim< 0 >::Entity &e)
Mark entity for refinement.
Provide a generic factory class for unstructured grids.
Definition: common/gridfactory.hh:263
Provide a generic factory class for unstructured grids.
const Traits::LocalIdSet & localIdSet() const
Get the set of local ids.
Definition: onedgrid.hh:272
GridFamily::Traits::CollectiveCommunication CollectiveCommunication
A type that is a model of Dune::CollectiveCommunication. It provides a portable way for collective co...
Definition: common/grid.hh:543
CommunicationDirection
Define a type for communication direction parameter.
Definition: gridenums.hh:164
void communicate(DataHandle &data, InterfaceType iftype, CommunicationDirection dir, int level) const
Definition: onedgrid.hh:349
void globalRefine(int refCount)
Does one uniform refinement step.
Specialize with 'true' if implementation guarantees conforming level grids. (default=false) ...
Definition: common/capabilities.hh:86
OneDGridFamily< dim, dimworld >::Traits Traits
Definition: onedgrid.hh:139
double ctype
The type used to store coordinates.
Definition: onedgrid.hh:133
friend class OneDGridEntity
Definition: onedgrid.hh:98
int size(int level, GeometryType type) const
number of entities per level and geometry type in this process
Definition: onedgrid.hh:219
friend class OneDGridIdSet< const OneDGrid >
Definition: onedgrid.hh:107
void communicate(DataHandle &data, InterfaceType iftype, CommunicationDirection dir) const
Definition: onedgrid.hh:353
Traits::template Codim< codim >::LevelIterator lend(int level) const
one past the end on this level
const CollectiveCommunication & comm() const
Definition: onedgrid.hh:356
Traits::template Codim< codim >::LeafIterator leafend() const
one past the end on leaf level
int getMark(const Traits::Codim< 0 >::Entity &e) const
return current adaptation marker of given entity
int size(int level, int codim) const
Number of grid entities per level and codim.
Definition: onedgrid.hh:200
Traits::template Codim< codim >::LeafIterator leafbegin() const
Iterator to first entity of given codim on leaf level.
Definition: onedgrid.hh:40
const Traits::LeafIndexSet & leafIndexSet() const
Get an index set for the leaf level.
Definition: onedgrid.hh:290
Base class for exceptions in Dune grid modules.
Definition: exceptions.hh:16
Specialize with 'true' if implementation guarantees a conforming leaf grid. (default=false) ...
Definition: common/capabilities.hh:95
GridFamily::Traits::template Codim< cd >::EntityPointer EntityPointer
A type that is a model of Dune::EntityPointer<cd,dim,...>.
Definition: common/grid.hh:447
int ghostSize(int level, int codim) const
The processor ghost overlap for parallel computing. Always zero because this is a strictly sequential...
Definition: onedgrid.hh:261
friend class OneDGridLeafIndexSet< const OneDGrid >
Definition: onedgrid.hh:106
int size(int codim) const
number of leaf entities per codim in this process
Definition: onedgrid.hh:213
A set of traits classes to store static information about grid implementation.
Specialize with 'true' if implementation supports parallelism. (default=false)
Definition: common/capabilities.hh:64
int maxLevel() const
Return maximum level defined in this grid.
Definition: onedgrid.hh:154
void postAdapt()
Adaptation post-processing: Reset all adaptation state flags.
static const bool v
Definition: common/capabilities.hh:26
static const bool v
Definition: common/capabilities.hh:88
static const unsigned int topologyId
Definition: common/capabilities.hh:29
ct ctype
Define type used for coordinates in grid module.
Definition: common/grid.hh:546
friend class OneDGridEntityPointer
Definition: onedgrid.hh:90
Specialize with 'true' for all codims that a grid implements entities for. (default=false) ...
Definition: common/capabilities.hh:55
Different resources needed by all grid implementations.
A traits struct that collects all associated types of one grid model.
Definition: common/grid.hh:1260
static const bool v
Definition: common/capabilities.hh:97
One-dimensional adaptive grid.
Definition: onedgrid.hh:83
Definition: common/geometry.hh:24
int ghostSize(int codim) const
The processor ghost overlap for parallel computing. Always zero because this is a strictly sequential...
Definition: onedgrid.hh:249
int overlapSize(int level, int codim) const
The processor overlap for parallel computing. Always zero because this is a strictly sequential grid...
Definition: onedgrid.hh:255
GridTraits< dim, dimw, Dune::OneDGrid, OneDGridGeometry, OneDGridEntity, OneDGridEntityPointer, OneDGridLevelIterator, OneDGridLeafIntersection, OneDGridLevelIntersection, OneDGridLeafIntersectionIterator, OneDGridLevelIntersectionIterator, OneDGridHierarchicIterator, OneDGridLeafIterator, OneDGridLevelIndexSet< const OneDGrid >, OneDGridLeafIndexSet< const OneDGrid >, OneDGridIdSet< const OneDGrid >, unsigned int, OneDGridIdSet< const OneDGrid >, unsigned int, CollectiveCommunication< Dune::OneDGrid >, DefaultLevelGridViewTraits, DefaultLeafGridViewTraits, OneDGridEntitySeed > Traits
Definition: onedgrid.hh:63
InterfaceType
Parameter to be used for the communication functions.
Definition: gridenums.hh:80
RefinementType
The different forms of grid refinement supported by OneDGrid.
Definition: onedgrid.hh:327
Definition: defaultgridview.hh:23
friend class OneDGridLevelIterator
Definition: onedgrid.hh:93
Specialize with 'true' for if the codimension 0 entity of the grid has only one possible geometry typ...
Definition: common/capabilities.hh:24
Id Set Interface.
Definition: common/grid.hh:360
Traits::template Codim< codim >::LevelIterator lbegin(int level) const
Iterator to first entity of given codim on level.
const Traits::LevelIndexSet & levelIndexSet(int level) const
Get an index set for the given level.
Definition: onedgrid.hh:278
IndexType size(GeometryType type) const
Return total number of entities of given geometry type in entity set .
Definition: indexidset.hh:204
bool preAdapt()
Does nothing except return true if some element has been marked for refinement.
int overlapSize(int codim) const
The processor overlap for parallel computing. Always zero because this is a strictly sequential grid...
Definition: onedgrid.hh:243