26#ifndef DUMUX_DISCRETIZATION_CC_MPFA_FV_GRID_GEOMETRY_HH
27#define DUMUX_DISCRETIZATION_CC_MPFA_FV_GRID_GEOMETRY_HH
49template<
class Gr
idView,
class Traits,
bool enableCache>
53template<
class Gr
idView>
58 DUNE_THROW(Dune::InvalidStateException,
"The ccmpfa discretization method needs at least an overlap of 1 for parallel computations. "
59 <<
" Set the parameter \"Grid.Overlap\" in the input file.");
68template<
class GV,
class Traits>
75 static constexpr int dim = GV::dimension;
76 static constexpr int dimWorld = GV::dimensionworld;
78 using Element =
typename GV::template Codim<0>::Entity;
79 using Vertex =
typename GV::template Codim<dim>::Entity;
80 using Intersection =
typename GV::Intersection;
82 using CoordScalar =
typename GV::ctype;
84 using ScvfOutsideGridIndexStorage =
typename Traits::SubControlVolumeFace::Traits::OutsideGridIndexStorage;
115 static constexpr int maxElementStencilSize = Traits::maxElementStencilSize;
118 static constexpr bool hasSingleInteractionVolumeType = !MpfaHelper::considerSecondaryIVs();
124 , secondaryIvIndicator_([] (const Element& e, const Intersection& is, bool isBranching)
125 {
return is.boundary() || isBranching; } )
133 , secondaryIvIndicator_(indicator)
141 {
return this->elementMapper(); }
145 {
return scvs_.size(); }
149 {
return scvfs_.size(); }
153 {
return numBoundaryScvf_; }
157 {
return this->gridView().size(0); }
161 template<
bool useSecondary = !hasSingleInteractionVolumeType, std::enable_if_t<useSecondary,
bool> = 0>
163 {
return secondaryInteractionVolumeVertices_[vIdxGlobal]; }
167 template<
bool useSecondary = !hasSingleInteractionVolumeType, std::enable_if_t<!useSecondary,
bool> = 0>
174 ParentType::update();
183 const auto numVert = this->gridView().size(dim);
184 const auto numScvs = numDofs();
185 std::size_t numScvf = MpfaHelper::getGlobalNumScvf(this->gridView());
188 scvs_.resize(numScvs);
189 scvfs_.reserve(numScvf);
190 scvfIndicesOfScv_.resize(numScvs);
191 hasBoundaryScvf_.resize(numScvs,
false);
195 secondaryInteractionVolumeVertices_.resize(numVert,
false);
198 const auto isGhostVertex = MpfaHelper::findGhostVertices(this->gridView(), this->vertexMapper());
201 typename GridIVIndexSets::DualGridIndexSet dualIdSet(this->gridView());
204 GridIndexType scvfIdx = 0;
205 numBoundaryScvf_ = 0;
206 for (
const auto& element : elements(this->gridView()))
208 const auto eIdx = this->elementMapper().index(element);
211 auto elementGeometry = element.geometry();
214 std::vector<GridIndexType> scvfIndexSet;
215 scvfIndexSet.reserve(MpfaHelper::getNumLocalScvfs(elementGeometry.type()));
219 std::vector<ScvfOutsideGridIndexStorage> outsideIndices;
222 outsideIndices.resize(element.subEntities(1));
223 for (
const auto& intersection : intersections(this->gridView(), element))
225 if (intersection.neighbor())
227 const auto nIdx = this->elementMapper().index( intersection.outside() );
228 outsideIndices[intersection.indexInInside()].push_back(nIdx);
234 for (
const auto& is : intersections(this->gridView(), element))
236 const auto indexInInside = is.indexInInside();
237 const bool boundary = is.boundary();
238 const bool neighbor = is.neighbor();
241 hasBoundaryScvf_[eIdx] =
true;
244 if (dim < dimWorld && neighbor && outsideIndices[indexInInside].empty())
248 const bool useNeighbor = neighbor && is.outside().level() > element.level();
249 const auto& e = useNeighbor ? is.outside() : element;
250 const auto indexInElement = useNeighbor ? is.indexInOutside() : indexInInside;
251 const auto eg = e.geometry();
252 const auto refElement = referenceElement(eg);
255 const auto numCorners = is.geometry().corners();
256 const auto isPositions = MpfaHelper::computeScvfCornersOnIntersection(eg,
262 const bool isBranchingPoint = dim < dimWorld ? outsideIndices[indexInInside].size() > 1 :
false;
263 const bool usesSecondaryIV = secondaryIvIndicator_(element, is, isBranchingPoint);
266 for (std::size_t c = 0; c < numCorners; ++c)
269 const auto vIdxLocal = refElement.subEntity(indexInElement, 1, c, dim);
270 const auto vIdxGlobal = this->vertexMapper().subIndex(e, vIdxLocal, dim);
273 if (isGhostVertex[vIdxGlobal])
278 secondaryInteractionVolumeVertices_[vIdxGlobal] =
true;
281 static const auto q = getParam<CoordScalar>(
"MPFA.Q");
284 const auto& outsideScvIndices = [&] ()
287 return dim == dimWorld ?
288 ScvfOutsideGridIndexStorage({this->elementMapper().index(is.outside())}) :
289 outsideIndices[indexInInside];
291 return ScvfOutsideGridIndexStorage({GridIndexType(numScvs) + numBoundaryScvf_++});
294 scvfIndexSet.push_back(scvfIdx);
296 MpfaHelper::getScvfCorners(isPositions, numCorners, c),
297 is.centerUnitOuterNormal(),
307 dualIdSet[vIdxGlobal].insert(scvfs_.back());
315 outsideIndices[indexInInside].clear();
322 scvfIndicesOfScv_[eIdx] = scvfIndexSet;
326 flipScvfIndices_.resize(scvfs_.size());
327 for (
const auto& scvf : scvfs_)
332 const auto numOutsideScvs = scvf.numOutsideScvs();
333 const auto vIdxGlobal = scvf.vertexIndex();
334 const auto insideScvIdx = scvf.insideScvIdx();
336 flipScvfIndices_[scvf.index()].resize(numOutsideScvs);
337 for (std::size_t i = 0; i < numOutsideScvs; ++i)
339 const auto outsideScvIdx = scvf.outsideScvIdx(i);
340 for (
auto outsideScvfIndex : scvfIndicesOfScv_[outsideScvIdx])
342 const auto& outsideScvf = this->scvf(outsideScvfIndex);
343 if (outsideScvf.vertexIndex() == vIdxGlobal &&
344 MpfaHelper::vectorContainsValue(outsideScvf.outsideScvIndices(), insideScvIdx))
346 flipScvfIndices_[scvf.index()][i] = outsideScvfIndex;
355 std::cout <<
"Initializing of the grid finite volume geometry took " << timer.elapsed() <<
" seconds." << std::endl;
359 ivIndexSets_.update(*
this, std::move(dualIdSet));
360 std::cout <<
"Initializing of the grid interaction volume index sets took " << timer.elapsed() <<
" seconds." << std::endl;
364 connectivityMap_.update(*
this);
365 std::cout <<
"Initializing of the connectivity map took " << timer.elapsed() <<
" seconds." << std::endl;
374 {
return scvs_[scvIdx]; }
378 {
return scvfs_[scvfIdx]; }
383 {
return connectivityMap_; }
387 {
return ivIndexSets_; }
391 {
return scvfIndicesOfScv_[scvIdx]; }
395 {
return flipScvfIndices_; }
400 {
return scvfs_[flipScvfIndices_[scvfIdx][outsideScvfIdx]]; }
404 {
return hasBoundaryScvf_[eIdx]; }
408 ConnectivityMap connectivityMap_;
411 std::vector<SubControlVolume> scvs_;
412 std::vector<SubControlVolumeFace> scvfs_;
415 std::vector<std::vector<GridIndexType>> scvfIndicesOfScv_;
416 std::vector<bool> secondaryInteractionVolumeVertices_;
417 GridIndexType numBoundaryScvf_;
418 std::vector<bool> hasBoundaryScvf_;
421 FlipScvfIndexSet flipScvfIndices_;
424 GridIVIndexSets ivIndexSets_;
427 SecondaryIvIndicatorType secondaryIvIndicator_;
437template<
class GV,
class Traits>
444 static constexpr int dim = GV::dimension;
445 static constexpr int dimWorld = GV::dimensionworld;
447 using Element =
typename GV::template Codim<0>::Entity;
448 using Vertex =
typename GV::template Codim<dim>::Entity;
449 using Intersection =
typename GV::Intersection;
451 using CoordScalar =
typename GV::ctype;
453 using ScvfOutsideGridIndexStorage =
typename Traits::SubControlVolumeFace::Traits::OutsideGridIndexStorage;
484 static constexpr int maxElementStencilSize = Traits::maxElementStencilSize;
487 static constexpr bool hasSingleInteractionVolumeType = !MpfaHelper::considerSecondaryIVs();
493 , secondaryIvIndicator_([] (const Element& e, const Intersection& is, bool isBranching)
494 {
return is.boundary() || isBranching; } )
502 , secondaryIvIndicator_(indicator)
510 {
return this->elementMapper(); }
522 {
return numBoundaryScvf_; }
526 {
return this->gridView().size(0); }
530 template<
bool useSecondary = !hasSingleInteractionVolumeType, std::enable_if_t<useSecondary,
bool> = 0>
532 {
return secondaryInteractionVolumeVertices_[vIdxGlobal]; }
536 template<
bool useSecondary = !hasSingleInteractionVolumeType, std::enable_if_t<!useSecondary,
bool> = 0>
542 {
return isGhostVertex_[this->vertexMapper().index(v)]; }
546 {
return isGhostVertex_[vIdxGlobal]; }
551 ParentType::update();
557 numScvs_ = numDofs();
558 scvfIndicesOfScv_.resize(numScvs_);
559 neighborVolVarIndices_.resize(numScvs_);
563 const auto numVert = this->gridView().size(dim);
564 secondaryInteractionVolumeVertices_.resize(numVert,
false);
567 isGhostVertex_ = MpfaHelper::findGhostVertices(this->gridView(), this->vertexMapper());
570 typename GridIVIndexSets::DualGridIndexSet dualIdSet(this->gridView());
573 const auto maxNumScvfs = numScvs_*LocalView::maxNumElementScvfs;
574 std::vector<bool> scvfIsOnBoundary;
575 std::vector<GridIndexType> scvfVertexIndex;
576 scvfIsOnBoundary.reserve(maxNumScvfs);
577 scvfVertexIndex.reserve(maxNumScvfs);
581 numBoundaryScvf_ = 0;
582 for (
const auto& element : elements(this->gridView()))
584 const auto eIdx = this->elementMapper().index(element);
587 auto elementGeometry = element.geometry();
590 const auto numLocalFaces = MpfaHelper::getNumLocalScvfs(elementGeometry.type());
591 std::vector<GridIndexType> scvfsIndexSet;
592 std::vector<ScvfOutsideGridIndexStorage> neighborVolVarIndexSet;
593 scvfsIndexSet.reserve(numLocalFaces);
594 neighborVolVarIndexSet.reserve(numLocalFaces);
598 std::vector<ScvfOutsideGridIndexStorage> outsideIndices;
601 outsideIndices.resize(element.subEntities(1));
602 for (
const auto& intersection : intersections(this->gridView(), element))
604 if (intersection.neighbor())
606 auto nIdx = this->elementMapper().index( intersection.outside() );
607 outsideIndices[intersection.indexInInside()].push_back(nIdx);
613 for (
const auto& is : intersections(this->gridView(), element))
615 const auto indexInInside = is.indexInInside();
616 const bool boundary = is.boundary();
617 const bool neighbor = is.neighbor();
620 if (dim < dimWorld && neighbor && outsideIndices[indexInInside].empty())
624 const bool useNeighbor = neighbor && is.outside().level() > element.level();
625 const auto& e = useNeighbor ? is.outside() : element;
626 const auto indexInElement = useNeighbor ? is.indexInOutside() : indexInInside;
627 const auto eg = e.geometry();
628 const auto refElement = referenceElement(eg);
631 const bool isBranchingPoint = dim < dimWorld ? outsideIndices[indexInInside].size() > 1 :
false;
632 const bool usesSecondaryIV = secondaryIvIndicator_(element, is, isBranchingPoint);
635 for (std::size_t c = 0; c < is.geometry().corners(); ++c)
638 const auto vIdxLocal = refElement.subEntity(indexInElement, 1, c, dim);
639 const auto vIdxGlobal = this->vertexMapper().subIndex(e, vIdxLocal, dim);
642 if (isGhostVertex_[vIdxGlobal])
647 secondaryInteractionVolumeVertices_[vIdxGlobal] =
true;
650 const auto& outsideScvIndices = [&] ()
653 return dim == dimWorld ?
654 ScvfOutsideGridIndexStorage({this->elementMapper().index(is.outside())}) :
655 outsideIndices[indexInInside];
657 return ScvfOutsideGridIndexStorage({GridIndexType(numScvs_) + numBoundaryScvf_++});
661 dualIdSet[vIdxGlobal].insert(numScvf_, eIdx, boundary);
664 scvfsIndexSet.push_back(numScvf_++);
665 scvfIsOnBoundary.push_back(boundary);
666 scvfVertexIndex.push_back(vIdxGlobal);
667 neighborVolVarIndexSet.emplace_back(std::move(outsideScvIndices));
672 outsideIndices[indexInInside].clear();
676 scvfIndicesOfScv_[eIdx] = scvfsIndexSet;
677 neighborVolVarIndices_[eIdx] = neighborVolVarIndexSet;
681 flipScvfIndices_.resize(numScvf_);
682 for (std::size_t scvIdx = 0; scvIdx < numScvs_; ++scvIdx)
684 const auto& scvfIndices = scvfIndicesOfScv_[scvIdx];
685 for (
unsigned int i = 0; i < scvfIndices.size(); ++i)
688 if (scvfIsOnBoundary[ scvfIndices[i] ])
691 const auto scvfIdx = scvfIndices[i];
692 const auto vIdxGlobal = scvfVertexIndex[scvfIdx];
693 const auto numOutsideScvs = neighborVolVarIndices_[scvIdx][i].size();
695 flipScvfIndices_[scvfIdx].resize(numOutsideScvs);
696 for (
unsigned int j = 0; j < numOutsideScvs; ++j)
698 const auto outsideScvIdx = neighborVolVarIndices_[scvIdx][i][j];
699 const auto& outsideScvfIndices = scvfIndicesOfScv_[outsideScvIdx];
700 for (
unsigned int k = 0; k < outsideScvfIndices.size(); ++k)
702 const auto outsideScvfIndex = outsideScvfIndices[k];
703 const auto outsideScvfVertexIndex = scvfVertexIndex[outsideScvfIndex];
704 const auto& outsideScvfNeighborIndices = neighborVolVarIndices_[outsideScvIdx][k];
705 if (outsideScvfVertexIndex == vIdxGlobal &&
706 MpfaHelper::vectorContainsValue(outsideScvfNeighborIndices, scvIdx))
708 flipScvfIndices_[scvfIdx][j] = outsideScvfIndex;
718 std::cout <<
"Initializing of the grid finite volume geometry took " << timer.elapsed() <<
" seconds." << std::endl;
722 ivIndexSets_.update(*
this, std::move(dualIdSet));
723 std::cout <<
"Initializing of the grid interaction volume index sets took " << timer.elapsed() <<
" seconds." << std::endl;
727 connectivityMap_.update(*
this);
728 std::cout <<
"Initializing of the connectivity map took " << timer.elapsed() <<
" seconds." << std::endl;
737 {
return scvfIndicesOfScv_[scvIdx]; }
741 {
return neighborVolVarIndices_[scvIdx]; }
745 const GridIndexType
flipScvfIdx(GridIndexType scvfIdx,
unsigned int outsideScvfIdx = 0)
const
746 {
return flipScvfIndices_[scvfIdx][outsideScvfIdx]; }
750 {
return flipScvfIndices_; }
755 {
return connectivityMap_; }
759 {
return ivIndexSets_; }
763 ConnectivityMap connectivityMap_;
766 std::vector<std::vector<GridIndexType>> scvfIndicesOfScv_;
767 std::vector<std::vector<ScvfOutsideGridIndexStorage>> neighborVolVarIndices_;
768 std::vector<bool> secondaryInteractionVolumeVertices_;
769 std::vector<bool> isGhostVertex_;
770 GridIndexType numScvs_;
771 GridIndexType numScvf_;
772 GridIndexType numBoundaryScvf_;
775 FlipScvfIndexSet flipScvfIndices_;
778 GridIVIndexSets ivIndexSets_;
781 SecondaryIvIndicatorType secondaryIvIndicator_;
Defines the index types used for grid and local indices.
The infrastructure to retrieve run-time parameters from Dune::ParameterTrees.
Check the overlap size for different discretization methods.
The available discretization methods in Dumux.
Base class for grid geometries.
Helper classes to compute the integration elements.
DiscretizationMethod
The available discretization methods in Dumux.
Definition: method.hh:37
typename Extrusion< T >::type Extrusion_t
Convenience alias for obtaining the extrusion type.
Definition: extrusion.hh:177
void checkOverlapSizeCCMpfa(const GridView &gridView)
check the overlap size for parallel computations
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:54
Struture to define the index types used for grid and local indices.
Definition: indextraits.hh:38
Base class for all finite volume grid geometries.
Definition: basegridgeometry.hh:49
GV GridView
export the grid view type
Definition: basegridgeometry.hh:64
The finite volume geometry (scvs and scvfs) for cell-centered mpfa models on a grid view This builds ...
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:50
The finite volume geometry (scvs and scvfs) for cell-centered mpfa models on a grid view This builds ...
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:71
typename Traits::ElementMapper DofMapper
export dof mapper type
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:105
void update()
update all fvElementGeometries (do this again after grid adaption)
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:172
typename Traits::SubControlVolumeFace SubControlVolumeFace
export the type of sub control volume
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:99
std::size_t numScvf() const
The total number of sub control volume faces.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:148
typename Traits::template MpfaHelper< ThisType > MpfaHelper
export the mpfa helper type
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:109
const SubControlVolumeFace & flipScvf(GridIndexType scvfIdx, unsigned int outsideScvfIdx=0) const
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:399
const std::vector< GridIndexType > & scvfIndicesOfScv(GridIndexType scvIdx) const
Get the sub control volume face indices of an scv by global index.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:390
Extrusion_t< Traits > Extrusion
export the type of extrusion
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:101
bool vertexUsesSecondaryInteractionVolume(GridIndexType vIdxGlobal) const
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:162
std::vector< ScvfOutsideGridIndexStorage > FlipScvfIndexSet
export the flip scvf index set type
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:88
const ConnectivityMap & connectivityMap() const
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:382
std::size_t numBoundaryScvf() const
The total number of boundary sub control volume faces.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:152
typename Traits::SubControlVolume SubControlVolume
export the type of sub control volume
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:97
typename Traits::template GridIvIndexSets< ThisType > GridIVIndexSets
export the grid interaction volume index set type
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:90
std::size_t numDofs() const
The total number of degrees of freedom.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:156
typename Traits::template LocalView< ThisType, true > LocalView
export the type of the fv element geometry (the local view type)
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:95
const SubControlVolumeFace & scvf(GridIndexType scvfIdx) const
Get a sub control volume face with a global scvf index.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:377
std::size_t numScv() const
The total number of sub control volumes.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:144
const GridIVIndexSets & gridInteractionVolumeIndexSets() const
Returns the grid interaction volume index set class.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:386
const FlipScvfIndexSet & flipScvfIndexSet() const
Returns the flip scvf index set.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:394
CCMpfaFVGridGeometry(const GridView &gridView, const SecondaryIvIndicatorType &indicator)
Constructor with user-defined indicator function for secondary interaction volumes.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:131
std::function< bool(const Element &, const Intersection &, bool)> SecondaryIvIndicatorType
export the type to be used for indicators where to use the secondary ivs
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:92
typename Traits::template ConnectivityMap< ThisType > ConnectivityMap
export the connectivity map type
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:103
const DofMapper & dofMapper() const
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:140
bool hasBoundaryScvf(GridIndexType eIdx) const
Returns whether one of the geometry's scvfs lies on a boundary.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:403
CCMpfaFVGridGeometry(const GridView &gridView)
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:122
MpfaHelper mpfaHelper() const
Returns instance of the mpfa helper type.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:369
const SubControlVolume & scv(GridIndexType scvIdx) const
Get a sub control volume with a global scv index.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:373
constexpr bool vertexUsesSecondaryInteractionVolume(GridIndexType vIdxGlobal) const
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:168
The finite volume geometry (scvs and scvfs) for cell-centered mpfa models on a grid view This builds ...
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:440
std::function< bool(const Element &, const Intersection &, bool)> SecondaryIvIndicatorType
export the type to be used for indicators where to use the secondary ivs
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:461
typename Traits::SubControlVolumeFace SubControlVolumeFace
export the type of sub control volume
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:468
typename Traits::template ConnectivityMap< ThisType > ConnectivityMap
export the connectivity map type
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:472
bool isGhostVertex(GridIndexType vIdxGlobal) const
Returns true if the vertex (index) lies on a processor boundary inside a ghost element.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:545
const GridIndexType flipScvfIdx(GridIndexType scvfIdx, unsigned int outsideScvfIdx=0) const
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:745
const GridIVIndexSets & gridInteractionVolumeIndexSets() const
Returns the grid interaction volume seeds class.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:758
Extrusion_t< Traits > Extrusion
export the type of extrusion
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:470
typename Traits::template GridIvIndexSets< ThisType > GridIVIndexSets
export the grid interaction volume index set type
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:459
const std::vector< ScvfOutsideGridIndexStorage > & neighborVolVarIndices(GridIndexType scvIdx) const
Returns the neighboring vol var indices for each scvf contained in an scv.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:740
CCMpfaFVGridGeometry(const GridView &gridView, const SecondaryIvIndicatorType &indicator)
Constructor with user-defined indicator function for secondary interaction volumes.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:500
const FlipScvfIndexSet & flipScvfIndexSet() const
Returns the flip scvf index set.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:749
CCMpfaFVGridGeometry(const GridView &gridView)
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:491
std::size_t numScv() const
Returns the total number of sub control volumes.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:513
const std::vector< GridIndexType > & scvfIndicesOfScv(GridIndexType scvIdx) const
Returns the sub control volume face indices of an scv by global index.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:736
std::vector< ScvfOutsideGridIndexStorage > FlipScvfIndexSet
export the flip scvf index set type
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:457
typename Traits::SubControlVolume SubControlVolume
export the type of sub control volume
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:466
std::size_t numBoundaryScvf() const
Returns the number of scvfs on the domain boundary.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:521
typename Traits::ElementMapper DofMapper
export dof mapper type
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:474
MpfaHelper mpfaHelper() const
Returns instance of the mpfa helper type.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:732
void update()
Updates all finite volume geometries of the grid. Has to be called again after grid adaption.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:549
const DofMapper & dofMapper() const
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:509
const ConnectivityMap & connectivityMap() const
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:754
bool isGhostVertex(const Vertex &v) const
Returns true if a given vertex lies on a processor boundary inside a ghost element.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:541
typename Traits::template MpfaHelper< ThisType > MpfaHelper
export the mpfa helper type
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:478
typename Traits::template LocalView< ThisType, false > LocalView
export the type of the fv element geometry (the local view type)
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:464
bool vertexUsesSecondaryInteractionVolume(GridIndexType vIdxGlobal) const
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:531
constexpr bool vertexUsesSecondaryInteractionVolume(GridIndexType vIdxGlobal) const
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:537
std::size_t numScvf() const
Returns the total number of sub control volume faces.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:517
std::size_t numDofs() const
Returns the total number of degrees of freedom.
Definition: discretization/cellcentered/mpfa/fvgridgeometry.hh:525
Check if the overlap size is valid for a given discretization method.
Definition: checkoverlapsize.hh:40