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 return GeometryTypes::simplex( mydimension );
163 GlobalCoordinate
corner (
const int i )
const 165 assert( (i >= 0) && (i < corners()) );
176 GlobalCoordinate global (
const LocalCoordinate &local )
const;
179 LocalCoordinate local (
const GlobalCoordinate &global )
const;
188 assert( calcedDet_ );
195 return integrationElement();
201 return integrationElement() /
ctype( Factorial< mydimension >::factorial );
209 const JacobianTransposed &jacobianTransposed ()
const;
212 const JacobianTransposed &
215 return jacobianTransposed();
223 const JacobianInverseTransposed &jacobianInverseTransposed ()
const;
226 const JacobianInverseTransposed &
229 return jacobianInverseTransposed();
245 template<
class CoordReader >
246 void build (
const CoordReader &coordReader );
248 void print ( std::ostream &out )
const;
252 ctype elDeterminant ()
const 261 GlobalCoordinate centroid_;
264 mutable JacobianTransposed jT_;
267 mutable JacobianInverseTransposed jTInv_;
270 mutable bool builtJT_;
272 mutable bool builtJTInv_;
274 mutable bool calcedDet_;
275 mutable ctype elDet_;
283 template<
int mydim,
int cdim,
class Gr
idImp >
295 template<
class CoordReader >
297 : Base( coordReader )
302 #if !DUNE_ALBERTA_CACHE_COORDINATES 303 template<
int dim,
int cdim >
312 static const int dimbary = dim + 1;
332 static const int numCorners = mydimension + 1;
334 typedef FieldMatrix< ctype, numCorners, coorddimension > CoordMatrix;
342 template<
class CoordReader >
345 build( coordReader );
351 return GeometryTypes::simplex( mydimension );
361 GlobalCoordinate
corner (
const int i )
const 363 assert( (i >= 0) && (i < corners()) );
364 const Alberta::GlobalCoordinate &x = elementInfo_.coordinate( i );
374 GlobalCoordinate centroid_ = corner( 0 );
375 for(
int i = 1; i < numCorners; ++i )
376 centroid_ += corner( i );
377 centroid_ *=
ctype( 1 ) /
ctype( numCorners );
382 GlobalCoordinate global (
const LocalCoordinate &local )
const;
385 LocalCoordinate local (
const GlobalCoordinate &global )
const;
394 return elementInfo_.geometryCache().integrationElement();
400 return integrationElement();
406 return integrationElement() /
ctype( Factorial< mydimension >::factorial );
416 return elementInfo_.geometryCache().jacobianTransposed();
420 const JacobianTransposed &
423 return jacobianTransposed();
433 return elementInfo_.geometryCache().jacobianInverseTransposed();
437 const JacobianInverseTransposed &
440 return jacobianInverseTransposed();
454 template<
class CoordReader >
455 void build (
const CoordReader &coordReader )
457 elementInfo_ = coordReader.elementInfo();
461 ElementInfo elementInfo_;
463 #endif // #if !DUNE_ALBERTA_CACHE_COORDINATES 470 template<
class Gr
id >
480 template<
int codim >
489 static const int numChildren = 2;
490 static const int numFaces = dimension + 1;
494 static const int numFaceTwists = maxFaceTwist - minFaceTwist + 1;
502 buildGeometryInFather();
508 for(
int child = 0; child < numChildren; ++child )
510 delete geometryInFather_[ child ][ 0 ];
511 delete geometryInFather_[ child ][ 1 ];
514 for(
int i = 0; i < numFaces; ++i )
516 for(
int j = 0; j < numFaceTwists; ++j )
517 delete faceGeometry_[ i ][ j ];
521 void buildGeometryInFather();
522 void buildFaceGeometry();
525 const LocalElementGeometry &
528 assert( (child >= 0) && (child < numChildren) );
529 assert( (orientation == 1) || (orientation == -1) );
530 return *geometryInFather_[ child ][ (orientation + 1) / 2 ];
533 const LocalFaceGeometry &
536 assert( (face >= 0) && (face < numFaces) );
537 assert( (twist >= minFaceTwist) && (twist <= maxFaceTwist) );
538 return *faceGeometry_[ face ][ twist - minFaceTwist ];
543 static This theInstance;
548 template<
int codim >
549 static int mapVertices (
int subEntity,
int i )
554 const LocalElementGeometry *geometryInFather_[ numChildren ][ 2 ];
555 const LocalFaceGeometry *faceGeometry_[ numFaces ][ numFaceTwists ];
560 #endif // #if HAVE_ALBERTA 562 #endif // #ifndef DUNE_ALBERTA_GEOMETRY_HH ct ctype
Define type used for coordinates in grid module.
Definition: common/grid.hh:522
bool hasDeterminant() const
Definition: albertagrid/geometry.hh:65
static const int mydimension
Definition: albertagrid/geometry.hh:33
GlobalCoordinate center() const
return center of geometry
Definition: albertagrid/geometry.hh:372
const LocalFaceGeometry & faceGeometry(int face, int twist=0) const
Definition: albertagrid/geometry.hh:534
FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed
Definition: albertagrid/geometry.hh:328
geometry implementation for AlbertaGrid
Definition: albertagrid/geometry.hh:105
FieldVector< ctype, mydimension > LocalCoordinate
Definition: albertagrid/geometry.hh:124
Definition: geometry.cc:169
AlbertaGridGlobalGeometry(const CoordReader &coordReader)
Definition: albertagrid/geometry.hh:296
FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed
Definition: albertagrid/geometry.hh:329
static K determinant(const FieldMatrix< K, 0, m > &matrix)
Definition: algebra.hh:28
FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed
Definition: albertagrid/geometry.hh:128
int corners() const
number of corner the geometry
Definition: albertagrid/geometry.hh:355
FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed
Definition: albertagrid/geometry.hh:127
Definition: albertagrid/geometry.hh:304
static const int dimension
Definition: albertagrid/geometry.hh:31
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 JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
transposed inverse of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:227
Definition: albertagrid/geometry.hh:27
[ provides Dune::Grid ]
Definition: agrid.hh:136
GlobalCoordinate center() const
return center of geometry
Definition: albertagrid/geometry.hh:170
AlbertaGridCoordinateReader(const GridImp &grid, const ElementInfo &elementInfo, int subEntity)
Definition: albertagrid/geometry.hh:41
static const int codimension
Definition: albertagrid/geometry.hh:32
ctype volume() const
volume of geometry
Definition: albertagrid/geometry.hh:199
GlobalCoordinate corner(const int i) const
obtain the i-th corner of this geometry
Definition: albertagrid/geometry.hh:163
FieldVector< ctype, coorddimension > GlobalCoordinate
Definition: albertagrid/geometry.hh:326
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
transposed inverse of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:438
GlobalCoordinate corner(const int i) const
obtain the i-th corner of this geometry
Definition: albertagrid/geometry.hh:361
provides a wrapper for ALBERTA's el_info structure
Definition: albertagrid/geometry.hh:481
const JacobianTransposed & jacobianTransposed() const
transposed of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:414
AlbertaGridGeometry()
Definition: albertagrid/geometry.hh:136
Definition: albertagrid/geometry.hh:284
GeometryType type() const
obtain the type of reference element
Definition: albertagrid/geometry.hh:148
GeometryType type() const
obtain the type of reference element
Definition: albertagrid/geometry.hh:349
Wrapper and interface classes for element geometries.
Codim< 0 >::LocalGeometry LocalElementGeometry
Definition: albertagrid/geometry.hh:486
ALBERTA REAL Real
Definition: misc.hh:46
Alberta::Real ctype
type of coordinates
Definition: albertagrid/geometry.hh:117
AlbertaGridGlobalGeometry()
Definition: albertagrid/geometry.hh:291
ctype integrationElement() const
integration element of the geometry mapping
Definition: albertagrid/geometry.hh:392
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
transposed of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:213
static const This & instance()
Definition: albertagrid/geometry.hh:541
AlbertaGridGlobalGeometry(const CoordReader &coordReader)
Definition: albertagrid/geometry.hh:343
The dimension of the grid.
Definition: common/grid.hh:387
AlbertaGridGeometry< dimension-codim, dimension, Grid > LocalGeometry
Definition: albertagrid/geometry.hh:483
void coordinate(int i, Coordinate &x) const
Definition: albertagrid/geometry.hh:54
Codim< 1 >::LocalGeometry LocalFaceGeometry
Definition: albertagrid/geometry.hh:487
ctype integrationElement(const LocalCoordinate &local) const
integration element of the geometry mapping
Definition: albertagrid/geometry.hh:193
FieldVector< ctype, coorddimension > Coordinate
Definition: albertagrid/geometry.hh:39
FieldVector< ctype, mydimension > LocalCoordinate
Definition: albertagrid/geometry.hh:325
const ElementInfo & elementInfo() const
Definition: albertagrid/geometry.hh:49
void invalidate()
invalidate the geometry
Definition: albertagrid/geometry.hh:237
Alberta::Real ctype
type of coordinates
Definition: albertagrid/geometry.hh:318
ALBERTA REAL_D GlobalVector
Definition: misc.hh:48
Alberta::ElementInfo< dimension > ElementInfo
Definition: albertagrid/geometry.hh:38
ctype integrationElement(const LocalCoordinate &local) const
integration element of the geometry mapping
Definition: albertagrid/geometry.hh:398
ctype integrationElement() const
integration element of the geometry mapping
Definition: albertagrid/geometry.hh:186
const JacobianInverseTransposed & jacobianInverseTransposed() const
transposed inverse of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:431
Alberta::Real ctype
Definition: albertagrid/geometry.hh:36
bool affine() const
returns always true since we only have simplices
Definition: albertagrid/geometry.hh:154
void invalidate()
invalidate the geometry
Definition: albertagrid/geometry.hh:448
The dimension of the world the grid lives in.
Definition: common/grid.hh:393
const LocalElementGeometry & geometryInFather(int child, const int orientation=1) const
Definition: albertagrid/geometry.hh:526
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
transposed of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:421
void build(const CoordReader &coordReader)
build the geometry from a coordinate reader
Definition: albertagrid/geometry.hh:455
int corners() const
number of corner the geometry
Definition: albertagrid/geometry.hh:157
Definition: geometry.cc:213
AlbertaGridGlobalGeometry()
Definition: albertagrid/geometry.hh:337
ctype determinant() const
Definition: albertagrid/geometry.hh:70
static const int coorddimension
Definition: albertagrid/geometry.hh:34
Grid::ctype ctype
Definition: albertagrid/geometry.hh:476
FieldVector< ctype, coorddimension > GlobalCoordinate
Definition: albertagrid/geometry.hh:125
AlbertaGridGeometry(const CoordReader &coordReader)
Definition: albertagrid/geometry.hh:142
std::remove_const< GridImp >::type Grid
Definition: albertagrid/geometry.hh:29
Definition: albertagrid/geometry.hh:471
void abs(const DofVectorPointer< int > &dofVector)
Definition: dofvector.hh:326
ctype volume() const
volume of geometry
Definition: albertagrid/geometry.hh:404
Include standard header files.
Definition: agrid.hh:58