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