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"
unsigned int refCount_
the reference counter
Definition: alugrid/3d/geometry.hh:87
static GeometryProviderType & geoProvider()
return storage provider for geometry objects
Definition: alugrid/3d/geometry.hh:770
Definition: alugrid/3d/entity.hh:28
static const signed char buildmapping
Definition: alugrid/3d/geometry.hh:44
GridImp::ctype ctype
Definition: alugrid/3d/geometry.hh:654
static const int corners_
number of corners
Definition: alugrid/3d/geometry.hh:55
void assign(const ALU3dGridGeometry &other)
assign pointer
FieldMatrix< ctype, cdim, mydim > JacobianInverseTransposed
type of jacobian inverse transposed
Definition: alugrid/3d/geometry.hh:663
void update(const CoordPtrType &p0)
Definition: alugrid/3d/geometry.hh:217
GeometryImpl()
Definition: alugrid/3d/geometry.hh:538
void update(const CoordPtrType &p0, const CoordPtrType &p1, const CoordPtrType &p2, const CoordPtrType &p3)
Definition: alugrid/3d/geometry.hh:568
FieldVector< alu3d_ctype, cdim > CoordinateVectorType
Definition: alugrid/3d/geometry.hh:40
ALU3dGridGeometry & operator=(const ALU3dGridGeometry &)
copy constructor copying pointer and increasing reference count
static const signed char invalid
Definition: alugrid/3d/geometry.hh:42
A bilinear surface mapping.
Definition: mappings.hh:144
FieldMatrix< ctype, EntityCount< elementType >::numVerticesPerFace, 3 > FaceCoordinatesType
Definition: alugrid/3d/geometry.hh:670
void reset()
reset status and reference count
Definition: alugrid/3d/geometry.hh:102
GeometryImplType & geoImpl() const
Definition: alugrid/3d/geometry.hh:783
void updateInFather(const GeometryImp &fatherGeom, const GeometryImp &myGeom)
Definition: alugrid/3d/geometry.hh:463
void print(std::ostream &ss) const
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
ctype integrationElement(const LocalCoordinate &local) const
A(l) , see grid.hh.
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:492
Include standard header files.
Definition: agrid.hh:59
void update(const CoordPtrType &, const CoordPtrType &, const CoordPtrType &, const CoordPtrType &) const
Definition: alugrid/3d/geometry.hh:147
Definition: topology.hh:126
void invalidate()
Definition: alugrid/3d/geometry.hh:505
double alu3d_ctype
Definition: alu3dinclude.hh:59
FieldVector< ctype, cdim > GlobalCoordinate
type of the global coordinates
Definition: alugrid/3d/geometry.hh:660
const CoordinateVectorType & operator[](const int i) const
Definition: alugrid/3d/geometry.hh:198
const alu3d_ctype * point(const int i) const
Definition: alugrid/3d/geometry.hh:424
void updateInFather(const GeometryImp &fatherGeom, const GeometryImp &myGeom)
Definition: alugrid/3d/geometry.hh:582
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
jacobian transposed
void operator--()
decrease reference count
Definition: alugrid/3d/geometry.hh:114
Definition: topology.hh:13
MappingType map_
the mapping
Definition: alugrid/3d/geometry.hh:81
FieldVector< ctype, mydim > LocalCoordinate
type of local coordinates
Definition: alugrid/3d/geometry.hh:657
~GeometryImpl()
Definition: alugrid/3d/geometry.hh:419
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:315
FieldMatrix< alu3d_ctype, corners, cdim > CoordinateMatrixType
the vertex coordinates
Definition: alugrid/3d/geometry.hh:58
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
bool valid() const
Definition: alugrid/3d/geometry.hh:167
GeometryImplBase()
default constructor
Definition: alugrid/3d/geometry.hh:93
CoordinateMatrixType Type
Definition: alugrid/3d/geometry.hh:63
Definition: topology.hh:16
organize the memory management for entitys used by the NeighborIterator
Definition: alugrid/2d/grid.hh:68
Definition: topology.hh:13
Different resources needed by all grid implementations.
void buildMapping(const vector_t &, const vector_t &, const vector_t &, const vector_t &)
Definition: alugrid/3d/geometry.hh:47
Definition: alugrid/3d/entity.hh:32
GeometryImplType * geoImpl_
Definition: alugrid/3d/geometry.hh:790
void invalidate()
invalidate geometry implementation to avoid errors
CoordinateMatrixType * Type
Definition: alugrid/3d/geometry.hh:69
void update(const CoordPtrType &p0, const CoordPtrType &p1, const CoordPtrType &p2, const CoordPtrType &p3)
Definition: alugrid/3d/geometry.hh:361
signed char status_
the status (see different status above)
Definition: alugrid/3d/geometry.hh:90
Definition: topology.hh:40
Definition: alugrid/3d/geometry.hh:37
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:374
void invalidate()
Definition: alugrid/3d/geometry.hh:164
~GeometryImpl()
Definition: alugrid/3d/geometry.hh:546
GlobalCoordinate global(const LocalCoordinate &local) const
void update(const CoordPtrType &p0, const CoordPtrType &p1, const CoordPtrType &p2)
Definition: alugrid/3d/geometry.hh:304
ALUMemoryProvider< GeometryImplType > GeometryProviderType
Definition: alugrid/3d/geometry.hh:767
static const signed char updated
Definition: alugrid/3d/geometry.hh:43
FieldMatrix< ctype, mydim, cdim > JacobianTransposed
type of jacobian transposed
Definition: alugrid/3d/geometry.hh:666
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:205
CoordinateStorageType coord_
to coordinates
Definition: alugrid/3d/geometry.hh:78
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:253
Definition: alu3dinclude.hh:201
void setVolume(const double volume)
Definition: alugrid/3d/geometry.hh:170
void getObject()
get a new pointer object
ctype volume() const
returns volume of geometry
GeometryType type() const
void update(const CoordPtrType &p0, const CoordPtrType &p1)
Definition: alugrid/3d/geometry.hh:265
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
ALU3dGridElementType
Definition: topology.hh:13
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
bool buildGeom(const IMPLElementType &item)
Methods that not belong to the Interface, but have to be public.
int corners() const
return the number of corners of this element. Corners are numbered 0..n-1
CoordTypeExtractorType< 0, dim >::Type CoordinateStorageType
Definition: alugrid/3d/geometry.hh:72
void removeObj()
remove pointer object
bool valid() const
Definition: alugrid/3d/geometry.hh:508
Definition: alugrid/3d/geometry.hh:61
general type of geometry implementation
Definition: alugrid/3d/geometry.hh:178
double volume() const
Definition: alugrid/3d/geometry.hh:173
Definition: mappings.hh:30
bool operator!() const
return true if object has no references anymore
Definition: alugrid/3d/geometry.hh:117
bool valid() const
invalidate geometry implementation to avoid errors
bool buildGeomInFather(const GeometryType &fatherGeom, const GeometryType &myGeom)
build geometry of local coordinates relative to father
bool stillUsed() const
return true if there exists more then on reference
Definition: alugrid/3d/geometry.hh:120
GlobalCoordinate corner(int i) const
access to coordinates of corners. Index is the number of the corner
Definition: objectfactory.hh:26
MappingType & mapping()
Definition: alugrid/3d/geometry.hh:611
bool affine() const
returns true if mapping is affine
GeometryImpl()
constructor creating geo impl
Definition: alugrid/3d/geometry.hh:411
void operator++()
increase reference count
Definition: alugrid/3d/geometry.hh:111
double volume_
volume of element
Definition: alugrid/3d/geometry.hh:84
const alu3d_ctype * point(const int i) const
Definition: alugrid/3d/geometry.hh:551
Mapping MappingType
the type of the mapping
Definition: alugrid/3d/geometry.hh:75
static void copy(const CoordPtrType &p, CoordinateVectorType &c)
Definition: alugrid/3d/geometry.hh:124
~ALU3dGridGeometry()
destructor decreasing reference count and freeing object
void update(const CoordPtrType &, const CoordPtrType &, const CoordPtrType &) const
Definition: alugrid/3d/geometry.hh:156
LocalCoordinate local(const GlobalCoordinate &global) const