5#ifndef DUNE_ALBERTA_GEOMETRY_CC
6#define DUNE_ALBERTA_GEOMETRY_CC
19 template <
int mydim,
int cdim,
class Gr
idImp>
22 ss <<
"AlbertaGridGeometry<" << mydim <<
"," << cdim <<
"> = { \n";
23 for(
int i=0; i<corners(); i++)
25 ss <<
" corner " << i <<
" = ";
26 ss << ((*this)[i]); ss <<
"\n";
32 template<
int mydim,
int cdim,
class Gr
idImp >
37 jacobianTransposed().umtv( local, y );
43 template<
int mydim,
int cdim,
class Gr
idImp >
48 jacobianInverseTransposed().mtv( global - corner( 0 ), x );
53 template<
int mydim,
int cdim,
class Gr
idImp >
59 const FieldVector< ctype, coorddimension > &origin = coord_[ 0 ];
60 for(
int i = 0; i < mydimension; ++i )
62 jT_[ i ] = coord_[ i+1 ];
71 template<
int mydim,
int cdim,
class Gr
idImp >
78 assert( elDet_ > 1.0e-25 );
87 template<
int mydim,
int cdim,
class Gr
idImp >
88 template<
class CoordReader >
90 ::build (
const CoordReader &coordReader )
96 for(
int i = 0; i < numCorners; ++i )
97 coordReader.coordinate( i, coord_[ i ] );
100 centroid_ = coord_[ 0 ];
101 for(
int i = 1; i < numCorners; ++i )
102 centroid_ += coord_[ i ];
103 centroid_ *= 1.0 / numCorners;
105 elDet_ = (coordReader.hasDeterminant() ? coordReader.determinant() : elDeterminant());
106 assert( std::abs( elDet_ ) > 0.0 );
111#if !DUNE_ALBERTA_CACHE_COORDINATES
112 template<
int dim,
int cdim >
116 GlobalCoordinate y = corner( 0 );
117 jacobianTransposed().umtv( local, y );
123 template<
int dim,
int cdim >
124 inline typename AlbertaGridGlobalGeometry< dim, cdim, const AlbertaGrid< dim, cdim > >::LocalCoordinate
125 AlbertaGridGlobalGeometry< dim, cdim, const AlbertaGrid< dim, cdim > >::local (
const GlobalCoordinate &global )
const
128 jacobianInverseTransposed().mtv( global - corner( 0 ), x );
138 template<
class Gr
id >
139 void AlbertaGridLocalGeometryProvider< Grid >::buildGeometryInFather ()
141 for(
int child = 0; child < numChildren; ++child )
143 for(
int orientation = 0; orientation < 2; ++orientation )
145 const GeoInFatherCoordReader coordReader( child, orientation );
146 geometryInFather_[ child ][ orientation ] =
new LocalElementGeometry( coordReader );
152 template<
class Gr
id >
153 void AlbertaGridLocalGeometryProvider< Grid >::buildFaceGeometry ()
155 for(
int face = 0; face < numFaces; ++face )
157 for(
int twist = minFaceTwist; twist <= maxFaceTwist; ++twist )
159 const FaceCoordReader coordReader( face, twist );
160 faceGeometry_[ face ][ twist - minFaceTwist ] =
new LocalFaceGeometry( coordReader );
170 template<
class Gr
id >
183 orientation_( orientation )
188 const typename GeoInFather::LocalVector &coord
189 = GeoInFather::coordinate( child_, orientation_, i );
206 const int orientation_;
214 template<
class Gr
id >
244 static void refCorner (
const int i, Coordinate &
x )
provides a wrapper for ALBERTA's refinement patches and the corners for geometryInFather
Include standard header files.
Definition agrid.hh:60
int applyInverseTwist(int twist, int i)
Definition misc.hh:637
ALBERTA REAL Real
Definition misc.hh:48
static K invert(const FieldMatrix< K, 0, m > &matrix, FieldMatrix< K, m, 0 > &inverse)
Definition algebra.hh:81
Definition geometry.cc:172
FieldVector< ctype, dimension > Coordinate
Definition geometry.cc:175
Alberta::Real ctype
Definition geometry.cc:173
void coordinate(int i, Coordinate &x) const
Definition geometry.cc:186
GeoInFatherCoordReader(int child, int orientation)
Definition geometry.cc:181
bool hasDeterminant() const
Definition geometry.cc:194
ctype determinant() const
Definition geometry.cc:199
Definition geometry.cc:216
FaceCoordReader(const int face, const int twist=0)
Definition geometry.cc:221
void coordinate(const int i, Coordinate &x) const
Definition geometry.cc:226
ctype determinant() const
Definition geometry.cc:238
FieldVector< ctype, dimension > Coordinate
Definition geometry.cc:219
bool hasDeterminant() const
Definition geometry.cc:233
Alberta::Real ctype
Definition geometry.cc:217
geometry implementation for AlbertaGrid
Definition albertagrid/geometry.hh:108
const JacobianTransposed & jacobianTransposed() const
transposed of the geometry mapping's Jacobian
Definition geometry.cc:55
LocalCoordinate local(const GlobalCoordinate &global) const
map a point from the geometry to the reference element
Definition geometry.cc:45
const JacobianInverseTransposed & jacobianInverseTransposed() const
transposed inverse of the geometry mapping's Jacobian
Definition geometry.cc:73
FieldVector< ctype, mydimension > LocalCoordinate
Definition albertagrid/geometry.hh:126
FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed
Definition albertagrid/geometry.hh:130
void print(std::ostream &out) const
Definition geometry.cc:20
GlobalCoordinate global(const LocalCoordinate &local) const
map a point from the reference element to the geometry
Definition geometry.cc:34
FieldVector< ctype, coorddimension > GlobalCoordinate
Definition albertagrid/geometry.hh:127
FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed
Definition albertagrid/geometry.hh:129
Definition albertagrid/geometry.hh:303
Definition albertagrid/geometry.hh:504
static constexpr int dimension
Definition albertagrid/geometry.hh:510
Grid::ctype ctype
Definition albertagrid/geometry.hh:508
Definition albertagrid/geometry.hh:514
Definition refinement.hh:292
Grid abstract base class.
Definition common/grid.hh:375