3 #ifndef DUNE_ALU3DGRIDGEOMETRY_HH
4 #define DUNE_ALU3DGRIDGEOMETRY_HH
9 #include <dune/common/power.hh>
22 template<
int cd,
int dim,
class Gr
idImp>
23 class ALU3dGridEntity;
24 template<
int cd,
class Gr
idImp >
25 class ALU3dGridEntityPointer;
26 template<
int mydim,
int coorddim,
class Gr
idImp>
27 class ALU3dGridGeometry;
28 template< ALU3dGr
idElementType,
class >
30 class BilinearSurfaceMapping;
31 class TrilinearMapping;
33 template<
class Gr
idImp >
34 class ALU3dGridIntersectionIterator;
46 template <
int dim,
int corners,
class Mapping>
60 template <
int dummy,
int dimused>
63 typedef CoordinateMatrixType
Type;
69 typedef CoordinateMatrixType*
Type;
123 template <
class CoordPtrType>
124 static inline void copy(
const CoordPtrType& p,
125 CoordinateVectorType& c)
133 template <
class CoordPtrType>
141 const CoordPtrType& )
const
143 DUNE_THROW(InvalidStateException,
"This method should not be called!");
146 template <
class CoordPtrType>
150 const CoordPtrType& )
const
152 DUNE_THROW(InvalidStateException,
"This method should not be called!");
155 template <
class CoordPtrType>
158 const CoordPtrType& )
const
160 DUNE_THROW(InvalidStateException,
"This method should not be called!");
177 template <
int dummy,
int dim,
181 template <
int dummy,
int dim, ALU3dGr
idElementType eltype>
198 inline const CoordinateVectorType&
operator [] (
const int i)
const
216 template <
class CoordPtrType>
217 inline void update(
const CoordPtrType& p0)
227 template <
int dummy, ALU3dGr
idElementType eltype>
246 inline const CoordinateVectorType&
operator [] (
const int i)
const
264 template <
class CoordPtrType>
265 inline void update(
const CoordPtrType& p0,
266 const CoordPtrType& p1)
295 inline const CoordinateVectorType&
operator [] (
const int i)
const
303 template <
class CoordPtrType>
304 inline void update(
const CoordPtrType& p0,
305 const CoordPtrType& p1,
306 const CoordPtrType& p2)
352 inline const CoordinateVectorType&
operator [] (
const int i)
const
360 template <
class CoordPtrType>
361 inline void update(
const CoordPtrType& p0,
362 const CoordPtrType& p1,
363 const CoordPtrType& p2,
364 const CoordPtrType& p3)
428 assert( coordPtr_[i] );
429 return coordPtr_[ i ];
435 CoordinateVectorType coord ;
436 copy( point( i ), coord );
441 inline void update(
const CoordPtrType& p0,
442 const CoordPtrType& p1,
443 const CoordPtrType& p2,
444 const CoordPtrType& p3,
445 const CoordPtrType& p4,
446 const CoordPtrType& p5,
447 const CoordPtrType& p6,
448 const CoordPtrType& p7)
450 coordPtr_[0] = &p0[ 0 ];
451 coordPtr_[1] = &p1[ 0 ];
452 coordPtr_[2] = &p2[ 0 ];
453 coordPtr_[3] = &p3[ 0 ];
454 coordPtr_[4] = &p4[ 0 ];
455 coordPtr_[5] = &p5[ 0 ];
456 coordPtr_[6] = &p6[ 0 ];
457 coordPtr_[7] = &p7[ 0 ];
462 template <
class GeometryImp>
464 const GeometryImp &myGeom)
471 CoordinateMatrixType& coord = *
coord_;
473 for(
int i=0; i < myGeom.corners() ; ++i)
476 coord[i] = fatherGeom.local( myGeom.corner( i ) );
479 coordPtr_[i] = (&(coord[i][0]));
482 for(
int j=0; j<cdim; ++j)
484 if ( coord[i][j] < 1e-16) coord[i][j] = 0.0;
498 point( 4 ), point( 5 ), point( 6 ), point( 7 ) );
555 assert( coordPtr_[ i ] );
556 return coordPtr_[ i ];
562 CoordinateVectorType coord ;
563 copy( point( i ), coord );
568 inline void update(
const CoordPtrType& p0,
569 const CoordPtrType& p1,
570 const CoordPtrType& p2,
571 const CoordPtrType& p3)
573 coordPtr_[0] = &p0[ 0 ];
574 coordPtr_[1] = &p1[ 0 ];
575 coordPtr_[2] = &p2[ 0 ];
576 coordPtr_[3] = &p3[ 0 ];
581 template <
class GeometryImp>
583 const GeometryImp & myGeom)
590 CoordinateMatrixType& coord = *
coord_;
592 for(
int i=0; i < myGeom.corners() ; ++i)
595 coord[i] = fatherGeom.local( myGeom.corner( i ) );
598 coordPtr_[i] = (&(coord[i][0]));
601 for(
int j=0; j<cdim; ++j)
603 if ( coord[i][j] < 1e-16) coord[i][j] = 0.0;
624 template <
int mydim,
int cdim,
class Gr
idImp>
625 class ALU3dGridGeometry :
626 public GeometryDefaultImplementation<mydim, cdim, GridImp, ALU3dGridGeometry>
630 typedef typename GridImp::MPICommunicatorType Comm;
647 enum { corners_ = (elementType ==
hexa) ? StaticPower<2,mydim>::power : mydim+1 };
651 template GeometryImpl<0, mydim, elementType > GeometryImplType;
654 typedef typename GridImp :: ctype
ctype;
669 typedef FieldMatrix<
ctype,
693 GlobalCoordinate
corner (
int i)
const;
697 GlobalCoordinate
global (
const LocalCoordinate&
local)
const;
701 LocalCoordinate
local (
const GlobalCoordinate&
global)
const;
714 inline bool affine ()
const;
723 bool buildGeom(
const IMPLElementType & item);
724 bool buildGeom(
const HFaceType & item,
int twist,
int faceNum);
725 bool buildGeom(
const HEdgeType & item,
int twist,
int);
726 bool buildGeom(
const VertexType & item,
int twist,
int);
729 bool buildGeom(
const FaceCoordinatesType& coords);
732 template <
class coord_t>
739 template <
class coord_t>
745 template <
class GeometryType>
750 void print (std::ostream& ss)
const;
756 bool valid ()
const ;
772 #ifdef USE_SMP_PARALLEL
774 static std::vector< GeometryProviderType > storage( GridObjectFactoryType :: maxThreads() );
775 return storage[ GridObjectFactoryType :: threadNumber () ];
777 static GeometryProviderType storage;
795 #include "geometry_imp.cc"
CoordinateMatrixType * Type
Definition: alugrid/3d/geometry.hh:69
MappingType map_
the mapping
Definition: alugrid/3d/geometry.hh:81
static const signed char buildmapping
Definition: alugrid/3d/geometry.hh:44
GlobalCoordinate global(const LocalCoordinate &local) const
const alu3d_ctype * point(const int i) const
Definition: alugrid/3d/geometry.hh:424
bool stillUsed() const
return true if there exists more then on reference
Definition: alugrid/3d/geometry.hh:120
void update(const CoordPtrType &p0, const CoordPtrType &p1, const CoordPtrType &p2, const CoordPtrType &p3)
Definition: alugrid/3d/geometry.hh:568
Definition: alu3dinclude.hh:201
unsigned int refCount_
the reference counter
Definition: alugrid/3d/geometry.hh:87
~GeometryImpl()
Definition: alugrid/3d/geometry.hh:546
CoordTypeExtractorType< 0, dim >::Type CoordinateStorageType
Definition: alugrid/3d/geometry.hh:72
FieldMatrix< ctype, mydim, cdim > JacobianTransposed
type of jacobian transposed
Definition: alugrid/3d/geometry.hh:666
void update(const CoordPtrType &p0)
Definition: alugrid/3d/geometry.hh:217
FieldVector< alu3d_ctype, cdim > CoordinateVectorType
Definition: alugrid/3d/geometry.hh:40
~GeometryImpl()
Definition: alugrid/3d/geometry.hh:419
ALU3dGridElementType
Definition: topology.hh:13
void setVolume(const double volume)
Definition: alugrid/3d/geometry.hh:170
static const signed char invalid
Definition: alugrid/3d/geometry.hh:42
A bilinear surface mapping.
Definition: mappings.hh:144
LocalCoordinate local(const GlobalCoordinate &global) const
void getObject()
get a new pointer object
ctype volume() const
returns volume of geometry
CoordinateMatrixType Type
Definition: alugrid/3d/geometry.hh:63
double volume() const
Definition: alugrid/3d/geometry.hh:173
organize the memory management for entitys used by the NeighborIterator
Definition: alugrid/2d/grid.hh:68
GridImp::ctype ctype
Definition: alugrid/3d/geometry.hh:654
void update(const CoordPtrType &, const CoordPtrType &, const CoordPtrType &, const CoordPtrType &, const CoordPtrType &, const CoordPtrType &, const CoordPtrType &, const CoordPtrType &) const
Definition: alugrid/3d/geometry.hh:134
bool buildGeom(const IMPLElementType &item)
Methods that not belong to the Interface, but have to be public.
void update(const CoordPtrType &, const CoordPtrType &, const CoordPtrType &) const
Definition: alugrid/3d/geometry.hh:156
void removeObj()
remove pointer object
void invalidate()
invalidate geometry implementation to avoid errors
void update(const CoordPtrType &p0, const CoordPtrType &p1, const CoordPtrType &p2, const CoordPtrType &p3, const CoordPtrType &p4, const CoordPtrType &p5, const CoordPtrType &p6, const CoordPtrType &p7)
Definition: alugrid/3d/geometry.hh:441
void updateInFather(const GeometryImp &fatherGeom, const GeometryImp &myGeom)
Definition: alugrid/3d/geometry.hh:582
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:315
bool valid() const
Definition: alugrid/3d/geometry.hh:508
void print(std::ostream &ss) const
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:611
bool valid() const
invalidate geometry implementation to avoid errors
signed char status_
the status (see different status above)
Definition: alugrid/3d/geometry.hh:90
GlobalCoordinate corner(int i) const
access to coordinates of corners. Index is the number of the corner
void operator--()
decrease reference count
Definition: alugrid/3d/geometry.hh:114
Different resources needed by all grid implementations.
Definition: topology.hh:13
void buildMapping(const vector_t &, const vector_t &, const vector_t &, const vector_t &)
void update(const CoordPtrType &p0, const CoordPtrType &p1)
Definition: alugrid/3d/geometry.hh:265
static const int corners_
number of corners
Definition: alugrid/3d/geometry.hh:55
~ALU3dGridGeometry()
destructor decreasing reference count and freeing object
Definition: alugrid/3d/entity.hh:28
GeometryType type() const
void operator++()
increase reference count
Definition: alugrid/3d/geometry.hh:111
void update(const CoordPtrType &p0, const CoordPtrType &p1, const CoordPtrType &p2, const CoordPtrType &p3)
Definition: alugrid/3d/geometry.hh:361
static GeometryProviderType & geoProvider()
return storage provider for geometry objects
Definition: alugrid/3d/geometry.hh:770
const CoordinateVectorType & operator[](const int i) const
Definition: alugrid/3d/geometry.hh:198
CoordinateStorageType coord_
to coordinates
Definition: alugrid/3d/geometry.hh:78
FieldMatrix< ctype, cdim, mydim > JacobianInverseTransposed
type of jacobian inverse transposed
Definition: alugrid/3d/geometry.hh:663
Definition: alugrid/3d/geometry.hh:37
void update(const CoordPtrType &, const CoordPtrType &, const CoordPtrType &, const CoordPtrType &) const
Definition: alugrid/3d/geometry.hh:147
GeometryImplBase()
default constructor
Definition: alugrid/3d/geometry.hh:93
int corners() const
return the number of corners of this element. Corners are numbered 0..n-1
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
ALU3dGridGeometry & operator=(const ALU3dGridGeometry &)
copy constructor copying pointer and increasing reference count
bool operator!() const
return true if object has no references anymore
Definition: alugrid/3d/geometry.hh:117
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:253
GeometryImpl()
Definition: alugrid/3d/geometry.hh:538
Definition: topology.hh:126
static const signed char updated
Definition: alugrid/3d/geometry.hh:43
ctype integrationElement(const LocalCoordinate &local) const
A(l) , see grid.hh.
Definition: objectfactory.hh:26
void update(const CoordPtrType &p0, const CoordPtrType &p1, const CoordPtrType &p2)
Definition: alugrid/3d/geometry.hh:304
GeometryImpl()
constructor creating geo impl
Definition: alugrid/3d/geometry.hh:411
bool buildGeomInFather(const GeometryType &fatherGeom, const GeometryType &myGeom)
build geometry of local coordinates relative to father
void invalidate()
Definition: alugrid/3d/geometry.hh:505
Definition: alugrid/3d/geometry.hh:47
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:205
double alu3d_ctype
Definition: alu3dinclude.hh:59
bool affine() const
returns true if mapping is affine
FieldMatrix< alu3d_ctype, corners, cdim > CoordinateMatrixType
the vertex coordinates
Definition: alugrid/3d/geometry.hh:58
bool valid() const
Definition: alugrid/3d/geometry.hh:167
FieldVector< ctype, cdim > GlobalCoordinate
type of the global coordinates
Definition: alugrid/3d/geometry.hh:660
Definition: topology.hh:40
void updateInFather(const GeometryImp &fatherGeom, const GeometryImp &myGeom)
Definition: alugrid/3d/geometry.hh:463
double volume_
volume of element
Definition: alugrid/3d/geometry.hh:84
Definition: topology.hh:16
Definition: topology.hh:13
ALUMemoryProvider< GeometryImplType > GeometryProviderType
Definition: alugrid/3d/geometry.hh:767
FieldVector< ctype, mydim > LocalCoordinate
type of local coordinates
Definition: alugrid/3d/geometry.hh:657
Definition: mappings.hh:30
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
jacobian transposed
void reset()
reset status and reference count
Definition: alugrid/3d/geometry.hh:102
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:374
void invalidate()
Definition: alugrid/3d/geometry.hh:164
const alu3d_ctype * point(const int i) const
Definition: alugrid/3d/geometry.hh:551
Include standard header files.
Definition: agrid.hh:59
void assign(const ALU3dGridGeometry &other)
assign pointer
Mapping MappingType
the type of the mapping
Definition: alugrid/3d/geometry.hh:75
Definition: alugrid/3d/entity.hh:32
GeometryImplType * geoImpl_
Definition: alugrid/3d/geometry.hh:790
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:492
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
FieldMatrix< ctype, EntityCount< elementType >::numVerticesPerFace, 3 > FaceCoordinatesType
Definition: alugrid/3d/geometry.hh:670
static void copy(const CoordPtrType &p, CoordinateVectorType &c)
Definition: alugrid/3d/geometry.hh:124
Definition: alugrid/3d/geometry.hh:61
GeometryImplType & geoImpl() const
Definition: alugrid/3d/geometry.hh:783
general type of geometry implementation
Definition: alugrid/3d/geometry.hh:178