13#ifndef DUMUX_DISCRETIZATION_PQ1BUBBLE_GEOMETRY_HELPER_HH
14#define DUMUX_DISCRETIZATION_PQ1BUBBLE_GEOMETRY_HELPER_HH
19#include <dune/common/exceptions.hh>
20#include <dune/common/rangeutilities.hh>
21#include <dune/common/reservedvector.hh>
23#include <dune/geometry/type.hh>
24#include <dune/geometry/referenceelements.hh>
25#include <dune/geometry/multilineargeometry.hh>
45 template<
int mydim,
int cdim >
48 using Type = Dune::ReservedVector< Dune::FieldVector< ct, cdim >, (1<<mydim)>;
55template<Dune::GeometryType::Id gt>
61 using Key = std::pair<std::uint8_t, std::uint8_t>;
62 static constexpr std::array<std::array<Key, 2>, 1>
keys = {{
70 using Key = std::pair<std::uint8_t, std::uint8_t>;
71 static constexpr std::array<std::array<Key, 3>, 1>
keys = {{
79 using Key = std::pair<std::uint8_t, std::uint8_t>;
80 static constexpr std::array<std::array<Key, 4>, 1>
keys = {{
88 using Key = std::pair<std::uint8_t, std::uint8_t>;
89 static constexpr std::array<std::array<Key, 4>, 1>
keys = {{
97 using Key = std::pair<std::uint8_t, std::uint8_t>;
98 static constexpr std::array<std::array<Key, 6>, 1>
keys = {{
99 {
Key{0, 1},
Key{2, 1},
Key{3, 1},
Key{1, 1},
Key{4, 1},
Key{5, 1} }
104template<Dune::GeometryType::Id gt>
110 using Key = std::pair<std::uint8_t, std::uint8_t>;
111 static constexpr std::array<std::array<Key, 1>, 1>
keys = {{
119 using Key = std::pair<std::uint8_t, std::uint8_t>;
120 static constexpr std::array<std::array<Key, 2>, 3>
keys = {{
130 using Key = std::pair<std::uint8_t, std::uint8_t>;
131 static constexpr std::array<std::array<Key, 2>, 4>
keys = {{
142 using Key = std::pair<std::uint8_t, std::uint8_t>;
143 static constexpr std::array<std::array<Key, 3>, 4>
keys = {{
154 using Key = std::pair<std::uint8_t, std::uint8_t>;
155 static constexpr std::array<std::array<Key, 3>, 8>
keys = {{
173template <
class Gr
idView,
class ScvType,
class ScvfType>
176 using Scalar =
typename GridView::ctype;
177 using GlobalPosition =
typename Dune::FieldVector<Scalar, GridView::dimensionworld>;
178 using ScvCornerStorage =
typename ScvType::Traits::CornerStorage;
179 using ScvfCornerStorage =
typename ScvfType::Traits::CornerStorage;
180 using LocalIndexType =
typename ScvType::Traits::LocalIndexType;
182 using Element =
typename GridView::template Codim<0>::Entity;
183 using Intersection =
typename GridView::Intersection;
185 static constexpr auto dim = GridView::dimension;
186 static constexpr auto dimWorld = GridView::dimensionworld;
194 , boxHelper_(geometry)
200 return getScvCorners(geo_.type(), [&](
const auto& local){ return geo_.global(local); }, localScvIdx);
204 template<
class Transformation>
205 static ScvCornerStorage
getScvCorners(Dune::GeometryType type, Transformation&& trans,
unsigned int localScvIdx)
208 const auto& ref = Dune::referenceElement<Scalar, dim>(type);
209 const auto numBoxScv = ref.size(dim);
211 if (localScvIdx < numBoxScv)
212 return BoxHelper::getScvCorners(type, trans, localScvIdx);
214 const auto localOverlappingScvIdx = localScvIdx-numBoxScv;
215 if (type == Dune::GeometryTypes::triangle)
220 else if (type == Dune::GeometryTypes::quadrilateral)
225 else if (type == Dune::GeometryTypes::tetrahedron)
230 else if (type == Dune::GeometryTypes::hexahedron)
236 DUNE_THROW(Dune::NotImplemented,
"PQ1Bubble scv geometries for dim=" << dim
237 <<
" dimWorld=" << dimWorld
238 <<
" type=" << type);
244 const auto type = geo_.type();
245 const auto numBoxScv = boxHelper_.numScv();
246 if (localScvIdx < numBoxScv)
247 return Dune::GeometryTypes::cube(dim);
248 else if (type == Dune::GeometryTypes::simplex(dim))
249 return Dune::GeometryTypes::simplex(dim);
250 else if (type == Dune::GeometryTypes::quadrilateral)
251 return Dune::GeometryTypes::quadrilateral;
252 else if (type == Dune::GeometryTypes::hexahedron)
253 return Dune::GeometryTypes::none(dim);
255 DUNE_THROW(Dune::NotImplemented,
"PQ1Bubble scv geometries for dim=" << dim
256 <<
" dimWorld=" << dimWorld
257 <<
" type=" << type);
263 return getScvfCorners(geo_.type(), [&](
const auto& local){ return geo_.global(local); }, localScvfIdx);
267 template<
class Transformation>
268 static ScvfCornerStorage
getScvfCorners(Dune::GeometryType type, Transformation&& trans,
unsigned int localScvfIdx)
271 const auto& ref = Dune::referenceElement<Scalar, dim>(type);
272 const auto numBoxScvf = ref.size(dim-1);
274 if (localScvfIdx < numBoxScvf)
275 return BoxHelper::getScvfCorners(type, trans, localScvfIdx);
277 const auto localOverlappingScvfIdx = localScvfIdx-numBoxScvf;
278 if (type == Dune::GeometryTypes::triangle)
283 else if (type == Dune::GeometryTypes::quadrilateral)
288 else if (type == Dune::GeometryTypes::tetrahedron)
293 else if (type == Dune::GeometryTypes::hexahedron)
299 DUNE_THROW(Dune::NotImplemented,
"PQ1Bubble scvf geometries for dim=" << dim
300 <<
" dimWorld=" << dimWorld
301 <<
" type=" << type);
306 const auto numBoxScvf = boxHelper_.numInteriorScvf();
307 if (localScvfIdx < numBoxScvf)
308 return Dune::GeometryTypes::cube(dim-1);
310 return Dune::GeometryTypes::simplex(dim-1);
315 unsigned int indexInFacet)
const
317 return boxHelper_.getBoundaryScvfCorners(localFacetIndex, indexInFacet);
322 return Dune::GeometryTypes::cube(dim-1);
325 template<
int d = dimWorld, std::enable_if_t<(d==3),
int> = 0>
326 GlobalPosition
normal(
const ScvfCornerStorage& p,
const std::array<LocalIndexType, 2>& scvPair)
340 template<
int d = dimWorld, std::enable_if_t<(d==2),
int> = 0>
341 GlobalPosition
normal(
const ScvfCornerStorage& p,
const std::array<LocalIndexType, 2>& scvPair)
344 const auto t = p[1] - p[0];
345 GlobalPosition
normal({-t[1], t[0]});
364 return BoxHelper::numInteriorScvf(type) + Dune::referenceElement<Scalar, dim>(type).size(dim);
370 return Dune::referenceElement<Scalar, dim>(type).size(localFacetIndex, 1, dim);
376 return boxHelper_.numScv() + 1;
380 Scalar
scvVolume(
unsigned int localScvIdx,
const ScvCornerStorage& p)
const
383 if constexpr (dim == 3)
384 if (scvType == Dune::GeometryTypes::none(dim))
385 return octahedronVolume_(p);
389 [&](
unsigned int i){
return p[i]; }
401 const auto numVertexDofs = Dune::referenceElement<Scalar, dim>(geo_.type()).size(dim);
402 if (localDofIdx < numVertexDofs)
403 return geo_.corner(localDofIdx);
405 return geo_.center();
410 const auto numEdges = referenceElement(geo_).size(dim-1);
411 if (localScvfIndex < numEdges)
413 static_cast<LocalIndexType
>(referenceElement(geo_).subEntity(localScvfIndex, dim-1, 0, dim)),
414 static_cast<LocalIndexType
>(referenceElement(geo_).subEntity(localScvfIndex, dim-1, 1, dim))
419 static_cast<LocalIndexType
>(localScvfIndex-numEdges)
425 const LocalIndexType insideScvIdx
426 =
static_cast<LocalIndexType
>(referenceElement(geo_).subEntity(localFacetIndex, 1, localIsScvfIndex, dim));
427 return { insideScvIdx, insideScvIdx };
432 if (localScvfIndex < boxHelper_.numInteriorScvf())
445 if (localScvIndex < boxHelper_.numScv())
452 static Element::Geometry::LocalCoordinate
localScvfCenter(Dune::GeometryType type,
unsigned int localScvfIdx)
458 static Element::Geometry::LocalCoordinate
localBoundaryScvfCenter(Dune::GeometryType type,
unsigned int localFacetIndex,
unsigned int indexInFace)
460 return Dumux::center(BoxHelper::getBoundaryScvfCorners(type, [&](
const auto& local){
return local; }, localFacetIndex, indexInFace));
464 Scalar octahedronVolume_(
const ScvCornerStorage& p)
const
473 typename Element::Geometry geo_;
474 BoxHelper boxHelper_;
477template <
class Gr
idView,
class ScvType,
class ScvfType, std::
size_t numCubeBubbleDofs>
480 using Scalar =
typename GridView::ctype;
481 using GlobalPosition =
typename Dune::FieldVector<Scalar, GridView::dimensionworld>;
482 using ScvCornerStorage =
typename ScvType::Traits::CornerStorage;
483 using ScvfCornerStorage =
typename ScvfType::Traits::CornerStorage;
484 using LocalIndexType =
typename ScvType::Traits::LocalIndexType;
486 using Element =
typename GridView::template Codim<0>::Entity;
487 using Intersection =
typename GridView::Intersection;
489 static constexpr auto dim = GridView::dimension;
490 static constexpr auto dimWorld = GridView::dimensionworld;
498 , boxHelper_(geometry)
504 return getScvCorners(geo_.type(), [&](
const auto& local){ return geo_.global(local); }, localScvIdx);
508 template<
class Transformation>
509 static ScvCornerStorage
getScvCorners(Dune::GeometryType type, Transformation&& trans,
unsigned int localScvIdx)
512 const auto& ref = Dune::referenceElement<Scalar, dim>(type);
513 const auto numBoxScv = ref.size(dim);
515 if (localScvIdx < numBoxScv)
516 return BoxHelper::getScvCorners(type, trans, localScvIdx);
518 DUNE_THROW(Dune::NotImplemented,
"PQ1Bubble scv corners call for hybrid dofs");
524 const auto numBoxScv = boxHelper_.numScv();
526 if (localScvIdx < numBoxScv)
527 return Dune::GeometryTypes::cube(dim);
529 DUNE_THROW(Dune::NotImplemented,
"PQ1Bubble scv geometry call for hybrid dofs");
535 return getScvfCorners(geo_.type(), [&](
const auto& local){ return geo_.global(local); }, localScvfIdx);
539 template<
class Transformation>
540 static ScvfCornerStorage
getScvfCorners(Dune::GeometryType type, Transformation&& trans,
unsigned int localScvfIdx)
543 const auto& ref = Dune::referenceElement<Scalar, dim>(type);
544 const auto numBoxScvf = ref.size(dim-1);
546 if (localScvfIdx < numBoxScvf)
547 return BoxHelper::getScvfCorners(type, trans, localScvfIdx);
549 DUNE_THROW(Dune::NotImplemented,
"PQ1Bubble scvf corners call for hybrid dofs");
554 const auto numBoxScvf = boxHelper_.numInteriorScvf();
555 if (localScvfIdx < numBoxScvf)
556 return Dune::GeometryTypes::cube(dim-1);
558 DUNE_THROW(Dune::NotImplemented,
"PQ1Bubble interior scvf geometry type call for hybrid dofs");
563 unsigned int indexInFacet)
const
565 return boxHelper_.getBoundaryScvfCorners(localFacetIndex, indexInFacet);
570 return Dune::GeometryTypes::cube(dim-1);
573 template<
int d = dimWorld, std::enable_if_t<(d==3),
int> = 0>
574 GlobalPosition
normal(
const ScvfCornerStorage& p,
const std::array<LocalIndexType, 2>& scvPair)
588 template<
int d = dimWorld, std::enable_if_t<(d==2),
int> = 0>
589 GlobalPosition
normal(
const ScvfCornerStorage& p,
const std::array<LocalIndexType, 2>& scvPair)
592 const auto t = p[1] - p[0];
593 GlobalPosition
normal({-t[1], t[0]});
612 return BoxHelper::numInteriorScvf(type);
618 return Dune::referenceElement<Scalar, dim>(type).size(localFacetIndex, 1, dim);
624 return boxHelper_.numScv();
628 Scalar
scvVolume(
unsigned int localScvIdx,
const ScvCornerStorage& p)
const
634 [&](
unsigned int i){
return p[i]; }
641 return type.isCube() ? numCubeBubbleDofs : 1;
646 const auto numVertexDofs = Dune::referenceElement<Scalar, dim>(geo_.type()).size(dim);
647 if (localDofIdx < numVertexDofs)
648 return geo_.corner(localDofIdx);
650 return geo_.center();
655 const auto numEdges = referenceElement(geo_).size(dim-1);
656 if (localScvfIndex < numEdges)
658 static_cast<LocalIndexType
>(referenceElement(geo_).subEntity(localScvfIndex, dim-1, 0, dim)),
659 static_cast<LocalIndexType
>(referenceElement(geo_).subEntity(localScvfIndex, dim-1, 1, dim))
662 DUNE_THROW(Dune::NotImplemented,
"PQ1Bubble scv pair call for hybrid dofs");
667 const LocalIndexType insideScvIdx
668 =
static_cast<LocalIndexType
>(referenceElement(geo_).subEntity(localFacetIndex, 1, localIsScvfIndex, dim));
669 return { insideScvIdx, insideScvIdx };
682 static Element::Geometry::LocalCoordinate
localScvfCenter(Dune::GeometryType type,
unsigned int localScvfIdx)
688 static Element::Geometry::LocalCoordinate
localBoundaryScvfCenter(Dune::GeometryType type,
unsigned int localFacetIndex,
unsigned int indexInFace)
690 return Dumux::center(BoxHelper::getBoundaryScvfCorners(type, [&](
const auto& local){
return local; }, localFacetIndex, indexInFace));
694 typename Element::Geometry geo_;
Helper class constructing the dual grid finite volume geometries for the box discretizazion method.
Compute the center point of a convex polytope geometry or a random-access container of corner points.
Create sub control volumes and sub control volume face geometries.
Definition boxgeometryhelper.hh:261
PQ1BubbleDofHelper< GridView, numCubeBubbleDofs > DofHelper
Definition discretization/pq1bubble/geometryhelper.hh:494
GlobalPosition normal(const ScvfCornerStorage &p, const std::array< LocalIndexType, 2 > &scvPair)
Definition discretization/pq1bubble/geometryhelper.hh:574
static auto numInteriorScvf(Dune::GeometryType type)
number of interior sub control volume faces
Definition discretization/pq1bubble/geometryhelper.hh:610
std::array< LocalIndexType, 2 > getScvPairForScvf(unsigned int localScvfIndex) const
Definition discretization/pq1bubble/geometryhelper.hh:653
static Element::Geometry::LocalCoordinate localScvfCenter(Dune::GeometryType type, unsigned int localScvfIdx)
local scvf center
Definition discretization/pq1bubble/geometryhelper.hh:682
bool isOverlappingScv(unsigned int localScvIndex) const
Definition discretization/pq1bubble/geometryhelper.hh:678
HybridPQ1BubbleGeometryHelper(const typename Element::Geometry &geometry)
Definition discretization/pq1bubble/geometryhelper.hh:496
const Element::Geometry & elementGeometry() const
the wrapped element geometry
Definition discretization/pq1bubble/geometryhelper.hh:606
static Element::Geometry::LocalCoordinate localBoundaryScvfCenter(Dune::GeometryType type, unsigned int localFacetIndex, unsigned int indexInFace)
local boundary scvf center
Definition discretization/pq1bubble/geometryhelper.hh:688
static ScvfCornerStorage getScvfCorners(Dune::GeometryType type, Transformation &&trans, unsigned int localScvfIdx)
Create a vector with the corners of sub control volume faces.
Definition discretization/pq1bubble/geometryhelper.hh:540
ScvfCornerStorage getBoundaryScvfCorners(unsigned int localFacetIndex, unsigned int indexInFacet) const
Create the sub control volume face geometries on the boundary.
Definition discretization/pq1bubble/geometryhelper.hh:562
Dune::GeometryType getScvGeometryType(unsigned int localScvIdx) const
Definition discretization/pq1bubble/geometryhelper.hh:521
Dune::GeometryType getInteriorScvfGeometryType(unsigned int localScvfIdx) const
Definition discretization/pq1bubble/geometryhelper.hh:552
static ScvCornerStorage getScvCorners(Dune::GeometryType type, Transformation &&trans, unsigned int localScvIdx)
Create a vector with the scv corners.
Definition discretization/pq1bubble/geometryhelper.hh:509
bool isOverlappingBoundaryScvf(unsigned int localFacetIndex) const
Definition discretization/pq1bubble/geometryhelper.hh:675
static std::size_t numNonCVLocalDofs(Dune::GeometryType type)
number of hybrid dofs (overrides base: for cube elements there are numCubeBubbleDofs extra dofs)
Definition discretization/pq1bubble/geometryhelper.hh:639
static auto numBoundaryScvf(Dune::GeometryType type, unsigned int localFacetIndex)
number of boundary sub control volume faces for face localFacetIndex
Definition discretization/pq1bubble/geometryhelper.hh:616
Scalar scvVolume(unsigned int localScvIdx, const ScvCornerStorage &p) const
get scv volume
Definition discretization/pq1bubble/geometryhelper.hh:628
std::array< LocalIndexType, 2 > getScvPairForBoundaryScvf(unsigned int localFacetIndex, unsigned int localIsScvfIndex) const
Definition discretization/pq1bubble/geometryhelper.hh:665
GlobalPosition dofPosition(unsigned int localDofIdx) const
Definition discretization/pq1bubble/geometryhelper.hh:644
bool isOverlappingScvf(unsigned int localScvfIndex) const
Definition discretization/pq1bubble/geometryhelper.hh:672
ScvfCornerStorage getScvfCorners(unsigned int localScvfIdx) const
Create a vector with the corners of sub control volume faces.
Definition discretization/pq1bubble/geometryhelper.hh:533
ScvCornerStorage getScvCorners(unsigned int localScvIdx) const
Create a vector with the scv corners.
Definition discretization/pq1bubble/geometryhelper.hh:502
std::size_t numScv() const
number of sub control volumes (number of codim-1 entities)
Definition discretization/pq1bubble/geometryhelper.hh:622
Dune::GeometryType getBoundaryScvfGeometryType(unsigned int localScvfIdx) const
Definition discretization/pq1bubble/geometryhelper.hh:568
Dof helper for the PQ1Bubble method, providing the number of dofs and their positions.
Definition pq1bubble/dofhelper.hh:36
static std::size_t numElementDofs(Dune::GeometryType type)
Definition pq1bubble/dofhelper.hh:48
PQ1BubbleGeometryHelper(const typename Element::Geometry &geometry)
Definition discretization/pq1bubble/geometryhelper.hh:192
static auto numBoundaryScvf(Dune::GeometryType type, unsigned int localFacetIndex)
number of boundary sub control volume faces for face localFacetIndex
Definition discretization/pq1bubble/geometryhelper.hh:368
bool isOverlappingBoundaryScvf(unsigned int localFacetIndex) const
Definition discretization/pq1bubble/geometryhelper.hh:438
bool isOverlappingScvf(unsigned int localScvfIndex) const
Definition discretization/pq1bubble/geometryhelper.hh:430
static std::size_t numNonCVLocalDofs(Dune::GeometryType type)
number of hybrid dofs (overrides base: PQ1Bubble uses no non-CV dofs in the FV context)
Definition discretization/pq1bubble/geometryhelper.hh:394
std::size_t numScv() const
number of sub control volumes (number of codim-1 entities)
Definition discretization/pq1bubble/geometryhelper.hh:374
static auto numInteriorScvf(Dune::GeometryType type)
number of interior sub control volume faces
Definition discretization/pq1bubble/geometryhelper.hh:362
static ScvfCornerStorage getScvfCorners(Dune::GeometryType type, Transformation &&trans, unsigned int localScvfIdx)
Create a vector with the corners of sub control volume faces.
Definition discretization/pq1bubble/geometryhelper.hh:268
static ScvCornerStorage getScvCorners(Dune::GeometryType type, Transformation &&trans, unsigned int localScvIdx)
Create a vector with the scv corners.
Definition discretization/pq1bubble/geometryhelper.hh:205
Dune::GeometryType getBoundaryScvfGeometryType(unsigned int localScvfIdx) const
Definition discretization/pq1bubble/geometryhelper.hh:320
static Element::Geometry::LocalCoordinate localBoundaryScvfCenter(Dune::GeometryType type, unsigned int localFacetIndex, unsigned int indexInFace)
local boundary scvf center
Definition discretization/pq1bubble/geometryhelper.hh:458
PQ1BubbleDofHelper< GridView, 1 > DofHelper
Definition discretization/pq1bubble/geometryhelper.hh:190
ScvfCornerStorage getBoundaryScvfCorners(unsigned int localFacetIndex, unsigned int indexInFacet) const
Create the sub control volume face geometries on the boundary.
Definition discretization/pq1bubble/geometryhelper.hh:314
std::array< LocalIndexType, 2 > getScvPairForScvf(unsigned int localScvfIndex) const
Definition discretization/pq1bubble/geometryhelper.hh:408
GlobalPosition dofPosition(unsigned int localDofIdx) const
Definition discretization/pq1bubble/geometryhelper.hh:399
Dune::GeometryType getInteriorScvfGeometryType(unsigned int localScvfIdx) const
Definition discretization/pq1bubble/geometryhelper.hh:304
bool isOverlappingScv(unsigned int localScvIndex) const
Definition discretization/pq1bubble/geometryhelper.hh:443
Scalar scvVolume(unsigned int localScvIdx, const ScvCornerStorage &p) const
get scv volume
Definition discretization/pq1bubble/geometryhelper.hh:380
const Element::Geometry & elementGeometry() const
the wrapped element geometry
Definition discretization/pq1bubble/geometryhelper.hh:358
ScvfCornerStorage getScvfCorners(unsigned int localScvfIdx) const
Create a vector with the corners of sub control volume faces.
Definition discretization/pq1bubble/geometryhelper.hh:261
std::array< LocalIndexType, 2 > getScvPairForBoundaryScvf(unsigned int localFacetIndex, unsigned int localIsScvfIndex) const
Definition discretization/pq1bubble/geometryhelper.hh:423
static Element::Geometry::LocalCoordinate localScvfCenter(Dune::GeometryType type, unsigned int localScvfIdx)
local scvf center
Definition discretization/pq1bubble/geometryhelper.hh:452
GlobalPosition normal(const ScvfCornerStorage &p, const std::array< LocalIndexType, 2 > &scvPair)
Definition discretization/pq1bubble/geometryhelper.hh:326
ScvCornerStorage getScvCorners(unsigned int localScvIdx) const
Create a vector with the scv corners.
Definition discretization/pq1bubble/geometryhelper.hh:198
Dune::GeometryType getScvGeometryType(unsigned int localScvIdx) const
Definition discretization/pq1bubble/geometryhelper.hh:241
Dune::FieldVector< Scalar, 3 > crossProduct(const Dune::FieldVector< Scalar, 3 > &vec1, const Dune::FieldVector< Scalar, 3 > &vec2)
Cross product of two vectors in three-dimensional Euclidean space.
Definition math.hh:671
Scalar tripleProduct(const Dune::FieldVector< Scalar, 3 > &vec1, const Dune::FieldVector< Scalar, 3 > &vec2, const Dune::FieldVector< Scalar, 3 > &vec3)
Triple product of three vectors in three-dimensional Euclidean space retuning scalar.
Definition math.hh:700
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
Class representing dofs on elements for control-volume finite element schemes.
Define some often used mathematical functions.
S keyToCornerStorage(const ReferenceElement &ref, Transformation &&trans, const std::array< T, N > &key)
Definition boxgeometryhelper.hh:232
Definition discretization/pq1bubble/geometryhelper.hh:53
Definition common/pdesolver.hh:24
Dof helper for the PQ1Bubble method, providing the number of dofs and their positions.
static constexpr std::array< std::array< Key, 6 >, 1 > keys
Definition discretization/pq1bubble/geometryhelper.hh:98
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/pq1bubble/geometryhelper.hh:97
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/pq1bubble/geometryhelper.hh:61
static constexpr std::array< std::array< Key, 2 >, 1 > keys
Definition discretization/pq1bubble/geometryhelper.hh:62
static constexpr std::array< std::array< Key, 4 >, 1 > keys
Definition discretization/pq1bubble/geometryhelper.hh:80
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/pq1bubble/geometryhelper.hh:79
static constexpr std::array< std::array< Key, 4 >, 1 > keys
Definition discretization/pq1bubble/geometryhelper.hh:89
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/pq1bubble/geometryhelper.hh:88
static constexpr std::array< std::array< Key, 3 >, 1 > keys
Definition discretization/pq1bubble/geometryhelper.hh:71
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/pq1bubble/geometryhelper.hh:70
Definition discretization/pq1bubble/geometryhelper.hh:56
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/pq1bubble/geometryhelper.hh:154
static constexpr std::array< std::array< Key, 3 >, 8 > keys
Definition discretization/pq1bubble/geometryhelper.hh:155
static constexpr std::array< std::array< Key, 1 >, 1 > keys
Definition discretization/pq1bubble/geometryhelper.hh:111
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/pq1bubble/geometryhelper.hh:110
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/pq1bubble/geometryhelper.hh:130
static constexpr std::array< std::array< Key, 2 >, 4 > keys
Definition discretization/pq1bubble/geometryhelper.hh:131
static constexpr std::array< std::array< Key, 3 >, 4 > keys
Definition discretization/pq1bubble/geometryhelper.hh:143
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/pq1bubble/geometryhelper.hh:142
static constexpr std::array< std::array< Key, 2 >, 3 > keys
Definition discretization/pq1bubble/geometryhelper.hh:120
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/pq1bubble/geometryhelper.hh:119
Definition discretization/pq1bubble/geometryhelper.hh:105
Definition discretization/pq1bubble/geometryhelper.hh:47
Dune::ReservedVector< Dune::FieldVector< ct, cdim >,(1<< mydim)> Type
Definition discretization/pq1bubble/geometryhelper.hh:48
Traits for an efficient corner storage for the PQ1Bubble method.
Definition discretization/pq1bubble/geometryhelper.hh:41
Compute the volume of several common geometry types.