3 #ifndef DUNE_ALU2DGRID_INTERSECTION_HH 4 #define DUNE_ALU2DGRID_INTERSECTION_HH 21 template<
int cd,
int dim,
class Gr
idImp>
22 class ALU2dGridEntity;
23 template<
int cd, PartitionIteratorType pitype,
class Gr
idImp >
24 class ALU2dGridLevelIterator;
25 template<
int cd,
class Gr
idImp >
26 class ALU2dGridEntityPointer;
27 template<
int mydim,
int coorddim,
class Gr
idImp>
28 class ALU2dGridGeometry;
29 template<
class Gr
idImp>
30 class ALU2dGridHierarchicIterator;
31 template<
class Gr
idImp>
32 class ALU2dGridIntersectionBase;
33 template<
class Gr
idImp>
34 class ALU2dGridLeafIntersectionIterator;
35 template<
class Gr
idImp>
36 class ALU2dGridLevelIntersectionIterator;
37 template<
int codim, PartitionIteratorType pitype,
class Gr
idImp>
38 class ALU2dGridLeafIterator;
39 template<
int dim,
int dimworld, ALU2DSPACE ElementType eltype >
47 template<
class Gr
idImp,
class LocalGeometryImpl >
53 LocalGeometryImpl geoms_[ 2 ][ 4 ][ 2 ];
55 #ifdef USE_SMP_PARALLEL 63 const LocalGeometryImpl &
localGeom (
const int aluFace,
const int twist,
const int corners )
const 65 assert( corners == 3 || corners == 4 );
66 assert( 0 <= aluFace && aluFace < corners );
67 assert( twist == 0 || twist == 1 );
68 return geoms_[ corners-3 ][ aluFace ][ twist ];
74 #ifdef USE_SMP_PARALLEL 76 static std::vector< ThisType > storage( GridObjectFactoryType :: maxThreads() );
77 return storage[ GridObjectFactoryType :: threadNumber () ];
79 static const ThisType geomStorage;
100 template<
class Gr
idImp>
103 static const int dim = GridImp::dimension;
104 static const int dimworld = GridImp::dimensionworld;
107 typedef typename GridImp::Traits::template Codim< 1 >::GeometryImpl GeometryImpl;
108 typedef typename GridImp::Traits::template Codim< 1 >::LocalGeometryImpl LocalGeometryImpl;
117 enum { dimension = GridImp::dimension };
118 enum { dimensionworld = GridImp::dimensionworld };
120 typedef typename GridImp::template Codim<0>::Entity
Entity;
123 typedef typename GridImp::template Codim<1>::Geometry
Geometry;
147 explicit impl( HElementType *inside = 0 )
148 : index_(0), useOutside_(false)
166 assert( inside() && (index_ < nFaces()) && inside()->neighbour( index_ ) );
167 return inside()->neighbour( index_ )->thinis( ThinelementType::bndel_like );
172 assert( isBoundary() );
173 return (HBndElType *)inside()->neighbour( index_ );
189 nFaces_ = (inside != 0 ? inside->numfaces() : 0);
195 opposite_ = opposite;
200 HElementType *inside_;
201 HElementType *outside_;
220 void assign (
const ThisType & org);
224 return reinterpret_cast< const Intersection &
>( *this );
228 bool equals (
const ThisType & i)
const;
234 bool boundary()
const;
237 int boundaryId ()
const;
240 size_t boundarySegmentIndex()
const;
243 bool neighbor ()
const;
246 EntityPointer inside()
const;
249 EntityPointer outside()
const;
252 int indexInInside ()
const;
255 int indexInOutside ()
const;
257 int twistInInside ()
const;
258 int twistInOutside ()
const;
260 NormalType outerNormal (
const LocalCoordinate &local )
const;
261 NormalType integrationOuterNormal (
const LocalCoordinate &local )
const;
262 NormalType unitOuterNormal (
const LocalCoordinate &local )
const;
264 LocalGeometry geometryInInside ()
const;
265 LocalGeometry geometryInOutside ()
const;
266 Geometry geometry ()
const;
272 const GridImp&
grid()
const {
return factory_.grid(); }
280 void done (
const HElementType *inside );
284 void unsetUp2Date() ;
287 void first (
const EntityImp &en,
int wLevel );
290 virtual void setFirstItem (
const HElementType &elem,
int wLevel ) = 0;
313 template<
class Gr
idImp >
320 static const int dim = GridImp::dimension;
321 static const int dimworld = GridImp::dimensionworld;
333 typedef std::pair< HElementType *, int > IntersectionInfo;
339 enum { dimension = GridImp::dimension };
340 enum { dimensionworld = GridImp::dimensionworld };
342 typedef typename GridImp::template Codim<0>::Entity
Entity;
344 typedef typename GridImp::template Codim<1>::Geometry
Geometry;
373 return (this->grid().nonConform() || isConform());
379 return (!current.outside() || (current.outside() == current.inside()->neighbour( current.index_ )));
386 void setFirstItem(
const HElementType & elem,
int wLevel);
389 template <
class EntityType>
390 void first(
const EntityType & en,
int wLevel);
392 void addNeighboursToStack();
394 static int getOppositeInFather (
int nrInChild,
int nrOfChild );
395 static int getOppositeInChild (
int nrInFather,
int nrOfChild );
397 void setupIntersection ();
400 using BaseType::done;
402 using BaseType::current;
403 using BaseType::walkLevel_;
406 mutable std::stack<IntersectionInfo> nbStack_;
418 template<
class Gr
idImp >
428 static const int dim = GridImp::dimension;
429 static const int dimworld = GridImp::dimensionworld;
436 enum { dimension = GridImp::dimension };
437 enum { dimensionworld = GridImp::dimensionworld };
445 typedef std::pair< HElementType *, int > IntersectionInfo;
448 typedef typename GridImp::template Codim<0>::Entity
Entity;
449 typedef typename GridImp::template Codim<1>::Geometry
Geometry;
477 return (!this->grid().nonConform() || isConform());
483 return (!current.outside() || (current.outside()->level() == current.inside()->level()) );
489 void setFirstItem(
const HElementType & elem,
int wLevel);
492 template <
class EntityType>
493 void first(
const EntityType & en,
int wLevel);
495 void setupIntersection ();
498 using BaseType::done;
500 using BaseType::current;
501 using BaseType::walkLevel_;
504 std::stack<IntersectionInfo> nbStack_;
511 #if COMPILE_ALU2DGRID_INLINE 512 #include "intersection.cc" 515 #endif // #ifndef DUNE_ALU2DGRID_INTERSECTION_HH ALU2dImplTraits< dimworld, eltype >::HBndElType HBndElType
Definition: alugrid/2d/intersection.hh:133
Definition: objectfactory.hh:23
Definition: alugrid/2d/intersection.hh:145
ALU2dGridEntityPointer< 0, GridImp > EntityPointerImp
Definition: alugrid/2d/intersection.hh:129
HmeshType::hbndel_t HBndElType
Definition: alu2dinclude.hh:109
HElementType & getItem() const
Definition: alugrid/2d/entity.hh:488
bool conforming() const
Definition: alugrid/2d/intersection.hh:371
MakeableInterfaceObject< Geometry > GeometryObject
Definition: alugrid/2d/intersection.hh:352
Intersection of a mesh entities of codimension 0 ("elements") with a "neighboring" element or with th...
Definition: albertagrid/dgfparser.hh:26
FieldVector< alu2d_ctype, dimworld > NormalType
Definition: alugrid/2d/intersection.hh:454
Definition: objectfactory.hh:26
ALU2dGridIntersectionBase< GridImp > ImplementationType
Definition: alugrid/2d/intersection.hh:113
FieldVector< alu2d_ctype, dim-1 > LocalCoordinate
Definition: alugrid/2d/intersection.hh:127
FieldVector< alu2d_ctype, dimworld > NormalType
Definition: alugrid/2d/intersection.hh:349
LocalGeometryImpl intersectionNeighborLocal_
Definition: alugrid/2d/intersection.hh:295
FieldVector< alu2d_ctype, dimworld > NormalType
Definition: alugrid/2d/intersection.hh:126
GridImp::template Codim< 1 >::Geometry Geometry
Definition: alugrid/2d/intersection.hh:123
#define ALU2DSPACE
Definition: alu2dinclude.hh:34
ALU2dGridGeometry< dim-1, dim, GridImp > LocalGeometryImp
Definition: alugrid/2d/intersection.hh:348
GeometryImpl intersectionGlobal_
Definition: alugrid/2d/intersection.hh:293
ElementType
Definition: alu2dinclude.hh:55
Definition: alugrid/2d/grid.hh:52
ALU2dGridEntityPointer< 0, GridImp > EntityPointer
Definition: alugrid/2d/intersection.hh:350
organize the memory management for entitys used by the NeighborIterator
Definition: alugrid/2d/grid.hh:68
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
double alu2d_ctype
Definition: alu2dinclude.hh:63
GridImp::template Codim< 1 >::LocalGeometry LocalGeometry
Definition: alugrid/2d/intersection.hh:124
GridImp::GridObjectFactoryType FactoryType
Definition: alugrid/2d/intersection.hh:433
ALU2dGridGeometry< dim-1, dimworld, GridImp > GeometryImp
Definition: alugrid/2d/intersection.hh:347
Provides proxy classes for IntersectionsIterators.
GridImp::template Codim< 1 >::Geometry Geometry
Definition: alugrid/2d/intersection.hh:449
Definition: alugrid/2d/entity.hh:30
HBndElType * boundary() const
Definition: alugrid/2d/intersection.hh:170
GridImp::template Codim< 1 >::LocalGeometry LocalGeometry
Definition: alugrid/2d/intersection.hh:450
ALUMemoryProvider< ThisType > StorageType
Definition: alugrid/2d/intersection.hh:337
ALU2dGridEntityPointer< 0, GridImp > EntityPointer
Definition: alugrid/2d/intersection.hh:455
impl(HElementType *inside=0)
Definition: alugrid/2d/intersection.hh:147
int walkLevel_
Definition: alugrid/2d/intersection.hh:301
Definition: alugrid/2d/entity.hh:26
Class that wraps IntersectionIteratorImp of a grid and gets it's internal object from a object stack ...
Definition: intersectioniteratorwrapper.hh:327
LocalGeometryImpl intersectionSelfLocal_
Definition: alugrid/2d/intersection.hh:294
Definition: alugrid/common/declaration.hh:20
void setInside(HElementType *inside)
Definition: alugrid/2d/intersection.hh:186
HElementType * inside() const
Definition: alugrid/2d/intersection.hh:154
const LocalGeometryImpl & localGeom(const int aluFace, const int twist, const int corners) const
Definition: alugrid/2d/intersection.hh:63
HElementType * outside() const
Definition: alugrid/2d/intersection.hh:176
Definition: alugrid/2d/intersection.hh:48
GridImp::template Codim< 0 >::Entity Entity
Definition: alugrid/2d/intersection.hh:120
GridImp::template Codim< 1 >::Geometry Geometry
Definition: alugrid/2d/intersection.hh:344
const FactoryType & factory_
Definition: alugrid/2d/intersection.hh:298
ALU2dGridEntity< 0, dim, GridImp > EntityImp
Definition: alugrid/2d/intersection.hh:125
GridImp::GridObjectFactoryType FactoryType
Definition: alugrid/2d/intersection.hh:336
HmeshType::helement_t HElementType
Definition: alu2dinclude.hh:108
Class that wraps IntersectionIteratorImp of a grid and gets it's internal object from a object stack ...
Definition: intersectioniteratorwrapper.hh:18
bool isConform() const
Definition: alugrid/2d/intersection.hh:481
GridImp::template Codim< 0 >::EntityPointer EntityPointer
Definition: alugrid/2d/intersection.hh:121
bool isBoundary() const
Definition: alugrid/2d/intersection.hh:164
ALUMemoryProvider< ThisType > StorageType
Definition: alugrid/2d/intersection.hh:434
int nFaces() const
Definition: alugrid/2d/intersection.hh:159
int opposite() const
Definition: alugrid/2d/intersection.hh:181
bool useOutside_
Definition: alugrid/2d/intersection.hh:207
Definition: alugrid/2d/entity.hh:32
const GridImp & grid() const
Definition: alugrid/2d/intersection.hh:272
Definition: alugrid/2d/entity.hh:210
ALU2DIntersectionGeometryStorage< GridImp, LocalGeometryImpl > LocalGeometryStorageType
Definition: alugrid/2d/intersection.hh:136
GridImp::GridObjectFactoryType FactoryType
Definition: alugrid/2d/intersection.hh:111
GridImp::template Codim< 1 >::LocalGeometry LocalGeometry
Definition: alugrid/2d/intersection.hh:345
Include standard header files.
Definition: agrid.hh:59
void setOutside(HElementType *outside, int opposite)
Definition: alugrid/2d/intersection.hh:192
const Intersection & dereference() const
Definition: alugrid/2d/intersection.hh:222
ALU2dImplTraits< dimworld, eltype >::ThinelementType ThinelementType
Definition: alugrid/2d/intersection.hh:131
ALU2dGridEntity< 0, dim, GridImp > EntityImp
Definition: alugrid/2d/intersection.hh:451
GridImp::template Codim< 0 >::Entity Entity
Definition: alugrid/2d/intersection.hh:448
Dune::Intersection< GridImp, Dune::ALU2dGridIntersectionBase< GridImp > > Intersection
type of the intersection
Definition: alugrid/2d/intersection.hh:115
MakeableInterfaceObject< Geometry > GeometryObject
Definition: alugrid/2d/intersection.hh:457
ALU2dGridGeometry< dim-1, dimworld, GridImp > GeometryImp
Definition: alugrid/2d/intersection.hh:452
int index_
Definition: alugrid/2d/intersection.hh:206
ALU2dGridEntity< 0, dim, GridImp > EntityImp
Definition: alugrid/2d/intersection.hh:346
Different resources needed by all grid implementations.
const LocalGeometryStorageType & localGeomStorage_
Definition: alugrid/2d/intersection.hh:299
ALU2dImplTraits< dimworld, eltype >::HElementType HElementType
Definition: alugrid/2d/intersection.hh:132
Definition: alu2dinclude.hh:97
GridImp::template Codim< 0 >::Entity Entity
Definition: alugrid/2d/intersection.hh:342
bool conforming() const
leaf is conforming, when conform grid version used
Definition: alugrid/2d/intersection.hh:475
void done(const EntityImp &en)
Definition: alugrid/2d/intersection.hh:281
Class that wraps IntersectionIteratorImp of a grid and gets it's internal object from a object stack ...
Definition: intersectioniteratorwrapper.hh:232
virtual ~ALU2dGridIntersectionBase()
Definition: alugrid/2d/intersection.hh:217
ALU2dGridIntersectionBase< GridImp > ThisType
Definition: alugrid/2d/intersection.hh:138
static const ThisType & instance()
Definition: alugrid/2d/intersection.hh:72
ALU2dGridGeometry< dim-1, dim, GridImp > LocalGeometryImp
Definition: alugrid/2d/intersection.hh:453
bool isConform() const
Definition: alugrid/2d/intersection.hh:377