3 #ifndef DUNE_ONE_D_GRID_HH
4 #define DUNE_ONE_D_GRID_HH
9 #include <dune/common/deprecated.hh>
10 #include <dune/common/parallel/collectivecommunication.hh>
11 #include <dune/common/tuples.hh>
17 #include <dune/geometry/genericgeometry/topologytypes.hh>
23 #include "onedgrid/onedgridlist.hh"
24 #include "onedgrid/nulliteratorfactory.hh"
25 #include "onedgrid/onedgridentity.hh"
26 #include "onedgrid/onedgridentitypointer.hh"
27 #include "onedgrid/onedgridentityseed.hh"
28 #include "onedgrid/onedgridgeometry.hh"
29 #include "onedgrid/onedgridintersections.hh"
30 #include "onedgrid/onedgridintersectioniterators.hh"
31 #include "onedgrid/onedgridleveliterator.hh"
32 #include "onedgrid/onedgridleafiterator.hh"
33 #include "onedgrid/onedgridhieriterator.hh"
34 #include "onedgrid/onedgridindexsets.hh"
40 template<
int dim,
int dimw>
46 OneDGridEntityPointer,
47 OneDGridLevelIterator,
48 OneDGridLeafIntersection,
49 OneDGridLevelIntersection,
50 OneDGridLeafIntersectionIterator,
51 OneDGridLevelIntersectionIterator,
52 OneDGridHierarchicIterator,
54 OneDGridLevelIndexSet<const OneDGrid>,
55 OneDGridLeafIndexSet<const OneDGrid>,
56 OneDGridIdSet<const OneDGrid>,
58 OneDGridIdSet<const OneDGrid>,
60 CollectiveCommunication<Dune::OneDGrid>,
90 template <
int,
class >
93 template <
int , PartitionIteratorType,
class >
96 friend class OneDGridHierarchicIterator<const
OneDGrid>;
98 template <
int codim_,
int dim_,
class Gr
idImp_>
101 friend class OneDGridLeafIntersection<const
OneDGrid>;
102 friend class OneDGridLevelIntersection<const
OneDGrid>;
103 friend class OneDGridLeafIntersectionIterator<const
OneDGrid>;
104 friend class OneDGridLevelIntersectionIterator<const
OneDGrid>;
106 friend class OneDGridLevelIndexSet<const
OneDGrid>;
110 template <
int codim_, PartitionIteratorType PiType_,
class Gr
idImp_>
113 template <
class Gr
idType_>
116 template<
int codim_,
int dim_,
class Gr
idImp_,
template<
int,
int,
class>
class EntityImp_>
143 OneDGrid(
const std::vector<ctype>& coords);
155 int maxLevel()
const {
return entityImps_.size()-1;}
159 typename Traits::template Codim<codim>::LevelIterator
lbegin (
int level)
const;
163 typename Traits::template Codim<codim>::LevelIterator
lend (
int level)
const;
166 template<
int codim, PartitionIteratorType PiType>
167 typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator
lbegin (
int level)
const;
170 template<
int codim, PartitionIteratorType PiType>
171 typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator
lend (
int level)
const;
175 typename Traits::template Codim<codim>::LeafIterator
leafbegin ()
const;
179 typename Traits::template Codim<codim>::LeafIterator
leafend ()
const;
182 template<
int codim, PartitionIteratorType PiType>
183 typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator
leafbegin()
const;
186 template<
int codim, PartitionIteratorType PiType>
187 typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator
leafend()
const;
190 template <
typename Seed>
191 static typename Traits::template Codim<Seed::codimension>::EntityPointer
194 enum {codim = Seed::codimension};
199 template <
typename Seed>
200 static typename Traits::template Codim<Seed::codimension>::Entity
203 const int codim = Seed::codimension;
210 int size (
int level,
int codim)
const {
211 if (codim<0 || codim>1)
212 DUNE_THROW(
GridError,
"There are no codim " << codim <<
" entities in a OneDGrid!");
215 return elements(level).size();
217 return vertices(level).size();
232 return size(level,1-type.dim());
290 if (! levelIndexSets_[level]) {
291 levelIndexSets_[level] =
293 levelIndexSets_[level]->update();
296 return * levelIndexSets_[level];
302 return leafIndexSet_;
313 bool mark(
int refCount,
const Traits::Codim<0>::Entity& e );
321 int getMark(
const Traits::Codim<0>::Entity& e )
const;
346 refinementType_ = type;
358 template<
class DataHandle>
362 template<
class DataHandle>
375 OneDGridList<OneDEntityImp<0> >& vertices(
int level) {
376 return Dune::get<0>(entityImps_[level]);
380 const OneDGridList<OneDEntityImp<0> >& vertices(
int level)
const {
381 return Dune::get<0>(entityImps_[level]);
385 OneDGridList<OneDEntityImp<1> >& elements(
int level) {
386 return Dune::get<1>(entityImps_[level]);
390 const OneDGridList<OneDEntityImp<1> >& elements(
int level)
const {
391 return Dune::get<1>(entityImps_[level]);
399 unsigned int getNextFreeId(
int codim) {
400 return (codim==0) ? freeElementIdCounter_++ : freeVertexIdCounter_++;
406 OneDGridList<OneDEntityImp<0> >::iterator getLeftUpperVertex(
const OneDEntityImp<1>* eIt);
408 OneDGridList<OneDEntityImp<0> >::iterator getRightUpperVertex(
const OneDEntityImp<1>* eIt);
413 OneDGridList<OneDEntityImp<1> >::iterator getLeftNeighborWithSon(OneDGridList<OneDEntityImp<1> >::iterator eIt);
416 std::vector<tuple<OneDGridList<OneDEntityImp<0> >,
417 OneDGridList<OneDEntityImp<1> > > > entityImps_;
420 mutable std::vector<OneDGridLevelIndexSet<const OneDGrid>* > levelIndexSets_;
426 unsigned int freeVertexIdCounter_;
428 unsigned int freeElementIdCounter_;
433 bool reversedBoundarySegmentNumbering_;
437 namespace Capabilities
453 static const bool v =
true;
454 static const unsigned int topologyId = GenericGeometry :: CubeTopology< 1 > :: type :: id ;
464 static const bool v =
true;
472 #ifndef DUNE_AVOID_CAPABILITIES_IS_PARALLEL_DEPRECATION_WARNING
473 DUNE_DEPRECATED_MSG(
"Capabilities::isParallel will be removed after dune-grid-2.4.")
478 #ifndef DUNE_AVOID_CAPABILITIES_IS_PARALLEL_DEPRECATION_WARNING
479 DUNE_DEPRECATED_MSG(
"Capabilities::isParallel will be removed after dune-grid-2.4.")
490 static const bool v =
true;
499 static const bool v =
true;
511 #include <dune/grid/onedgrid/onedgridfactory.hh>
int maxLevel() const
Return maximum level defined in this grid.
Definition: onedgrid.hh:155
static Traits::template Codim< Seed::codimension >::EntityPointer entityPointer(const Seed &seed)
Create an EntityPointer from an EntitySeed.
Definition: onedgrid.hh:192
Index Set Interface base class.
Definition: common/grid.hh:361
static Traits::template Codim< Seed::codimension >::Entity entity(const Seed &seed)
Create an Entity from an EntitySeed.
Definition: onedgrid.hh:201
double ctype
The type used to store coordinates.
Definition: onedgrid.hh:134
friend class OneDGridEntityPointer
Definition: onedgrid.hh:91
bool preAdapt()
Does nothing except return true if some element has been marked for refinement.
Base class for exceptions in Dune grid modules.
Definition: exceptions.hh:16
Traits::template Codim< codim >::LeafIterator leafbegin() const
Iterator to first entity of given codim on leaf level.
Specialize with 'true' if implementation guarantees a conforming leaf grid. (default=false) ...
Definition: common/capabilities.hh:107
Different resources needed by all grid implementations.
const Traits::LocalIdSet & localIdSet() const
Get the set of local ids.
Definition: onedgrid.hh:282
int overlapSize(int codim) const
The processor overlap for parallel computing. Always zero because this is a strictly sequential grid...
Definition: onedgrid.hh:253
Wrapper class for entities.
Definition: common/entity.hh:61
New level consists of the refined elements and the unrefined ones, too.
Definition: onedgrid.hh:341
bool adapt()
Triggers the grid refinement process.
Specialize with 'true' for all codims that a grid implements entities for. (default=false) ...
Definition: common/capabilities.hh:57
A traits struct that collects all associated types of one grid model.
Definition: common/grid.hh:1343
friend class OneDGridLeafIndexSet< const OneDGrid >
Definition: onedgrid.hh:107
Provide a generic factory class for unstructured grids.
static const bool v
Definition: common/capabilities.hh:59
RefinementType
The different forms of grid refinement supported by OneDGrid.
Definition: onedgrid.hh:337
int ghostSize(int codim) const
The processor ghost overlap for parallel computing. Always zero because this is a strictly sequential...
Definition: onedgrid.hh:259
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:64
OneDGrid is not parallel.
Definition: onedgrid.hh:471
static const bool v
Definition: common/capabilities.hh:109
Definition: onedgrid.hh:41
Traits::template Codim< codim >::LeafIterator leafend() const
one past the end on leaf level
bool mark(int refCount, const Traits::Codim< 0 >::Entity &e)
Mark entity for refinement.
static const bool v
Definition: common/capabilities.hh:28
ct ctype
Define type used for coordinates in grid module.
Definition: common/grid.hh:548
const CollectiveCommunication & comm() const
Definition: onedgrid.hh:366
Definition: common/geometry.hh:24
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
size_t numBoundarySegments() const
Return the number of coarse grid boundary segments.
Definition: onedgrid.hh:246
IndexType size(GeometryType type) const
Return total number of entities of given geometry type in entity set .
Definition: indexidset.hh:232
Definition: defaultgridview.hh:23
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:265
static const unsigned int topologyId
Definition: common/capabilities.hh:31
int size(int codim) const
number of leaf entities per codim in this process
Definition: onedgrid.hh:223
Traits::template Codim< codim >::LevelIterator lbegin(int level) const
Iterator to first entity of given codim on level.
friend class OneDGridLevelIterator
Definition: onedgrid.hh:94
const Traits::LeafIndexSet & leafIndexSet() const
Get an index set for the leaf level.
Definition: onedgrid.hh:300
const Traits::LevelIndexSet & levelIndexSet(int level) const
Get an index set for the given level.
Definition: onedgrid.hh:288
void globalRefine(int refCount)
Does one uniform refinement step.
GridFamily::Traits::template Codim< cd >::Entity Entity
A type that is a model of a Dune::Entity<cd,dim,...>.
Definition: common/grid.hh:446
OneDGridFamily< dim, dimworld >::Traits Traits
Definition: onedgrid.hh:140
int size(int level, GeometryType type) const
number of entities per level and geometry type in this process
Definition: onedgrid.hh:229
const Traits::GlobalIdSet & globalIdSet() const
Get the set of global ids.
Definition: onedgrid.hh:276
static std::conditional< std::is_reference< InterfaceType >::value, typename std::add_lvalue_reference< typename ReturnImplementationType< typename std::remove_reference< InterfaceType >::type >::ImplementationType >::type, typename std::remove_const< typename ReturnImplementationType< typename std::remove_reference< InterfaceType >::type >::ImplementationType >::type >::type getRealImplementation(InterfaceType &&i)
return real implementation of interface class
Definition: common/grid.hh:1305
CommunicationDirection
Define a type for communication direction parameter.
Definition: gridenums.hh:168
friend class OneDGridEntity
Definition: onedgrid.hh:99
Provide a generic factory class for unstructured grids.
Definition: common/gridfactory.hh:263
One-dimensional adaptive grid.
Definition: onedgrid.hh:84
A set of traits classes to store static information about grid implementation.
Traits::template Codim< codim >::LevelIterator lend(int level) const
one past the end on this level
void communicate(DataHandle &data, InterfaceType iftype, CommunicationDirection dir) const
Definition: onedgrid.hh:363
int getMark(const Traits::Codim< 0 >::Entity &e) const
return current adaptation marker of given entity
int size(GeometryType type) const
number of leaf entities per geometry type in this process
Definition: onedgrid.hh:236
static const bool v
Definition: common/capabilities.hh:100
int size(int level, int codim) const
Number of grid entities per level and codim.
Definition: onedgrid.hh:210
Specialize with 'true' if implementation guarantees conforming level grids. (default=false) ...
Definition: common/capabilities.hh:98
void setRefinementType(RefinementType type)
Sets the type of grid refinement.
Definition: onedgrid.hh:345
GridFamily::Traits::template Codim< cd >::EntityPointer EntityPointer
A type that is a model of Dune::EntityPointer<cd,dim,...>.
Definition: common/grid.hh:449
Definition: defaultgridview.hh:223
InterfaceType
Parameter to be used for the communication functions.
Definition: gridenums.hh:84
New level consists only of the refined elements.
Definition: onedgrid.hh:339
OneDGridFamily< dim, dimworld > GridFamily
GridFamily of OneDGrid.
Definition: onedgrid.hh:137
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:271
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:545
void postAdapt()
Adaptation post-processing: Reset all adaptation state flags.
Specialize with 'true' for if the codimension 0 entity of the grid has only one possible geometry typ...
Definition: common/capabilities.hh:26
friend class OneDGridIdSet< const OneDGrid >
Definition: onedgrid.hh:108
void communicate(DataHandle &data, InterfaceType iftype, CommunicationDirection dir, int level) const
Definition: onedgrid.hh:359
friend class OneDGridLevelIndexSet< const OneDGrid >
Definition: onedgrid.hh:106
Id Set Interface.
Definition: common/grid.hh:362
friend class OneDGridLeafIterator
Definition: onedgrid.hh:111