14#ifndef DUMUX_DISCRETIZATION_BOX_GRID_FVGEOMETRY_HH
15#define DUMUX_DISCRETIZATION_BOX_GRID_FVGEOMETRY_HH
19#include <unordered_map>
24#include <dune/localfunctions/lagrange/lagrangelfecache.hh>
43template<
class GV,
class T>
55template<
class Gr
idView,
class ScvRule = Dumux::QuadratureRules::M
idpo
intQuadrature,
class ScvfRule = Dumux::QuadratureRules::M
idpo
intQuadrature>
64template<
class Gr
idView,
class MapperTraits = DefaultMapperTraits<Gr
idView>,
class QuadratureTraits = BoxQuadratureTraits<Gr
idView>>
66:
public MapperTraits,
public QuadratureTraits
71 template<
class Gr
idGeometry,
bool enableCache>
83 bool enableGridGeometryCache =
false,
93template<
class Scalar,
class GV,
class Traits>
102 using Element =
typename GV::template Codim<0>::Entity;
103 using CoordScalar =
typename GV::ctype;
104 static const int dim = GV::dimension;
105 static const int dimWorld = GV::dimensionworld;
127 using FeCache = Dune::LagrangeLocalFiniteElementCache<CoordScalar, Scalar, dim, 1>;
139 : ParentType(std::move(gg))
141 , periodicGridTraits_(this->
gridView().grid())
167 {
return numBoundaryScvf_; }
194 {
return boundaryDofIndices_[dofIdx]; }
198 {
return periodicDofMap_.count(dofIdx); }
201 [[deprecated(
"Will be removed after release 3.11. Use periodicallyMappedDofs, returning a range of dofs")]]
203 {
return periodicDofMap_.at(dofIdx)[0]; }
207 {
return std::views::all(periodicDofMap_.at(dofIdx)); }
210 const std::unordered_map<GridIndexType, std::vector<GridIndexType>>&
periodicDofMap()
const
211 {
return periodicDofMap_; }
215 {
return { gg.cache_ }; }
219 class BoxGridGeometryCache
225 using DofHelper =
typename GeometryHelper::DofHelper;
231 const BoxFVGridGeometry& gridGeometry()
const
232 {
return *gridGeometry_; }
235 const std::vector<SubControlVolume>&
scvs(GridIndexType eIdx)
const
236 {
return scvs_[eIdx]; }
239 const std::vector<SubControlVolumeFace>& scvfs(GridIndexType eIdx)
const
240 {
return scvfs_[eIdx]; }
243 bool hasBoundaryScvf(GridIndexType eIdx)
const
244 {
return hasBoundaryScvf_[eIdx]; }
247 const std::vector<std::array<LocalIndexType, 2>>& scvfBoundaryGeometryKeys(GridIndexType eIdx)
const
248 {
return scvfBoundaryGeometryKeys_.at(eIdx); }
251 auto boundaryFaces(GridIndexType eIdx)
const -> std::span<const BoundaryFace>
253 if (
auto it = boundaryFaces_.find(eIdx); it != boundaryFaces_.end())
259 const auto& boundaryFaceScvfRanges(GridIndexType eIdx)
const
260 {
return boundaryFaceScvfRanges_.at(eIdx); }
267 hasBoundaryScvf_.clear();
268 scvfBoundaryGeometryKeys_.clear();
269 boundaryFaces_.clear();
270 boundaryFaceScvfRanges_.clear();
273 std::vector<std::vector<SubControlVolume>> scvs_;
274 std::vector<std::vector<SubControlVolumeFace>> scvfs_;
275 std::vector<bool> hasBoundaryScvf_;
276 std::unordered_map<GridIndexType, std::vector<std::array<LocalIndexType, 2>>> scvfBoundaryGeometryKeys_;
277 std::unordered_map<GridIndexType, Dune::ReservedVector<typename BoxFVGridGeometry::BoundaryFace, 2*dim>> boundaryFaces_;
278 std::unordered_map<GridIndexType, Dune::ReservedVector<std::array<LocalIndexType, 2>, 2*dim>> boundaryFaceScvfRanges_;
280 const BoxFVGridGeometry* gridGeometry_;
289 using GeometryHelper =
typename Cache::GeometryHelper;
295 const auto numElements = this->
gridView().size(0);
296 cache_.scvs_.resize(numElements);
297 cache_.scvfs_.resize(numElements);
298 cache_.hasBoundaryScvf_.resize(numElements,
false);
300 boundaryDofIndices_.assign(
numDofs(),
false);
301 periodicDofMap_.clear();
305 numBoundaryScvf_ = 0;
313 numScv_ +=
element.subEntities(dim);
314 numScvf_ +=
element.subEntities(dim-1);
317 auto elementGeometry =
element.geometry();
318 const auto refElement = referenceElement(elementGeometry);
321 GeometryHelper geometryHelper(elementGeometry);
324 cache_.scvs_[eIdx].resize(elementGeometry.corners());
325 for (LocalIndexType scvLocalIdx = 0; scvLocalIdx < elementGeometry.corners(); ++scvLocalIdx)
330 geometryHelper.getScvCorners(scvLocalIdx),
338 LocalIndexType scvfLocalIdx = 0;
339 cache_.scvfs_[eIdx].resize(
element.subEntities(dim-1));
340 for (; scvfLocalIdx <
element.subEntities(dim-1); ++scvfLocalIdx)
343 std::array<LocalIndexType, 2> localScvIndices{{
344 static_cast<LocalIndexType
>(refElement.subEntity(scvfLocalIdx, dim-1, 0, dim)),
345 static_cast<LocalIndexType
>(refElement.subEntity(scvfLocalIdx, dim-1, 1, dim))
348 const auto& corners = geometryHelper.getScvfCorners(scvfLocalIdx);
351 geometryHelper.normal(corners, localScvIndices),
354 std::move(localScvIndices)
359 LocalIndexType numBoundaryFaces = 0;
360 for (
const auto& intersection : intersections(this->
gridView(),
element))
362 if (intersection.boundary() && !intersection.neighbor())
364 const auto isGeometry = intersection.geometry();
365 cache_.hasBoundaryScvf_[eIdx] =
true;
371 intersection.centerUnitOuterNormal(),
373 static_cast<LocalIndexType
>(intersection.indexInInside()),
374 typename BoundaryFace::Traits::BoundaryFlag{intersection}
378 numScvf_ += isGeometry.corners();
379 numBoundaryScvf_ += isGeometry.corners();
382 cache_.boundaryFaceScvfRanges_[eIdx].push_back(std::array<LocalIndexType, 2>{{
384 static_cast<LocalIndexType
>(isGeometry.corners())
387 for (
unsigned int isScvfLocalIdx = 0; isScvfLocalIdx < isGeometry.corners(); ++isScvfLocalIdx)
390 const LocalIndexType insideScvIdx =
static_cast<LocalIndexType
>(refElement.subEntity(intersection.indexInInside(), 1, isScvfLocalIdx, dim));
391 std::array<LocalIndexType, 2> localScvIndices{{insideScvIdx, insideScvIdx}};
393 cache_.scvfs_[eIdx].emplace_back(
394 geometryHelper.getBoundaryScvfCorners(intersection.indexInInside(), isScvfLocalIdx),
395 intersection.centerUnitOuterNormal(),
399 std::move(localScvIndices)
402 cache_.scvfBoundaryGeometryKeys_[eIdx].emplace_back(std::array<LocalIndexType, 2>{{
403 static_cast<LocalIndexType
>(intersection.indexInInside()),
404 static_cast<LocalIndexType
>(isScvfLocalIdx)
413 const auto fIdx = intersection.indexInInside();
414 const auto numFaceVerts = refElement.size(fIdx, 1, dim);
415 for (
int localVIdx = 0; localVIdx < numFaceVerts; ++localVIdx)
417 const auto vIdx = refElement.subEntity(fIdx, 1, localVIdx, dim);
419 boundaryDofIndices_[vIdxGlobal] =
true;
424 else if (periodicGridTraits_.isPeriodic(intersection))
429 const auto fIdx = intersection.indexInInside();
430 const auto numFaceVerts = refElement.size(fIdx, 1, dim);
431 const auto eps = 1e-7*(elementGeometry.corner(1) - elementGeometry.corner(0)).two_norm();
432 for (
int localVIdx = 0; localVIdx < numFaceVerts; ++localVIdx)
434 const auto vIdx = refElement.subEntity(fIdx, 1, localVIdx, dim);
436 const auto vPos = elementGeometry.corner(vIdx);
438 const auto& outside = intersection.outside();
439 const auto outsideGeometry = outside.geometry();
440 for (
const auto& isOutside : intersections(this->
gridView(), outside))
443 if (periodicGridTraits_.isPeriodic(isOutside))
445 const auto fIdxOutside = isOutside.indexInInside();
446 const auto numFaceVertsOutside = refElement.size(fIdxOutside, 1, dim);
447 for (
int localVIdxOutside = 0; localVIdxOutside < numFaceVertsOutside; ++localVIdxOutside)
449 const auto vIdxOutside = refElement.subEntity(fIdxOutside, 1, localVIdxOutside, dim);
450 const auto vPosOutside = outsideGeometry.corner(vIdxOutside);
451 const auto shift = std::abs((this->
bBoxMax()-this->
bBoxMin())*intersection.centerUnitOuterNormal());
452 if ((vPosOutside - vPos + shift*intersection.centerUnitOuterNormal()).two_norm() < eps)
466 DUNE_THROW(Dune::NotImplemented,
"Periodic boundaries for box method for parallel simulations!");
469 const FeCache feCache_;
472 std::size_t numScvf_;
473 std::size_t numBoundaryScvf_;
476 std::vector<bool> boundaryDofIndices_;
479 std::unordered_map<GridIndexType, std::vector<GridIndexType>> periodicDofMap_;
493template<
class Scalar,
class GV,
class Traits>
501 static const int dim = GV::dimension;
502 static const int dimWorld = GV::dimensionworld;
504 using Element =
typename GV::template Codim<0>::Entity;
505 using CoordScalar =
typename GV::ctype;
527 using FeCache = Dune::LagrangeLocalFiniteElementCache<CoordScalar, Scalar, dim, 1>;
539 : ParentType(std::move(gg))
541 , periodicGridTraits_(this->
gridView().grid())
567 {
return numBoundaryScvf_; }
594 {
return boundaryDofIndices_[dofIdx]; }
598 {
return periodicDofMap_.count(dofIdx); }
601 [[deprecated(
"Will be removed after release 3.11. Use periodicallyMappedDofs, returning a range of dofs")]]
603 {
return periodicDofMap_.at(dofIdx)[0]; }
607 {
return std::views::all(periodicDofMap_.at(dofIdx)); }
610 const std::unordered_map<GridIndexType, std::vector<GridIndexType>>&
periodicDofMap()
const
611 {
return periodicDofMap_; }
615 {
return { gg.cache_ }; }
619 class BoxGridGeometryCache
625 using DofHelper =
typename GeometryHelper::DofHelper;
631 const BoxFVGridGeometry& gridGeometry()
const
632 {
return *gridGeometry_; }
635 const BoxFVGridGeometry* gridGeometry_;
647 boundaryDofIndices_.assign(
numDofs(),
false);
648 periodicDofMap_.clear();
654 numBoundaryScvf_ = 0;
657 numScv_ +=
element.subEntities(dim);
658 numScvf_ +=
element.subEntities(dim-1);
660 const auto elementGeometry =
element.geometry();
661 const auto refElement = referenceElement(elementGeometry);
664 for (
const auto& intersection : intersections(this->
gridView(),
element))
666 if (intersection.boundary() && !intersection.neighbor())
668 const auto isGeometry = intersection.geometry();
669 numScvf_ += isGeometry.corners();
670 numBoundaryScvf_ += isGeometry.corners();
674 const auto fIdx = intersection.indexInInside();
675 const auto numFaceVerts = refElement.size(fIdx, 1, dim);
676 for (
int localVIdx = 0; localVIdx < numFaceVerts; ++localVIdx)
678 const auto vIdx = refElement.subEntity(fIdx, 1, localVIdx, dim);
680 boundaryDofIndices_[vIdxGlobal] =
true;
685 else if (periodicGridTraits_.isPeriodic(intersection))
690 const auto fIdx = intersection.indexInInside();
691 const auto numFaceVerts = refElement.size(fIdx, 1, dim);
692 const auto eps = 1e-7*(elementGeometry.corner(1) - elementGeometry.corner(0)).two_norm();
693 for (
int localVIdx = 0; localVIdx < numFaceVerts; ++localVIdx)
695 const auto vIdx = refElement.subEntity(fIdx, 1, localVIdx, dim);
697 const auto vPos = elementGeometry.corner(vIdx);
699 const auto& outside = intersection.outside();
700 const auto outsideGeometry = outside.geometry();
701 for (
const auto& isOutside : intersections(this->
gridView(), outside))
704 if (periodicGridTraits_.isPeriodic(isOutside))
706 const auto fIdxOutside = isOutside.indexInInside();
707 const auto numFaceVertsOutside = refElement.size(fIdxOutside, 1, dim);
708 for (
int localVIdxOutside = 0; localVIdxOutside < numFaceVertsOutside; ++localVIdxOutside)
710 const auto vIdxOutside = refElement.subEntity(fIdxOutside, 1, localVIdxOutside, dim);
711 const auto vPosOutside = outsideGeometry.corner(vIdxOutside);
712 const auto shift = std::abs((this->
bBoxMax()-this->
bBoxMin())*intersection.centerUnitOuterNormal());
713 if ((vPosOutside - vPos + shift*intersection.centerUnitOuterNormal()).two_norm() < eps)
727 DUNE_THROW(Dune::NotImplemented,
"Periodic boundaries for box method for parallel simulations!");
730 const FeCache feCache_;
735 std::size_t numScvf_;
736 std::size_t numBoundaryScvf_;
739 std::vector<bool> boundaryDofIndices_;
742 std::unordered_map<GridIndexType, std::vector<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:566
const std::ranges::range auto periodicallyMappedDofs(GridIndexType dofIdx) const
The indices of the vertices / d.o.f. on the other side of the periodic boundary.
Definition discretization/box/fvgridgeometry.hh:606
friend LocalView localView(const BoxFVGridGeometry &gg)
local view of this object (constructed with the internal cache)
Definition discretization/box/fvgridgeometry.hh:614
bool dofOnPeriodicBoundary(GridIndexType dofIdx) const
If a vertex / d.o.f. is on a periodic boundary.
Definition discretization/box/fvgridgeometry.hh:597
GV GridView
export the grid view type
Definition discretization/box/fvgridgeometry.hh:529
typename Traits::template LocalView< ThisType, false > LocalView
export the type of the fv element geometry (the local view type)
Definition discretization/box/fvgridgeometry.hh:515
typename Traits::SubControlVolumeFace SubControlVolumeFace
export the type of sub control volume
Definition discretization/box/fvgridgeometry.hh:519
BoxFVGridGeometry(const GridView &gridView)
Constructor.
Definition discretization/box/fvgridgeometry.hh:547
static constexpr DiscretizationMethod discMethod
Definition discretization/box/fvgridgeometry.hh:510
typename Traits::SubControlVolume SubControlVolume
export the type of sub control volume
Definition discretization/box/fvgridgeometry.hh:517
Experimental::BoundaryFace< GV > BoundaryFace
export the boundary face type
Definition discretization/box/fvgridgeometry.hh:521
typename Traits::ScvQuadratureRule ScvQuadratureRule
export the scv interpolation point data type
Definition discretization/box/fvgridgeometry.hh:533
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:602
const FeCache & feCache() const
The finite element cache for creating local FE bases.
Definition discretization/box/fvgridgeometry.hh:589
BoxGridGeometryCache Cache
Definition discretization/box/fvgridgeometry.hh:641
std::size_t numScvf() const
The total number of sun control volume faces.
Definition discretization/box/fvgridgeometry.hh:561
typename Traits::VertexMapper DofMapper
export dof mapper type
Definition discretization/box/fvgridgeometry.hh:525
BasicGridGeometry_t< GV, Traits > BasicGridGeometry
export basic grid geometry type for the alternative constructor
Definition discretization/box/fvgridgeometry.hh:513
bool dofOnBoundary(GridIndexType dofIdx) const
If a vertex / d.o.f. is on the boundary.
Definition discretization/box/fvgridgeometry.hh:593
typename Traits::ScvfQuadratureRule ScvfQuadratureRule
the quadrature rule type for scvfs
Definition discretization/box/fvgridgeometry.hh:535
const std::unordered_map< GridIndexType, std::vector< GridIndexType > > & periodicDofMap() const
Returns the map between dofs across periodic boundaries.
Definition discretization/box/fvgridgeometry.hh:610
const DofMapper & dofMapper() const
Definition discretization/box/fvgridgeometry.hh:553
DiscretizationMethods::Box DiscretizationMethod
export the discretization method this geometry belongs to
Definition discretization/box/fvgridgeometry.hh:509
typename PeriodicGridTraits< typename GV::Grid >::SupportsPeriodicity SupportsPeriodicity
export whether the grid(geometry) supports periodicity
Definition discretization/box/fvgridgeometry.hh:531
void update(GridView &&gridView)
update all fvElementGeometries (call this after grid adaption)
Definition discretization/box/fvgridgeometry.hh:582
Extrusion_t< Traits > Extrusion
export the type of extrusion
Definition discretization/box/fvgridgeometry.hh:523
std::size_t numDofs() const
The total number of degrees of freedom.
Definition discretization/box/fvgridgeometry.hh:570
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:538
std::size_t numScv() const
The total number of sub control volumes.
Definition discretization/box/fvgridgeometry.hh:557
void update(const GridView &gridView)
update all fvElementGeometries (call this after grid adaption)
Definition discretization/box/fvgridgeometry.hh:575
Dune::LagrangeLocalFiniteElementCache< CoordScalar, Scalar, dim, 1 > FeCache
export the finite element cache type
Definition discretization/box/fvgridgeometry.hh:527
GV GridView
export the grid view type
Definition discretization/box/fvgridgeometry.hh:129
Experimental::BoundaryFace< GV > BoundaryFace
export the boundary face type
Definition discretization/box/fvgridgeometry.hh:121
friend LocalView localView(const BoxFVGridGeometry &gg)
local view of this object (constructed with the internal cache)
Definition discretization/box/fvgridgeometry.hh:214
BoxGridGeometryCache Cache
Definition discretization/box/fvgridgeometry.hh:286
void update(const GridView &gridView)
update all fvElementGeometries (call this after grid adaption)
Definition discretization/box/fvgridgeometry.hh:175
const std::unordered_map< GridIndexType, std::vector< GridIndexType > > & periodicDofMap() const
Returns the map between dofs across periodic boundaries.
Definition discretization/box/fvgridgeometry.hh:210
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:202
std::size_t numDofs() const
The total number of degrees of freedom.
Definition discretization/box/fvgridgeometry.hh:170
std::size_t numScv() const
The total number of sub control volumes.
Definition discretization/box/fvgridgeometry.hh:157
const std::ranges::range auto periodicallyMappedDofs(GridIndexType dofIdx) const
The indices of the vertices / d.o.f. on the other side of the periodic boundary.
Definition discretization/box/fvgridgeometry.hh:206
BasicGridGeometry_t< GV, Traits > BasicGridGeometry
export basic grid geometry type for the alternative constructor
Definition discretization/box/fvgridgeometry.hh:113
typename Traits::ScvQuadratureRule ScvQuadratureRule
export the scv interpolation point data type
Definition discretization/box/fvgridgeometry.hh:133
const FeCache & feCache() const
The finite element cache for creating local FE bases.
Definition discretization/box/fvgridgeometry.hh:189
std::size_t numBoundaryScvf() const
Definition discretization/box/fvgridgeometry.hh:166
DiscretizationMethods::Box DiscretizationMethod
export the discretization method this geometry belongs to
Definition discretization/box/fvgridgeometry.hh:109
typename Traits::ScvfQuadratureRule ScvfQuadratureRule
the quadrature rule type for scvfs
Definition discretization/box/fvgridgeometry.hh:135
static constexpr DiscretizationMethod discMethod
Definition discretization/box/fvgridgeometry.hh:110
Dune::LagrangeLocalFiniteElementCache< CoordScalar, Scalar, dim, 1 > FeCache
export the finite element cache type
Definition discretization/box/fvgridgeometry.hh:127
typename Traits::SubControlVolumeFace SubControlVolumeFace
export the type of sub control volume
Definition discretization/box/fvgridgeometry.hh:119
const DofMapper & dofMapper() const
Definition discretization/box/fvgridgeometry.hh:153
BoxFVGridGeometry(const GridView &gridView)
Constructor.
Definition discretization/box/fvgridgeometry.hh:147
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:138
Extrusion_t< Traits > Extrusion
export the type of extrusion
Definition discretization/box/fvgridgeometry.hh:123
typename PeriodicGridTraits< typename GV::Grid >::SupportsPeriodicity SupportsPeriodicity
export whether the grid(geometry) supports periodicity
Definition discretization/box/fvgridgeometry.hh:131
typename Traits::template LocalView< ThisType, true > LocalView
export the type of the fv element geometry (the local view type)
Definition discretization/box/fvgridgeometry.hh:115
bool dofOnBoundary(GridIndexType dofIdx) const
If a vertex / d.o.f. is on the boundary.
Definition discretization/box/fvgridgeometry.hh:193
std::size_t numScvf() const
The total number of sun control volume faces.
Definition discretization/box/fvgridgeometry.hh:161
bool dofOnPeriodicBoundary(GridIndexType dofIdx) const
If a vertex / d.o.f. is on a periodic boundary.
Definition discretization/box/fvgridgeometry.hh:197
void update(GridView &&gridView)
update all fvElementGeometries (call this after grid adaption)
Definition discretization/box/fvgridgeometry.hh:182
typename Traits::SubControlVolume SubControlVolume
export the type of sub control volume
Definition discretization/box/fvgridgeometry.hh:117
typename Traits::VertexMapper DofMapper
export dof mapper type
Definition discretization/box/fvgridgeometry.hh:125
Base class for the finite volume geometry vector for box schemes This builds up the sub control volum...
Definition discretization/box/fvgridgeometry.hh:85
Create sub control volumes and sub control volume face geometries.
Definition boxgeometryhelper.hh:262
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:56
void closePeriodicDofMap(std::unordered_map< Index, std::vector< Index > > &periodicDofMap)
Map every degree of freedom to all others it is identified with.
Definition periodicdofmap.hh:48
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
void addPeriodicallyMappedDof(std::unordered_map< Index, std::vector< Index > > &periodicDofMap, std::type_identity_t< Index > dofIdx, std::type_identity_t< Index > periodicDofIdx)
Register a degree of freedom as periodically mapped to another one.
Definition periodicdofmap.hh:29
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:44
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
Helpers for maps between degrees of freedom identified across periodic boundaries.
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:67
BoxFVElementGeometry< GridGeometry, enableCache > LocalView
Definition discretization/box/fvgridgeometry.hh:72
BoxSubControlVolume< GridView > SubControlVolume
Definition discretization/box/fvgridgeometry.hh:68
BoxSubControlVolumeFace< GridView > SubControlVolumeFace
Definition discretization/box/fvgridgeometry.hh:69
Quadrature rule traits for discretization schemes.
Definition quadraturerules.hh:86
typename GridView::IndexSet::IndexType GridIndex
Definition indextraits.hh:27
unsigned int LocalIndex
Definition indextraits.hh:28
Definition periodicgridtraits.hh:24
Definition periodicgridtraits.hh:23