3 #ifndef DUNE_ALBERTA_GEOMETRY_HH 4 #define DUNE_ALBERTA_GEOMETRY_HH 18 template<
int dim,
int dimworld >
26 template<
int codim,
class Gr
idImp >
29 typedef typename std::remove_const< GridImp >::type
Grid;
45 elementInfo_( elementInfo ),
46 subEntity_( subEntity )
56 assert( !elementInfo_ ==
false );
57 assert( (i >= 0) && (i <= mydimension) );
59 const int k = mapVertices( subEntity_, i );
77 static int mapVertices (
int subEntity,
int i )
83 const ElementInfo &elementInfo_;
104 template<
int mydim,
int cdim,
class Gr
idImp >
110 typedef GridImp
Grid;
113 static const int dimbary = mydim + 1;
131 static const int numCorners = mydimension + 1;
133 typedef FieldMatrix< ctype, numCorners, coorddimension > CoordMatrix;
141 template<
class CoordReader >
144 build( coordReader );
150 typedef typename Impl::SimplexTopology< mydimension >::type Topology;
164 GlobalCoordinate
corner (
const int i )
const 166 assert( (i >= 0) && (i < corners()) );
177 GlobalCoordinate global (
const LocalCoordinate &local )
const;
180 LocalCoordinate local (
const GlobalCoordinate &global )
const;
189 assert( calcedDet_ );
196 return integrationElement();
202 return integrationElement() /
ctype( Factorial< mydimension >::factorial );
210 const JacobianTransposed &jacobianTransposed ()
const;
213 const JacobianTransposed &
216 return jacobianTransposed();
224 const JacobianInverseTransposed &jacobianInverseTransposed ()
const;
227 const JacobianInverseTransposed &
230 return jacobianInverseTransposed();
246 template<
class CoordReader >
247 void build (
const CoordReader &coordReader );
249 void print ( std::ostream &out )
const;
253 ctype elDeterminant ()
const 262 GlobalCoordinate centroid_;
265 mutable JacobianTransposed jT_;
268 mutable JacobianInverseTransposed jTInv_;
271 mutable bool builtJT_;
273 mutable bool builtJTInv_;
275 mutable bool calcedDet_;
276 mutable ctype elDet_;
284 template<
int mydim,
int cdim,
class Gr
idImp >
296 template<
class CoordReader >
298 : Base( coordReader )
303 #if !DUNE_ALBERTA_CACHE_COORDINATES 304 template<
int dim,
int cdim >
313 static const int dimbary = dim + 1;
333 static const int numCorners = mydimension + 1;
335 typedef FieldMatrix< ctype, numCorners, coorddimension > CoordMatrix;
343 template<
class CoordReader >
346 build( coordReader );
352 typedef typename Impl::SimplexTopology< mydimension >::type Topology;
363 GlobalCoordinate
corner (
const int i )
const 365 assert( (i >= 0) && (i < corners()) );
366 const Alberta::GlobalCoordinate &x = elementInfo_.coordinate( i );
376 GlobalCoordinate centroid_ = corner( 0 );
377 for(
int i = 1; i < numCorners; ++i )
378 centroid_ += corner( i );
379 centroid_ *=
ctype( 1 ) /
ctype( numCorners );
384 GlobalCoordinate global (
const LocalCoordinate &local )
const;
387 LocalCoordinate local (
const GlobalCoordinate &global )
const;
396 return elementInfo_.geometryCache().integrationElement();
402 return integrationElement();
408 return integrationElement() /
ctype( Factorial< mydimension >::factorial );
418 return elementInfo_.geometryCache().jacobianTransposed();
422 const JacobianTransposed &
425 return jacobianTransposed();
435 return elementInfo_.geometryCache().jacobianInverseTransposed();
439 const JacobianInverseTransposed &
442 return jacobianInverseTransposed();
456 template<
class CoordReader >
457 void build (
const CoordReader &coordReader )
459 elementInfo_ = coordReader.elementInfo();
463 ElementInfo elementInfo_;
465 #endif // #if !DUNE_ALBERTA_CACHE_COORDINATES 472 template<
class Gr
id >
482 template<
int codim >
491 static const int numChildren = 2;
492 static const int numFaces = dimension + 1;
496 static const int numFaceTwists = maxFaceTwist - minFaceTwist + 1;
504 buildGeometryInFather();
510 for(
int child = 0; child < numChildren; ++child )
512 delete geometryInFather_[ child ][ 0 ];
513 delete geometryInFather_[ child ][ 1 ];
516 for(
int i = 0; i < numFaces; ++i )
518 for(
int j = 0; j < numFaceTwists; ++j )
519 delete faceGeometry_[ i ][ j ];
523 void buildGeometryInFather();
524 void buildFaceGeometry();
527 const LocalElementGeometry &
530 assert( (child >= 0) && (child < numChildren) );
531 assert( (orientation == 1) || (orientation == -1) );
532 return *geometryInFather_[ child ][ (orientation + 1) / 2 ];
535 const LocalFaceGeometry &
538 assert( (face >= 0) && (face < numFaces) );
539 assert( (twist >= minFaceTwist) && (twist <= maxFaceTwist) );
540 return *faceGeometry_[ face ][ twist - minFaceTwist ];
545 static This theInstance;
550 template<
int codim >
551 static int mapVertices (
int subEntity,
int i )
556 const LocalElementGeometry *geometryInFather_[ numChildren ][ 2 ];
557 const LocalFaceGeometry *faceGeometry_[ numFaces ][ numFaceTwists ];
562 #endif // #if HAVE_ALBERTA 564 #endif // #ifndef DUNE_ALBERTA_GEOMETRY_HH
int corners() const
number of corner the geometry
Definition: albertagrid/geometry.hh:158
provides a wrapper for ALBERTA's el_info structure
ct ctype
Define type used for coordinates in grid module.
Definition: common/grid.hh:522
ctype integrationElement() const
integration element of the geometry mapping
Definition: albertagrid/geometry.hh:187
static const int dimension
Definition: albertagrid/geometry.hh:31
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
transposed inverse of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:228
GlobalCoordinate center() const
return center of geometry
Definition: albertagrid/geometry.hh:374
const JacobianInverseTransposed & jacobianInverseTransposed() const
transposed inverse of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:433
std::remove_const< GridImp >::type Grid
Definition: albertagrid/geometry.hh:29
ctype determinant() const
Definition: albertagrid/geometry.hh:70
AlbertaGridGlobalGeometry(const CoordReader &coordReader)
Definition: albertagrid/geometry.hh:344
void invalidate()
invalidate the geometry
Definition: albertagrid/geometry.hh:450
AlbertaGridGlobalGeometry()
Definition: albertagrid/geometry.hh:338
AlbertaGridGeometry()
Definition: albertagrid/geometry.hh:136
ctype integrationElement() const
integration element of the geometry mapping
Definition: albertagrid/geometry.hh:394
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
FieldVector< ctype, coorddimension > GlobalCoordinate
Definition: albertagrid/geometry.hh:125
FieldVector< ctype, coorddimension > GlobalCoordinate
Definition: albertagrid/geometry.hh:327
static const int codimension
Definition: albertagrid/geometry.hh:32
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
transposed of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:423
Codim< 1 >::LocalGeometry LocalFaceGeometry
Definition: albertagrid/geometry.hh:489
FieldVector< ctype, coorddimension > Coordinate
Definition: albertagrid/geometry.hh:39
const LocalElementGeometry & geometryInFather(int child, const int orientation=1) const
Definition: albertagrid/geometry.hh:528
ctype volume() const
volume of geometry
Definition: albertagrid/geometry.hh:406
AlbertaGridGlobalGeometry()
Definition: albertagrid/geometry.hh:292
GlobalCoordinate corner(const int i) const
obtain the i-th corner of this geometry
Definition: albertagrid/geometry.hh:164
ctype volume() const
volume of geometry
Definition: albertagrid/geometry.hh:200
Alberta::Real ctype
type of coordinates
Definition: albertagrid/geometry.hh:319
FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed
Definition: albertagrid/geometry.hh:127
void abs(const DofVectorPointer< int > &dofVector)
Definition: dofvector.hh:326
GeometryType type() const
obtain the type of reference element
Definition: albertagrid/geometry.hh:148
FieldVector< ctype, mydimension > LocalCoordinate
Definition: albertagrid/geometry.hh:326
Definition: albertagrid/geometry.hh:27
[ provides Dune::Grid ]
Definition: agrid.hh:137
FieldVector< ctype, mydimension > LocalCoordinate
Definition: albertagrid/geometry.hh:124
Grid::ctype ctype
Definition: albertagrid/geometry.hh:478
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
transposed of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:214
FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed
Definition: albertagrid/geometry.hh:128
GlobalCoordinate center() const
return center of geometry
Definition: albertagrid/geometry.hh:171
AlbertaGridGeometry< dimension-codim, dimension, Grid > LocalGeometry
Definition: albertagrid/geometry.hh:485
Definition: albertagrid/geometry.hh:483
Codim< 0 >::LocalGeometry LocalElementGeometry
Definition: albertagrid/geometry.hh:488
Alberta::Real ctype
Definition: albertagrid/geometry.hh:36
FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed
Definition: albertagrid/geometry.hh:329
void coordinate(int i, Coordinate &x) const
Definition: albertagrid/geometry.hh:54
Alberta::Real ctype
type of coordinates
Definition: albertagrid/geometry.hh:117
void build(const CoordReader &coordReader)
build the geometry from a coordinate reader
Definition: albertagrid/geometry.hh:457
const LocalFaceGeometry & faceGeometry(int face, int twist=0) const
Definition: albertagrid/geometry.hh:536
Definition: albertagrid/geometry.hh:285
bool hasDeterminant() const
Definition: albertagrid/geometry.hh:65
int corners() const
number of corner the geometry
Definition: albertagrid/geometry.hh:357
Include standard header files.
Definition: agrid.hh:59
static const int coorddimension
Definition: albertagrid/geometry.hh:34
Definition: geometry.cc:213
void invalidate()
invalidate the geometry
Definition: albertagrid/geometry.hh:238
GlobalCoordinate corner(const int i) const
obtain the i-th corner of this geometry
Definition: albertagrid/geometry.hh:363
AlbertaGridCoordinateReader(const GridImp &grid, const ElementInfo &elementInfo, int subEntity)
Definition: albertagrid/geometry.hh:41
const JacobianTransposed & jacobianTransposed() const
transposed of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:416
FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed
Definition: albertagrid/geometry.hh:330
bool affine() const
returns always true since we only have simplices
Definition: albertagrid/geometry.hh:155
static K determinant(const FieldMatrix< K, 0, m > &matrix)
Definition: algebra.hh:28
Wrapper and interface classes for element geometries.
Definition: albertagrid/geometry.hh:473
geometry implementation for AlbertaGrid
Definition: albertagrid/geometry.hh:105
ctype integrationElement(const LocalCoordinate &local) const
integration element of the geometry mapping
Definition: albertagrid/geometry.hh:400
Definition: geometry.cc:169
ctype integrationElement(const LocalCoordinate &local) const
integration element of the geometry mapping
Definition: albertagrid/geometry.hh:194
static const int mydimension
Definition: albertagrid/geometry.hh:33
GeometryType type() const
obtain the type of reference element
Definition: albertagrid/geometry.hh:350
Definition: albertagrid/geometry.hh:305
The dimension of the grid.
Definition: common/grid.hh:387
AlbertaGridGeometry(const CoordReader &coordReader)
Definition: albertagrid/geometry.hh:142
ALBERTA REAL Real
Definition: misc.hh:45
ALBERTA REAL_D GlobalVector
Definition: misc.hh:47
Grid abstract base classThis class is the base class for all grid implementations. Although no virtual functions are used we call it abstract since its methods do not contain an implementation but forward to the methods of the derived class via the Barton-Nackman trick.
Definition: common/grid.hh:373
const ElementInfo & elementInfo() const
Definition: albertagrid/geometry.hh:49
AlbertaGridGlobalGeometry(const CoordReader &coordReader)
Definition: albertagrid/geometry.hh:297
Alberta::ElementInfo< dimension > ElementInfo
Definition: albertagrid/geometry.hh:38
static const This & instance()
Definition: albertagrid/geometry.hh:543
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
transposed inverse of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:440
The dimension of the world the grid lives in.
Definition: common/grid.hh:393