5#ifndef DUNE_ALBERTA_INTERSECTION_CC
6#define DUNE_ALBERTA_INTERSECTION_CC
16 template<
class Gr
id >
17 inline AlbertaGridIntersectionBase< Grid >
18 ::AlbertaGridIntersectionBase ()
24 template<
class Gr
id >
33 template<
class Gr
id >
34 inline typename Grid::template Codim< 0 >::Entity
42 template<
class Gr
id >
49 template<
class Gr
id >
63 template<
class Gr
id >
73 template<
class Gr
id >
77 return grid().alberta2generic( 1, face );
81 template<
class Gr
id >
84 return GeometryTypes::simplex(
dimension-1 );
88 template<
class Gr
id >
95 auto refSimplex = ReferenceElements< ctype, dimension >::simplex();
96 FieldVector< ctype, dimension > refNormal = refSimplex.integrationOuterNormal( face );
98 const typename Entity::Geometry::JacobianInverseTransposed &jInvT
99 = geoInside.impl().jacobianInverseTransposed();
102 jInvT.mv( refNormal, normal );
103 normal *= geoInside.impl().integrationElement();
115 n[ 0 ] = (myCoord[ 0 ] > oppCoord[ 0 ] ?
ctype( 1 ) : -
ctype( 1 ));
119#if defined GRIDDIM && GRIDDIM > 1
128 n[ 0 ] = -(coordOne[ 1 ] - coordTwo[ 1 ]);
129 n[ 1 ] = coordOne[ 0 ] - coordTwo[ 0 ];
135 inline AlbertaGridIntersectionBase< const AlbertaGrid< 3, 3 > >::NormalVector
140 const ctype val = (elInfo.orientation > 0) ? 1.0 : -1.0;
142 static const int faceVertices[ 4 ][ 3 ]
143 = { {1,3,2}, {0,2,3}, {0,3,1}, {0,1,2} };
144 const int *localFaces = faceVertices[
oppVertex_ ];
150 FieldVector< ctype, dimensionworld > u;
151 FieldVector< ctype, dimensionworld > v;
154 v[ i ] = coord1[ i ] - coord0[ i ];
155 u[ i ] = coord2[ i ] - coord1[ i ];
163 n[ i ] = val * (u[ j ] * v[ k ] - u[ k ] * v[ j ]);
169 template<
class Gr
id >
177 template<
class Gr
id >
182 normal *= (1.0 / normal.two_norm());
187 template<
class Gr
id >
195 template<
class Gr
id >
203 template<
class Gr
id >
211 template<
class Gr
id >
219 template<
class Gr
id >
226 template<
class Gr
id >
239 template<
class Gr
idImp >
242 typedef typename std::remove_const< GridImp >::type
Grid;
245 static const int codimension = 1;
257 const int subEntity_;
266 subEntity_( subEntity ),
267 twist_(
elementInfo.template twist< codimension >( subEntity ) )
270 void coordinate (
int i, Coordinate &x )
const
276 const int k = mapVertices( subEntity_, ti );
282 bool hasDeterminant ()
const
287 ctype determinant ()
const
294 static int mapVertices (
int subEntity,
int i )
296 return Alberta::MapVertices< dimension, codimension >::apply( subEntity, i );
306 template<
class Gr
idImp >
309 typedef typename std::remove_const< GridImp >::type
Grid;
312 static const int codimension = 1;
330 : elementGeometry_( elementGeometry ),
331 faceGeometry_( faceGeometry )
334 void coordinate (
int i, Coordinate &x )
const
336 x = elementGeometry_.local( faceGeometry_.corner( i ) );
339 bool hasDeterminant ()
const
344 ctype determinant ()
const
355 template<
class Gr
idImp >
363 template<
class Gr
idImp >
364 inline typename GridImp::template Codim< 0 >::Entity
376 assert( !neighborInfo_ ==
false );
377 assert( neighborInfo_.el() != NULL );
381 template<
class Gr
idImp >
389 template<
class Gr
idImp >
396 return LocalGeometry( LocalGeoProvider::instance().faceGeometry( face, twist ) );
400 template<
class Gr
idImp >
408 const int oppVertex = elInfo.opp_vertex[
oppVertex_ ];
410 const int face = (
dimension > 1 ? oppVertex : 1-oppVertex);
411 return LocalGeometry( LocalGeoProvider::instance().faceGeometry( face, twist ) );
415 template<
class Gr
idImp >
425 template<
class Gr
idImp >
429 const int oppVertex = elInfo.opp_vertex[
oppVertex_ ];
430 const int face = (
dimension > 1 ? oppVertex : 1-oppVertex);
431 return grid().alberta2generic( 1, face );
#define ALBERTA
Definition albertaheader.hh:29
Include standard header files.
Definition agrid.hh:60
const int GeometryReference< Implementation >::mydimension
Definition geometryreference.hh:154
const int GeometryReference< Implementation >::coorddimension
Definition geometryreference.hh:157
int applyInverseTwist(int twist, int i)
Definition misc.hh:637
ALBERTA REAL Real
Definition misc.hh:48
ALBERTA REAL_D GlobalVector
Definition misc.hh:50
LocalGeometry geometryInOutside() const
Definition intersection.cc:402
GridImp::template Codim< 0 >::Entity outside() const
Definition intersection.cc:365
Base::EntityImp EntityImp
Definition albertagrid/intersection.hh:128
void next()
Definition intersection.cc:356
Base::GeometryImpl GeometryImpl
Definition albertagrid/intersection.hh:130
const GridImp & grid() const
friend class AlbertaGridEntity< 0, GridImp::dimension, GridImp >
Definition albertagrid/intersection.hh:109
int indexInOutside() const
Definition intersection.cc:426
LocalGeometry geometryInInside() const
Definition intersection.cc:391
Base::GlobalCoordReader GlobalCoordReader
Definition albertagrid/intersection.hh:133
const ElementInfo & elementInfo() const
Base::Geometry Geometry
Definition albertagrid/intersection.hh:122
int oppVertex_
Definition albertagrid/intersection.hh:94
Geometry geometry() const
Definition intersection.cc:417
Base::ElementInfo ElementInfo
Definition albertagrid/intersection.hh:125
bool neighbor() const
Definition intersection.cc:382
static const int dimension
Definition albertagrid/intersection.hh:114
Base::LocalGeometry LocalGeometry
Definition albertagrid/intersection.hh:123
Definition albertagrid/entity.hh:46
Definition albertagrid/geometry.hh:504
Definition intersection.cc:241
FieldVector< ctype, coorddimension > Coordinate
Definition intersection.cc:252
Alberta::Real ctype
Definition intersection.cc:249
std::remove_const< GridImp >::type Grid
Definition intersection.cc:242
Alberta::ElementInfo< dimension > ElementInfo
Definition intersection.cc:251
Definition intersection.cc:308
Grid::template Codim< 1 >::Geometry FaceGeometry
Definition intersection.cc:321
Alberta::Real ctype
Definition intersection.cc:316
std::remove_const< GridImp >::type Grid
Definition intersection.cc:309
FieldVector< ctype, coorddimension > Coordinate
Definition intersection.cc:318
Grid::template Codim< 0 >::Geometry ElementGeometry
Definition intersection.cc:320
Definition albertagrid/intersection.hh:32
NormalVector centerOuterNormal() const
Definition intersection.cc:171
AlbertaGridEntity< 0, dimension, Grid > EntityImp
Definition albertagrid/intersection.hh:52
const ElementInfo & elementInfo() const
Definition intersection.cc:228
FieldVector< ctype, dimensionworld > NormalVector
Definition albertagrid/intersection.hh:41
NormalVector centerIntegrationOuterNormal() const
Definition intersection.cc:90
GridImp::ctype ctype
Definition albertagrid/intersection.hh:36
NormalVector integrationOuterNormal(const LocalCoordType &local) const
Definition intersection.cc:189
ElementInfo elementInfo_
Definition albertagrid/intersection.hh:93
FieldVector< ctype, dimension-1 > LocalCoordType
Definition albertagrid/intersection.hh:42
NormalVector centerUnitOuterNormal() const
Definition intersection.cc:179
int indexInInside() const
Definition intersection.cc:74
Entity inside() const
Definition intersection.cc:35
NormalVector unitOuterNormal(const LocalCoordType &local) const
Definition intersection.cc:205
const Grid & grid() const
Definition intersection.cc:220
int oppVertex_
Definition albertagrid/intersection.hh:94
static const int dimension
Definition albertagrid/intersection.hh:38
bool boundary() const
Definition intersection.cc:43
AlbertaGridIntersectionBase()
size_t boundarySegmentIndex() const
Definition intersection.cc:64
GeometryType type() const
Definition intersection.cc:82
AlbertaTransformation transformation() const
Definition intersection.cc:213
NormalVector outerNormal(const LocalCoordType &local) const
Definition intersection.cc:197
int boundaryId() const
Definition intersection.cc:50
const Grid * grid_
Definition albertagrid/intersection.hh:92
Alberta::ElementInfo< dimension > ElementInfo
Definition albertagrid/intersection.hh:49
Definition albertagrid/projection.hh:208
unsigned int boundaryIndex() const
Definition albertagrid/projection.hh:218
Definition transformation.hh:18
GridImp::template Codim< cd >::Geometry Geometry
The corresponding geometry type.
Definition common/entity.hh:100
Grid abstract base class.
Definition common/grid.hh:375
static constexpr int dimension
The dimension of the grid.
Definition common/grid.hh:387
static constexpr int dimensionworld
The dimension of the world the grid lives in.
Definition common/grid.hh:390