3#ifndef DUNE_ALBERTA_GEOMETRY_CC
4#define DUNE_ALBERTA_GEOMETRY_CC
17 template <
int mydim,
int cdim,
class Gr
idImp>
20 ss <<
"AlbertaGridGeometry<" << mydim <<
"," << cdim <<
"> = { \n";
21 for(
int i=0; i<corners(); i++)
23 ss <<
" corner " << i <<
" = ";
24 ss << ((*this)[i]); ss <<
"\n";
30 template<
int mydim,
int cdim,
class Gr
idImp >
35 jacobianTransposed().umtv( local, y );
41 template<
int mydim,
int cdim,
class Gr
idImp >
46 jacobianInverseTransposed().mtv( global - corner( 0 ), x );
51 template<
int mydim,
int cdim,
class Gr
idImp >
57 const FieldVector< ctype, coorddimension > &origin = coord_[ 0 ];
58 for(
int i = 0; i < mydimension; ++i )
60 jT_[ i ] = coord_[ i+1 ];
69 template<
int mydim,
int cdim,
class Gr
idImp >
76 assert( elDet_ > 1.0e-25 );
85 template<
int mydim,
int cdim,
class Gr
idImp >
86 template<
class CoordReader >
88 ::build (
const CoordReader &coordReader )
94 for(
int i = 0; i < numCorners; ++i )
95 coordReader.coordinate( i, coord_[ i ] );
98 centroid_ = coord_[ 0 ];
99 for(
int i = 1; i < numCorners; ++i )
100 centroid_ += coord_[ i ];
101 centroid_ *= 1.0 / numCorners;
103 elDet_ = (coordReader.hasDeterminant() ? coordReader.determinant() : elDeterminant());
104 assert( std::abs( elDet_ ) > 0.0 );
109#if !DUNE_ALBERTA_CACHE_COORDINATES
110 template<
int dim,
int cdim >
114 GlobalCoordinate y = corner( 0 );
115 jacobianTransposed().umtv( local, y );
121 template<
int dim,
int cdim >
122 inline typename AlbertaGridGlobalGeometry< dim, cdim, const AlbertaGrid< dim, cdim > >::LocalCoordinate
123 AlbertaGridGlobalGeometry< dim, cdim, const AlbertaGrid< dim, cdim > >::local (
const GlobalCoordinate &global )
const
126 jacobianInverseTransposed().mtv( global - corner( 0 ), x );
136 template<
class Gr
id >
137 void AlbertaGridLocalGeometryProvider< Grid >::buildGeometryInFather ()
139 for(
int child = 0; child < numChildren; ++child )
141 for(
int orientation = 0; orientation < 2; ++orientation )
143 const GeoInFatherCoordReader coordReader( child, orientation );
144 geometryInFather_[ child ][ orientation ] =
new LocalElementGeometry( coordReader );
150 template<
class Gr
id >
151 void AlbertaGridLocalGeometryProvider< Grid >::buildFaceGeometry ()
153 for(
int face = 0; face < numFaces; ++face )
155 for(
int twist = minFaceTwist; twist <= maxFaceTwist; ++twist )
157 const FaceCoordReader coordReader( face, twist );
158 faceGeometry_[ face ][ twist - minFaceTwist ] =
new LocalFaceGeometry( coordReader );
168 template<
class Gr
id >
181 orientation_( orientation )
186 const typename GeoInFather::LocalVector &coord
187 = GeoInFather::coordinate( child_, orientation_, i );
204 const int orientation_;
212 template<
class Gr
id >
227 const int j = mapVertices< 1 >( face_, ti );
242 static void refCorner (
const int i, Coordinate &x )
246 x[ i-1 ] =
ctype( 1 );
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:631
ALBERTA REAL Real
Definition misc.hh:45
static K invert(const FieldMatrix< K, 0, m > &matrix, FieldMatrix< K, m, 0 > &inverse)
Definition algebra.hh:77
Definition geometry.cc:170
FieldVector< ctype, dimension > Coordinate
Definition geometry.cc:173
Alberta::Real ctype
Definition geometry.cc:171
void coordinate(int i, Coordinate &x) const
Definition geometry.cc:184
GeoInFatherCoordReader(int child, int orientation)
Definition geometry.cc:179
bool hasDeterminant() const
Definition geometry.cc:192
ctype determinant() const
Definition geometry.cc:197
Definition geometry.cc:214
FaceCoordReader(const int face, const int twist=0)
Definition geometry.cc:219
void coordinate(const int i, Coordinate &x) const
Definition geometry.cc:224
ctype determinant() const
Definition geometry.cc:236
FieldVector< ctype, dimension > Coordinate
Definition geometry.cc:217
bool hasDeterminant() const
Definition geometry.cc:231
Alberta::Real ctype
Definition geometry.cc:215
geometry implementation for AlbertaGrid
Definition albertagrid/geometry.hh:106
const JacobianTransposed & jacobianTransposed() const
transposed of the geometry mapping's Jacobian
Definition geometry.cc:53
LocalCoordinate local(const GlobalCoordinate &global) const
map a point from the geometry to the reference element
Definition geometry.cc:43
const JacobianInverseTransposed & jacobianInverseTransposed() const
transposed inverse of the geometry mapping's Jacobian
Definition geometry.cc:71
FieldVector< ctype, mydimension > LocalCoordinate
Definition albertagrid/geometry.hh:124
FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed
Definition albertagrid/geometry.hh:128
void print(std::ostream &out) const
Definition geometry.cc:18
GlobalCoordinate global(const LocalCoordinate &local) const
map a point from the refence element to the geometry
Definition geometry.cc:32
FieldVector< ctype, coorddimension > GlobalCoordinate
Definition albertagrid/geometry.hh:125
FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed
Definition albertagrid/geometry.hh:127
Definition albertagrid/geometry.hh:287
Definition albertagrid/geometry.hh:474
Grid::ctype ctype
Definition albertagrid/geometry.hh:478
static const int dimension
Definition albertagrid/geometry.hh:480
Definition refinement.hh:290
Grid abstract base class.
Definition common/grid.hh:373