1#ifndef DUNE_FACEUTILITY_IMP_HH
2#define DUNE_FACEUTILITY_IMP_HH
8 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
20 bndType_( noBoundary ),
21 conformanceState_(UNDEFINED),
22 conformingRefinement_( false ),
23 ghostCellsEnabled_( false ),
24 levelIntersection_( levelIntersection )
29 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
32 setFlags(
const bool conformingRefinement,
33 const bool ghostCellsEnabled )
35 conformingRefinement_ = conformingRefinement;
36 ghostCellsEnabled_ = ghostCellsEnabled;
40 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
51 innerFaceNumber_ = -1;
52 outerFaceNumber_ = -1;
53 bndType_ = noBoundary;
60 innerElement_ = face.nb.rear().first;
61 innerFaceNumber_ = face.nb.rear().second;
62 outerElement_ = face.nb.front().first;
63 outerFaceNumber_ = face.nb.front().second;
67 innerElement_ = face.nb.front().first;
68 innerFaceNumber_ = face.nb.front().second;
69 outerElement_ = face.nb.rear().first;
70 outerFaceNumber_ = face.nb.rear().second;
79 if( parallel() && innerElement_->isboundary() )
81 bndType_ = innerGhostBoundary;
85 if( parallel() && innerBoundary() )
91 if(bnd->bndtype() ==
ALU3DSPACE ProcessorBoundary_t)
94 if( bnd->level () != bnd->ghostLevel() && !conformingRefinement_)
98 innerElement_ =
static_cast<const HasFaceType*
> (bnd);
105 innerFaceNumber_ = p.second;
111 innerTwist_ = ghost->twist(innerFaceNumber_);
115 innerTwist_ = innerFace().twist(innerALUFaceIndex());
122 innerTwist_ = innerTwist;
128 if(levelIntersection_ && conformingRefinement_ && ! (innerElement_->isboundary() ) )
131 while( inner -> up () ) inner =
static_cast<const GEOElementType *
> ( inner ->up() );
132 innerElement_ =
static_cast<const HasFaceType *
> (inner);
133 innerTwist_ = innerEntity().twist(innerFaceNumber_);
136 if( outerElement_->isboundary() )
140 bndType_ = domainBoundary ;
146 const bool periodicBnd = ( bnd == 0 ) ;
150 bndType_ = periodicBoundary ;
155 segmentIndex_ = periodicClosure->segmentIndex( outerFaceNumber_ );
156 bndId_ = periodicClosure->bndtype( outerFaceNumber_ );
158 const GEOFaceType* face = ImplTraits::getFace( *periodicClosure, 1 - outerFaceNumber_ );
159 alugrid_assert ( (face->nb.front().first == periodicClosure) || (face->nb.rear().first == periodicClosure) );
160 if( face->nb.rear().first == periodicClosure )
163 outerElement_ = face->nb.front().first ;
164 outerFaceNumber_ = face->nb.front().second ;
169 outerElement_ = face->nb.rear().first ;
170 outerFaceNumber_ = face->nb.rear().second ;
174 if( outerElement_->isboundary() )
177 bnd =
static_cast< const BNDFaceType *
>( outerElement_ );
180 outerTwist_ = outerEntity().twist( outerFaceNumber_ );
189 if( parallel() && bnd->bndtype() ==
ALU3DSPACE ProcessorBoundary_t)
192 if( bnd->level () != bnd->ghostLevel() && !conformingRefinement_)
194 bnd =
static_cast<const BNDFaceType *
>(bnd->up());
196 outerElement_ =
static_cast<const HasFaceType*
> (bnd);
200 bndType_ = outerGhostBoundary ;
202 if(conformingRefinement_)
203 outerTwist_ = boundaryFace().twist(outerALUFaceIndex());
206 if( ghostCellsEnabled_ )
209 GhostPairType p = bnd->getGhost();
210 outerFaceNumber_ = p.second;
212 const GEOElementType* ghost =
static_cast<const GEOElementType*
> (p.first);
214 outerTwist_ = ghost->twist(outerFaceNumber_);
220 outerTwist_ = boundaryFace().twist(outerALUFaceIndex());
222 segmentIndex_ = boundaryFace().segmentIndex();
223 bndId_ = boundaryFace().bndtype();
230 outerTwist_ = outerEntity().twist(outerALUFaceIndex());
236 if(levelIntersection_ && conformingRefinement_ && ! (outerElement_->isboundary() ) )
238 const GEOElementType * outer =
static_cast<const GEOElementType *
> (outerElement_);
239 while( outer -> up () ) outer =
static_cast<const GEOElementType *
> ( outer ->up() );
240 outerElement_ =
static_cast<const HasFaceType *
> (outer);
241 outerTwist_ = outerEntity().twist(outerFaceNumber_);
245 alugrid_assert ( bndType_ == periodicBoundary || bndType_ == domainBoundary ? bndId_ > 0 : bndId_ == 0 );
252 conformanceState_ = getConformanceState(innerLevel);
256 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
261 updateFaceInfo(face,innerTwist);
264 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
267 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
271 innerElement_(orig.innerElement_),
272 outerElement_(orig.outerElement_),
273 innerFaceNumber_(orig.innerFaceNumber_),
274 outerFaceNumber_(orig.outerFaceNumber_),
275 innerTwist_(orig.innerTwist_),
276 outerTwist_(orig.outerTwist_),
277 segmentIndex_( orig.segmentIndex_ ),
278 bndId_( orig.bndId_ ),
279 bndType_( orig.bndType_ ),
280 conformanceState_(orig.conformanceState_),
281 conformingRefinement_( orig.conformingRefinement_ ),
282 ghostCellsEnabled_( orig.ghostCellsEnabled_ )
285 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
287 return bndType_ < domainBoundary;
290 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
292 return bndType_ == innerGhostBoundary;
295 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
297 return bndType_ == domainBoundary;
300 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
302 return outerBoundary() || (bndType_ == periodicBoundary);
305 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
308 return isElementLike() || ( ghostBoundary() && ghostCellsEnabled_ );
311 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
315 return parallel() ? ( bndType_ == outerGhostBoundary ) : false ;
318 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
325 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
333 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
341 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
346 return static_cast<const BNDFaceType&
>(*innerElement_);
349 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
353 return static_cast<const BNDFaceType&
>(*outerElement_);
356 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
360 alugrid_assert ( !isElementLike() || outerEntity().level() == outerElement_->nbLevel() );
361 alugrid_assert ( isElementLike() || boundaryFace().level() == outerElement_->nbLevel() );
362 return outerElement_->nbLevel();
365 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
369 return segmentIndex_;
372 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
378 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
383 innerEntity().twist(innerALUFaceIndex()) == innerTwist_ : true );
387 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
393 const int mappedZero =
394 FaceTopo::twist(ElementTopo::dune2aluFaceVertex( faceIdx, 0), aluTwist);
397 (ElementTopo::faceOrientation( faceIdx ) * sign(aluTwist) < 0 ?
398 mappedZero : -mappedZero-1);
405 const int duneTwst = FaceTopo :: aluTwistMap( twist );
406 return (duneTwst == 0) ? 0 : 1;
410 return FaceTopo :: aluTwistMap( twist );
414 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
426 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
428 return innerFaceNumber_;
431 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
433 return outerFaceNumber_;
436 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
441 return conformanceState_;
445 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
449 ConformanceState result = CONFORMING;
452 if( ! conformingRefinement_ )
455 int levelDifference = 0 ;
456 if ( isElementLike() )
457 levelDifference = innerLevel - outerEntity().level();
459 levelDifference = innerLevel - boundaryFace().level();
461 if (levelDifference < 0) {
462 result = REFINED_OUTER;
464 else if (levelDifference > 0) {
465 result = REFINED_INNER;
472 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
475 connector_(connector),
476 coordsSelfLocal_(-1.0),
477 coordsNeighborLocal_(-1.0),
478 generatedGlobal_(false),
479 generatedLocal_(false)
482 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
487 generatedGlobal_ =
false;
488 generatedLocal_ =
false;
491 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
494 : connector_(orig.connector_),
495 coordsSelfLocal_(orig.coordsSelfLocal_),
496 coordsNeighborLocal_(orig.coordsNeighborLocal_),
497 generatedGlobal_(orig.generatedGlobal_),
498 generatedLocal_(orig.generatedLocal_)
501 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
504 generateLocalGeometries();
506 return coordsSelfLocal_;
509 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
513 generateLocalGeometries();
515 return coordsNeighborLocal_;
520 template<
int dim,
int dimworld,
class Comm >
523 :
Base( connector ), normalUp2Date_( false )
526 template<
int dim,
int dimworld,
class Comm >
530 Base::resetFaceGeom();
531 normalUp2Date_ =
false;
534 template<
int dim,
int dimworld,
class Comm >
537 :
Base( orig ), normalUp2Date_( orig.normalUp2Date_ )
540 template<
int dim,
int dimworld,
class Comm >
541 template <
class GeometryImp>
546 if (! this->generatedGlobal_)
549 const GEOFaceType & face = this->connector_.face();
551 geo.buildGeom( face.myvertex(FaceTopo::dune2aluVertex(0))->Point() ,
552 face.myvertex(FaceTopo::dune2aluVertex(1))->Point() ,
553 face.myvertex(FaceTopo::dune2aluVertex(2))->Point() );
555 this->generatedGlobal_ = true ;
559 template<
int dim,
int dimworld,
class Comm >
560 inline FieldVector<alu3d_ctype, 3> &
562 outerNormal(
const FieldVector<alu3d_ctype, 2>& local)
const
568 const GEOFaceType & face = this->connector_.face();
569 const alu3d_ctype (&_p0)[3] = face.myvertex(0)->Point();
570 const alu3d_ctype (&_p1)[3] = face.myvertex(1)->Point();
571 const alu3d_ctype (&_p2)[3] = face.myvertex(2)->Point();
575 const double factor = (this->connector_.innerTwist() < 0) ? 1.0 : -1.0;
578 outerNormal_[0] = factor * ((_p1[1]-_p0[1]) *(_p2[2]-_p1[2]) - (_p2[1]-_p1[1]) *(_p1[2]-_p0[2]));
579 outerNormal_[1] = factor * ((_p1[2]-_p0[2]) *(_p2[0]-_p1[0]) - (_p2[2]-_p1[2]) *(_p1[0]-_p0[0]));
580 outerNormal_[2] = factor * ((_p1[0]-_p0[0]) *(_p2[1]-_p1[1]) - (_p2[0]-_p1[0]) *(_p1[1]-_p0[1]));
582 normalUp2Date_ =
true;
589 template<
int dim,
int dimworld,
class Comm >
594 , mappingGlobalUp2Date_(false)
597 template<
int dim,
int dimworld,
class Comm >
601 Base::resetFaceGeom();
602 mappingGlobalUp2Date_ =
false;
605 template<
int dim,
int dimworld,
class Comm >
609 , mappingGlobal_(orig.mappingGlobal_)
610 , mappingGlobalUp2Date_(orig.mappingGlobalUp2Date_)
613 template<
int dim,
int dimworld,
class Comm >
614 template <
class GeometryImp>
619 if (! this->generatedGlobal_)
622 const GEOFaceType & face = this->connector_.face();
624 geo.buildGeom( face.myvertex(FaceTopo::dune2aluVertex(0))->Point() ,
625 face.myvertex(FaceTopo::dune2aluVertex(1))->Point() ,
626 face.myvertex(FaceTopo::dune2aluVertex(2))->Point() ,
627 face.myvertex(FaceTopo::dune2aluVertex(3))->Point() );
628 this->generatedGlobal_ = true ;
632 template<
int dim,
int dimworld,
class Comm >
633 inline FieldVector<alu3d_ctype, 3> &
635 outerNormal(
const FieldVector<alu3d_ctype, 2>& local)
const
638 if ( mappingGlobal_.affine () && mappingGlobalUp2Date_ )
639 return outerNormal_ ;
642 if(! mappingGlobalUp2Date_ )
646 mappingGlobal_.buildMapping(
647 face.myvertex( FaceTopo::dune2aluVertex(0) )->Point(),
648 face.myvertex( FaceTopo::dune2aluVertex(1) )->Point(),
649 face.myvertex( FaceTopo::dune2aluVertex(2) )->Point(),
650 face.myvertex( FaceTopo::dune2aluVertex(3) )->Point()
652 mappingGlobalUp2Date_ =
true;
658 if (connector_.innerTwist() < 0)
659 mappingGlobal_.negativeNormal(local,outerNormal_);
661 mappingGlobal_.normal(local,outerNormal_);
667 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
671 if (!generatedLocal_)
676 switch (connector_.conformanceState())
678 case (ConnectorType::CONFORMING) :
679 referenceElementCoordinatesRefined(INNER, coordsSelfLocal_);
682 if (!connector_.outerBoundary()) {
683 referenceElementCoordinatesRefined(OUTER, coordsNeighborLocal_);
686 case (ConnectorType::REFINED_INNER) :
687 referenceElementCoordinatesRefined(INNER, coordsSelfLocal_);
688 referenceElementCoordinatesUnrefined(OUTER, coordsNeighborLocal_);
690 case (ConnectorType::REFINED_OUTER) :
691 referenceElementCoordinatesUnrefined(INNER, coordsSelfLocal_);
692 referenceElementCoordinatesRefined(OUTER, coordsNeighborLocal_);
695 std::cerr <<
"ERROR: Wrong conformanceState in generateLocalGeometries! in: " << __FILE__ <<
" line: " << __LINE__<< std::endl;
700 generatedLocal_ =
true;
704 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
705 inline int ALU3dGridGeometricFaceInfoBase< dim, dimworld, type, Comm >::
706 globalVertexIndex(
const int duneFaceIndex,
707 const int aluFaceTwist,
708 const int duneFaceVertexIndex)
const
710 const int localALUIndex =
711 FaceTopo::dune2aluVertex(duneFaceVertexIndex,
715 const int localDuneIndex = ElementTopo::
716 alu2duneFaceVertex(ElementTopo::dune2aluFace(duneFaceIndex),
719 return getReferenceElement().subEntity(duneFaceIndex, 1, localDuneIndex, 3);
723 template<
int dim,
int dimworld, ALU3dGr
idElementType type,
class Comm >
724 inline void ALU3dGridGeometricFaceInfoBase< dim, dimworld, type, Comm >::
725 referenceElementCoordinatesRefined(SideIdentifier side,
726 CoordinateType& result)
const
729 const int faceIndex =
731 ElementTopo::alu2duneFace(connector_.innerALUFaceIndex()) :
732 ElementTopo::alu2duneFace(connector_.outerALUFaceIndex()));
733 const int faceTwist =
735 connector_.innerTwist() :
736 connector_.outerTwist());
738 const ReferenceElementType& refElem = getReferenceElement();
740 for (
int i = 0; i < numVerticesPerFace; ++i)
742 int duneVertexIndex = globalVertexIndex(faceIndex, faceTwist, i);
743 result[i] = refElem.position(duneVertexIndex, 3);
747 template<
int dimworld, ALU3dGr
idElementType type,
class Comm >
750 connector_(connector),
751 coordsSelfLocal_(-1.0),
752 coordsNeighborLocal_(-1.0),
753 generatedGlobal_(false),
754 generatedLocal_(false)
757 template<
int dimworld, ALU3dGr
idElementType type,
class Comm >
766 template<
int dimworld, ALU3dGr
idElementType type,
class Comm >
769 : connector_(orig.connector_),
770 coordsSelfLocal_(orig.coordsSelfLocal_),
771 coordsNeighborLocal_(orig.coordsNeighborLocal_),
772 generatedGlobal_(orig.generatedGlobal_),
773 generatedLocal_(orig.generatedLocal_)
776 template<
int dimworld, ALU3dGr
idElementType type,
class Comm >
779 generateLocalGeometries();
784 template<
int dimworld, ALU3dGr
idElementType type,
class Comm >
788 generateLocalGeometries();
795 template<
int dimworld,
class Comm >
798 :
Base( connector ), normalUp2Date_( false )
801 template<
int dimworld,
class Comm >
806 normalUp2Date_ =
false;
809 template<
int dimworld,
class Comm >
812 :
Base( orig ), normalUp2Date_( orig.normalUp2Date_ )
815 template<
int dimworld,
class Comm >
816 template <
class GeometryImp>
827 geo.buildGeom( face.myvertex(FaceTopo::dune2aluVertex(1))->Point() ,
828 face.myvertex(FaceTopo::dune2aluVertex(2))->Point() );
834 template<
int dimworld,
class Comm >
835 inline FieldVector<alu3d_ctype, dimworld> &
837 outerNormal(
const FieldVector<alu3d_ctype, 1>& local)
const
844 const alu3d_ctype (&_p1)[3] = face.myvertex(1)->Point();
845 const alu3d_ctype (&_p2)[3] = face.myvertex(2)->Point();
855 outerNormal_[0] = factor * (_p2[1]-_p1[1]);
856 outerNormal_[1] = factor * (_p1[0]-_p2[0]);
858 else if(dimworld == 3)
869 FieldVector<alu3d_ctype, 3> normal;
872 normal[0] = (_p2[1] - _p3[1]) * (_p1[2] - _p2[2]) - (_p2[2] - _p3[2]) * (_p1[1] - _p2[1]) ;
873 normal[1] = (_p2[2] - _p3[2]) * (_p1[0] - _p2[0]) - (_p2[0] - _p3[0]) * (_p1[2] - _p2[2]) ;
874 normal[2] = (_p2[0] - _p3[0]) * (_p1[1] - _p2[1]) - (_p2[1] - _p3[1]) * (_p1[0] - _p2[0]) ;
877 normal *= (1.0/normal.two_norm());
881 outerNormal_[0] = normal[2] * (_p1[1] - _p2[1]) - normal[1] * (_p1[2] - _p2[2]);
882 outerNormal_[1] = normal[0] * (_p1[2] - _p2[2]) - normal[2] * (_p1[0] - _p2[0]);
883 outerNormal_[2] = normal[1] * (_p1[0] - _p2[0]) - normal[0] * (_p1[1] - _p2[1]);
886 normalUp2Date_ =
true;
893 template<
int dimworld,
class Comm >
897 , normalUp2Date_(false)
900 template<
int dimworld,
class Comm >
905 normalUp2Date_ =
false;
908 template<
int dimworld,
class Comm >
912 , normalUp2Date_(orig.normalUp2Date_)
915 template<
int dimworld,
class Comm >
916 template <
class GeometryImp>
927 geo.buildGeom( face.myvertex(FaceTopo::dune2aluVertex(0))->Point() ,
928 face.myvertex(FaceTopo::dune2aluVertex(1))->Point() );
933 template<
int dimworld,
class Comm >
934 inline FieldVector<alu3d_ctype, dimworld> &
936 outerNormal(
const FieldVector<alu3d_ctype, 1>& local)
const
943 const alu3d_ctype (&_p0)[3] = face.myvertex(0)->Point();
944 const alu3d_ctype (&_p3)[3] = face.myvertex(3)->Point();
953 outerNormal_[0] = factor * (_p0[1] - _p3[1]);
954 outerNormal_[1] = factor * (_p3[0] - _p0[0]);
956 else if(dimworld == 3)
1000 normalUp2Date_ =
true;
1003 return outerNormal_;
1006 template<
int dimworld, ALU3dGr
idElementType type,
class Comm >
1034 std::cerr <<
"ERROR: Wrong conformanceState in generateLocalGeometries! in: " << __FILE__ <<
" line: " << __LINE__<< std::endl;
1043 template<
int dimworld, ALU3dGr
idElementType type,
class Comm >
1046 const int aluFaceTwist,
1047 const int duneFaceVertexIndex)
const
1050 const int localALUIndex =
1051 FaceTopo::dune2aluVertex(type ==
tetra ? duneFaceVertexIndex + 1 : duneFaceVertexIndex,
1055 const int localDuneIndex = (type ==
tetra) ?
1056 ElementTopo::alu2duneFaceVertex(ElementTopo::dune2aluFace(duneFaceIndex), localALUIndex) - 1
1067 assert( localDuneIndex == 0 || localDuneIndex == 1 );
1072 template<
int dimworld, ALU3dGr
idElementType type,
class Comm >
1073 inline void ALU3dGridGeometricFaceInfoBase< 2, dimworld, type, Comm >::
1074 referenceElementCoordinatesRefined(SideIdentifier side,
1075 LocalCoordinateType& result)
const
1078 const int faceIndex =
1082 const int faceTwist =
1091 int duneVertexIndex = globalVertexIndex(faceIndex, faceTwist, i);
1092 result[i] = refElem.position(duneVertexIndex, 2);
#define alugrid_assert(EX)
Definition alugrid_assert.hh:20
#define ALU3DSPACE
Definition alu3dinclude.hh:24
Definition alu3dinclude.hh:80
@ tetra
Definition topology.hh:12
double alu3d_ctype
Definition alu3dinclude.hh:85
Definition faceutility.hh:43
bool isElementLike() const
returns true if outerEntity casts into a helement
Definition faceutility_imp.cc:286
int outsideLevel() const
Definition faceutility_imp.cc:357
int outerTwist() const
Twist of the face seen from the outer element.
Definition faceutility_imp.cc:415
ImplTraits::GEOElementType GEOElementType
Definition faceutility.hh:51
ImplTraits::GhostPairType GhostPairType
Definition faceutility.hh:54
ConformanceState
Definition faceutility.hh:48
@ CONFORMING
Definition faceutility.hh:48
@ REFINED_INNER
Definition faceutility.hh:48
@ REFINED_OUTER
Definition faceutility.hh:48
~ALU3dGridFaceInfo()
Destructor.
Definition faceutility_imp.cc:265
void setFlags(const bool conformingRefinement, const bool ghostCellsEnabled)
reset flags
Definition faceutility_imp.cc:32
void updateFaceInfo(const GEOFaceType &face, int innerLevel, int innerTwist)
Definition faceutility_imp.cc:43
bool conformingRefinement() const
return true if conforming refinement is enabled
Definition faceutility.hh:138
const GEOElementType & innerEntity() const
Returns the inner element at that face.
Definition faceutility_imp.cc:327
int innerALUFaceIndex() const
Local number of the face in inner element (ALU3dGrid reference element)
Definition faceutility_imp.cc:427
const BNDFaceType & innerFace() const
Definition faceutility_imp.cc:343
bool ghostBoundary() const
Definition faceutility_imp.cc:312
ALU3dGridFaceInfo(const bool levelIntersection=false)
constructor creating empty face info
Definition faceutility_imp.cc:10
int duneTwist(const int faceIdx, const int aluTwist) const
Twist of the face seen from the inner element.
Definition faceutility_imp.cc:388
bool neighbor() const
returns true if outside is something meaningfull
Definition faceutility_imp.cc:306
bool innerBoundary() const
returns true if inside is a ghost entity
Definition faceutility_imp.cc:291
int boundaryId() const
return boundary id if intersection is with domain boundary
Definition faceutility_imp.cc:373
bool boundary() const
returns true if the face lies on the domain boundary
Definition faceutility_imp.cc:301
const GEOFaceType & face() const
Returns the ALU3dGrid face.
Definition faceutility_imp.cc:320
int innerTwist() const
Twist of the face seen from the inner element.
Definition faceutility_imp.cc:379
bool outerBoundary() const
Definition faceutility_imp.cc:296
int outerALUFaceIndex() const
Local number of the face in outer element (ALU3dGrid reference element)
Definition faceutility_imp.cc:432
const GEOElementType & outerEntity() const
Definition faceutility_imp.cc:335
ImplTraits::GEOPeriodicType GEOPeriodicType
Definition faceutility.hh:52
ImplTraits::GEOFaceType GEOFaceType
Definition faceutility.hh:50
ConformanceState conformanceState() const
Description of conformance on the face.
Definition faceutility_imp.cc:438
const BNDFaceType & boundaryFace() const
Definition faceutility_imp.cc:351
int segmentIndex() const
return boundary segment index if intersection is with domain boundary
Definition faceutility_imp.cc:366
ImplTraits::BNDFaceType BNDFaceType
Definition faceutility.hh:55
Definition faceutility.hh:235
FieldMatrix< alu3d_ctype, numVerticesPerFace, dimworld > CoordinateType
Definition faceutility.hh:261
bool generatedLocal_
Definition faceutility.hh:304
CoordinateType coordsNeighborLocal_
Definition faceutility.hh:301
const CoordinateType & intersectionNeighborLocal() const
Definition faceutility_imp.cc:511
@ numVerticesPerFace
Definition faceutility.hh:254
ReferenceElement< alu3d_ctype, 3 > ReferenceElementType
Definition faceutility.hh:249
static const ReferenceElementType & getReferenceElement()
Definition faceutility.hh:306
const ConnectorType & connector_
Definition faceutility.hh:298
ALU3dGridGeometricFaceInfoBase(const ConnectorType &)
Definition faceutility_imp.cc:474
ElementTopologyMapping< type > ElementTopo
Definition faceutility.hh:239
@ OUTER
Definition faceutility.hh:253
@ INNER
Definition faceutility.hh:253
void resetFaceGeom()
reset status of faceGeomInfo
Definition faceutility_imp.cc:485
CoordinateType coordsSelfLocal_
Definition faceutility.hh:300
const CoordinateType & intersectionSelfLocal() const
Definition faceutility_imp.cc:503
bool generatedGlobal_
Definition faceutility.hh:303
Definition faceutility.hh:326
ALU3dGridGeometricFaceInfoTetra(const ConnectorType &ctor)
Definition faceutility_imp.cc:522
void resetFaceGeom()
reset status of faceGeomInfo
Definition faceutility_imp.cc:528
void buildGlobalGeom(GeometryImp &geo) const
update global geometry
Definition faceutility_imp.cc:544
NormalType & outerNormal(const FieldVector< alu3d_ctype, 2 > &local) const
Definition faceutility_imp.cc:562
ALU3dGridFaceInfo< dim, dimworld, tetra, Comm >::GEOFaceType GEOFaceType
Definition faceutility.hh:333
Definition faceutility.hh:370
ALU3dGridFaceInfo< dim, dimworld, hexa, Comm >::GEOFaceType GEOFaceType
Definition faceutility.hh:377
void buildGlobalGeom(GeometryImp &geo) const
update global geometry
Definition faceutility_imp.cc:617
NormalType & outerNormal(const FieldVector< alu3d_ctype, 2 > &local) const
Definition faceutility_imp.cc:635
void resetFaceGeom()
reset status of faceGeomInfo
Definition faceutility_imp.cc:599
ALU3dGridGeometricFaceInfoHexa(const ConnectorType &)
Definition faceutility_imp.cc:591
ALU3dGridFaceInfo< 2, dimworld, tetra, Comm >::GEOElementType GEOElementType
Definition faceutility.hh:522
ALU3dGridFaceInfo< 2, dimworld, tetra, Comm >::GEOFaceType GEOFaceType
Definition faceutility.hh:521
ALU3dGridFaceInfo< 2, dimworld, hexa, Comm >::GEOFaceType GEOFaceType
Definition faceutility.hh:565
Definition topology.hh:40
Definition topology.hh:151