3#ifndef DUNE_ALBERTA_INTERSECTION_CC
4#define DUNE_ALBERTA_INTERSECTION_CC
14 template<
class Gr
id >
15 inline AlbertaGridIntersectionBase< Grid >
16 ::AlbertaGridIntersectionBase ()
22 template<
class Gr
id >
25 : grid_( &entity.grid() ),
26 elementInfo_( entity.elementInfo() ),
27 oppVertex_( oppVertex )
31 template<
class Gr
id >
32 inline typename Grid::template Codim< 0 >::Entity
36 return EntityImp( grid(), elementInfo(), 0 );
40 template<
class Gr
id >
43 return elementInfo().isBoundary( oppVertex_ );
47 template<
class Gr
id >
52 const int id = elementInfo().boundaryId( oppVertex_ );
61 template<
class Gr
id >
71 template<
class Gr
id >
74 const int face = (dimension > 1 ? oppVertex_ : 1-oppVertex_);
75 return grid().alberta2generic( 1, face );
79 template<
class Gr
id >
82 typedef typename GenericGeometry::SimplexTopology< dimension-1 >::type Topology;
83 return GeometryType( Topology() );
87 template<
class Gr
id >
93 const int face = indexInInside();
94 const ReferenceElement< ctype, dimension > &refSimplex = ReferenceElements< ctype, dimension >::simplex();
95 const FieldVector< ctype, dimension > &refNormal = refSimplex.integrationOuterNormal( face );
97 const typename Entity::Geometry::JacobianInverseTransposed &jInvT
98 = Grid::getRealImplementation( geoInside ).jacobianInverseTransposed();
101 jInvT.mv( refNormal, normal );
102 normal *= Grid::getRealImplementation( geoInside ).integrationElement();
114 n[ 0 ] = (myCoord[ 0 ] > oppCoord[ 0 ] ?
ctype( 1 ) : -
ctype( 1 ));
118#if defined GRIDDIM && GRIDDIM > 1
127 n[ 0 ] = -(coordOne[ 1 ] - coordTwo[ 1 ]);
128 n[ 1 ] = coordOne[ 0 ] - coordTwo[ 0 ];
134 inline AlbertaGridIntersectionBase< const AlbertaGrid< 3, 3 > >::NormalVector
138 const ALBERTA EL_INFO &elInfo = elementInfo().elInfo();
139 const ctype val = (elInfo.orientation > 0) ? 1.0 : -1.0;
141 static const int faceVertices[ 4 ][ 3 ]
142 = { {1,3,2}, {0,2,3}, {0,3,1}, {0,1,2} };
143 const int *localFaces = faceVertices[ oppVertex_ ];
149 FieldVector< ctype, dimensionworld > u;
150 FieldVector< ctype, dimensionworld > v;
151 for(
int i = 0; i < dimension; ++i )
153 v[ i ] = coord1[ i ] - coord0[ i ];
154 u[ i ] = coord2[ i ] - coord1[ i ];
158 for(
int i = 0; i < dimension; ++i )
160 const int j = (i+1)%dimension;
161 const int k = (i+2)%dimension;
162 n[ i ] = val * (u[ j ] * v[ k ] - u[ k ] * v[ j ]);
168 template<
class Gr
id >
172 return centerIntegrationOuterNormal();
176 template<
class Gr
id >
181 normal *= (1.0 / normal.two_norm());
186 template<
class Gr
id >
190 return centerIntegrationOuterNormal();
194 template<
class Gr
id >
198 return centerOuterNormal();
202 template<
class Gr
id >
206 return centerUnitOuterNormal();
210 template<
class Gr
id >
218 template<
class Gr
id >
225 template<
class Gr
id >
229 assert( !!elementInfo_ );
238 template<
class Gr
idImp >
241 typedef typename std::remove_const< GridImp >::type
Grid;
244 static const int codimension = 1;
256 const int subEntity_;
265 subEntity_( subEntity ),
266 twist_(
elementInfo.template twist< codimension >( subEntity ) )
272 assert( (i >= 0) && (i <= mydimension) );
274 const int ti = Alberta::applyInverseTwist< mydimension >( twist_, i );
275 const int k = mapVertices( subEntity_, ti );
277 for(
int j = 0; j < coorddimension; ++j )
293 static int mapVertices (
int subEntity,
int i )
305 template<
class Gr
idImp >
308 typedef typename std::remove_const< GridImp >::type
Grid;
311 static const int codimension = 1;
329 : elementGeometry_( elementGeometry ),
330 faceGeometry_( faceGeometry )
335 x = elementGeometry_.local( faceGeometry_.corner( i ) );
354 template<
class Gr
idImp >
362 template<
class Gr
idImp >
370 template<
class Gr
idImp >
374 *((
Base *)
this) = other;
380 template<
class Gr
idImp >
387 template<
class Gr
idImp >
390 assert( oppVertex_ <= dimension );
395 template<
class Gr
idImp >
396 inline typename GridImp::template Codim< 0 >::Entity
403 assert( neighbor() );
405 neighborInfo_ = elementInfo().leafNeighbor( oppVertex_ );
408 assert( !neighborInfo_ ==
false );
409 assert( neighborInfo_.el() != NULL );
410 return EntityImp( grid(), neighborInfo_, 0 );
413 template<
class Gr
idImp >
419 template<
class Gr
idImp >
422 assert( oppVertex_ <= dimension );
423 return elementInfo().hasLeafNeighbor( oppVertex_ );
427 template<
class Gr
idImp >
432 const int twist = elementInfo().template twist< 1 >( oppVertex_ );
433 const int face = (dimension > 1 ? oppVertex_ : 1-oppVertex_);
434 return LocalGeometry( LocalGeoProvider::instance().faceGeometry( face, twist ) );
438 template<
class Gr
idImp >
442 assert( neighbor() );
445 const ALBERTA EL_INFO &elInfo = elementInfo().elInfo();
446 const int oppVertex = elInfo.opp_vertex[ oppVertex_ ];
447 const int twist = elementInfo().twistInNeighbor( oppVertex_ );
448 const int face = (dimension > 1 ? oppVertex : 1-oppVertex);
449 return LocalGeometry( LocalGeoProvider::instance().faceGeometry( face, twist ) );
453 template<
class Gr
idImp >
457 const int face = (dimension > 1 ? oppVertex_ : 1-oppVertex_);
463 template<
class Gr
idImp >
466 const ALBERTA EL_INFO &elInfo = elementInfo().elInfo();
467 const int oppVertex = elInfo.opp_vertex[ oppVertex_ ];
468 const int face = (dimension > 1 ? oppVertex : 1-oppVertex);
469 return grid().alberta2generic( 1, face );
473 template<
class Gr
idImp >
477 return elementInfo().template twist< 1 >( oppVertex_ );
481 template<
class Gr
idImp >
485 return elementInfo().twistInNeighbor( oppVertex_ );
#define ALBERTA
Definition albertaheader.hh:27
Include standard header files.
Definition agrid.hh:60
ALBERTA REAL Real
Definition misc.hh:45
ALBERTA REAL_D GlobalVector
Definition misc.hh:47
Definition albertagrid/intersection.hh:103
LocalGeometry geometryInOutside() const
Definition intersection.cc:440
GridImp::template Codim< 0 >::Entity outside() const
Definition intersection.cc:397
int twistInInside() const
Definition intersection.cc:475
Base::EntityImp EntityImp
Definition albertagrid/intersection.hh:126
void next()
Definition intersection.cc:388
bool operator==(const This &other) const
Definition intersection.cc:382
Base::GeometryImpl GeometryImpl
Definition albertagrid/intersection.hh:128
int indexInOutside() const
Definition intersection.cc:464
LocalGeometry geometryInInside() const
Definition intersection.cc:429
Base::GlobalCoordReader GlobalCoordReader
Definition albertagrid/intersection.hh:131
Base::Geometry Geometry
Definition albertagrid/intersection.hh:120
This & operator=(const This &other)
Definition intersection.cc:372
Geometry geometry() const
Definition intersection.cc:455
bool neighbor() const
Definition intersection.cc:420
bool conforming() const
Definition intersection.cc:414
int twistInOutside() const
Definition intersection.cc:483
Base::LocalGeometry LocalGeometry
Definition albertagrid/intersection.hh:121
Definition albertagrid/entity.hh:47
Definition albertagrid/geometry.hh:474
Definition intersection.cc:240
FieldVector< ctype, coorddimension > Coordinate
Definition intersection.cc:251
Alberta::Real ctype
Definition intersection.cc:248
std::remove_const< GridImp >::type Grid
Definition intersection.cc:241
Alberta::ElementInfo< dimension > ElementInfo
Definition intersection.cc:250
ctype determinant() const
Definition intersection.cc:286
bool hasDeterminant() const
Definition intersection.cc:281
GlobalCoordReader(const GridImp &grid, const ElementInfo &elementInfo, int subEntity)
Definition intersection.cc:260
void coordinate(int i, Coordinate &x) const
Definition intersection.cc:269
Definition intersection.cc:307
Grid::template Codim< 1 >::Geometry FaceGeometry
Definition intersection.cc:320
Alberta::Real ctype
Definition intersection.cc:315
LocalCoordReader(const ElementGeometry &elementGeometry, const FaceGeometry &faceGeometry)
Definition intersection.cc:327
std::remove_const< GridImp >::type Grid
Definition intersection.cc:308
void coordinate(int i, Coordinate &x) const
Definition intersection.cc:333
bool hasDeterminant() const
Definition intersection.cc:338
ctype determinant() const
Definition intersection.cc:343
FieldVector< ctype, coorddimension > Coordinate
Definition intersection.cc:317
Grid::template Codim< 0 >::Geometry ElementGeometry
Definition intersection.cc:319
Definition albertagrid/intersection.hh:30
NormalVector centerOuterNormal() const
Definition intersection.cc:170
const ElementInfo & elementInfo() const
Definition intersection.cc:227
FieldVector< ctype, dimensionworld > NormalVector
Definition albertagrid/intersection.hh:39
NormalVector centerIntegrationOuterNormal() const
Definition intersection.cc:89
Grid::ctype ctype
Definition albertagrid/intersection.hh:34
NormalVector integrationOuterNormal(const LocalCoordType &local) const
Definition intersection.cc:188
ElementInfo elementInfo_
Definition albertagrid/intersection.hh:91
FieldVector< ctype, dimension-1 > LocalCoordType
Definition albertagrid/intersection.hh:40
NormalVector centerUnitOuterNormal() const
Definition intersection.cc:178
int indexInInside() const
Definition intersection.cc:72
Entity inside() const
Definition intersection.cc:33
NormalVector unitOuterNormal(const LocalCoordType &local) const
Definition intersection.cc:204
const Grid & grid() const
Definition intersection.cc:219
int oppVertex_
Definition albertagrid/intersection.hh:92
static const int dimension
Definition albertagrid/intersection.hh:36
bool boundary() const
Definition intersection.cc:41
size_t boundarySegmentIndex() const
Definition intersection.cc:62
GeometryType type() const
Definition intersection.cc:80
AlbertaTransformation transformation() const
Definition intersection.cc:212
NormalVector outerNormal(const LocalCoordType &local) const
Definition intersection.cc:196
int boundaryId() const
Definition intersection.cc:48
const Grid * grid_
Definition albertagrid/intersection.hh:90
Definition albertagrid/projection.hh:206
unsigned int boundaryIndex() const
Definition albertagrid/projection.hh:216
Definition transformation.hh:16
GridImp::template Codim< cd >::Geometry Geometry
The corresponding geometry type.
Definition common/entity.hh:97
Grid abstract base class.
Definition common/grid.hh:373
@ dimension
The dimension of the grid.
Definition common/grid.hh:387
@ dimensionworld
The dimension of the world the grid lives in.
Definition common/grid.hh:393