version 3.11-dev
Loading...
Searching...
No Matches
discretization/pq1bubble/fvgridgeometry.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3//
4// SPDX-FileCopyrightText: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
14#ifndef DUMUX_DISCRETIZATION_PQ1BUBBLE_GRID_GEOMETRY_HH
15#define DUMUX_DISCRETIZATION_PQ1BUBBLE_GRID_GEOMETRY_HH
16
17#include <utility>
18#include <unordered_map>
19#include <type_traits>
20#include <span>
21
22#include <dune/grid/common/mcmgmapper.hh>
23
25
28
31
40
42
43namespace Dumux {
44
45namespace Detail {
46template<class T>
48 = typename T::EnableHybridCVFE;
49
50template<class T>
51static constexpr bool enablesHybridCVFE
52 = Dune::Std::detected_or_t<std::false_type, EnableHybridCVFE, T>{};
53
54template<class GV, class T>
55using PQ1BubbleGeometryHelper_t = Dune::Std::detected_or_t<
56 std::conditional_t<enablesHybridCVFE<T>,
59 >,
61 T
62>;
63} // end namespace Detail
64
65template <class GridView, std::size_t numCubeBubbles = 1>
67{
68 using DofMapper = Dune::MultipleCodimMultipleGeomTypeMapper<GridView>;
69 static_assert(numCubeBubbles == 1 || numCubeBubbles == 2,
70 "PQ1BubbleMapperTraits supports numCubeBubbles = 1 or 2");
71 static constexpr std::size_t numCubeBubbleDofs = numCubeBubbles;
72
76 static Dune::MCMGLayout layout()
77 {
78 return [](Dune::GeometryType gt, int dimgrid) {
79 if (gt.dim() == 0)
80 return int(1);
81
82 if (gt.dim() == dimgrid)
83 return gt.isCube() ? int(numCubeBubbleDofs) : int(1);
84
85 return int(0);
86 };
87 }
88};
89
94template<class GridView,
98 class IntersectionRule = Dumux::QuadratureRules::MidpointQuadrature,
99 class BoundaryFaceRule = Dumux::QuadratureRules::MidpointQuadrature>
101
108template<class GridView, class MapperTraits = PQ1BubbleMapperTraits<GridView>, class QuadratureTraits = PQ1BubbleQuadratureTraits<GridView>>
110: public MapperTraits, public QuadratureTraits
111{
114
115 template<class GridGeometry, bool enableCache>
117
118 static constexpr std::size_t maxNumElementDofs = (1<<GridView::dimension)
119 + MapperTraits::numCubeBubbleDofs;
120};
121
128template<class BaseTraits>
130: public BaseTraits
131{ using EnableHybridCVFE = std::true_type; };
132
139template<class Scalar,
140 class GV,
141 bool enableCaching = true,
144: public BaseGridGeometry<GV, Traits>
145{
147 using ParentType = BaseGridGeometry<GV, Traits>;
148 using GridIndexType = typename IndexTraits<GV>::GridIndex;
149 using LocalIndexType = typename IndexTraits<GV>::LocalIndex;
150
151 using Element = typename GV::template Codim<0>::Entity;
152 using CoordScalar = typename GV::ctype;
153 static const int dim = GV::dimension;
154 static const int dimWorld = GV::dimensionworld;
155
156 static_assert(dim > 1, "Only implemented for dim > 1");
157
158public:
162
164
165 static constexpr std::size_t maxNumElementDofs = Traits::maxNumElementDofs;
166
170 using LocalView = typename Traits::template LocalView<ThisType, true>;
172 using SubControlVolume = typename Traits::SubControlVolume;
174 using SubControlVolumeFace = typename Traits::SubControlVolumeFace;
180 using DofMapper = typename Traits::DofMapper;
184 using GridView = GV;
188 using ScvQuadratureRule = typename Traits::ScvQuadratureRule;
190 using ScvfQuadratureRule = typename Traits::ScvfQuadratureRule;
192 using ElementQuadratureRule = typename Traits::ElementQuadratureRule;
194 using IntersectionQuadratureRule = typename Traits::IntersectionQuadratureRule;
196 using BoundaryFaceQuadratureRule = typename Traits::BoundaryFaceQuadratureRule;
197
199 PQ1BubbleFVGridGeometry(std::shared_ptr<BasicGridGeometry> gg)
200 : ParentType(std::move(gg))
201 , dofMapper_(this->gridView(), Traits::layout())
202 , cache_(*this)
203 , periodicGridTraits_(this->gridView().grid())
204 {
205 update_();
206 }
207
212
214 const DofMapper& dofMapper() const
215 { return dofMapper_; }
216
218 std::size_t numScv() const
219 { return numScv_; }
220
222 std::size_t numScvf() const
223 { return numScvf_; }
224
226 std::size_t numBoundaryScvf() const
227 { return numBoundaryScvf_; }
228
230 std::size_t numDofs() const
231 { return this->dofMapper().size(); }
232
235 {
237 update_();
238 }
239
242 {
243 ParentType::update(std::move(gridView));
244 update_();
245 }
246
248 const FeCache& feCache() const
249 { return feCache_; }
250
252 bool dofOnBoundary(GridIndexType dofIdx) const
253 { return boundaryDofIndices_[dofIdx]; }
254
256 bool dofOnPeriodicBoundary(GridIndexType dofIdx) const
257 { return periodicDofMap_.count(dofIdx); }
258
260 GridIndexType periodicallyMappedDof(GridIndexType dofIdx) const
261 { return periodicDofMap_.at(dofIdx); }
262
264 const std::unordered_map<GridIndexType, GridIndexType>& periodicDofMap() const
265 { return periodicDofMap_; }
266
269 { return { gg.cache_ }; }
270
271private:
272 class PQ1BubbleGridGeometryCache
273 {
274 friend class PQ1BubbleFVGridGeometry;
275 public:
279 using DofHelper = typename GeometryHelper::DofHelper;
280
281 explicit PQ1BubbleGridGeometryCache(const PQ1BubbleFVGridGeometry& gg)
282 : gridGeometry_(&gg)
283 {}
284
285 const PQ1BubbleFVGridGeometry& gridGeometry() const
286 { return *gridGeometry_; }
287
289 const std::vector<SubControlVolume>& scvs(GridIndexType eIdx) const
290 { return scvs_[eIdx]; }
291
293 const std::vector<SubControlVolumeFace>& scvfs(GridIndexType eIdx) const
294 { return scvfs_[eIdx]; }
295
297 bool hasBoundaryScvf(GridIndexType eIdx) const
298 { return hasBoundaryScvf_[eIdx]; }
299
301 const std::vector<std::array<LocalIndexType, 2>>& scvfBoundaryGeometryKeys(GridIndexType eIdx) const
302 { return scvfBoundaryGeometryKeys_.at(eIdx); }
303
305 auto boundaryFaces(GridIndexType eIdx) const -> std::span<const BoundaryFace>
306 {
307 if (auto it = boundaryFaces_.find(eIdx); it != boundaryFaces_.end())
308 return {it->second};
309 return {};
310 }
311
313 const auto& boundaryFaceScvfRanges(GridIndexType eIdx) const
314 { return boundaryFaceScvfRanges_.at(eIdx); }
315
316 private:
317 void clear_()
318 {
319 scvs_.clear();
320 scvfs_.clear();
321 hasBoundaryScvf_.clear();
322 scvfBoundaryGeometryKeys_.clear();
323 boundaryFaces_.clear();
324 boundaryFaceScvfRanges_.clear();
325 }
326
327 std::vector<std::vector<SubControlVolume>> scvs_;
328 std::vector<std::vector<SubControlVolumeFace>> scvfs_;
329 std::vector<bool> hasBoundaryScvf_;
330 std::unordered_map<GridIndexType, std::vector<std::array<LocalIndexType, 2>>> scvfBoundaryGeometryKeys_;
331 std::unordered_map<GridIndexType, Dune::ReservedVector<typename PQ1BubbleFVGridGeometry::BoundaryFace, 2*dim>> boundaryFaces_;
332 std::unordered_map<GridIndexType, Dune::ReservedVector<std::array<LocalIndexType, 2>, 2*dim>> boundaryFaceScvfRanges_;
333
334 const PQ1BubbleFVGridGeometry* gridGeometry_;
335 };
336
337public:
340 using Cache = PQ1BubbleGridGeometryCache;
341
342private:
343 using GeometryHelper = typename Cache::GeometryHelper;
344 using DofHelper = typename Cache::DofHelper;
345
346 void update_()
347 {
348 cache_.clear_();
349 dofMapper_.update(this->gridView());
350
351 auto numElements = this->gridView().size(0);
352 cache_.scvs_.resize(numElements);
353 cache_.scvfs_.resize(numElements);
354 cache_.hasBoundaryScvf_.resize(numElements, false);
355
356 boundaryDofIndices_.assign(numDofs(), false);
357
358 numScv_ = 0;
359 numScvf_ = 0;
360 numBoundaryScvf_ = 0;
361
362 // Build the scvs and scv faces
363 for (const auto& element : elements(this->gridView()))
364 {
365 auto eIdx = this->elementMapper().index(element);
366
367 // get the element geometry
368 auto elementGeometry = element.geometry();
369 if (!enableHybridCVFE && elementGeometry.type().isCube() && Traits::numCubeBubbleDofs > 1)
370 DUNE_THROW(Dune::NotImplemented, "Multiple bubble dofs for cube elements only for hybrid scheme.");
371
372 const auto refElement = referenceElement(elementGeometry);
373 const auto& localCoefficients = this->feCache().get(element.type()).localCoefficients();
374
375 // instantiate the geometry helper
376 GeometryHelper geometryHelper(elementGeometry);
377
378 numScv_ += geometryHelper.numScv();
379 // construct the sub control volumes
380 cache_.scvs_[eIdx].resize(geometryHelper.numScv());
381
382 // Scvs related to control volumes
383 for (LocalIndexType scvLocalIdx = 0; scvLocalIdx < geometryHelper.numScv(); ++scvLocalIdx)
384 {
385 auto corners = geometryHelper.getScvCorners(scvLocalIdx);
386 cache_.scvs_[eIdx][scvLocalIdx] = SubControlVolume(
387 geometryHelper.scvVolume(scvLocalIdx, corners),
388 geometryHelper.dofPosition(scvLocalIdx),
389 Dumux::center(corners),
390 scvLocalIdx,
391 eIdx,
392 DofHelper::dofIndex(this->dofMapper(), element, localCoefficients.localKey(scvLocalIdx)),
393 geometryHelper.isOverlappingScv(scvLocalIdx)
394 );
395 }
396
397 // construct the sub control volume faces
398 const auto numInteriorScvfs = GeometryHelper::numInteriorScvf(elementGeometry.type());
399 numScvf_ += numInteriorScvfs;
400 cache_.scvfs_[eIdx].resize(numInteriorScvfs);
401 LocalIndexType scvfLocalIdx = 0;
402 for (; scvfLocalIdx < numInteriorScvfs; ++scvfLocalIdx)
403 {
404 const auto scvPair = geometryHelper.getScvPairForScvf(scvfLocalIdx);
405 const auto corners = geometryHelper.getScvfCorners(scvfLocalIdx);
406 const auto area = Dumux::convexPolytopeVolume<dim-1>(
407 geometryHelper.getInteriorScvfGeometryType(scvfLocalIdx),
408 [&](unsigned int i){ return corners[i]; }
409 );
410
411 cache_.scvfs_[eIdx][scvfLocalIdx] = SubControlVolumeFace(
412 Dumux::center(corners),
413 area,
414 geometryHelper.normal(corners, scvPair),
415 std::move(scvPair),
416 scvfLocalIdx,
417 geometryHelper.isOverlappingScvf(scvfLocalIdx)
418 );
419 }
420
421 // construct the sub control volume faces on the domain boundary
422 LocalIndexType numBoundaryFaces = 0;
423 for (const auto& intersection : intersections(this->gridView(), element))
424 {
425 if (intersection.boundary() && !intersection.neighbor())
426 {
427 cache_.hasBoundaryScvf_[eIdx] = true;
428
429 // add one boundary face per boundary intersection
430 const auto isGeometry = intersection.geometry();
431 cache_.boundaryFaces_[eIdx].push_back(BoundaryFace{
432 isGeometry.center(),
433 isGeometry.volume(),
434 intersection.centerUnitOuterNormal(),
435 numBoundaryFaces++,
436 static_cast<LocalIndexType>(intersection.indexInInside()),
437 typename BoundaryFace::Traits::BoundaryFlag{intersection}
438 });
439
440 const auto localFacetIndex = intersection.indexInInside();
441 const auto numBoundaryScvf = GeometryHelper::numBoundaryScvf(elementGeometry.type(), localFacetIndex);
442 numScvf_ += numBoundaryScvf;
443 numBoundaryScvf_ += numBoundaryScvf;
444
445 // record the scvf subrange for this boundary face: {offset, count}
446 cache_.boundaryFaceScvfRanges_[eIdx].push_back(std::array<LocalIndexType, 2>{{
447 scvfLocalIdx,
448 static_cast<LocalIndexType>(numBoundaryScvf)
449 }});
450
451 for (unsigned int isScvfLocalIdx = 0; isScvfLocalIdx < numBoundaryScvf; ++isScvfLocalIdx)
452 {
453 // find the scvs this scvf is belonging to
454 const auto scvPair = geometryHelper.getScvPairForBoundaryScvf(localFacetIndex, isScvfLocalIdx);
455 const auto corners = geometryHelper.getBoundaryScvfCorners(localFacetIndex, isScvfLocalIdx);
456 const auto area = Dumux::convexPolytopeVolume<dim-1>(
457 geometryHelper.getBoundaryScvfGeometryType(isScvfLocalIdx),
458 [&](unsigned int i){ return corners[i]; }
459 );
460 cache_.scvfs_[eIdx].emplace_back(
461 Dumux::center(corners),
462 area,
463 intersection.centerUnitOuterNormal(),
464 std::move(scvPair),
465 scvfLocalIdx,
466 typename SubControlVolumeFace::Traits::BoundaryFlag{ intersection },
467 geometryHelper.isOverlappingBoundaryScvf(localFacetIndex)
468 );
469
470 // store look-up map to construct boundary scvf geometries
471 cache_.scvfBoundaryGeometryKeys_[eIdx].emplace_back(std::array<LocalIndexType, 2>{{
472 static_cast<LocalIndexType>(localFacetIndex),
473 static_cast<LocalIndexType>(isScvfLocalIdx)
474 }});
475
476 // increment local counter
477 scvfLocalIdx++;
478 }
479
480 const auto numDofsIntersection = DofHelper::numLocalDofsIntersection(elementGeometry.type(), localFacetIndex);
481 // TODO also move this to helper class
482 // add all dofs on the intersection to the set of boundary dofs
483 for (int ilocalDofIdx = 0; ilocalDofIdx < numDofsIntersection; ++ilocalDofIdx)
484 {
485 auto localDofIdx = DofHelper::localDofIndexIntersection(elementGeometry.type(), localFacetIndex, ilocalDofIdx);
486 const auto vIdxGlobal = DofHelper::dofIndex(this->dofMapper(), element, localCoefficients.localKey(localDofIdx));
487 boundaryDofIndices_[vIdxGlobal] = true;
488 }
489 }
490
491 // inform the grid geometry if we have periodic boundaries
492 else if (periodicGridTraits_.isPeriodic(intersection))
493 {
494 this->setPeriodic();
495
496 // find the mapped periodic vertex of all vertices on periodic boundaries
497 const auto fIdx = intersection.indexInInside();
498 const auto numFaceVerts = refElement.size(fIdx, 1, dim);
499 const auto eps = 1e-7*(elementGeometry.corner(1) - elementGeometry.corner(0)).two_norm();
500 for (int localVIdx = 0; localVIdx < numFaceVerts; ++localVIdx)
501 {
502 const auto vIdx = refElement.subEntity(fIdx, 1, localVIdx, dim);
503 const auto vIdxGlobal = this->dofMapper().subIndex(element, vIdx, dim);
504 const auto vPos = elementGeometry.corner(vIdx);
505
506 const auto& outside = intersection.outside();
507 const auto outsideGeometry = outside.geometry();
508 for (const auto& isOutside : intersections(this->gridView(), outside))
509 {
510 // only check periodic vertices of the periodic neighbor
511 if (periodicGridTraits_.isPeriodic(isOutside))
512 {
513 const auto fIdxOutside = isOutside.indexInInside();
514 const auto numFaceVertsOutside = refElement.size(fIdxOutside, 1, dim);
515 for (int localVIdxOutside = 0; localVIdxOutside < numFaceVertsOutside; ++localVIdxOutside)
516 {
517 const auto vIdxOutside = refElement.subEntity(fIdxOutside, 1, localVIdxOutside, dim);
518 const auto vPosOutside = outsideGeometry.corner(vIdxOutside);
519 const auto shift = std::abs((this->bBoxMax()-this->bBoxMin())*intersection.centerUnitOuterNormal());
520 if (std::abs((vPosOutside-vPos).two_norm() - shift) < eps)
521 periodicDofMap_[vIdxGlobal] = this->dofMapper().subIndex(outside, vIdxOutside, dim);
522 }
523 }
524 }
525 }
526 }
527 }
528 }
529
530 // error check: periodic boundaries currently don't work for pq1bubble in parallel
531 if (this->isPeriodic() && this->gridView().comm().size() > 1)
532 DUNE_THROW(Dune::NotImplemented, "Periodic boundaries for pq1bubble method for parallel simulations!");
533 }
534
535 DofMapper dofMapper_;
536
537 const FeCache feCache_;
538
539 std::size_t numScv_;
540 std::size_t numScvf_;
541 std::size_t numBoundaryScvf_;
542
543 // vertices on the boundary
544 std::vector<bool> boundaryDofIndices_;
545
546 // a map for periodic boundary vertices
547 std::unordered_map<GridIndexType, GridIndexType> periodicDofMap_;
548
549 Cache cache_;
550
552};
553
554} // end namespace Dumux
555
556#endif
Base class for grid geometries.
Implementation of a boundary face related to primary grid elements (dune intersections).
Compute the center point of a convex polytope geometry or a random-access container of corner points.
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
Definition basegridgeometry.hh:142
const GridView & gridView() const
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
Class for a boundary face related to primary grid elements (dune intersections).
Definition boundaryface.hh:69
Definition discretization/pq1bubble/geometryhelper.hh:479
Definition pq1bubblefecache.hh:29
const FiniteElementType & get(const Dune::GeometryType &gt) const
Get local finite element for given GeometryType.
Definition pq1bubblefecache.hh:48
Base class for the finite volume geometry vector for pq1bubble models This builds up the sub control ...
Definition discretization/pq1bubble/fvelementgeometry.hh:43
Base class for the finite volume geometry vector for pq1bubble schemes This builds up the sub control...
Definition discretization/pq1bubble/fvgridgeometry.hh:145
void update(const GridView &gridView)
update all geometries (call this after grid adaption)
Definition discretization/pq1bubble/fvgridgeometry.hh:234
friend LocalView localView(const PQ1BubbleFVGridGeometry &gg)
local view of this object (constructed with the internal cache)
Definition discretization/pq1bubble/fvgridgeometry.hh:268
PQ1BubbleGridGeometryCache Cache
Definition discretization/pq1bubble/fvgridgeometry.hh:340
PQ1BubbleFVGridGeometry(std::shared_ptr< BasicGridGeometry > gg)
Constructor with basic grid geometry used to share state with another grid geometry on the same grid ...
Definition discretization/pq1bubble/fvgridgeometry.hh:199
static constexpr DiscretizationMethod discMethod
Definition discretization/pq1bubble/fvgridgeometry.hh:161
std::size_t numBoundaryScvf() const
The total number of boundary sub control volume faces.
Definition discretization/pq1bubble/fvgridgeometry.hh:226
Dumux::PQ1BubbleFECache< CoordScalar, Scalar, dim, PQ1BubbleDefaultGridGeometryTraits< GridView >::numCubeBubbleDofs > FeCache
Definition discretization/pq1bubble/fvgridgeometry.hh:182
typename PQ1BubbleDefaultGridGeometryTraits< GridView >::ElementQuadratureRule ElementQuadratureRule
Definition discretization/pq1bubble/fvgridgeometry.hh:192
PQ1BubbleFVGridGeometry(const GridView &gridView)
Constructor.
Definition discretization/pq1bubble/fvgridgeometry.hh:209
BasicGridGeometry_t< GridView, PQ1BubbleDefaultGridGeometryTraits< GridView > > BasicGridGeometry
Definition discretization/pq1bubble/fvgridgeometry.hh:168
std::size_t numScv() const
The total number of sub control volumes.
Definition discretization/pq1bubble/fvgridgeometry.hh:218
std::size_t numScvf() const
The total number of sub control volume faces.
Definition discretization/pq1bubble/fvgridgeometry.hh:222
static constexpr std::size_t maxNumElementDofs
Definition discretization/pq1bubble/fvgridgeometry.hh:165
const FeCache & feCache() const
The finite element cache for creating local FE bases.
Definition discretization/pq1bubble/fvgridgeometry.hh:248
GridIndexType periodicallyMappedDof(GridIndexType dofIdx) const
The index of the vertex / d.o.f. on the other side of the periodic boundary.
Definition discretization/pq1bubble/fvgridgeometry.hh:260
DiscretizationMethods::PQ1Bubble DiscretizationMethod
Definition discretization/pq1bubble/fvgridgeometry.hh:160
Extrusion_t< PQ1BubbleDefaultGridGeometryTraits< GridView > > Extrusion
Definition discretization/pq1bubble/fvgridgeometry.hh:178
typename PQ1BubbleDefaultGridGeometryTraits< GridView >::BoundaryFaceQuadratureRule BoundaryFaceQuadratureRule
Definition discretization/pq1bubble/fvgridgeometry.hh:196
static constexpr bool enableHybridCVFE
Definition discretization/pq1bubble/fvgridgeometry.hh:163
typename PQ1BubbleDefaultGridGeometryTraits< GridView >::SubControlVolumeFace SubControlVolumeFace
Definition discretization/pq1bubble/fvgridgeometry.hh:174
std::size_t numDofs() const
The total number of degrees of freedom.
Definition discretization/pq1bubble/fvgridgeometry.hh:230
bool dofOnBoundary(GridIndexType dofIdx) const
If a vertex / d.o.f. is on the boundary.
Definition discretization/pq1bubble/fvgridgeometry.hh:252
typename PQ1BubbleDefaultGridGeometryTraits< GridView >::DofMapper DofMapper
Definition discretization/pq1bubble/fvgridgeometry.hh:180
const DofMapper & dofMapper() const
The dofMapper.
Definition discretization/pq1bubble/fvgridgeometry.hh:214
const std::unordered_map< GridIndexType, GridIndexType > & periodicDofMap() const
Returns the map between dofs across periodic boundaries.
Definition discretization/pq1bubble/fvgridgeometry.hh:264
typename PQ1BubbleDefaultGridGeometryTraits< GridView >::ScvfQuadratureRule ScvfQuadratureRule
Definition discretization/pq1bubble/fvgridgeometry.hh:190
GridView GridView
Definition discretization/pq1bubble/fvgridgeometry.hh:184
bool dofOnPeriodicBoundary(GridIndexType dofIdx) const
If a vertex / d.o.f. is on a periodic boundary.
Definition discretization/pq1bubble/fvgridgeometry.hh:256
typename PQ1BubbleDefaultGridGeometryTraits< GridView >::template LocalView< ThisType, true > LocalView
Definition discretization/pq1bubble/fvgridgeometry.hh:170
typename PQ1BubbleDefaultGridGeometryTraits< GridView >::SubControlVolume SubControlVolume
Definition discretization/pq1bubble/fvgridgeometry.hh:172
typename PQ1BubbleDefaultGridGeometryTraits< GridView >::ScvQuadratureRule ScvQuadratureRule
Definition discretization/pq1bubble/fvgridgeometry.hh:188
typename PeriodicGridTraits< typename GridView::Grid >::SupportsPeriodicity SupportsPeriodicity
Definition discretization/pq1bubble/fvgridgeometry.hh:186
void update(GridView &&gridView)
update all geometries (call this after grid adaption)
Definition discretization/pq1bubble/fvgridgeometry.hh:241
Experimental::BoundaryFace< GridView > BoundaryFace
Definition discretization/pq1bubble/fvgridgeometry.hh:176
typename PQ1BubbleDefaultGridGeometryTraits< GridView >::IntersectionQuadratureRule IntersectionQuadratureRule
Definition discretization/pq1bubble/fvgridgeometry.hh:194
A class to create sub control volume and sub control volume face geometries per element.
Definition discretization/pq1bubble/geometryhelper.hh:175
Class for a sub control volume face in the cvfe method, i.e a part of the boundary of a sub control v...
Definition discretization/pq1bubble/subcontrolvolumeface.hh:58
the sub control volume for the pq1bubble scheme
Definition discretization/pq1bubble/subcontrolvolume.hh:55
Defines the default element and vertex mapper types.
Base class for the local finite volume geometry for the pq1bubble method This builds up the sub contr...
Helper class constructing the dual grid finite volume geometries for the cvfe discretizazion method.
the sub control volume for the cvfe scheme
Base class for a sub control volume face.
Helper classes to compute the integration elements.
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
auto convexPolytopeVolume(Dune::GeometryType type, const CornerF &c)
Compute the volume of several common geometry types.
Definition volume.hh:41
Corners::value_type center(const Corners &corners)
The center of a given list of corners.
Definition center.hh:24
CVFE::DefaultQuadratureTraits< GridView, ScvRule, ScvfRule, ElementRule, IntersectionRule, BoundaryFaceRule > PQ1BubbleQuadratureTraits
Quadrature rule traits for PQ1Bubble discretization.
Definition discretization/pq1bubble/fvgridgeometry.hh:100
Defines the index types used for grid and local indices.
The available discretization methods in Dumux.
Definition cvfelocalresidual.hh:25
Dune::Std::detected_or_t< std::conditional_t< enablesHybridCVFE< T >, Dumux::HybridPQ1BubbleGeometryHelper< GV, typename T::SubControlVolume, typename T::SubControlVolumeFace, T::numCubeBubbleDofs >, Dumux::PQ1BubbleGeometryHelper< GV, typename T::SubControlVolume, typename T::SubControlVolumeFace > >, SpecifiesGeometryHelper, T > PQ1BubbleGeometryHelper_t
Definition discretization/pq1bubble/fvgridgeometry.hh:54
static constexpr bool enablesHybridCVFE
Definition discretization/pq1bubble/fvgridgeometry.hh:51
typename T::GeometryHelper SpecifiesGeometryHelper
Definition basegridgeometry.hh:30
typename T::EnableHybridCVFE EnableHybridCVFE
Definition discretization/pq1bubble/fvgridgeometry.hh:47
CVFE< CVFEMethods::PQ1Bubble > PQ1Bubble
Definition method.hh:126
Definition adapt.hh:17
typename Extrusion< T >::type Extrusion_t
Convenience alias for obtaining the extrusion type.
Definition extrusion.hh:257
Grid properties related to periodicity.
A finite element cache for P1/Q1 function with bubble.
Quadrature rule traits for discretization schemes.
Definition quadraturerules.hh:85
Definition defaultmappertraits.hh:23
The default traits for the hybrid pq1bubble finite volume grid geometry Defines the scv and scvf type...
Definition discretization/pq1bubble/fvgridgeometry.hh:131
typename GridView::IndexSet::IndexType GridIndex
Definition indextraits.hh:27
unsigned int LocalIndex
Definition indextraits.hh:28
The default traits for the pq1bubble finite volume grid geometry Defines the scv and scvf types and t...
Definition discretization/pq1bubble/fvgridgeometry.hh:111
PQ1BubbleSubControlVolumeFace< GridView > SubControlVolumeFace
Definition discretization/pq1bubble/fvgridgeometry.hh:113
PQ1BubbleFVElementGeometry< GridGeometry, enableCache > LocalView
Definition discretization/pq1bubble/fvgridgeometry.hh:116
static constexpr std::size_t maxNumElementDofs
Definition discretization/pq1bubble/fvgridgeometry.hh:118
PQ1BubbleSubControlVolume< GridView > SubControlVolume
Definition discretization/pq1bubble/fvgridgeometry.hh:112
Definition discretization/pq1bubble/fvgridgeometry.hh:67
static constexpr std::size_t numCubeBubbleDofs
Definition discretization/pq1bubble/fvgridgeometry.hh:71
static Dune::MCMGLayout layout()
Layout for elements (numCubeBubbleDofs) and vertices.
Definition discretization/pq1bubble/fvgridgeometry.hh:76
Dune::MultipleCodimMultipleGeomTypeMapper< GridView > DofMapper
Definition discretization/pq1bubble/fvgridgeometry.hh:68
Definition periodicgridtraits.hh:24
Definition periodicgridtraits.hh:23
Dune-based quadrature rule with specified order.
Definition quadraturerules.hh:66
Midpoint quadrature rule that uses scv/scvf centers.
Definition quadraturerules.hh:58
Compute the volume of several common geometry types.