version 3.11-dev
Loading...
Searching...
No Matches
discretization/facecentered/diamond/geometryhelper.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//
12#ifndef DUMUX_DISCRETIZATION_FACECENTERED_DIAMOND_GEOMETRY_HELPER_HH
13#define DUMUX_DISCRETIZATION_FACECENTERED_DIAMOND_GEOMETRY_HELPER_HH
14
15#include <array>
16#include <ranges>
17
18#include <dune/common/reservedvector.hh>
19#include <dune/common/fvector.hh>
20#include <dune/geometry/multilineargeometry.hh>
21#include <dune/geometry/type.hh>
22
23#include <dumux/common/math.hh>
28
29namespace Dumux {
30
32template <class ct>
33struct FCDiamondMLGeometryTraits : public Dune::MultiLinearGeometryTraits<ct>
34{
35 // we use static vectors to store the corners as we know
36 // the maximum number of corners in advance (2^dim)
37 template< int mydim, int cdim >
39 {
40 using Type = Dune::ReservedVector< Dune::FieldVector< ct, cdim >, (1<<mydim)>;
41 };
42};
43
45
46template<Dune::GeometryType::Id gt>
48
49template<>
50struct ScvCorners<Dune::GeometryTypes::triangle>
51{
52 static constexpr Dune::GeometryType type()
53 { return Dune::GeometryTypes::triangle; }
54
55 using Key = std::pair<std::uint8_t, std::uint8_t>; // (i, codim)
56 static constexpr std::array<std::array<Key, 3>, 3> keys = {{
57 { Key{0, 2}, Key{1, 2}, Key{0, 0} },
58 { Key{2, 2}, Key{0, 2}, Key{0, 0} },
59 { Key{1, 2}, Key{2, 2}, Key{0, 0} }
60 }};
61};
62
63template<>
64struct ScvCorners<Dune::GeometryTypes::quadrilateral>
65{
66 static constexpr Dune::GeometryType type()
67 { return Dune::GeometryTypes::triangle; }
68
69 using Key = std::pair<std::uint8_t, std::uint8_t>; // (i, codim)
70 static constexpr std::array<std::array<Key, 3>, 4> keys = {{
71 { Key{2, 2}, Key{0, 2}, Key{0, 0} },
72 { Key{1, 2}, Key{3, 2}, Key{0, 0} },
73 { Key{0, 2}, Key{1, 2}, Key{0, 0} },
74 { Key{3, 2}, Key{2, 2}, Key{0, 0} }
75 }};
76};
77
78template<>
79struct ScvCorners<Dune::GeometryTypes::tetrahedron>
80{
81 static constexpr Dune::GeometryType type()
82 { return Dune::GeometryTypes::tetrahedron; }
83
84 using Key = std::pair<std::uint8_t, std::uint8_t>; // (i, codim)
85 static constexpr std::array<std::array<Key, 4>, 4> keys = {{
86 { Key{0, 3}, Key{1, 3}, Key{2, 3}, Key{0, 0} },
87 { Key{1, 3}, Key{0, 3}, Key{3, 3}, Key{0, 0} },
88 { Key{0, 3}, Key{2, 3}, Key{3, 3}, Key{0, 0} },
89 { Key{2, 3}, Key{1, 3}, Key{3, 3}, Key{0, 0} }
90 }};
91};
92
93template<>
94struct ScvCorners<Dune::GeometryTypes::hexahedron>
95{
96 static constexpr Dune::GeometryType type()
97 { return Dune::GeometryTypes::pyramid; }
98
99 using Key = std::pair<std::uint8_t, std::uint8_t>; // (i, codim)
100 static constexpr std::array<std::array<Key, 5>, 6> keys = {{
101 { Key{4, 3}, Key{0, 3}, Key{6, 3}, Key{2, 3}, Key{0, 0} },
102 { Key{1, 3}, Key{5, 3}, Key{3, 3}, Key{7, 3}, Key{0, 0} },
103 { Key{4, 3}, Key{5, 3}, Key{0, 3}, Key{1, 3}, Key{0, 0} },
104 { Key{2, 3}, Key{3, 3}, Key{6, 3}, Key{7, 3}, Key{0, 0} },
105 { Key{0, 3}, Key{1, 3}, Key{2, 3}, Key{3, 3}, Key{0, 0} },
106 { Key{6, 3}, Key{7, 3}, Key{4, 3}, Key{5, 3}, Key{0, 0} }
107 }};
108};
109
110template<Dune::GeometryType::Id gt>
112
113template<>
114struct ScvfCorners<Dune::GeometryTypes::triangle>
115{
116 static constexpr Dune::GeometryType type()
117 { return Dune::GeometryTypes::line; }
118
119 using Key = std::pair<std::uint8_t, std::uint8_t>; // (i, codim)
120 static constexpr std::array<std::array<Key, 2>, 3> keys = {{
121 { Key{0, 2}, Key{0, 0} },
122 { Key{1, 2}, Key{0, 0} },
123 { Key{2, 2}, Key{0, 0} }
124 }};
125};
126
127template<>
128struct ScvfCorners<Dune::GeometryTypes::quadrilateral>
129{
130 static constexpr Dune::GeometryType type()
131 { return Dune::GeometryTypes::line; }
132
133 using Key = std::pair<std::uint8_t, std::uint8_t>; // (i, codim)
134 static constexpr std::array<std::array<Key, 2>, 4> keys = {{
135 { Key{0, 2}, Key{0, 0} },
136 { Key{1, 2}, Key{0, 0} },
137 { Key{2, 2}, Key{0, 0} },
138 { Key{3, 2}, Key{0, 0} }
139 }};
140};
141
142template<>
143struct ScvfCorners<Dune::GeometryTypes::tetrahedron>
144{
145 static constexpr Dune::GeometryType type()
146 { return Dune::GeometryTypes::triangle; }
147
148 using Key = std::pair<std::uint8_t, std::uint8_t>; // (i, codim)
149 static constexpr std::array<std::array<Key, 3>, 6> keys = {{
150 { Key{0, 3}, Key{1, 3}, Key{0, 0} },
151 { Key{2, 3}, Key{0, 3}, Key{0, 0} },
152 { Key{1, 3}, Key{2, 3}, Key{0, 0} },
153 { Key{0, 3}, Key{3, 3}, Key{0, 0} },
154 { Key{1, 3}, Key{3, 3}, Key{0, 0} },
155 { Key{2, 3}, Key{3, 3}, Key{0, 0} }
156 }};
157};
158
159template<>
160struct ScvfCorners<Dune::GeometryTypes::hexahedron>
161{
162 static constexpr Dune::GeometryType type()
163 { return Dune::GeometryTypes::triangle; }
164
165 using Key = std::pair<std::uint8_t, std::uint8_t>; // (i, codim)
166 static constexpr std::array<std::array<Key, 3>, 12> keys = {{
167 { Key{0, 3}, Key{4, 3}, Key{0, 0} },
168 { Key{1, 3}, Key{5, 3}, Key{0, 0} },
169 { Key{2, 3}, Key{6, 3}, Key{0, 0} },
170 { Key{3, 3}, Key{7, 3}, Key{0, 0} },
171 { Key{0, 3}, Key{2, 3}, Key{0, 0} },
172 { Key{1, 3}, Key{3, 3}, Key{0, 0} },
173 { Key{0, 3}, Key{1, 3}, Key{0, 0} },
174 { Key{2, 3}, Key{3, 3}, Key{0, 0} },
175 { Key{4, 3}, Key{6, 3}, Key{0, 0} },
176 { Key{5, 3}, Key{7, 3}, Key{0, 0} },
177 { Key{4, 3}, Key{5, 3}, Key{0, 0} },
178 { Key{6, 3}, Key{7, 3}, Key{0, 0} }
179 }};
180};
181
182// convert key array to corner storage
183template<class S, class ReferenceElement, class Transformation, class KeyArray, std::size_t... I>
184S keyToCornerStorageImpl(const ReferenceElement& ref, Transformation&& trans, const KeyArray& key, std::index_sequence<I...>)
185{
186 // key is a pair of a local sub-entity index (first) and the sub-entity's codim (second)
187 return { trans(ref.position(key[I].first, key[I].second))... };
188}
189
190// convert key array to corner storage
191template<class S, class ReferenceElement, class Transformation, class T, std::size_t N, class Indices = std::make_index_sequence<N>>
192S keyToCornerStorage(const ReferenceElement& ref, Transformation&& trans, const std::array<T, N>& key)
193{
194 return keyToCornerStorageImpl<S>(ref, trans, key, Indices{});
195}
196
197// boundary corners for the i-th facet
198template<class S, int dim, class ReferenceElement, class Transformation, std::size_t... ii>
199S boundaryCornerStorageImpl(const ReferenceElement& ref, Transformation&& trans, unsigned int i, std::index_sequence<ii...>)
200{
201 // simply the vertices of the facet i
202 return { trans(ref.position(ref.subEntity(i, 1, ii, dim), dim))... };
203}
204
205// boundary corners for the i-th facet
206template<class S, std::size_t numCorners, int dim, class ReferenceElement, class Transformation>
207S boundaryCornerStorage(const ReferenceElement& ref, Transformation&& trans, unsigned int i)
208{
209 return boundaryCornerStorageImpl<S, dim>(ref, trans, i, std::make_index_sequence<numCorners>{});
210}
211
212template<class IndexType, Dune::GeometryType::Id gt>
214
215template<class IndexType>
216struct InsideOutsideScv<IndexType, Dune::GeometryTypes::triangle>
217{
218 static constexpr std::array<std::array<IndexType, 2>, 3> pairs = {{
219 {0, 1}, {0, 2}, {1, 2}
220 }};
221};
222
223template<class IndexType>
224struct InsideOutsideScv<IndexType, Dune::GeometryTypes::quadrilateral>
225{
226 static constexpr std::array<std::array<IndexType, 2>, 4> pairs = {{
227 {0, 2}, {1, 2}, {0, 3}, {1, 3}
228 }};
229};
230
231template<class IndexType>
232struct InsideOutsideScv<IndexType, Dune::GeometryTypes::tetrahedron>
233{
234 static constexpr std::array<std::array<IndexType, 2>, 6> pairs = {{
235 {0, 1}, {0, 2}, {0, 3}, {1, 2}, {1, 3}, {2, 3},
236 }};
237};
238
239template<class IndexType>
240struct InsideOutsideScv<IndexType, Dune::GeometryTypes::hexahedron>
241{
242 static constexpr std::array<std::array<IndexType, 2>, 12> pairs = {{
243 {0, 2}, {1, 2}, {0, 3}, {1, 3}, {0, 4}, {1, 4},
244 {2, 4}, {3, 4}, {0, 5}, {1, 5}, {2, 5}, {3, 5}
245 }};
246};
247
248} // end namespace Detail::FCDiamond
249
254template <class GridView, class ScvType, class ScvfType>
256{
257 using Element = typename GridView::template Codim<0>::Entity;
258
259 static constexpr auto dim = GridView::dimension;
260 static constexpr auto dimWorld = GridView::dimensionworld;
261
262 using ScvCornerStorage = typename ScvType::Traits::CornerStorage;
263 using LocalIndexType = typename ScvType::Traits::LocalIndexType;
264 using ScvfCornerStorage = typename ScvfType::Traits::CornerStorage;
265
266 // for the normal
267 using Scalar = typename GridView::ctype;
268 using GlobalPosition = typename Dune::FieldVector<Scalar, GridView::dimensionworld>;
269
270public:
272
273 explicit DiamondGeometryHelper(const typename Element::Geometry& geo)
274 : geo_(geo)
275 {}
276
278 ScvCornerStorage getScvCorners(unsigned int localFacetIndex) const
279 {
280 return getScvCorners(geo_.type(), [&](const auto& local){ return geo_.global(local); }, localFacetIndex);
281 }
282
284 template<class Transformation>
285 static ScvCornerStorage getScvCorners(Dune::GeometryType type, Transformation&& trans, unsigned int localFacetIndex)
286 {
287 const auto& ref = Dune::referenceElement<Scalar, dim>(type);
288 if (type == Dune::GeometryTypes::triangle)
289 {
291 return Detail::FCDiamond::keyToCornerStorage<ScvCornerStorage>(ref, trans, Corners::keys[localFacetIndex]);
292 }
293 else if (type == Dune::GeometryTypes::quadrilateral)
294 {
296 return Detail::FCDiamond::keyToCornerStorage<ScvCornerStorage>(ref, trans, Corners::keys[localFacetIndex]);
297 }
298 else if (type == Dune::GeometryTypes::tetrahedron)
299 {
301 return Detail::FCDiamond::keyToCornerStorage<ScvCornerStorage>(ref, trans, Corners::keys[localFacetIndex]);
302 }
303 else if (type == Dune::GeometryTypes::hexahedron)
304 {
306 return Detail::FCDiamond::keyToCornerStorage<ScvCornerStorage>(ref, trans, Corners::keys[localFacetIndex]);
307 }
308 else
309 DUNE_THROW(Dune::NotImplemented, "Scv geometries for type " << type);
310 }
311
313 ScvfCornerStorage getScvfCorners(unsigned int localEdgeIndex) const
314 {
315 return getScvfCorners(geo_.type(), [&](const auto& local){ return geo_.global(local); }, localEdgeIndex);
316 }
317
319 template<class Transformation>
320 static ScvfCornerStorage getScvfCorners(Dune::GeometryType type, Transformation&& trans, unsigned int localEdgeIndex)
321 {
322 const auto& ref = Dune::referenceElement<Scalar, dim>(type);
323 if (type == Dune::GeometryTypes::triangle)
324 {
326 return Detail::FCDiamond::keyToCornerStorage<ScvfCornerStorage>(ref, trans, Corners::keys[localEdgeIndex]);
327 }
328 else if (type == Dune::GeometryTypes::quadrilateral)
329 {
331 return Detail::FCDiamond::keyToCornerStorage<ScvfCornerStorage>(ref, trans, Corners::keys[localEdgeIndex]);
332 }
333 else if (type == Dune::GeometryTypes::tetrahedron)
334 {
336 return Detail::FCDiamond::keyToCornerStorage<ScvfCornerStorage>(ref, trans, Corners::keys[localEdgeIndex]);
337 }
338 else if (type == Dune::GeometryTypes::hexahedron)
339 {
341 return Detail::FCDiamond::keyToCornerStorage<ScvfCornerStorage>(ref, trans, Corners::keys[localEdgeIndex]);
342 }
343 else
344 DUNE_THROW(Dune::NotImplemented, "Scvf geometries for type " << type);
345 }
346
348 ScvfCornerStorage getBoundaryScvfCorners(unsigned int localFacetIndex) const
349 {
350 return getBoundaryScvfCorners(geo_.type(), [&](const auto& local){ return geo_.global(local); }, localFacetIndex);
351 }
352
354 template<class Transformation>
355 static ScvfCornerStorage getBoundaryScvfCorners(Dune::GeometryType type, Transformation&& trans, unsigned int localFacetIndex)
356 {
357 const auto& ref = Dune::referenceElement<Scalar, dim>(type);
358 if (type == Dune::GeometryTypes::triangle || type == Dune::GeometryTypes::quadrilateral)
360 else if (type == Dune::GeometryTypes::tetrahedron)
362 else if (type == Dune::GeometryTypes::hexahedron)
364 else
365 DUNE_THROW(Dune::NotImplemented, "Boundary scvf geometries for type " << type);
366 }
367
368 GlobalPosition facetCenter(unsigned int localFacetIndex) const
369 {
370 return geo_.global(referenceElement(geo_).position(localFacetIndex, 1));
371 }
372
373 std::array<LocalIndexType, 2> getInsideOutsideScvForScvf(unsigned int localEdgeIndex)
374 {
375 const auto type = geo_.type();
376 if (type == Dune::GeometryTypes::triangle)
378 else if (type == Dune::GeometryTypes::quadrilateral)
380 else if (type == Dune::GeometryTypes::tetrahedron)
382 else if (type == Dune::GeometryTypes::hexahedron)
384 else
385 DUNE_THROW(Dune::NotImplemented, "Inside outside scv pairs for type " << type);
386 }
387
389 std::size_t numInteriorScvf()
390 {
391 return referenceElement(geo_).size(2);
392 }
393
395 std::size_t numScv()
396 {
397 return referenceElement(geo_).size(1);
398 }
399
400 template<int d = dimWorld, std::enable_if_t<(d==3), int> = 0>
401 GlobalPosition normal(const ScvfCornerStorage& p, const std::array<LocalIndexType, 2>& scvPair)
402 {
403 auto normal = Dumux::crossProduct(p[1]-p[0], p[2]-p[0]);
404 normal /= normal.two_norm();
405
406 const auto ref = referenceElement(geo_);
407 const auto v = facetCenter_(scvPair[1], ref) - facetCenter_(scvPair[0], ref);
408
409 const auto s = v*normal;
410 if (std::signbit(s))
411 normal *= -1;
412
413 return normal;
414 }
415
416 template<int d = dimWorld, std::enable_if_t<(d==2), int> = 0>
417 GlobalPosition normal(const ScvfCornerStorage& p, const std::array<LocalIndexType, 2>& scvPair)
418 {
420 const auto t = p[1] - p[0];
421 GlobalPosition normal({-t[1], t[0]});
422 normal /= normal.two_norm();
423
424 const auto ref = referenceElement(geo_);
425 const auto v = facetCenter_(scvPair[1], ref) - facetCenter_(scvPair[0], ref);
426
427 const auto s = v*normal;
428 if (std::signbit(s))
429 normal *= -1;
430
431 return normal;
432 }
433
434 const typename Element::Geometry& elementGeometry() const
435 { return geo_; }
436
438 static Element::Geometry::LocalCoordinate localScvfCenter(Dune::GeometryType type, unsigned int localScvfIdx)
439 {
440 return Dumux::center(getScvfCorners(type, [&](const auto& local){ return local; }, localScvfIdx));
441 }
442
444 static Element::Geometry::LocalCoordinate localBoundaryScvfCenter(Dune::GeometryType type, unsigned int localFacetIndex)
445 {
446 return Dumux::center(getBoundaryScvfCorners(type, [&](const auto& local){ return local; }, localFacetIndex));
447 }
448
449private:
450 template<class RefElement>
451 GlobalPosition facetCenter_(unsigned int localFacetIndex, const RefElement& ref) const
452 {
453 return geo_.global(ref.position(localFacetIndex, 1));
454 }
455
456 const typename Element::Geometry& geo_;
457};
458
459} // end namespace Dumux
460
461#endif
Compute the center point of a convex polytope geometry or a random-access container of corner points.
GlobalPosition facetCenter(unsigned int localFacetIndex) const
Definition discretization/facecentered/diamond/geometryhelper.hh:368
ScvfCornerStorage getScvfCorners(unsigned int localEdgeIndex) const
Create a corner storage with the scvf corners for a given edge (codim-2) index.
Definition discretization/facecentered/diamond/geometryhelper.hh:313
static ScvfCornerStorage getBoundaryScvfCorners(Dune::GeometryType type, Transformation &&trans, unsigned int localFacetIndex)
Create the sub control volume face geometries on the boundary for a given face index.
Definition discretization/facecentered/diamond/geometryhelper.hh:355
std::size_t numInteriorScvf()
number of interior sub control volume faces (number of codim-2 entities)
Definition discretization/facecentered/diamond/geometryhelper.hh:389
std::array< LocalIndexType, 2 > getInsideOutsideScvForScvf(unsigned int localEdgeIndex)
Definition discretization/facecentered/diamond/geometryhelper.hh:373
static Element::Geometry::LocalCoordinate localScvfCenter(Dune::GeometryType type, unsigned int localScvfIdx)
local scvf center
Definition discretization/facecentered/diamond/geometryhelper.hh:438
PQ1NonconformingDofHelper< GridView > DofHelper
Definition discretization/facecentered/diamond/geometryhelper.hh:271
ScvCornerStorage getScvCorners(unsigned int localFacetIndex) const
Create a corner storage with the scv corners for a given face (codim-1) index.
Definition discretization/facecentered/diamond/geometryhelper.hh:278
DiamondGeometryHelper(const typename Element::Geometry &geo)
Definition discretization/facecentered/diamond/geometryhelper.hh:273
static ScvCornerStorage getScvCorners(Dune::GeometryType type, Transformation &&trans, unsigned int localFacetIndex)
Create a corner storage with the scv corners for a given face (codim-1) index.
Definition discretization/facecentered/diamond/geometryhelper.hh:285
static ScvfCornerStorage getScvfCorners(Dune::GeometryType type, Transformation &&trans, unsigned int localEdgeIndex)
Create a corner storage with the scvf corners for a given edge (codim-2) index.
Definition discretization/facecentered/diamond/geometryhelper.hh:320
GlobalPosition normal(const ScvfCornerStorage &p, const std::array< LocalIndexType, 2 > &scvPair)
Definition discretization/facecentered/diamond/geometryhelper.hh:401
static Element::Geometry::LocalCoordinate localBoundaryScvfCenter(Dune::GeometryType type, unsigned int localFacetIndex)
local boundary scvf center
Definition discretization/facecentered/diamond/geometryhelper.hh:444
const Element::Geometry & elementGeometry() const
Definition discretization/facecentered/diamond/geometryhelper.hh:434
ScvfCornerStorage getBoundaryScvfCorners(unsigned int localFacetIndex) const
Create the sub control volume face geometries on the boundary for a given face index.
Definition discretization/facecentered/diamond/geometryhelper.hh:348
std::size_t numScv()
number of sub control volumes (number of codim-1 entities)
Definition discretization/facecentered/diamond/geometryhelper.hh:395
Helper class providing degree of freedom information for the PQ1 nonconforming scheme....
Definition pq1nonconforming/dofhelper.hh:30
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
Corners::value_type center(const Corners &corners)
The center of a given list of corners.
Definition center.hh:24
Defines the index types used for grid and local indices.
Class representing dofs on elements for control-volume finite element schemes.
Define some often used mathematical functions.
Definition discretization/facecentered/diamond/geometryhelper.hh:44
S boundaryCornerStorageImpl(const ReferenceElement &ref, Transformation &&trans, unsigned int i, std::index_sequence< ii... >)
Definition discretization/facecentered/diamond/geometryhelper.hh:199
S keyToCornerStorage(const ReferenceElement &ref, Transformation &&trans, const std::array< T, N > &key)
Definition discretization/facecentered/diamond/geometryhelper.hh:192
S boundaryCornerStorage(const ReferenceElement &ref, Transformation &&trans, unsigned int i)
Definition discretization/facecentered/diamond/geometryhelper.hh:207
S keyToCornerStorageImpl(const ReferenceElement &ref, Transformation &&trans, const KeyArray &key, std::index_sequence< I... >)
Definition discretization/facecentered/diamond/geometryhelper.hh:184
Definition adapt.hh:17
Definition common/pdesolver.hh:24
Helper class providing degree of freedom information for the PQ1 nonconforming scheme.
static constexpr std::array< std::array< IndexType, 2 >, 4 > pairs
Definition discretization/facecentered/diamond/geometryhelper.hh:226
static constexpr std::array< std::array< IndexType, 2 >, 6 > pairs
Definition discretization/facecentered/diamond/geometryhelper.hh:234
static constexpr std::array< std::array< IndexType, 2 >, 12 > pairs
Definition discretization/facecentered/diamond/geometryhelper.hh:242
static constexpr std::array< std::array< IndexType, 2 >, 3 > pairs
Definition discretization/facecentered/diamond/geometryhelper.hh:218
Definition discretization/facecentered/diamond/geometryhelper.hh:213
static constexpr std::array< std::array< Key, 5 >, 6 > keys
Definition discretization/facecentered/diamond/geometryhelper.hh:100
static constexpr Dune::GeometryType type()
Definition discretization/facecentered/diamond/geometryhelper.hh:96
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/facecentered/diamond/geometryhelper.hh:99
static constexpr std::array< std::array< Key, 3 >, 4 > keys
Definition discretization/facecentered/diamond/geometryhelper.hh:70
static constexpr Dune::GeometryType type()
Definition discretization/facecentered/diamond/geometryhelper.hh:66
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/facecentered/diamond/geometryhelper.hh:69
static constexpr std::array< std::array< Key, 4 >, 4 > keys
Definition discretization/facecentered/diamond/geometryhelper.hh:85
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/facecentered/diamond/geometryhelper.hh:84
static constexpr Dune::GeometryType type()
Definition discretization/facecentered/diamond/geometryhelper.hh:81
static constexpr Dune::GeometryType type()
Definition discretization/facecentered/diamond/geometryhelper.hh:52
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/facecentered/diamond/geometryhelper.hh:55
static constexpr std::array< std::array< Key, 3 >, 3 > keys
Definition discretization/facecentered/diamond/geometryhelper.hh:56
Definition discretization/facecentered/diamond/geometryhelper.hh:47
static constexpr std::array< std::array< Key, 3 >, 12 > keys
Definition discretization/facecentered/diamond/geometryhelper.hh:166
static constexpr Dune::GeometryType type()
Definition discretization/facecentered/diamond/geometryhelper.hh:162
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/facecentered/diamond/geometryhelper.hh:165
static constexpr Dune::GeometryType type()
Definition discretization/facecentered/diamond/geometryhelper.hh:130
static constexpr std::array< std::array< Key, 2 >, 4 > keys
Definition discretization/facecentered/diamond/geometryhelper.hh:134
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/facecentered/diamond/geometryhelper.hh:133
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/facecentered/diamond/geometryhelper.hh:148
static constexpr std::array< std::array< Key, 3 >, 6 > keys
Definition discretization/facecentered/diamond/geometryhelper.hh:149
static constexpr Dune::GeometryType type()
Definition discretization/facecentered/diamond/geometryhelper.hh:145
std::pair< std::uint8_t, std::uint8_t > Key
Definition discretization/facecentered/diamond/geometryhelper.hh:119
static constexpr std::array< std::array< Key, 2 >, 3 > keys
Definition discretization/facecentered/diamond/geometryhelper.hh:120
static constexpr Dune::GeometryType type()
Definition discretization/facecentered/diamond/geometryhelper.hh:116
Definition discretization/facecentered/diamond/geometryhelper.hh:111
Definition discretization/facecentered/diamond/geometryhelper.hh:39
Dune::ReservedVector< Dune::FieldVector< ct, cdim >,(1<< mydim)> Type
Definition discretization/facecentered/diamond/geometryhelper.hh:40
Traits for an efficient corner storage for fc diamond method.
Definition discretization/facecentered/diamond/geometryhelper.hh:34