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;
124 , secondaryIvIndicator_([] (const Element& e, const Intersection& is, bool isBranching)
125 {
return is.boundary() || isBranching; } )
133 , secondaryIvIndicator_(indicator)
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>
183 const auto numVert = this->
gridView().size(dim);
184 const auto numScvs =
numDofs();
188 scvs_.resize(numScvs);
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;
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);
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;
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),
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;
493 , secondaryIvIndicator_([] (const Element& e, const Intersection& is, bool isBranching)
494 {
return is.boundary() || isBranching; } )
502 , secondaryIvIndicator_(indicator)
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]; }
558 scvfIndicesOfScv_.resize(numScvs_);
559 neighborVolVarIndices_.resize(numScvs_);
563 const auto numVert = this->
gridView().size(dim);
564 secondaryInteractionVolumeVertices_.resize(numVert,
false);
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;
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);
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.
Helper classes to compute the integration elements.
Base class for grid geometries.
BaseGridGeometry(const GridView &gridView)
Constructor computes the bouding box of the entire domain, for e.g. setting boundary conditions.
Definition basegridgeometry.hh:78
DiscretizationMethod
The available discretization methods in Dumux.
Definition method.hh:37
@ ccmpfa
Definition method.hh:38
T getParam(Args &&... args)
A free function to get a parameter from the parameter tree singleton.
Definition parameters.hh:348
void checkOverlapSizeCCMpfa(const GridView &gridView)
check the overlap size for parallel computations
Definition discretization/cellcentered/mpfa/fvgridgeometry.hh:54
typename Extrusion< T >::type Extrusion_t
Convenience alias for obtaining the extrusion type.
Definition extrusion.hh:177
typename GridView::IndexSet::IndexType GridIndex
Definition indextraits.hh:39
const ElementMapper & elementMapper() const
Returns the mapper for elements to indices for constant grids.
Definition basegridgeometry.hh:127
Element element(GridIndexType eIdx) const
Get an element from a global element index.
Definition basegridgeometry.hh:171
const VertexMapper & vertexMapper() const
Returns the mapper for vertices to indices for constant grids.
Definition basegridgeometry.hh:121
const GridView & gridView() const
Return the gridView this grid geometry object lives on.
Definition basegridgeometry.hh:115
void update()
Update all fvElementGeometries (do this again after grid adaption).
Definition basegridgeometry.hh:91
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
typename Traits::ElementMapper DofMapper
export dof mapper type
Definition discretization/cellcentered/mpfa/fvgridgeometry.hh:105
static constexpr int maxElementStencilSize
The maximum admissible stencil size (used for static memory allocation during assembly).
Definition discretization/cellcentered/mpfa/fvgridgeometry.hh:115
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
static constexpr bool hasSingleInteractionVolumeType
State if only a single type is used for interaction volumes.
Definition discretization/cellcentered/mpfa/fvgridgeometry.hh:118
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
GV GridView
export the grid view type
Definition discretization/cellcentered/mpfa/fvgridgeometry.hh:107
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
static constexpr DiscretizationMethod discMethod
export the discretization method this geometry belongs to
Definition discretization/cellcentered/mpfa/fvgridgeometry.hh:112
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
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
static constexpr bool hasSingleInteractionVolumeType
State if only a single type is used for interaction volumes.
Definition discretization/cellcentered/mpfa/fvgridgeometry.hh:487
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
static constexpr DiscretizationMethod discMethod
export the discretization method this geometry belongs to
Definition discretization/cellcentered/mpfa/fvgridgeometry.hh:481
const FlipScvfIndexSet & flipScvfIndexSet() const
Returns the flip scvf index set.
Definition discretization/cellcentered/mpfa/fvgridgeometry.hh:749
static constexpr int maxElementStencilSize
The maximum admissible stencil size (used for static memory allocation during assembly).
Definition discretization/cellcentered/mpfa/fvgridgeometry.hh:484
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
GV GridView
export the grid view type
Definition discretization/cellcentered/mpfa/fvgridgeometry.hh:476
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
static bool isValid(const GridView &gridView) noexcept
Definition checkoverlapsize.hh:42