17#ifndef DUMUX_POROUSMEDIUMFLOW_BOXDFM_GRID_FVGEOMETRY_HH
18#define DUMUX_POROUSMEDIUMFLOW_BOXDFM_GRID_FVGEOMETRY_HH
23#include <unordered_map>
25#include <dune/localfunctions/lagrange/lagrangelfecache.hh>
26#include <dune/geometry/multilineargeometry.hh>
27#include <dune/grid/common/mcmgmapper.hh>
44template<
class GV,
class T>
60template<
class Gr
idView,
class MapperTraits = DefaultMapperTraits<Gr
idView>>
67 template<
class Gr
idGeometry,
bool enableCache>
71 using FacetMapper = Dune::MultipleCodimMultipleGeomTypeMapper<GridView>;
84 bool enableGridGeometryCache =
false,
98template<
class Scalar,
class GV,
class Traits>
107 using Element =
typename GV::template Codim<0>::Entity;
108 using CoordScalar =
typename GV::ctype;
109 static const int dim = GV::dimension;
110 static const int dimWorld = GV::dimensionworld;
111 static_assert(dim == 2 || dim == 3,
"The box-dfm GridGeometry is only implemented in 2 or 3 dimensions.");
129 using FeCache = Dune::LagrangeLocalFiniteElementCache<CoordScalar, Scalar, dim, 1>;
134 template<
class FractureGr
idAdapter >
139 update_(fractureGridAdapter);
158 {
return numBoundaryScvf_; }
162 {
return this->
gridView().size(dim); }
165 template<
class FractureGr
idAdapter >
169 update_(fractureGridAdapter);
173 template<
class FractureGr
idAdapter >
177 update_(fractureGridAdapter);
183 bool dofOnBoundary(
unsigned int dofIdx)
const {
return boundaryDofIndices_[dofIdx]; }
185 bool dofOnFracture(
unsigned int dofIdx)
const {
return fractureDofIndices_[dofIdx]; }
190 [[deprecated(
"Will be removed after release 3.11. Use periodicallyMappedDofs, returning a range of dofs")]]
192 { DUNE_THROW(Dune::InvalidStateException,
"Periodic boundaries are not supported by the box-dfm scheme"); }
196 { DUNE_THROW(Dune::InvalidStateException,
"Periodic boundaries are not supported by the box-dfm scheme"); }
200 {
return { gg.cache_ }; }
204 class BoxDfmGridGeometryCache
215 const BoxDfmFVGridGeometry& gridGeometry()
const
216 {
return *gridGeometry_; }
219 const std::vector<SubControlVolume>&
scvs(GridIndexType eIdx)
const
220 {
return scvs_[eIdx]; }
223 const std::vector<SubControlVolumeFace>& scvfs(GridIndexType eIdx)
const
224 {
return scvfs_[eIdx]; }
234 std::vector<std::vector<SubControlVolume>> scvs_;
235 std::vector<std::vector<SubControlVolumeFace>> scvfs_;
237 const BoxDfmFVGridGeometry* gridGeometry_;
243 using Cache = BoxDfmGridGeometryCache;
246 using GeometryHelper =
typename Cache::GeometryHelper;
248 template<
class FractureGr
idAdapter >
249 void update_(
const FractureGridAdapter& fractureGridAdapter)
253 const auto numElements = this->
gridView().size(0);
254 cache_.scvs_.resize(numElements);
255 cache_.scvfs_.resize(numElements);
257 boundaryDofIndices_.assign(
numDofs(),
false);
258 fractureDofIndices_.assign(this->
gridView.size(dim),
false);
262 numBoundaryScvf_ = 0;
270 numScv_ +=
element.subEntities(dim);
271 numScvf_ +=
element.subEntities(dim-1);
274 auto elementGeometry =
element.geometry();
275 const auto refElement = referenceElement(elementGeometry);
278 GeometryHelper geometryHelper(elementGeometry);
281 cache_.scvs_[eIdx].resize(elementGeometry.corners());
282 for (LocalIndexType scvLocalIdx = 0; scvLocalIdx < elementGeometry.corners(); ++scvLocalIdx)
293 LocalIndexType scvfLocalIdx = 0;
294 cache_.scvfs_[eIdx].resize(
element.subEntities(dim-1));
295 for (; scvfLocalIdx <
element.subEntities(dim-1); ++scvfLocalIdx)
298 std::array<LocalIndexType, 2> localScvIndices{{
299 static_cast<LocalIndexType
>(refElement.subEntity(scvfLocalIdx, dim-1, 0, dim)),
300 static_cast<LocalIndexType
>(refElement.subEntity(scvfLocalIdx, dim-1, 1, dim))
306 std::move(localScvIndices));
320 LocalIndexType scvLocalIdx =
element.subEntities(dim);
321 for (
const auto& intersection : intersections(this->
gridView(),
element))
324 const auto& isGeometry = intersection.geometry();
325 const auto numCorners = isGeometry.corners();
326 const auto idxInInside = intersection.indexInInside();
328 std::vector<GridIndexType> isVertexIndices(numCorners);
329 for (
unsigned int vIdxLocal = 0; vIdxLocal < numCorners; ++vIdxLocal)
331 refElement.subEntity(idxInInside, 1, vIdxLocal, dim),
334 if (intersection.boundary() && !intersection.neighbor())
336 numScvf_ += isGeometry.corners();
337 numBoundaryScvf_ += isGeometry.corners();
339 for (
unsigned int isScvfLocalIdx = 0; isScvfLocalIdx < numCorners; ++isScvfLocalIdx)
342 const LocalIndexType insideScvIdx =
static_cast<LocalIndexType
>(refElement.subEntity(idxInInside, 1, isScvfLocalIdx, dim));
343 std::array<LocalIndexType, 2> localScvIndices{{insideScvIdx, insideScvIdx}};
344 cache_.scvfs_[eIdx].emplace_back(geometryHelper,
348 std::move(localScvIndices));
353 const auto numFaceVerts = refElement.size(idxInInside, 1, dim);
354 for (
int localVIdx = 0; localVIdx < numFaceVerts; ++localVIdx)
356 const auto vIdx = refElement.subEntity(idxInInside, 1, localVIdx, dim);
358 boundaryDofIndices_[vIdxGlobal] =
true;
364 else if (intersection.boundary() && intersection.neighbor())
365 DUNE_THROW(Dune::InvalidStateException,
"Periodic boundaries are not supported by the box-dfm scheme");
368 if (fractureGridAdapter.composeFacetElement(isVertexIndices))
370 for (
auto vIdx : isVertexIndices)
371 fractureDofIndices_[vIdx] =
true;
374 numScv_ += numCorners;
375 const auto curNumScvs = cache_.scvs_[eIdx].size();
376 cache_.scvs_[eIdx].reserve(curNumScvs+numCorners);
377 for (
unsigned int vIdxLocal = 0; vIdxLocal < numCorners; ++vIdxLocal)
378 cache_.scvs_[eIdx].emplace_back(geometryHelper,
382 static_cast<LocalIndexType
>(refElement.subEntity(idxInInside, 1, vIdxLocal, dim)),
386 isVertexIndices[vIdxLocal]);
391 const auto& faceRefElement = referenceElement(isGeometry);
392 for (
unsigned int edgeIdx = 0; edgeIdx < faceRefElement.size(1); ++edgeIdx)
395 std::array<LocalIndexType, 2> localScvIndices{{
396 static_cast<LocalIndexType
>(faceRefElement.subEntity(edgeIdx, 1, 0, dim-1)),
397 static_cast<LocalIndexType
>(faceRefElement.subEntity(edgeIdx, 1, 1, dim-1))
401 std::for_each( localScvIndices.begin(),
402 localScvIndices.end(),
403 [curNumScvs] (
auto& elemLocalIdx) { elemLocalIdx += curNumScvs; } );
407 cache_.scvfs_[eIdx].emplace_back(geometryHelper,
411 std::move(localScvIndices),
412 intersection.boundary());
420 std::array<LocalIndexType, 2> localScvIndices{{0, 1}};
423 std::for_each( localScvIndices.begin(),
424 localScvIndices.end(),
425 [curNumScvs] (
auto& elemLocalIdx) { elemLocalIdx += curNumScvs; } );
429 cache_.scvfs_[eIdx].emplace_back(geometryHelper,
433 std::move(localScvIndices),
434 intersection.boundary());
441 const FeCache feCache_;
445 std::size_t numScvf_;
446 std::size_t numBoundaryScvf_;
449 std::vector<bool> boundaryDofIndices_;
450 std::vector<bool> fractureDofIndices_;
462template<
class Scalar,
class GV,
class Traits>
468 using GridIndexType =
typename GV::IndexSet::IndexType;
470 static const int dim = GV::dimension;
471 static const int dimWorld = GV::dimensionworld;
473 using Element =
typename GV::template Codim<0>::Entity;
474 using Intersection =
typename GV::Intersection;
475 using CoordScalar =
typename GV::ctype;
493 using FeCache = Dune::LagrangeLocalFiniteElementCache<CoordScalar, Scalar, dim, 1>;
498 template<
class FractureGr
idAdapter >
504 update_(fractureGridAdapter);
523 {
return numBoundaryScvf_; }
527 {
return this->
gridView().size(dim); }
530 template<
class FractureGr
idAdapter >
534 updateFacetMapper_();
535 update_(fractureGridAdapter);
539 template<
class FractureGr
idAdapter >
543 updateFacetMapper_();
544 update_(fractureGridAdapter);
550 bool dofOnBoundary(
unsigned int dofIdx)
const {
return boundaryDofIndices_[dofIdx]; }
552 bool dofOnFracture(
unsigned int dofIdx)
const {
return fractureDofIndices_[dofIdx]; }
558 {
return facetOnFracture_[facetMapper_.subIndex(
element, intersection.indexInInside(), 1)]; }
561 [[deprecated(
"Will be removed after release 3.11. Use periodicallyMappedDofs, returning a range of dofs")]]
563 { DUNE_THROW(Dune::InvalidStateException,
"Periodic boundaries are not supported by the box-dfm scheme"); }
567 { DUNE_THROW(Dune::InvalidStateException,
"Periodic boundaries are not supported by the box-dfm scheme"); }
571 {
return { gg.cache_ }; }
574 class BoxDfmGridGeometryCache
585 const BoxDfmFVGridGeometry& gridGeometry()
const
586 {
return *gridGeometry_; }
589 const BoxDfmFVGridGeometry* gridGeometry_;
595 using Cache = BoxDfmGridGeometryCache;
599 void updateFacetMapper_()
601 facetMapper_.update(this->
gridView());
604 template<
class FractureGr
idAdapter >
605 void update_(
const FractureGridAdapter& fractureGridAdapter)
607 boundaryDofIndices_.assign(numDofs(),
false);
608 fractureDofIndices_.assign(numDofs(),
false);
609 facetOnFracture_.assign(this->gridView().size(1),
false);
615 numBoundaryScvf_ = 0;
616 for (
const auto& element : elements(this->gridView()))
618 numScv_ += element.subEntities(dim);
619 numScvf_ += element.subEntities(dim-1);
621 const auto elementGeometry = element.geometry();
622 const auto refElement = referenceElement(elementGeometry);
625 for (
const auto& intersection : intersections(this->gridView(), element))
628 const auto& isGeometry = intersection.geometry();
629 const auto numCorners = isGeometry.corners();
630 const auto idxInInside = intersection.indexInInside();
632 std::vector<GridIndexType> isVertexIndices(numCorners);
633 for (
unsigned int vIdxLocal = 0; vIdxLocal < numCorners; ++vIdxLocal)
634 isVertexIndices[vIdxLocal] = this->vertexMapper().subIndex(element,
635 refElement.subEntity(idxInInside, 1, vIdxLocal, dim),
638 if (intersection.boundary() && !intersection.neighbor())
640 numScvf_ += numCorners;
641 numBoundaryScvf_ += numCorners;
645 const auto fIdx = intersection.indexInInside();
646 const auto numFaceVerts = refElement.size(fIdx, 1, dim);
647 for (
int localVIdx = 0; localVIdx < numFaceVerts; ++localVIdx)
649 const auto vIdx = refElement.subEntity(fIdx, 1, localVIdx, dim);
650 const auto vIdxGlobal = this->vertexMapper().subIndex(element, vIdx, dim);
651 boundaryDofIndices_[vIdxGlobal] =
true;
656 else if (intersection.boundary() && intersection.neighbor())
657 DUNE_THROW(Dune::InvalidStateException,
"Periodic boundaries are not supported by the box-dfm scheme");
660 if (fractureGridAdapter.composeFacetElement(isVertexIndices))
662 facetOnFracture_[facetMapper_.subIndex(element, idxInInside, 1)] =
true;
663 for (
auto vIdx : isVertexIndices)
664 fractureDofIndices_[vIdx] =
true;
666 const auto isGeometry = intersection.geometry();
667 numScv_ += isGeometry.corners();
668 numScvf_ += dim == 3 ? referenceElement(isGeometry).size(1) : 1;
674 const FeCache feCache_;
679 std::size_t numScvf_;
680 std::size_t numBoundaryScvf_;
683 std::vector<bool> boundaryDofIndices_;
684 std::vector<bool> fractureDofIndices_;
687 typename Traits::FacetMapper facetMapper_;
688 std::vector<bool> facetOnFracture_;
Base class for grid geometries.
Helper class constructing the dual grid finite volume geometries for the box discretizazion method.
const ElementMapper & elementMapper() const
Returns the mapper for elements to indices for constant grids.
Definition basegridgeometry.hh:112
Element element(GridIndexType eIdx) const
Get an element from a global element index.
Definition basegridgeometry.hh:142
const VertexMapper & vertexMapper() const
Returns the mapper for vertices to indices for constant grids.
Definition basegridgeometry.hh:106
const GridView & gridView() const
Return the gridView this grid geometry object lives on.
Definition basegridgeometry.hh:100
void update(const GridView &gridView)
Update all fvElementGeometries (call this after grid adaption).
Definition basegridgeometry.hh:88
Base class for the finite volume geometry vector for box discrete fracture model.
Definition porousmediumflow/boxdfm/fvelementgeometry.hh:44
Extrusion_t< Traits > Extrusion
Export the extrusion type.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:489
bool dofOnBoundary(unsigned int dofIdx) const
If a vertex / d.o.f. is on the boundary.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:550
bool dofOnPeriodicBoundary(std::size_t dofIdx) const
Periodic boundaries are not supported for the box-dfm scheme.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:554
BoxDfmFVGridGeometry(const GridView gridView, const FractureGridAdapter &fractureGridAdapter)
Constructor.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:499
std::size_t numScv() const
The total number of sub control volumes.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:513
bool isOnFracture(const Element &element, const Intersection &intersection) const
Returns true if an intersection coincides with a fracture element.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:557
std::span< const std::size_t > periodicallyMappedDofs(std::size_t dofIdx) const
The indices of the vertices / d.o.f.s on the other side of the periodic boundary.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:566
std::size_t numDofs() const
The total number of degrees of freedom.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:526
BoxDfmGridGeometryCache Cache
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:595
static constexpr DiscretizationMethod discMethod
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:480
std::size_t numBoundaryScvf() const
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:522
void update(const GridView &gridView, const FractureGridAdapter &fractureGridAdapter)
update all fvElementGeometries (call this after grid adaption)
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:531
GV GridView
export the grid view type
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:495
typename Traits::VertexMapper DofMapper
export dof mapper type
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:491
typename Traits::template LocalView< ThisType, false > LocalView
export the type of the fv element geometry (the local view type)
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:483
std::size_t numScvf() const
The total number of sun control volume faces.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:517
Dune::LagrangeLocalFiniteElementCache< CoordScalar, Scalar, dim, 1 > FeCache
export the finite element cache type
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:493
friend LocalView localView(const BoxDfmFVGridGeometry &gg)
local view of this object (constructed with the internal cache)
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:570
const FeCache & feCache() const
The finite element cache for creating local FE bases.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:548
const DofMapper & dofMapper() const
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:509
typename Traits::SubControlVolumeFace SubControlVolumeFace
export the type of sub control volume
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:487
DiscretizationMethods::Box DiscretizationMethod
export the discretization method this geometry belongs to
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:479
typename Traits::SubControlVolume SubControlVolume
export the type of sub control volume
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:485
bool dofOnFracture(unsigned int dofIdx) const
If a vertex / d.o.f. is on a fracture.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:552
void update(GridView &&gridView, const FractureGridAdapter &fractureGridAdapter)
update all fvElementGeometries (call this after grid adaption)
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:540
std::size_t periodicallyMappedDof(std::size_t dofIdx) const
The index of the vertex / d.o.f. on the other side of the periodic boundary.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:562
typename Traits::SubControlVolume SubControlVolume
Export the type of sub control volume.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:121
Dune::LagrangeLocalFiniteElementCache< CoordScalar, Scalar, dim, 1 > FeCache
Export the finite element cache type.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:129
std::span< const std::size_t > periodicallyMappedDofs(std::size_t dofIdx) const
The indices of the vertices / d.o.f.s on the other side of the periodic boundary.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:195
std::size_t numDofs() const
The total number of degrees of freedom.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:161
typename Traits::VertexMapper DofMapper
Export dof mapper type.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:127
BoxDfmFVGridGeometry(const GridView gridView, const FractureGridAdapter &fractureGridAdapter)
Constructor.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:135
BoxDfmGridGeometryCache Cache
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:243
friend LocalView localView(const BoxDfmFVGridGeometry &gg)
local view of this object (constructed with the internal cache)
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:199
GV GridView
Export the grid view type.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:131
void update(GridView &&gridView, const FractureGridAdapter &fractureGridAdapter)
update all fvElementGeometries (call this after grid adaption)
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:174
Extrusion_t< Traits > Extrusion
Export the extrusion type.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:125
typename Traits::template LocalView< ThisType, true > LocalView
Export the type of the fv element geometry (the local view type).
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:119
const DofMapper & dofMapper() const
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:144
std::size_t numScvf() const
The total number of sun control volume faces.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:152
std::size_t numScv() const
The total number of sub control volumes.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:148
std::size_t periodicallyMappedDof(std::size_t dofIdx) const
The index of the vertex / d.o.f. on the other side of the periodic boundary.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:191
DiscretizationMethods::Box DiscretizationMethod
export the discretization method this geometry belongs to
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:115
std::size_t numBoundaryScvf() const
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:157
static constexpr DiscretizationMethod discMethod
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:116
bool dofOnBoundary(unsigned int dofIdx) const
If a vertex / d.o.f. is on the boundary.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:183
const FeCache & feCache() const
The finite element cache for creating local FE bases.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:181
void update(const GridView &gridView, const FractureGridAdapter &fractureGridAdapter)
update all fvElementGeometries (call this after grid adaption)
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:166
typename Traits::SubControlVolumeFace SubControlVolumeFace
Export the type of sub control volume.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:123
bool dofOnPeriodicBoundary(std::size_t dofIdx) const
Periodic boundaries are not supported for the box-dfm scheme.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:187
bool dofOnFracture(unsigned int dofIdx) const
If a vertex / d.o.f. is on a fracture.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:185
Base class for the finite volume geometry vector for box schemes.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:86
Create sub control volumes and sub control volume face geometries.
Definition porousmediumflow/boxdfm/geometryhelper.hh:47
Class for a sub control volume face in the box discrete fracture method, i.e a part of the boundary o...
Definition porousmediumflow/boxdfm/subcontrolvolumeface.hh:63
the sub control volume for the box discrete fracture scheme
Definition porousmediumflow/boxdfm/subcontrolvolume.hh:62
Defines the default element and vertex mapper types.
Helper classes to compute the integration elements.
BaseGridGeometry(std::shared_ptr< BaseImplementation > impl)
Constructor from a BaseImplementation.
Definition basegridgeometry.hh:72
The available discretization methods in Dumux.
Definition cvfelocalresidual.hh:25
Dune::Std::detected_or_t< Dumux::BoxDfmGeometryHelper< GV, GV::dimension, typename T::SubControlVolume, typename T::SubControlVolumeFace >, SpecifiesGeometryHelper, T > BoxDfmGeometryHelper_t
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:45
typename T::GeometryHelper SpecifiesGeometryHelper
Definition basegridgeometry.hh:30
CVFE< CVFEMethods::PQ1 > Box
Definition method.hh:102
std::ranges::range auto scvs(const FVElementGeometry &fvGeometry, const LocalDof &localDof)
Definition localdof.hh:82
typename Extrusion< T >::type Extrusion_t
Convenience alias for obtaining the extrusion type.
Definition extrusion.hh:257
Definition common/pdesolver.hh:24
Base class for the local finite volume geometry for the box discrete fracture model.
Helper class constructing the dual grid finite volume geometries for the box discrete fracture model.
the sub control volume for the box discrete fracture scheme
The sub control volume face class for the box discrete fracture model.
The default traits for the box finite volume grid geometry.
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:63
BoxDfmSubControlVolume< GridView > SubControlVolume
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:64
BoxDfmSubControlVolumeFace< GridView > SubControlVolumeFace
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:65
Dune::MultipleCodimMultipleGeomTypeMapper< GridView > FacetMapper
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:71
BoxDfmFVElementGeometry< GridGeometry, enableCache > LocalView
Definition porousmediumflow/boxdfm/fvgridgeometry.hh:68
typename GridView::IndexSet::IndexType GridIndex
Definition indextraits.hh:27
unsigned int LocalIndex
Definition indextraits.hh:28