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 Include standard header files.
Definition: agrid.hh:58
AlbertaGridGeometry< dimension-codim, dimension, Grid > LocalGeometry
Definition: albertagrid/geometry.hh:483
AlbertaGridGlobalGeometry(const CoordReader &coordReader)
Definition: albertagrid/geometry.hh:296
void coordinate(int i, Coordinate &x) const
Definition: albertagrid/geometry.hh:54
ctype integrationElement(const LocalCoordinate &local) const
integration element of the geometry mapping
Definition: albertagrid/geometry.hh:193
GlobalCoordinate center() const
return center of geometry
Definition: albertagrid/geometry.hh:170
Definition: albertagrid/geometry.hh:471
const ElementInfo & elementInfo() const
Definition: albertagrid/geometry.hh:49
static const int codimension
Definition: albertagrid/geometry.hh:32
ct ctype
Define type used for coordinates in grid module.
Definition: common/grid.hh:522
static K determinant(const FieldMatrix< K, 0, m > &matrix)
Definition: algebra.hh:28
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
transposed inverse of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:438
geometry implementation for AlbertaGrid
Definition: albertagrid/geometry.hh:105
int corners() const
number of corner the geometry
Definition: albertagrid/geometry.hh:355
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
transposed inverse of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:227
bool affine() const
returns always true since we only have simplices
Definition: albertagrid/geometry.hh:154
FieldVector< ctype, coorddimension > Coordinate
Definition: albertagrid/geometry.hh:39
static const int mydimension
Definition: albertagrid/geometry.hh:33
FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed
Definition: albertagrid/geometry.hh:329
const JacobianTransposed & jacobianTransposed() const
transposed of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:414
Definition: albertagrid/geometry.hh:304
void invalidate()
invalidate the geometry
Definition: albertagrid/geometry.hh:237
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
Definition: albertagrid/geometry.hh:27
[ provides Dune::Grid ]
Definition: agrid.hh:136
ALBERTA REAL Real
Definition: misc.hh:46
ctype integrationElement() const
integration element of the geometry mapping
Definition: albertagrid/geometry.hh:186
ctype integrationElement() const
integration element of the geometry mapping
Definition: albertagrid/geometry.hh:392
Alberta::Real ctype
Definition: albertagrid/geometry.hh:36
ctype volume() const
volume of geometry
Definition: albertagrid/geometry.hh:404
AlbertaGridCoordinateReader(const GridImp &grid, const ElementInfo &elementInfo, int subEntity)
Definition: albertagrid/geometry.hh:41
GlobalCoordinate center() const
return center of geometry
Definition: albertagrid/geometry.hh:372
std::remove_const< GridImp >::type Grid
Definition: albertagrid/geometry.hh:29
provides a wrapper for ALBERTA's el_info structure
Alberta::Real ctype
type of coordinates
Definition: albertagrid/geometry.hh:117
Definition: albertagrid/geometry.hh:481
const LocalElementGeometry & geometryInFather(int child, const int orientation=1) const
Definition: albertagrid/geometry.hh:526
void abs(const DofVectorPointer< int > &dofVector)
Definition: dofvector.hh:326
FieldVector< ctype, coorddimension > GlobalCoordinate
Definition: albertagrid/geometry.hh:125
AlbertaGridGeometry(const CoordReader &coordReader)
Definition: albertagrid/geometry.hh:142
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
Definition: geometry.cc:213
AlbertaGridGeometry()
Definition: albertagrid/geometry.hh:136
GeometryType type() const
obtain the type of reference element
Definition: albertagrid/geometry.hh:349
Definition: geometry.cc:169
AlbertaGridGlobalGeometry(const CoordReader &coordReader)
Definition: albertagrid/geometry.hh:343
FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed
Definition: albertagrid/geometry.hh:328
ALBERTA REAL_D GlobalVector
Definition: misc.hh:48
FieldVector< ctype, mydimension > LocalCoordinate
Definition: albertagrid/geometry.hh:124
int corners() const
number of corner the geometry
Definition: albertagrid/geometry.hh:157
FieldVector< ctype, coorddimension > GlobalCoordinate
Definition: albertagrid/geometry.hh:326
The dimension of the world the grid lives in.
Definition: common/grid.hh:393
Grid::ctype ctype
Definition: albertagrid/geometry.hh:476
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:398
FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed
Definition: albertagrid/geometry.hh:128
const JacobianInverseTransposed & jacobianInverseTransposed() const
transposed inverse of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:431
FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed
Definition: albertagrid/geometry.hh:127
GlobalCoordinate corner(const int i) const
obtain the i-th corner of this geometry
Definition: albertagrid/geometry.hh:163
static const int dimension
Definition: albertagrid/geometry.hh:31
Alberta::ElementInfo< dimension > ElementInfo
Definition: albertagrid/geometry.hh:38
GlobalCoordinate corner(const int i) const
obtain the i-th corner of this geometry
Definition: albertagrid/geometry.hh:361
static const int coorddimension
Definition: albertagrid/geometry.hh:34
GeometryType type() const
obtain the type of reference element
Definition: albertagrid/geometry.hh:148
ctype volume() const
volume of geometry
Definition: albertagrid/geometry.hh:199
The dimension of the grid.
Definition: common/grid.hh:387
Definition: albertagrid/geometry.hh:284
AlbertaGridGlobalGeometry()
Definition: albertagrid/geometry.hh:337
FieldVector< ctype, mydimension > LocalCoordinate
Definition: albertagrid/geometry.hh:325
bool hasDeterminant() const
Definition: albertagrid/geometry.hh:65
void invalidate()
invalidate the geometry
Definition: albertagrid/geometry.hh:448
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
transposed of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:421
AlbertaGridGlobalGeometry()
Definition: albertagrid/geometry.hh:291
const LocalFaceGeometry & faceGeometry(int face, int twist=0) const
Definition: albertagrid/geometry.hh:534
static const This & instance()
Definition: albertagrid/geometry.hh:541
void build(const CoordReader &coordReader)
build the geometry from a coordinate reader
Definition: albertagrid/geometry.hh:455
ctype determinant() const
Definition: albertagrid/geometry.hh:70
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
transposed of the geometry mapping's Jacobian
Definition: albertagrid/geometry.hh:213
Codim< 0 >::LocalGeometry LocalElementGeometry
Definition: albertagrid/geometry.hh:486
Alberta::Real ctype
type of coordinates
Definition: albertagrid/geometry.hh:318
Wrapper and interface classes for element geometries.