14#ifndef DUMUX_DISCRETIZATION_BOX_GRID_FVGEOMETRY_HH
15#define DUMUX_DISCRETIZATION_BOX_GRID_FVGEOMETRY_HH
18#include <unordered_map>
23#include <dune/localfunctions/lagrange/lagrangelfecache.hh>
41template<
class GV,
class T>
53template<
class Gr
idView,
class ScvRule = Dumux::QuadratureRules::M
idpo
intQuadrature,
class ScvfRule = Dumux::QuadratureRules::M
idpo
intQuadrature>
62template<
class Gr
idView,
class MapperTraits = DefaultMapperTraits<Gr
idView>,
class QuadratureTraits = BoxQuadratureTraits<Gr
idView>>
64:
public MapperTraits,
public QuadratureTraits
69 template<
class Gr
idGeometry,
bool enableCache>
81 bool enableGridGeometryCache =
false,
91template<
class Scalar,
class GV,
class Traits>
100 using Element =
typename GV::template Codim<0>::Entity;
101 using CoordScalar =
typename GV::ctype;
102 static const int dim = GV::dimension;
103 static const int dimWorld = GV::dimensionworld;
125 using FeCache = Dune::LagrangeLocalFiniteElementCache<CoordScalar, Scalar, dim, 1>;
137 : ParentType(std::move(gg))
139 , periodicGridTraits_(this->
gridView().grid())
165 {
return numBoundaryScvf_; }
192 {
return boundaryDofIndices_[dofIdx]; }
196 {
return periodicDofMap_.count(dofIdx); }
200 {
return periodicDofMap_.at(dofIdx); }
204 {
return periodicDofMap_; }
208 {
return { gg.cache_ }; }
212 class BoxGridGeometryCache
218 using DofHelper =
typename GeometryHelper::DofHelper;
224 const BoxFVGridGeometry& gridGeometry()
const
225 {
return *gridGeometry_; }
228 const std::vector<SubControlVolume>&
scvs(GridIndexType eIdx)
const
229 {
return scvs_[eIdx]; }
232 const std::vector<SubControlVolumeFace>& scvfs(GridIndexType eIdx)
const
233 {
return scvfs_[eIdx]; }
236 bool hasBoundaryScvf(GridIndexType eIdx)
const
237 {
return hasBoundaryScvf_[eIdx]; }
240 const std::vector<std::array<LocalIndexType, 2>>& scvfBoundaryGeometryKeys(GridIndexType eIdx)
const
241 {
return scvfBoundaryGeometryKeys_.at(eIdx); }
244 auto boundaryFaces(GridIndexType eIdx)
const -> std::span<const BoundaryFace>
246 if (
auto it = boundaryFaces_.find(eIdx); it != boundaryFaces_.end())
252 const auto& boundaryFaceScvfRanges(GridIndexType eIdx)
const
253 {
return boundaryFaceScvfRanges_.at(eIdx); }
260 hasBoundaryScvf_.clear();
261 scvfBoundaryGeometryKeys_.clear();
262 boundaryFaces_.clear();
263 boundaryFaceScvfRanges_.clear();
266 std::vector<std::vector<SubControlVolume>> scvs_;
267 std::vector<std::vector<SubControlVolumeFace>> scvfs_;
268 std::vector<bool> hasBoundaryScvf_;
269 std::unordered_map<GridIndexType, std::vector<std::array<LocalIndexType, 2>>> scvfBoundaryGeometryKeys_;
270 std::unordered_map<GridIndexType, Dune::ReservedVector<typename BoxFVGridGeometry::BoundaryFace, 2*dim>> boundaryFaces_;
271 std::unordered_map<GridIndexType, Dune::ReservedVector<std::array<LocalIndexType, 2>, 2*dim>> boundaryFaceScvfRanges_;
273 const BoxFVGridGeometry* gridGeometry_;
282 using GeometryHelper =
typename Cache::GeometryHelper;
288 const auto numElements = this->
gridView().size(0);
289 cache_.scvs_.resize(numElements);
290 cache_.scvfs_.resize(numElements);
291 cache_.hasBoundaryScvf_.resize(numElements,
false);
293 boundaryDofIndices_.assign(
numDofs(),
false);
297 numBoundaryScvf_ = 0;
305 numScv_ +=
element.subEntities(dim);
306 numScvf_ +=
element.subEntities(dim-1);
309 auto elementGeometry =
element.geometry();
310 const auto refElement = referenceElement(elementGeometry);
313 GeometryHelper geometryHelper(elementGeometry);
316 cache_.scvs_[eIdx].resize(elementGeometry.corners());
317 for (LocalIndexType scvLocalIdx = 0; scvLocalIdx < elementGeometry.corners(); ++scvLocalIdx)
322 geometryHelper.getScvCorners(scvLocalIdx),
330 LocalIndexType scvfLocalIdx = 0;
331 cache_.scvfs_[eIdx].resize(
element.subEntities(dim-1));
332 for (; scvfLocalIdx <
element.subEntities(dim-1); ++scvfLocalIdx)
335 std::array<LocalIndexType, 2> localScvIndices{{
336 static_cast<LocalIndexType
>(refElement.subEntity(scvfLocalIdx, dim-1, 0, dim)),
337 static_cast<LocalIndexType
>(refElement.subEntity(scvfLocalIdx, dim-1, 1, dim))
340 const auto& corners = geometryHelper.getScvfCorners(scvfLocalIdx);
343 geometryHelper.normal(corners, localScvIndices),
346 std::move(localScvIndices)
351 LocalIndexType numBoundaryFaces = 0;
352 for (
const auto& intersection : intersections(this->
gridView(),
element))
354 if (intersection.boundary() && !intersection.neighbor())
356 const auto isGeometry = intersection.geometry();
357 cache_.hasBoundaryScvf_[eIdx] =
true;
363 intersection.centerUnitOuterNormal(),
365 static_cast<LocalIndexType
>(intersection.indexInInside()),
366 typename BoundaryFace::Traits::BoundaryFlag{intersection}
370 numScvf_ += isGeometry.corners();
371 numBoundaryScvf_ += isGeometry.corners();
374 cache_.boundaryFaceScvfRanges_[eIdx].push_back(std::array<LocalIndexType, 2>{{
376 static_cast<LocalIndexType
>(isGeometry.corners())
379 for (
unsigned int isScvfLocalIdx = 0; isScvfLocalIdx < isGeometry.corners(); ++isScvfLocalIdx)
382 const LocalIndexType insideScvIdx =
static_cast<LocalIndexType
>(refElement.subEntity(intersection.indexInInside(), 1, isScvfLocalIdx, dim));
383 std::array<LocalIndexType, 2> localScvIndices{{insideScvIdx, insideScvIdx}};
385 cache_.scvfs_[eIdx].emplace_back(
386 geometryHelper.getBoundaryScvfCorners(intersection.indexInInside(), isScvfLocalIdx),
387 intersection.centerUnitOuterNormal(),
391 std::move(localScvIndices)
394 cache_.scvfBoundaryGeometryKeys_[eIdx].emplace_back(std::array<LocalIndexType, 2>{{
395 static_cast<LocalIndexType
>(intersection.indexInInside()),
396 static_cast<LocalIndexType
>(isScvfLocalIdx)
405 const auto fIdx = intersection.indexInInside();
406 const auto numFaceVerts = refElement.size(fIdx, 1, dim);
407 for (
int localVIdx = 0; localVIdx < numFaceVerts; ++localVIdx)
409 const auto vIdx = refElement.subEntity(fIdx, 1, localVIdx, dim);
411 boundaryDofIndices_[vIdxGlobal] =
true;
416 else if (periodicGridTraits_.isPeriodic(intersection))
421 const auto fIdx = intersection.indexInInside();
422 const auto numFaceVerts = refElement.size(fIdx, 1, dim);
423 const auto eps = 1e-7*(elementGeometry.corner(1) - elementGeometry.corner(0)).two_norm();
424 for (
int localVIdx = 0; localVIdx < numFaceVerts; ++localVIdx)
426 const auto vIdx = refElement.subEntity(fIdx, 1, localVIdx, dim);
428 const auto vPos = elementGeometry.corner(vIdx);
430 const auto& outside = intersection.outside();
431 const auto outsideGeometry = outside.geometry();
432 for (
const auto& isOutside : intersections(this->
gridView(), outside))
435 if (periodicGridTraits_.isPeriodic(isOutside))
437 const auto fIdxOutside = isOutside.indexInInside();
438 const auto numFaceVertsOutside = refElement.size(fIdxOutside, 1, dim);
439 for (
int localVIdxOutside = 0; localVIdxOutside < numFaceVertsOutside; ++localVIdxOutside)
441 const auto vIdxOutside = refElement.subEntity(fIdxOutside, 1, localVIdxOutside, dim);
442 const auto vPosOutside = outsideGeometry.corner(vIdxOutside);
443 const auto shift = std::abs((this->
bBoxMax()-this->
bBoxMin())*intersection.centerUnitOuterNormal());
444 if (std::abs((vPosOutside-vPos).two_norm() - shift) < eps)
445 periodicDofMap_[vIdxGlobal] = this->
vertexMapper().subIndex(outside, vIdxOutside, dim);
456 DUNE_THROW(Dune::NotImplemented,
"Periodic boundaries for box method for parallel simulations!");
459 const FeCache feCache_;
462 std::size_t numScvf_;
463 std::size_t numBoundaryScvf_;
466 std::vector<bool> boundaryDofIndices_;
469 std::unordered_map<GridIndexType, GridIndexType> periodicDofMap_;
483template<
class Scalar,
class GV,
class Traits>
491 static const int dim = GV::dimension;
492 static const int dimWorld = GV::dimensionworld;
494 using Element =
typename GV::template Codim<0>::Entity;
495 using CoordScalar =
typename GV::ctype;
517 using FeCache = Dune::LagrangeLocalFiniteElementCache<CoordScalar, Scalar, dim, 1>;
529 : ParentType(std::move(gg))
531 , periodicGridTraits_(this->
gridView().grid())
557 {
return numBoundaryScvf_; }
584 {
return boundaryDofIndices_[dofIdx]; }
588 {
return periodicDofMap_.count(dofIdx); }
592 {
return periodicDofMap_.at(dofIdx); }
596 {
return periodicDofMap_; }
600 {
return { gg.cache_ }; }
604 class BoxGridGeometryCache
610 using DofHelper =
typename GeometryHelper::DofHelper;
616 const BoxFVGridGeometry& gridGeometry()
const
617 {
return *gridGeometry_; }
620 const BoxFVGridGeometry* gridGeometry_;
632 boundaryDofIndices_.assign(
numDofs(),
false);
638 numBoundaryScvf_ = 0;
641 numScv_ +=
element.subEntities(dim);
642 numScvf_ +=
element.subEntities(dim-1);
644 const auto elementGeometry =
element.geometry();
645 const auto refElement = referenceElement(elementGeometry);
648 for (
const auto& intersection : intersections(this->
gridView(),
element))
650 if (intersection.boundary() && !intersection.neighbor())
652 const auto isGeometry = intersection.geometry();
653 numScvf_ += isGeometry.corners();
654 numBoundaryScvf_ += isGeometry.corners();
658 const auto fIdx = intersection.indexInInside();
659 const auto numFaceVerts = refElement.size(fIdx, 1, dim);
660 for (
int localVIdx = 0; localVIdx < numFaceVerts; ++localVIdx)
662 const auto vIdx = refElement.subEntity(fIdx, 1, localVIdx, dim);
664 boundaryDofIndices_[vIdxGlobal] =
true;
669 else if (periodicGridTraits_.isPeriodic(intersection))
674 const auto fIdx = intersection.indexInInside();
675 const auto numFaceVerts = refElement.size(fIdx, 1, dim);
676 const auto eps = 1e-7*(elementGeometry.corner(1) - elementGeometry.corner(0)).two_norm();
677 for (
int localVIdx = 0; localVIdx < numFaceVerts; ++localVIdx)
679 const auto vIdx = refElement.subEntity(fIdx, 1, localVIdx, dim);
681 const auto vPos = elementGeometry.corner(vIdx);
683 const auto& outside = intersection.outside();
684 const auto outsideGeometry = outside.geometry();
685 for (
const auto& isOutside : intersections(this->
gridView(), outside))
688 if (periodicGridTraits_.isPeriodic(isOutside))
690 const auto fIdxOutside = isOutside.indexInInside();
691 const auto numFaceVertsOutside = refElement.size(fIdxOutside, 1, dim);
692 for (
int localVIdxOutside = 0; localVIdxOutside < numFaceVertsOutside; ++localVIdxOutside)
694 const auto vIdxOutside = refElement.subEntity(fIdxOutside, 1, localVIdxOutside, dim);
695 const auto vPosOutside = outsideGeometry.corner(vIdxOutside);
696 const auto shift = std::abs((this->
bBoxMax()-this->
bBoxMin())*intersection.centerUnitOuterNormal());
697 if (std::abs((vPosOutside-vPos).two_norm() - shift) < eps)
698 periodicDofMap_[vIdxGlobal] = this->
vertexMapper().subIndex(outside, vIdxOutside, dim);
709 DUNE_THROW(Dune::NotImplemented,
"Periodic boundaries for box method for parallel simulations!");
712 const FeCache feCache_;
717 std::size_t numScvf_;
718 std::size_t numBoundaryScvf_;
721 std::vector<bool> boundaryDofIndices_;
724 std::unordered_map<GridIndexType, GridIndexType> periodicDofMap_;
Base class for grid geometries.
Implementation of a boundary face related to primary grid elements (dune intersections).
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
void setPeriodic(bool value=true)
Set the periodicity of the grid geometry.
Definition basegridgeometry.hh:169
const GlobalCoordinate & bBoxMax() const
The coordinate of the corner of the GridView's bounding box with the largest values.
Definition basegridgeometry.hh:156
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
const GlobalCoordinate & bBoxMin() const
The coordinate of the corner of the GridView's bounding box with the smallest values.
Definition basegridgeometry.hh:149
bool isPeriodic() const
Returns if the grid geometry is periodic (at all).
Definition basegridgeometry.hh:162
Base class for the finite volume geometry vector for box models This builds up the sub control volume...
Definition discretization/box/fvelementgeometry.hh:46
std::size_t numBoundaryScvf() const
Definition discretization/box/fvgridgeometry.hh:556
friend LocalView localView(const BoxFVGridGeometry &gg)
local view of this object (constructed with the internal cache)
Definition discretization/box/fvgridgeometry.hh:599
bool dofOnPeriodicBoundary(GridIndexType dofIdx) const
If a vertex / d.o.f. is on a periodic boundary.
Definition discretization/box/fvgridgeometry.hh:587
GV GridView
export the grid view type
Definition discretization/box/fvgridgeometry.hh:519
typename Traits::template LocalView< ThisType, false > LocalView
export the type of the fv element geometry (the local view type)
Definition discretization/box/fvgridgeometry.hh:505
typename Traits::SubControlVolumeFace SubControlVolumeFace
export the type of sub control volume
Definition discretization/box/fvgridgeometry.hh:509
BoxFVGridGeometry(const GridView &gridView)
Constructor.
Definition discretization/box/fvgridgeometry.hh:537
static constexpr DiscretizationMethod discMethod
Definition discretization/box/fvgridgeometry.hh:500
typename Traits::SubControlVolume SubControlVolume
export the type of sub control volume
Definition discretization/box/fvgridgeometry.hh:507
Experimental::BoundaryFace< GV > BoundaryFace
export the boundary face type
Definition discretization/box/fvgridgeometry.hh:511
typename Traits::ScvQuadratureRule ScvQuadratureRule
export the scv interpolation point data type
Definition discretization/box/fvgridgeometry.hh:523
GridIndexType periodicallyMappedDof(GridIndexType dofIdx) const
The index of the vertex / d.o.f. on the other side of the periodic boundary.
Definition discretization/box/fvgridgeometry.hh:591
const FeCache & feCache() const
The finite element cache for creating local FE bases.
Definition discretization/box/fvgridgeometry.hh:579
BoxGridGeometryCache Cache
Definition discretization/box/fvgridgeometry.hh:626
std::size_t numScvf() const
The total number of sun control volume faces.
Definition discretization/box/fvgridgeometry.hh:551
typename Traits::VertexMapper DofMapper
export dof mapper type
Definition discretization/box/fvgridgeometry.hh:515
BasicGridGeometry_t< GV, Traits > BasicGridGeometry
export basic grid geometry type for the alternative constructor
Definition discretization/box/fvgridgeometry.hh:503
bool dofOnBoundary(GridIndexType dofIdx) const
If a vertex / d.o.f. is on the boundary.
Definition discretization/box/fvgridgeometry.hh:583
typename Traits::ScvfQuadratureRule ScvfQuadratureRule
the quadrature rule type for scvfs
Definition discretization/box/fvgridgeometry.hh:525
const DofMapper & dofMapper() const
Definition discretization/box/fvgridgeometry.hh:543
DiscretizationMethods::Box DiscretizationMethod
export the discretization method this geometry belongs to
Definition discretization/box/fvgridgeometry.hh:499
typename PeriodicGridTraits< typename GV::Grid >::SupportsPeriodicity SupportsPeriodicity
export whether the grid(geometry) supports periodicity
Definition discretization/box/fvgridgeometry.hh:521
void update(GridView &&gridView)
update all fvElementGeometries (call this after grid adaption)
Definition discretization/box/fvgridgeometry.hh:572
Extrusion_t< Traits > Extrusion
export the type of extrusion
Definition discretization/box/fvgridgeometry.hh:513
std::size_t numDofs() const
The total number of degrees of freedom.
Definition discretization/box/fvgridgeometry.hh:560
BoxFVGridGeometry(std::shared_ptr< BasicGridGeometry > gg)
Constructor with basic grid geometry used to share state with another grid geometry on the same grid ...
Definition discretization/box/fvgridgeometry.hh:528
std::size_t numScv() const
The total number of sub control volumes.
Definition discretization/box/fvgridgeometry.hh:547
void update(const GridView &gridView)
update all fvElementGeometries (call this after grid adaption)
Definition discretization/box/fvgridgeometry.hh:565
Dune::LagrangeLocalFiniteElementCache< CoordScalar, Scalar, dim, 1 > FeCache
export the finite element cache type
Definition discretization/box/fvgridgeometry.hh:517
const std::unordered_map< GridIndexType, GridIndexType > & periodicDofMap() const
Returns the map between dofs across periodic boundaries.
Definition discretization/box/fvgridgeometry.hh:595
GV GridView
export the grid view type
Definition discretization/box/fvgridgeometry.hh:127
Experimental::BoundaryFace< GV > BoundaryFace
export the boundary face type
Definition discretization/box/fvgridgeometry.hh:119
friend LocalView localView(const BoxFVGridGeometry &gg)
local view of this object (constructed with the internal cache)
Definition discretization/box/fvgridgeometry.hh:207
BoxGridGeometryCache Cache
Definition discretization/box/fvgridgeometry.hh:279
void update(const GridView &gridView)
update all fvElementGeometries (call this after grid adaption)
Definition discretization/box/fvgridgeometry.hh:173
GridIndexType periodicallyMappedDof(GridIndexType dofIdx) const
The index of the vertex / d.o.f. on the other side of the periodic boundary.
Definition discretization/box/fvgridgeometry.hh:199
std::size_t numDofs() const
The total number of degrees of freedom.
Definition discretization/box/fvgridgeometry.hh:168
std::size_t numScv() const
The total number of sub control volumes.
Definition discretization/box/fvgridgeometry.hh:155
BasicGridGeometry_t< GV, Traits > BasicGridGeometry
export basic grid geometry type for the alternative constructor
Definition discretization/box/fvgridgeometry.hh:111
typename Traits::ScvQuadratureRule ScvQuadratureRule
export the scv interpolation point data type
Definition discretization/box/fvgridgeometry.hh:131
const FeCache & feCache() const
The finite element cache for creating local FE bases.
Definition discretization/box/fvgridgeometry.hh:187
std::size_t numBoundaryScvf() const
Definition discretization/box/fvgridgeometry.hh:164
DiscretizationMethods::Box DiscretizationMethod
export the discretization method this geometry belongs to
Definition discretization/box/fvgridgeometry.hh:107
typename Traits::ScvfQuadratureRule ScvfQuadratureRule
the quadrature rule type for scvfs
Definition discretization/box/fvgridgeometry.hh:133
static constexpr DiscretizationMethod discMethod
Definition discretization/box/fvgridgeometry.hh:108
Dune::LagrangeLocalFiniteElementCache< CoordScalar, Scalar, dim, 1 > FeCache
export the finite element cache type
Definition discretization/box/fvgridgeometry.hh:125
typename Traits::SubControlVolumeFace SubControlVolumeFace
export the type of sub control volume
Definition discretization/box/fvgridgeometry.hh:117
const DofMapper & dofMapper() const
Definition discretization/box/fvgridgeometry.hh:151
const std::unordered_map< GridIndexType, GridIndexType > & periodicDofMap() const
Returns the map between dofs across periodic boundaries.
Definition discretization/box/fvgridgeometry.hh:203
BoxFVGridGeometry(const GridView &gridView)
Constructor.
Definition discretization/box/fvgridgeometry.hh:145
BoxFVGridGeometry(std::shared_ptr< BasicGridGeometry > gg)
Constructor with basic grid geometry used to share state with another grid geometry on the same grid ...
Definition discretization/box/fvgridgeometry.hh:136
Extrusion_t< Traits > Extrusion
export the type of extrusion
Definition discretization/box/fvgridgeometry.hh:121
typename PeriodicGridTraits< typename GV::Grid >::SupportsPeriodicity SupportsPeriodicity
export whether the grid(geometry) supports periodicity
Definition discretization/box/fvgridgeometry.hh:129
typename Traits::template LocalView< ThisType, true > LocalView
export the type of the fv element geometry (the local view type)
Definition discretization/box/fvgridgeometry.hh:113
bool dofOnBoundary(GridIndexType dofIdx) const
If a vertex / d.o.f. is on the boundary.
Definition discretization/box/fvgridgeometry.hh:191
std::size_t numScvf() const
The total number of sun control volume faces.
Definition discretization/box/fvgridgeometry.hh:159
bool dofOnPeriodicBoundary(GridIndexType dofIdx) const
If a vertex / d.o.f. is on a periodic boundary.
Definition discretization/box/fvgridgeometry.hh:195
void update(GridView &&gridView)
update all fvElementGeometries (call this after grid adaption)
Definition discretization/box/fvgridgeometry.hh:180
typename Traits::SubControlVolume SubControlVolume
export the type of sub control volume
Definition discretization/box/fvgridgeometry.hh:115
typename Traits::VertexMapper DofMapper
export dof mapper type
Definition discretization/box/fvgridgeometry.hh:123
Base class for the finite volume geometry vector for box schemes This builds up the sub control volum...
Definition discretization/box/fvgridgeometry.hh:83
Create sub control volumes and sub control volume face geometries.
Definition boxgeometryhelper.hh:261
Class for a sub control volume face in the box method, i.e a part of the boundary of a sub control vo...
Definition discretization/box/subcontrolvolumeface.hh:60
the sub control volume for the box scheme
Definition discretization/box/subcontrolvolume.hh:58
Class for a boundary face related to primary grid elements (dune intersections).
Definition boundaryface.hh:69
Defines the default element and vertex mapper types.
Base class for the local finite volume geometry for box models This builds up the sub control volumes...
the sub control volume for the box scheme
Base class for a sub control volume face.
Helper classes to compute the integration elements.
CVFE::DefaultQuadratureTraits< GridView, ScvRule, ScvfRule > BoxQuadratureTraits
Quadrature rule traits for Box discretization.
Definition discretization/box/fvgridgeometry.hh:54
Dune::Std::detected_or_t< Dumux::BasicGridGeometry< GV, typename T::ElementMapper, typename T::VertexMapper >, Detail::SpecifiesBaseGridGeometry, T > BasicGridGeometry_t
Type of the basic grid geometry implementation used as backend.
Definition basegridgeometry.hh:38
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::BoxGeometryHelper< GV, GV::dimension, typename T::SubControlVolume, typename T::SubControlVolumeFace >, SpecifiesGeometryHelper, T > BoxGeometryHelper_t
Definition discretization/box/fvgridgeometry.hh:42
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
Grid properties related to periodicity.
The default traits for the box finite volume grid geometry Defines the scv and scvf types and the map...
Definition discretization/box/fvgridgeometry.hh:65
BoxFVElementGeometry< GridGeometry, enableCache > LocalView
Definition discretization/box/fvgridgeometry.hh:70
BoxSubControlVolume< GridView > SubControlVolume
Definition discretization/box/fvgridgeometry.hh:66
BoxSubControlVolumeFace< GridView > SubControlVolumeFace
Definition discretization/box/fvgridgeometry.hh:67
Quadrature rule traits for discretization schemes.
Definition quadraturerules.hh:85
typename GridView::IndexSet::IndexType GridIndex
Definition indextraits.hh:27
unsigned int LocalIndex
Definition indextraits.hh:28
Definition periodicgridtraits.hh:24
Definition periodicgridtraits.hh:23