GCC Code Coverage Report


Directory: ../../../builds/dumux-repositories/
File: /builds/dumux-repositories/dumux/dumux/discretization/cellcentered/tpfa/fvelementgeometry.hh
Date: 2024-05-04 19:09:25
Exec Total Coverage
Lines: 203 218 93.1%
Functions: 182 336 54.2%
Branches: 1196 1685 71.0%

Line Branch Exec Source
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-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5 // SPDX-License-Identifier: GPL-3.0-or-later
6 //
7 /*!
8 * \file
9 * \ingroup CCTpfaDiscretization
10 * \brief Stencil-local finite volume geometry (scvs and scvfs) for cell-centered TPFA models
11 * This builds up the sub control volumes and sub control volume faces
12 * for each element in the local scope we are restricting to, e.g. stencil or element.
13 */
14 #ifndef DUMUX_DISCRETIZATION_CCTPFA_FV_ELEMENT_GEOMETRY_HH
15 #define DUMUX_DISCRETIZATION_CCTPFA_FV_ELEMENT_GEOMETRY_HH
16
17 #include <optional>
18 #include <algorithm>
19 #include <array>
20 #include <vector>
21 #include <utility>
22
23 #include <dune/common/exceptions.hh>
24 #include <dumux/common/indextraits.hh>
25 #include <dune/common/iteratorrange.hh>
26 #include <dumux/discretization/scvandscvfiterators.hh>
27
28 namespace Dumux {
29
30 namespace Detail::Tpfa {
31
32 template<class GridIndexType>
33 750446679 auto findLocalIndex(const GridIndexType idx,
34 const std::vector<GridIndexType>& indices)
35 {
36 2251340037 auto it = std::find(indices.begin(), indices.end(), idx);
37
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 750446679 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 750446679 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 750446679 times.
2251340037 assert(it != indices.end() && "Could not find the scv/scvf! Make sure to properly bind this class!");
38 2251340037 return std::distance(indices.begin(), it);
39 }
40
41 } // end namespace Detail::Tpfa
42
43 /*!
44 * \ingroup CCTpfaDiscretization
45 * \brief Stencil-local finite volume geometry (scvs and scvfs) for cell-centered TPFA models
46 * This builds up the sub control volumes and sub control volume faces
47 * for each element in the local scope we are restricting to, e.g. stencil or element.
48 * \tparam GG the finite volume grid geometry type
49 * \tparam enableGridGeometryCache if the grid geometry is cached or not
50 * \note This class is specialized for versions with and without caching the fv geometries on the grid view
51 */
52 template<class GG, bool enableGridGeometryCache>
53 class CCTpfaFVElementGeometry;
54
55 /*!
56 * \ingroup CCTpfaDiscretization
57 * \brief Stencil-local finite volume geometry (scvs and scvfs) for cell-centered TPFA models
58 * Specialization for grid caching enabled
59 * \note The finite volume geometries are stored in the corresponding GridGeometry
60 */
61 template<class GG>
62
26/53
✓ Branch 0 taken 14298 times.
✓ Branch 1 taken 19482833 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 14200 times.
✓ Branch 4 taken 25534054 times.
✓ Branch 5 taken 5440 times.
✓ Branch 6 taken 2970093 times.
✓ Branch 7 taken 800000 times.
✓ Branch 8 taken 5448 times.
✓ Branch 9 taken 412912 times.
✓ Branch 10 taken 3 times.
✓ Branch 11 taken 371200 times.
✓ Branch 12 taken 31313 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1205120 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 485584 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 482048 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 6 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 3 times.
✓ Branch 28 taken 480 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 1212652 times.
✓ Branch 33 taken 1768 times.
✓ Branch 34 taken 1212652 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 1768 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 1768 times.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 3 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 5304 times.
✗ Branch 46 not taken.
✓ Branch 47 taken 5304 times.
✗ Branch 48 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
57690336 class CCTpfaFVElementGeometry<GG, true>
63 {
64 using ThisType = CCTpfaFVElementGeometry<GG, true>;
65 using GridView = typename GG::GridView;
66 using GridIndexType = typename IndexTraits<GridView>::GridIndex;
67 using LocalIndexType = typename IndexTraits<GridView>::LocalIndex;
68
69 public:
70 //! export type of the element
71 using Element = typename GridView::template Codim<0>::Entity;
72 //! export type of subcontrol volume
73 using SubControlVolume = typename GG::SubControlVolume;
74 //! export type of subcontrol volume face
75 using SubControlVolumeFace = typename GG::SubControlVolumeFace;
76 //! export type of finite volume grid geometry
77 using GridGeometry = GG;
78
79 //! the maximum number of scvs per element
80 static constexpr std::size_t maxNumElementScvs = 1;
81 //! the maximum number of scvfs per element (use cubes for maximum)
82 static constexpr std::size_t maxNumElementScvfs = 2*GridView::dimension;
83
84 //! Constructor
85 CCTpfaFVElementGeometry(const GridGeometry& gridGeometry)
86
60/69
✓ Branch 1 taken 1922 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 180103 times.
✓ Branch 4 taken 1922 times.
✓ Branch 5 taken 1233769 times.
✓ Branch 6 taken 180103 times.
✓ Branch 7 taken 228 times.
✓ Branch 8 taken 1233769 times.
✓ Branch 9 taken 15597507 times.
✓ Branch 10 taken 228 times.
✓ Branch 11 taken 2204580 times.
✓ Branch 12 taken 15597507 times.
✓ Branch 13 taken 2915686 times.
✓ Branch 14 taken 2204580 times.
✓ Branch 15 taken 1740263 times.
✓ Branch 16 taken 2915686 times.
✓ Branch 17 taken 459588 times.
✓ Branch 18 taken 1740263 times.
✓ Branch 19 taken 19677756 times.
✓ Branch 20 taken 459588 times.
✓ Branch 21 taken 356 times.
✓ Branch 22 taken 19677756 times.
✓ Branch 23 taken 173501 times.
✓ Branch 24 taken 356 times.
✓ Branch 25 taken 485584 times.
✓ Branch 26 taken 173501 times.
✓ Branch 27 taken 909551 times.
✓ Branch 28 taken 485584 times.
✓ Branch 29 taken 800003 times.
✓ Branch 30 taken 909551 times.
✓ Branch 31 taken 486 times.
✓ Branch 32 taken 800003 times.
✓ Branch 33 taken 51 times.
✓ Branch 34 taken 486 times.
✓ Branch 35 taken 1747 times.
✓ Branch 36 taken 51 times.
✓ Branch 37 taken 1212655 times.
✓ Branch 38 taken 1747 times.
✓ Branch 39 taken 51 times.
✓ Branch 40 taken 1212655 times.
✓ Branch 41 taken 1736 times.
✓ Branch 42 taken 51 times.
✓ Branch 43 taken 1771 times.
✓ Branch 44 taken 1736 times.
✓ Branch 45 taken 23 times.
✓ Branch 46 taken 1771 times.
✓ Branch 47 taken 7 times.
✓ Branch 48 taken 23 times.
✓ Branch 49 taken 5304 times.
✓ Branch 50 taken 7 times.
✓ Branch 51 taken 18 times.
✓ Branch 52 taken 5304 times.
✓ Branch 53 taken 102 times.
✓ Branch 54 taken 18 times.
✓ Branch 55 taken 79 times.
✓ Branch 56 taken 102 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 79 times.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✓ Branch 61 taken 79 times.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 79 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 63 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 63 times.
✗ Branch 71 not taken.
194328360 : gridGeometryPtr_(&gridGeometry) {}
87
88 //! Get an element sub control volume with a global scv index
89 //! We separate element and neighbor scvs to speed up mapping
90 const SubControlVolume& scv(GridIndexType scvIdx) const
91 {
92
74/80
✗ Branch 0 not taken.
✓ Branch 1 taken 256 times.
✓ Branch 2 taken 2508832 times.
✓ Branch 3 taken 220420588 times.
✓ Branch 4 taken 2519136 times.
✓ Branch 5 taken 239111276 times.
✓ Branch 6 taken 22552 times.
✓ Branch 7 taken 18691016 times.
✓ Branch 8 taken 210746 times.
✓ Branch 9 taken 104673296 times.
✓ Branch 10 taken 198498 times.
✓ Branch 11 taken 364923121 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 314893361 times.
✓ Branch 14 taken 1095592 times.
✓ Branch 15 taken 196865106 times.
✓ Branch 16 taken 381620 times.
✓ Branch 17 taken 139374218 times.
✓ Branch 18 taken 4617440 times.
✓ Branch 19 taken 17283344 times.
✓ Branch 20 taken 52339288 times.
✓ Branch 21 taken 142910888 times.
✓ Branch 22 taken 51166084 times.
✓ Branch 23 taken 130219928 times.
✓ Branch 24 taken 1985840 times.
✓ Branch 25 taken 2333280 times.
✓ Branch 26 taken 4195280 times.
✓ Branch 27 taken 1829488 times.
✓ Branch 28 taken 432320 times.
✓ Branch 29 taken 2003508 times.
✓ Branch 30 taken 250048 times.
✓ Branch 31 taken 58746 times.
✓ Branch 32 taken 2003578 times.
✓ Branch 33 taken 45274 times.
✓ Branch 34 taken 59210 times.
✓ Branch 35 taken 1440814 times.
✓ Branch 36 taken 3119734 times.
✓ Branch 37 taken 1778576 times.
✓ Branch 38 taken 5217596 times.
✓ Branch 39 taken 1817098 times.
✓ Branch 40 taken 4052146 times.
✓ Branch 41 taken 5238228 times.
✓ Branch 42 taken 2800798 times.
✓ Branch 43 taken 6189492 times.
✓ Branch 44 taken 719258 times.
✓ Branch 45 taken 10005244 times.
✓ Branch 46 taken 2043014 times.
✓ Branch 47 taken 9685974 times.
✓ Branch 48 taken 125248 times.
✓ Branch 49 taken 160 times.
✓ Branch 50 taken 22689 times.
✓ Branch 51 taken 444243 times.
✓ Branch 52 taken 2049 times.
✓ Branch 53 taken 438651 times.
✓ Branch 54 taken 13632 times.
✓ Branch 55 taken 17652 times.
✗ Branch 56 not taken.
✓ Branch 57 taken 21448 times.
✗ Branch 58 not taken.
✓ Branch 59 taken 17146 times.
✓ Branch 60 taken 634 times.
✓ Branch 61 taken 21410 times.
✓ Branch 62 taken 38 times.
✓ Branch 63 taken 11498 times.
✓ Branch 64 taken 12166 times.
✓ Branch 65 taken 5324 times.
✓ Branch 66 taken 8000 times.
✓ Branch 67 taken 539766 times.
✓ Branch 68 taken 5324 times.
✓ Branch 69 taken 285 times.
✓ Branch 70 taken 539766 times.
✓ Branch 71 taken 8000 times.
✓ Branch 72 taken 285 times.
✓ Branch 73 taken 3463680 times.
✓ Branch 74 taken 8000 times.
✓ Branch 75 taken 901500 times.
✓ Branch 76 taken 3463680 times.
✗ Branch 77 not taken.
✓ Branch 78 taken 901500 times.
✗ Branch 79 not taken.
8281131445 return gridGeometry().scv(scvIdx);
93 }
94
95 //! Get an element sub control volume face with a global scvf index
96 //! We separate element and neighbor scvfs to speed up mapping
97 const SubControlVolumeFace& scvf(GridIndexType scvfIdx) const
98 {
99
58/60
✓ Branch 2 taken 36298 times.
✓ Branch 3 taken 717458 times.
✓ Branch 4 taken 4973278 times.
✓ Branch 5 taken 1670806 times.
✓ Branch 6 taken 6316056 times.
✓ Branch 7 taken 954980 times.
✓ Branch 8 taken 1745736 times.
✓ Branch 9 taken 2479146 times.
✓ Branch 10 taken 1505670 times.
✓ Branch 11 taken 1784850 times.
✓ Branch 12 taken 4135258 times.
✓ Branch 13 taken 780028 times.
✓ Branch 14 taken 4452963 times.
✓ Branch 15 taken 531338 times.
✓ Branch 16 taken 2817749 times.
✓ Branch 17 taken 409372 times.
✓ Branch 18 taken 2310780 times.
✓ Branch 19 taken 3059158 times.
✓ Branch 20 taken 29081107 times.
✓ Branch 21 taken 12426465 times.
✓ Branch 22 taken 37966393 times.
✓ Branch 23 taken 20374657 times.
✓ Branch 24 taken 9495072 times.
✓ Branch 25 taken 10341450 times.
✓ Branch 26 taken 34066 times.
✓ Branch 27 taken 5664664 times.
✓ Branch 28 taken 5577393 times.
✓ Branch 29 taken 323939 times.
✓ Branch 30 taken 11198649 times.
✓ Branch 31 taken 419223 times.
✓ Branch 32 taken 1969884 times.
✓ Branch 33 taken 603212 times.
✓ Branch 34 taken 697426 times.
✓ Branch 35 taken 573674 times.
✓ Branch 36 taken 1107324 times.
✓ Branch 37 taken 885332 times.
✓ Branch 38 taken 1090680 times.
✓ Branch 39 taken 492312 times.
✓ Branch 40 taken 327684 times.
✓ Branch 41 taken 562860 times.
✓ Branch 42 taken 388572 times.
✓ Branch 43 taken 443812 times.
✓ Branch 44 taken 416501 times.
✓ Branch 45 taken 174649 times.
✓ Branch 46 taken 52901 times.
✓ Branch 47 taken 58393 times.
✓ Branch 48 taken 6526 times.
✓ Branch 49 taken 281168 times.
✓ Branch 50 taken 37346 times.
✓ Branch 51 taken 407500 times.
✓ Branch 52 taken 79636 times.
✓ Branch 53 taken 140940 times.
✓ Branch 54 taken 70120 times.
✓ Branch 55 taken 18328 times.
✓ Branch 56 taken 25464 times.
✓ Branch 57 taken 18454 times.
✓ Branch 58 taken 3344 times.
✓ Branch 59 taken 126 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
2567711980 return gridGeometry().scvf(scvfIdx);
100 }
101
102 //! Get the scvf on the same face but from the other side
103 //! Note that e.g. the normals might be different in the case of surface grids
104 const SubControlVolumeFace& flipScvf(GridIndexType scvfIdx, unsigned int outsideScvIdx = 0) const
105 {
106 101136866 return gridGeometry().flipScvf(scvfIdx, outsideScvIdx);
107 }
108
109 //! iterator range for sub control volumes. Iterates over
110 //! all scvs of the bound element (not including neighbor scvs)
111 //! This is a free function found by means of ADL
112 //! To iterate over all sub control volumes of this FVElementGeometry use
113 //! for (auto&& scv : scvs(fvGeometry))
114 friend inline Dune::IteratorRange< ScvIterator<SubControlVolume, std::array<GridIndexType, 1>, ThisType> >
115 scvs(const CCTpfaFVElementGeometry& fvGeometry)
116 {
117 using ScvIterator = Dumux::ScvIterator<SubControlVolume, std::array<GridIndexType, 1>, ThisType>;
118 1047302140 return Dune::IteratorRange<ScvIterator>(ScvIterator(fvGeometry.scvIndices_.begin(), fvGeometry),
119
12/16
✓ Branch 0 taken 50476768 times.
✓ Branch 1 taken 144396030 times.
✓ Branch 2 taken 50476768 times.
✓ Branch 3 taken 144396030 times.
✓ Branch 4 taken 50476768 times.
✓ Branch 5 taken 144396030 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 53796 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 48356 times.
✓ Branch 10 taken 5440 times.
✓ Branch 11 taken 48356 times.
✓ Branch 13 taken 5440 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 5440 times.
✗ Branch 17 not taken.
1570958652 ScvIterator(fvGeometry.scvIndices_.end(), fvGeometry));
120 }
121
122 //! iterator range for sub control volumes faces. Iterates over
123 //! all scvfs of the bound element (not including neighbor scvfs)
124 //! This is a free function found by means of ADL
125 //! To iterate over all sub control volume faces of this FVElementGeometry use
126 //! for (auto&& scvf : scvfs(fvGeometry))
127 friend inline Dune::IteratorRange< ScvfIterator<SubControlVolumeFace, std::vector<GridIndexType>, ThisType> >
128 scvfs(const CCTpfaFVElementGeometry& fvGeometry)
129 {
130 231701805 const auto& g = fvGeometry.gridGeometry();
131
1/2
✓ Branch 1 taken 7000 times.
✗ Branch 2 not taken.
231701805 const auto scvIdx = fvGeometry.scvIndices_[0];
132 using ScvfIterator = Dumux::ScvfIterator<SubControlVolumeFace, std::vector<GridIndexType>, ThisType>;
133
1/2
✓ Branch 1 taken 7000 times.
✗ Branch 2 not taken.
231701805 return Dune::IteratorRange<ScvfIterator>(ScvfIterator(g.scvfIndicesOfScv(scvIdx).begin(), fvGeometry),
134
4/8
✓ Branch 1 taken 7000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7000 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 7000 times.
✗ Branch 11 not taken.
926807234 ScvfIterator(g.scvfIndicesOfScv(scvIdx).end(), fvGeometry));
135 }
136
137 //! number of sub control volumes in this fv element geometry
138 std::size_t numScv() const
139 {
140
3/4
✓ Branch 0 taken 5033024 times.
✓ Branch 1 taken 12 times.
✓ Branch 2 taken 10033024 times.
✗ Branch 3 not taken.
200818293 return scvIndices_.size();
141 }
142
143 //! number of sub control volumes in this fv element geometry
144 std::size_t numScvf() const
145 {
146
7/14
✗ Branch 0 not taken.
✓ Branch 1 taken 1525444 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 165000 times.
✓ Branch 4 taken 1360444 times.
✓ Branch 5 taken 165000 times.
✓ Branch 7 taken 1525444 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 165000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 165000 times.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
52951230 return gridGeometry().scvfIndicesOfScv(scvIndices_[0]).size();
147 }
148
149 /*!
150 * \brief bind the local view (r-value overload)
151 * This overload is called when an instance of this class is a temporary in the usage context
152 * This allows a usage like this: `const auto view = localView(...).bind(element);`
153 */
154 100 CCTpfaFVElementGeometry bind(const Element& element) &&
155 {
156
1/2
✓ Branch 1 taken 1768 times.
✗ Branch 2 not taken.
7045896 this->bindElement(element);
157
10/14
✓ Branch 0 taken 5770820 times.
✓ Branch 1 taken 1831 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5770816 times.
✓ Branch 4 taken 1735 times.
✓ Branch 5 taken 1248482 times.
✓ Branch 6 taken 8000 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1248482 times.
✓ Branch 9 taken 8000 times.
✓ Branch 10 taken 15642 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 15642 times.
✗ Branch 14 not taken.
14092402 return std::move(*this);
158 }
159
160 void bind(const Element& element) &
161 {
162
3/8
✓ Branch 1 taken 157281 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 259 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 7000 times.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
50265097 this->bindElement(element);
163 }
164
165 /*!
166 * \brief bind the local view (r-value overload)
167 * This overload is called when an instance of this class is a temporary in the usage context
168 * This allows a usage like this: `const auto view = localView(...).bindElement(element);`
169 */
170 300 CCTpfaFVElementGeometry bindElement(const Element& element) &&
171 {
172
3/5
✓ Branch 1 taken 487352 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1212652 times.
✗ Branch 5 not taken.
39160005 this->bindElement(element);
173
8/12
✓ Branch 0 taken 13973981 times.
✓ Branch 1 taken 559872 times.
✓ Branch 2 taken 21423728 times.
✓ Branch 3 taken 565312 times.
✓ Branch 4 taken 1013980 times.
✓ Branch 5 taken 1374 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 17394 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 506400 times.
✗ Branch 11 not taken.
76966411 return std::move(*this);
174 }
175
176 //! Bind only element-local
177 170584712 void bindElement(const Element& element) &
178 {
179
16/24
✓ Branch 0 taken 15417264 times.
✓ Branch 1 taken 91548837 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 175134 times.
✓ Branch 7 taken 101 times.
✓ Branch 8 taken 1734 times.
✓ Branch 9 taken 1 times.
✓ Branch 10 taken 1734 times.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3470 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 173500 times.
✓ Branch 17 taken 1735 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 1623797 times.
✓ Branch 20 taken 2408203 times.
✓ Branch 22 taken 1735 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 1734 times.
✓ Branch 25 taken 1 times.
171297797 element_ = element;
180
15/50
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✓ Branch 46 taken 1735 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1735 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1735 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1735 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1735 times.
✗ Branch 59 not taken.
✓ Branch 64 taken 1735 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 1735 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 1735 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1735 times.
✗ Branch 74 not taken.
✓ Branch 76 taken 1735 times.
✗ Branch 77 not taken.
✓ Branch 79 taken 1735 times.
✗ Branch 80 not taken.
✓ Branch 82 taken 1735 times.
✗ Branch 83 not taken.
✓ Branch 85 taken 1735 times.
✗ Branch 86 not taken.
✓ Branch 88 taken 1735 times.
✗ Branch 89 not taken.
✓ Branch 91 taken 1735 times.
✗ Branch 92 not taken.
515319561 scvIndices_[0] = gridGeometry().elementMapper().index(*element_);
181 170584712 }
182
183 //! Returns true if bind/bindElement has already been called
184 bool isBound() const
185
2/4
✗ Branch 2 not taken.
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
24 { return static_cast<bool>(element_); }
186
187 //! The bound element
188 const Element& element() const
189
2/4
✓ Branch 3 taken 136766 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 136766 times.
✗ Branch 7 not taken.
16750302 { return *element_; }
190
191 //! The global finite volume geometry we are a restriction of
192 const GridGeometry& gridGeometry() const
193 { return *gridGeometryPtr_; }
194
195 //! Returns whether one of the geometry's scvfs lies on a boundary
196 bool hasBoundaryScvf() const
197
36/36
✓ Branch 0 taken 2838465 times.
✓ Branch 1 taken 32267622 times.
✓ Branch 2 taken 2838465 times.
✓ Branch 3 taken 32267622 times.
✓ Branch 4 taken 2838465 times.
✓ Branch 5 taken 32267622 times.
✓ Branch 6 taken 6258488 times.
✓ Branch 7 taken 17214323 times.
✓ Branch 8 taken 6258488 times.
✓ Branch 9 taken 17214323 times.
✓ Branch 10 taken 6258488 times.
✓ Branch 11 taken 17214323 times.
✓ Branch 12 taken 2308 times.
✓ Branch 13 taken 13214 times.
✓ Branch 14 taken 2308 times.
✓ Branch 15 taken 13214 times.
✓ Branch 16 taken 2308 times.
✓ Branch 17 taken 13214 times.
✓ Branch 18 taken 28 times.
✓ Branch 19 taken 36 times.
✓ Branch 20 taken 28 times.
✓ Branch 21 taken 36 times.
✓ Branch 22 taken 28 times.
✓ Branch 23 taken 36 times.
✓ Branch 24 taken 592 times.
✓ Branch 25 taken 432 times.
✓ Branch 26 taken 592 times.
✓ Branch 27 taken 432 times.
✓ Branch 28 taken 592 times.
✓ Branch 29 taken 432 times.
✓ Branch 30 taken 1804 times.
✓ Branch 31 taken 6778 times.
✓ Branch 32 taken 1804 times.
✓ Branch 33 taken 6778 times.
✓ Branch 34 taken 1804 times.
✓ Branch 35 taken 6778 times.
175812270 { return gridGeometry().hasBoundaryScvf(scvIndices_[0]); }
198
199 typename Element::Geometry geometry(const SubControlVolume& scv) const
200
6/18
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 10 taken 325 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 325 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 325 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 325 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 325 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 325 times.
✗ Branch 26 not taken.
1950 { return gridGeometryPtr_->element(scv.dofIndex()).geometry(); }
201
202 115592 typename GridView::Intersection::Geometry geometry(const SubControlVolumeFace& scvf) const
203 {
204 234908 const auto element = gridGeometryPtr_->element(scvf.insideScvIdx());
205 231184 const auto& scvfIndices = gridGeometryPtr_->scvfIndicesOfScv(scvf.insideScvIdx());
206 115592 const LocalIndexType localScvfIdx = Detail::Tpfa::findLocalIndex(scvf.index(), scvfIndices);
207 115592 LocalIndexType localIdx = 0;
208
5/11
✓ Branch 1 taken 104 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 606815 times.
✓ Branch 4 taken 104 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 280 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 14 taken 176 times.
✗ Branch 15 not taken.
742199 for (const auto& intersection : intersections(gridGeometryPtr_->gridView(), element))
209 {
210
4/6
✓ Branch 0 taken 547025 times.
✓ Branch 1 taken 59854 times.
✓ Branch 2 taken 119646 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 64 times.
✗ Branch 5 not taken.
679181 if (intersection.neighbor() || intersection.boundary())
211 {
212
2/2
✓ Branch 0 taken 110644 times.
✓ Branch 1 taken 496451 times.
618747 if (localIdx == localScvfIdx)
213
1/2
✓ Branch 1 taken 104 times.
✗ Branch 2 not taken.
119316 return intersection.geometry();
214 else
215 503155 ++localIdx;
216 }
217 }
218
219 DUNE_THROW(Dune::InvalidStateException, "Could not find scvf geometry");
220 }
221
222 private:
223
224 std::optional<Element> element_;
225 std::array<GridIndexType, 1> scvIndices_;
226 const GridGeometry* gridGeometryPtr_;
227 };
228
229 /*!
230 * \ingroup CCTpfaDiscretization
231 * \brief Stencil-local finite volume geometry (scvs and scvfs) for cell-centered TPFA models
232 * Specialization for grid caching disabled
233 */
234 template<class GG>
235 class CCTpfaFVElementGeometry<GG, false>
236 {
237 using ThisType = CCTpfaFVElementGeometry<GG, false>;
238 using GridView = typename GG::GridView;
239 using GridIndexType = typename IndexTraits<GridView>::GridIndex;
240 using LocalIndexType = typename IndexTraits<GridView>::LocalIndex;
241
242 static const int dim = GridView::dimension;
243 static const int dimWorld = GridView::dimensionworld;
244
245 public:
246 //! export type of the element
247 using Element = typename GridView::template Codim<0>::Entity;
248 //! export type of subcontrol volume
249 using SubControlVolume = typename GG::SubControlVolume;
250 //! export type of subcontrol volume face
251 using SubControlVolumeFace = typename GG::SubControlVolumeFace;
252 //! export type of finite volume grid geometry
253 using GridGeometry = GG;
254 //! the maximum number of scvs per element
255 static constexpr std::size_t maxNumElementScvs = 1;
256 //! the maximum number of scvfs per element (use cubes for maximum)
257 static constexpr std::size_t maxNumElementScvfs = 2*dim;
258
259 //! Constructor
260 CCTpfaFVElementGeometry(const GridGeometry& gridGeometry)
261
271/356
✗ Branch 0 not taken.
✓ Branch 1 taken 1692 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 11 times.
✓ Branch 4 taken 1681 times.
✓ Branch 5 taken 11 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1692 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 11 times.
✓ Branch 10 taken 1681 times.
✓ Branch 11 taken 11 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1692 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 11 times.
✓ Branch 16 taken 1681 times.
✓ Branch 17 taken 11 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 1692 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 11 times.
✓ Branch 22 taken 1681 times.
✓ Branch 23 taken 39681 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 1681 times.
✓ Branch 26 taken 39681 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 1681 times.
✓ Branch 29 taken 39681 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 1681 times.
✓ Branch 32 taken 39681 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 182530 times.
✓ Branch 35 taken 39681 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 182530 times.
✓ Branch 38 taken 39681 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 182530 times.
✓ Branch 41 taken 39681 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 182530 times.
✓ Branch 44 taken 39681 times.
✓ Branch 45 taken 25 times.
✓ Branch 46 taken 182530 times.
✓ Branch 47 taken 39681 times.
✓ Branch 48 taken 25 times.
✓ Branch 49 taken 182530 times.
✓ Branch 50 taken 39681 times.
✓ Branch 51 taken 25 times.
✓ Branch 52 taken 182530 times.
✓ Branch 53 taken 39681 times.
✓ Branch 54 taken 25 times.
✓ Branch 55 taken 182530 times.
✓ Branch 56 taken 18 times.
✓ Branch 57 taken 25 times.
✓ Branch 58 taken 182530 times.
✓ Branch 59 taken 18 times.
✓ Branch 60 taken 25 times.
✓ Branch 61 taken 182530 times.
✓ Branch 62 taken 18 times.
✓ Branch 63 taken 25 times.
✓ Branch 64 taken 182530 times.
✓ Branch 65 taken 18 times.
✓ Branch 66 taken 25 times.
✓ Branch 67 taken 1579450 times.
✓ Branch 68 taken 18 times.
✓ Branch 69 taken 25 times.
✓ Branch 70 taken 1579450 times.
✓ Branch 71 taken 18 times.
✓ Branch 72 taken 25 times.
✓ Branch 73 taken 1579450 times.
✓ Branch 74 taken 18 times.
✓ Branch 75 taken 25 times.
✓ Branch 76 taken 1579450 times.
✓ Branch 77 taken 18 times.
✓ Branch 78 taken 1 times.
✓ Branch 79 taken 1579450 times.
✓ Branch 80 taken 18 times.
✓ Branch 81 taken 1 times.
✓ Branch 82 taken 1579450 times.
✓ Branch 83 taken 18 times.
✓ Branch 84 taken 1 times.
✓ Branch 85 taken 1579450 times.
✓ Branch 86 taken 18 times.
✓ Branch 87 taken 1 times.
✓ Branch 88 taken 1579450 times.
✓ Branch 89 taken 4262 times.
✓ Branch 90 taken 1 times.
✓ Branch 91 taken 1579450 times.
✓ Branch 92 taken 4262 times.
✓ Branch 93 taken 1 times.
✓ Branch 94 taken 1579450 times.
✓ Branch 95 taken 4262 times.
✓ Branch 96 taken 1 times.
✓ Branch 97 taken 1579450 times.
✓ Branch 98 taken 4262 times.
✓ Branch 99 taken 1 times.
✓ Branch 100 taken 11985217 times.
✓ Branch 101 taken 4262 times.
✓ Branch 102 taken 1 times.
✓ Branch 103 taken 11985217 times.
✓ Branch 104 taken 4262 times.
✓ Branch 105 taken 1 times.
✓ Branch 106 taken 11985217 times.
✓ Branch 107 taken 4262 times.
✓ Branch 108 taken 1 times.
✓ Branch 109 taken 11985217 times.
✓ Branch 110 taken 4262 times.
✓ Branch 111 taken 264 times.
✓ Branch 112 taken 11985217 times.
✓ Branch 113 taken 4262 times.
✓ Branch 114 taken 264 times.
✓ Branch 115 taken 11985217 times.
✓ Branch 116 taken 4262 times.
✓ Branch 117 taken 264 times.
✓ Branch 118 taken 11985217 times.
✓ Branch 119 taken 4262 times.
✓ Branch 120 taken 264 times.
✓ Branch 121 taken 11985217 times.
✓ Branch 122 taken 383732 times.
✓ Branch 123 taken 264 times.
✓ Branch 124 taken 11985217 times.
✓ Branch 125 taken 383732 times.
✓ Branch 126 taken 264 times.
✓ Branch 127 taken 11985217 times.
✓ Branch 128 taken 383732 times.
✓ Branch 129 taken 264 times.
✓ Branch 130 taken 11985217 times.
✓ Branch 131 taken 383732 times.
✓ Branch 132 taken 264 times.
✓ Branch 133 taken 455472 times.
✓ Branch 134 taken 383732 times.
✓ Branch 135 taken 264 times.
✓ Branch 136 taken 455472 times.
✓ Branch 137 taken 383732 times.
✓ Branch 138 taken 264 times.
✓ Branch 139 taken 455472 times.
✓ Branch 140 taken 383732 times.
✓ Branch 141 taken 264 times.
✓ Branch 142 taken 455472 times.
✓ Branch 143 taken 383732 times.
✓ Branch 144 taken 12 times.
✓ Branch 145 taken 455472 times.
✓ Branch 146 taken 383732 times.
✓ Branch 147 taken 12 times.
✓ Branch 148 taken 455472 times.
✓ Branch 149 taken 383732 times.
✓ Branch 150 taken 12 times.
✓ Branch 151 taken 455472 times.
✓ Branch 152 taken 383732 times.
✓ Branch 153 taken 12 times.
✓ Branch 154 taken 455472 times.
✓ Branch 155 taken 269792 times.
✓ Branch 156 taken 12 times.
✓ Branch 157 taken 455472 times.
✓ Branch 158 taken 269792 times.
✓ Branch 159 taken 12 times.
✓ Branch 160 taken 455472 times.
✓ Branch 161 taken 269792 times.
✓ Branch 162 taken 12 times.
✓ Branch 163 taken 455472 times.
✓ Branch 164 taken 269792 times.
✓ Branch 165 taken 12 times.
✓ Branch 166 taken 40489 times.
✓ Branch 167 taken 269792 times.
✓ Branch 168 taken 12 times.
✓ Branch 169 taken 40489 times.
✓ Branch 170 taken 269792 times.
✓ Branch 171 taken 12 times.
✓ Branch 172 taken 40489 times.
✓ Branch 173 taken 269792 times.
✓ Branch 174 taken 12 times.
✓ Branch 175 taken 40489 times.
✓ Branch 176 taken 269792 times.
✓ Branch 177 taken 12 times.
✓ Branch 178 taken 40489 times.
✓ Branch 179 taken 269792 times.
✓ Branch 180 taken 12 times.
✓ Branch 181 taken 40489 times.
✓ Branch 182 taken 269792 times.
✓ Branch 183 taken 12 times.
✓ Branch 184 taken 40489 times.
✓ Branch 185 taken 269792 times.
✓ Branch 186 taken 12 times.
✓ Branch 187 taken 40489 times.
✗ Branch 188 not taken.
✓ Branch 189 taken 12 times.
✓ Branch 190 taken 40489 times.
✗ Branch 191 not taken.
✓ Branch 192 taken 12 times.
✓ Branch 193 taken 40489 times.
✗ Branch 194 not taken.
✓ Branch 195 taken 12 times.
✓ Branch 196 taken 40489 times.
✗ Branch 197 not taken.
✓ Branch 198 taken 12 times.
✓ Branch 199 taken 499341 times.
✗ Branch 200 not taken.
✓ Branch 201 taken 12 times.
✓ Branch 202 taken 499341 times.
✗ Branch 203 not taken.
✓ Branch 204 taken 12 times.
✓ Branch 205 taken 499341 times.
✗ Branch 206 not taken.
✓ Branch 207 taken 12 times.
✓ Branch 208 taken 499341 times.
✗ Branch 209 not taken.
✓ Branch 210 taken 264 times.
✓ Branch 211 taken 499341 times.
✗ Branch 212 not taken.
✓ Branch 213 taken 264 times.
✓ Branch 214 taken 499341 times.
✗ Branch 215 not taken.
✓ Branch 216 taken 264 times.
✓ Branch 217 taken 499341 times.
✗ Branch 218 not taken.
✓ Branch 219 taken 264 times.
✓ Branch 220 taken 499341 times.
✗ Branch 221 not taken.
✓ Branch 222 taken 264 times.
✓ Branch 223 taken 499341 times.
✗ Branch 224 not taken.
✓ Branch 225 taken 264 times.
✓ Branch 226 taken 499341 times.
✗ Branch 227 not taken.
✓ Branch 228 taken 264 times.
✓ Branch 229 taken 499341 times.
✗ Branch 230 not taken.
✓ Branch 231 taken 264 times.
✓ Branch 232 taken 51558 times.
✗ Branch 233 not taken.
✓ Branch 234 taken 264 times.
✓ Branch 235 taken 51558 times.
✗ Branch 236 not taken.
✓ Branch 237 taken 264 times.
✓ Branch 238 taken 51558 times.
✗ Branch 239 not taken.
✓ Branch 240 taken 264 times.
✓ Branch 241 taken 51558 times.
✗ Branch 242 not taken.
✓ Branch 243 taken 5781 times.
✓ Branch 244 taken 51558 times.
✗ Branch 245 not taken.
✓ Branch 246 taken 5781 times.
✓ Branch 247 taken 51558 times.
✗ Branch 248 not taken.
✓ Branch 249 taken 5781 times.
✓ Branch 250 taken 51558 times.
✗ Branch 251 not taken.
✓ Branch 252 taken 5781 times.
✓ Branch 253 taken 51558 times.
✗ Branch 254 not taken.
✓ Branch 255 taken 5781 times.
✓ Branch 256 taken 51558 times.
✗ Branch 257 not taken.
✓ Branch 258 taken 5781 times.
✓ Branch 259 taken 51558 times.
✗ Branch 260 not taken.
✓ Branch 261 taken 5781 times.
✓ Branch 262 taken 51558 times.
✗ Branch 263 not taken.
✓ Branch 264 taken 5781 times.
✓ Branch 265 taken 51302 times.
✗ Branch 266 not taken.
✓ Branch 267 taken 5781 times.
✓ Branch 268 taken 51302 times.
✗ Branch 269 not taken.
✓ Branch 270 taken 5781 times.
✓ Branch 271 taken 51302 times.
✗ Branch 272 not taken.
✓ Branch 273 taken 5781 times.
✓ Branch 274 taken 51302 times.
✗ Branch 275 not taken.
✓ Branch 277 taken 51302 times.
✗ Branch 278 not taken.
✓ Branch 280 taken 51302 times.
✗ Branch 281 not taken.
✓ Branch 283 taken 51302 times.
✗ Branch 284 not taken.
✓ Branch 286 taken 51302 times.
✗ Branch 287 not taken.
✓ Branch 289 taken 51302 times.
✗ Branch 290 not taken.
✓ Branch 292 taken 51302 times.
✗ Branch 293 not taken.
✓ Branch 295 taken 51302 times.
✗ Branch 296 not taken.
✓ Branch 298 taken 1098424 times.
✗ Branch 299 not taken.
✓ Branch 301 taken 1098424 times.
✗ Branch 302 not taken.
✓ Branch 304 taken 1098424 times.
✗ Branch 305 not taken.
✓ Branch 307 taken 1098424 times.
✗ Branch 308 not taken.
✓ Branch 310 taken 1098424 times.
✗ Branch 311 not taken.
✓ Branch 313 taken 1098424 times.
✗ Branch 314 not taken.
✓ Branch 316 taken 1098424 times.
✗ Branch 317 not taken.
✓ Branch 319 taken 1098424 times.
✗ Branch 320 not taken.
✓ Branch 322 taken 1098424 times.
✗ Branch 323 not taken.
✓ Branch 325 taken 1098424 times.
✗ Branch 326 not taken.
✓ Branch 328 taken 1098424 times.
✗ Branch 329 not taken.
✓ Branch 331 taken 134500 times.
✗ Branch 332 not taken.
✓ Branch 334 taken 134500 times.
✗ Branch 335 not taken.
✓ Branch 337 taken 134500 times.
✗ Branch 338 not taken.
✓ Branch 340 taken 134500 times.
✗ Branch 341 not taken.
✓ Branch 343 taken 134500 times.
✗ Branch 344 not taken.
✓ Branch 346 taken 134500 times.
✗ Branch 347 not taken.
✓ Branch 349 taken 134500 times.
✗ Branch 350 not taken.
✓ Branch 352 taken 134500 times.
✗ Branch 353 not taken.
✓ Branch 355 taken 134500 times.
✗ Branch 356 not taken.
✓ Branch 358 taken 134500 times.
✗ Branch 359 not taken.
✓ Branch 361 taken 134500 times.
✗ Branch 362 not taken.
✓ Branch 375 taken 1 times.
✗ Branch 376 not taken.
✓ Branch 378 taken 1 times.
✗ Branch 379 not taken.
✓ Branch 381 taken 1 times.
✗ Branch 382 not taken.
✓ Branch 384 taken 1 times.
✗ Branch 385 not taken.
✓ Branch 387 taken 1 times.
✗ Branch 388 not taken.
✓ Branch 390 taken 1 times.
✗ Branch 391 not taken.
✓ Branch 393 taken 1 times.
✗ Branch 394 not taken.
✓ Branch 396 taken 1 times.
✗ Branch 397 not taken.
✓ Branch 399 taken 1 times.
✗ Branch 400 not taken.
✓ Branch 402 taken 1 times.
✗ Branch 403 not taken.
✓ Branch 405 taken 1 times.
✗ Branch 406 not taken.
189642585 : gridGeometryPtr_(&gridGeometry) {}
262
263 //! Get an element sub control volume with a global scv index
264 //! We separate element and neighbor scvs to speed up mapping
265 const SubControlVolume& scv(GridIndexType scvIdx) const
266 {
267
172/176
✓ Branch 0 taken 96497299 times.
✓ Branch 1 taken 76507937 times.
✓ Branch 2 taken 96497299 times.
✓ Branch 3 taken 76507937 times.
✓ Branch 4 taken 92178745 times.
✓ Branch 5 taken 95510417 times.
✓ Branch 6 taken 92178745 times.
✓ Branch 7 taken 95510417 times.
✓ Branch 8 taken 94541029 times.
✓ Branch 9 taken 85371402 times.
✓ Branch 10 taken 94541029 times.
✓ Branch 11 taken 85371402 times.
✓ Branch 12 taken 73192271 times.
✓ Branch 13 taken 69011562 times.
✓ Branch 14 taken 73192271 times.
✓ Branch 15 taken 69011562 times.
✓ Branch 16 taken 40069102 times.
✓ Branch 17 taken 35993683 times.
✓ Branch 18 taken 40069102 times.
✓ Branch 19 taken 35993683 times.
✓ Branch 20 taken 40366956 times.
✓ Branch 21 taken 40754628 times.
✓ Branch 22 taken 40366956 times.
✓ Branch 23 taken 40754628 times.
✓ Branch 24 taken 91528117 times.
✓ Branch 25 taken 52413404 times.
✓ Branch 26 taken 87839285 times.
✓ Branch 27 taken 56129996 times.
✓ Branch 28 taken 46780453 times.
✓ Branch 29 taken 72281176 times.
✓ Branch 30 taken 46757285 times.
✓ Branch 31 taken 68564584 times.
✓ Branch 32 taken 18829835 times.
✓ Branch 33 taken 5228579 times.
✓ Branch 34 taken 19264715 times.
✓ Branch 35 taken 6082179 times.
✓ Branch 36 taken 3502209 times.
✓ Branch 37 taken 25108106 times.
✓ Branch 38 taken 3103067 times.
✓ Branch 39 taken 24254506 times.
✓ Branch 40 taken 4319786 times.
✓ Branch 41 taken 669906 times.
✓ Branch 42 taken 4333928 times.
✓ Branch 43 taken 710802 times.
✓ Branch 44 taken 1742876 times.
✓ Branch 45 taken 21718019 times.
✓ Branch 46 taken 1769520 times.
✓ Branch 47 taken 21677123 times.
✓ Branch 48 taken 17533826 times.
✓ Branch 49 taken 1679878 times.
✓ Branch 50 taken 17452182 times.
✓ Branch 51 taken 2067026 times.
✓ Branch 52 taken 11654626 times.
✓ Branch 53 taken 454644 times.
✓ Branch 54 taken 11658162 times.
✓ Branch 55 taken 177496 times.
✓ Branch 56 taken 6262234 times.
✓ Branch 57 taken 4074776 times.
✓ Branch 58 taken 6286198 times.
✓ Branch 59 taken 3978408 times.
✓ Branch 60 taken 13779602 times.
✓ Branch 61 taken 5378360 times.
✓ Branch 62 taken 13965502 times.
✓ Branch 63 taken 5364728 times.
✓ Branch 64 taken 679847 times.
✓ Branch 65 taken 197746 times.
✓ Branch 66 taken 466447 times.
✓ Branch 67 taken 197746 times.
✓ Branch 68 taken 138974 times.
✓ Branch 69 taken 1475950 times.
✓ Branch 70 taken 138974 times.
✓ Branch 71 taken 1475950 times.
✓ Branch 72 taken 619622 times.
✓ Branch 73 taken 1272311 times.
✓ Branch 74 taken 619622 times.
✓ Branch 75 taken 1272311 times.
✓ Branch 76 taken 223486 times.
✓ Branch 77 taken 3638 times.
✓ Branch 78 taken 223486 times.
✓ Branch 79 taken 3638 times.
✓ Branch 80 taken 185814 times.
✓ Branch 81 taken 7518 times.
✓ Branch 82 taken 185814 times.
✓ Branch 83 taken 7518 times.
✓ Branch 84 taken 137240 times.
✓ Branch 85 taken 543078 times.
✓ Branch 86 taken 137240 times.
✓ Branch 87 taken 543078 times.
✓ Branch 88 taken 47338 times.
✓ Branch 89 taken 473824 times.
✓ Branch 90 taken 47338 times.
✓ Branch 91 taken 473824 times.
✓ Branch 92 taken 129090 times.
✓ Branch 93 taken 10372 times.
✓ Branch 94 taken 129090 times.
✓ Branch 95 taken 10372 times.
✓ Branch 96 taken 54923 times.
✓ Branch 97 taken 11354 times.
✓ Branch 98 taken 54923 times.
✓ Branch 99 taken 11354 times.
✓ Branch 100 taken 104294 times.
✓ Branch 101 taken 5596 times.
✓ Branch 102 taken 104294 times.
✓ Branch 103 taken 5596 times.
✓ Branch 104 taken 197960 times.
✓ Branch 105 taken 106876 times.
✓ Branch 106 taken 197960 times.
✓ Branch 107 taken 106876 times.
✓ Branch 108 taken 39348 times.
✓ Branch 109 taken 109404 times.
✓ Branch 110 taken 39348 times.
✓ Branch 111 taken 109404 times.
✓ Branch 112 taken 796 times.
✓ Branch 113 taken 162472 times.
✓ Branch 114 taken 796 times.
✓ Branch 115 taken 162472 times.
✓ Branch 116 taken 1029378 times.
✓ Branch 117 taken 18 times.
✓ Branch 118 taken 1029378 times.
✓ Branch 119 taken 18 times.
✓ Branch 120 taken 1081004 times.
✓ Branch 121 taken 2480 times.
✓ Branch 122 taken 1081004 times.
✓ Branch 123 taken 2480 times.
✓ Branch 124 taken 708 times.
✓ Branch 125 taken 3162196 times.
✓ Branch 126 taken 708 times.
✓ Branch 127 taken 3162196 times.
✓ Branch 128 taken 73244 times.
✓ Branch 129 taken 100000 times.
✓ Branch 130 taken 73244 times.
✓ Branch 131 taken 100000 times.
✓ Branch 132 taken 90068 times.
✓ Branch 133 taken 2364 times.
✓ Branch 134 taken 90068 times.
✓ Branch 135 taken 2364 times.
✓ Branch 136 taken 964756 times.
✓ Branch 137 taken 154488 times.
✓ Branch 138 taken 964756 times.
✓ Branch 139 taken 154488 times.
✓ Branch 140 taken 86419 times.
✓ Branch 141 taken 33096 times.
✓ Branch 142 taken 86419 times.
✓ Branch 143 taken 33096 times.
✓ Branch 144 taken 6045 times.
✓ Branch 145 taken 1512 times.
✓ Branch 146 taken 6045 times.
✓ Branch 147 taken 1512 times.
✓ Branch 148 taken 2217 times.
✓ Branch 149 taken 23577 times.
✓ Branch 150 taken 2217 times.
✓ Branch 151 taken 23577 times.
✓ Branch 152 taken 39312 times.
✓ Branch 153 taken 24 times.
✓ Branch 154 taken 39312 times.
✓ Branch 155 taken 24 times.
✓ Branch 156 taken 400 times.
✓ Branch 157 taken 528 times.
✓ Branch 158 taken 400 times.
✓ Branch 159 taken 528 times.
✓ Branch 160 taken 12 times.
✓ Branch 161 taken 864 times.
✓ Branch 162 taken 12 times.
✓ Branch 163 taken 864 times.
✓ Branch 164 taken 8376 times.
✗ Branch 165 not taken.
✓ Branch 166 taken 8376 times.
✗ Branch 167 not taken.
✓ Branch 168 taken 5781 times.
✓ Branch 169 taken 24056 times.
✓ Branch 170 taken 5781 times.
✓ Branch 171 taken 24056 times.
✗ Branch 172 not taken.
✓ Branch 173 taken 304 times.
✗ Branch 174 not taken.
✓ Branch 175 taken 304 times.
2481248950 if (scvIdx == scvIndices_[0])
268 1284446124 return scvs_[0];
269 else
270 599010219 return neighborScvs_[Detail::Tpfa::findLocalIndex(scvIdx, neighborScvIndices_)];
271 }
272
273 //! Get an element sub control volume face with a global scvf index
274 //! We separate element and neighbor scvfs to speed up mapping
275 215404970 const SubControlVolumeFace& scvf(GridIndexType scvfIdx) const
276 {
277 646214910 auto it = std::find(scvfIndices_.begin(), scvfIndices_.end(), scvfIdx);
278
6/6
✓ Branch 0 taken 53700052 times.
✓ Branch 1 taken 147433632 times.
✓ Branch 2 taken 53700052 times.
✓ Branch 3 taken 147433632 times.
✓ Branch 4 taken 53700052 times.
✓ Branch 5 taken 147433632 times.
646214910 if (it != scvfIndices_.end())
279 229094752 return scvfs_[std::distance(scvfIndices_.begin(), it)];
280 else
281 158131282 return neighborScvfs_[Detail::Tpfa::findLocalIndex(scvfIdx, neighborScvfIndices_)];
282 }
283
284 //! Get the scvf on the same face but from the other side
285 //! Note that e.g. the normals might be different in the case of surface grids
286 15211828 const SubControlVolumeFace& flipScvf(GridIndexType scvfIdx, unsigned int outsideScvIdx = 0) const
287 {
288 45635484 auto it = std::find(scvfIndices_.begin(), scvfIndices_.end(), scvfIdx);
289
6/6
✓ Branch 0 taken 4006914 times.
✓ Branch 1 taken 3881672 times.
✓ Branch 2 taken 4006914 times.
✓ Branch 3 taken 3881672 times.
✓ Branch 4 taken 4006914 times.
✓ Branch 5 taken 3881672 times.
45635484 if (it != scvfIndices_.end())
290 {
291 15344774 const auto localScvfIdx = std::distance(scvfIndices_.begin(), it);
292 30689548 return neighborScvfs_[flippedScvfIndices_[localScvfIdx][outsideScvIdx]];
293 }
294 else
295 {
296 7539441 const auto localScvfIdx = Detail::Tpfa::findLocalIndex(scvfIdx, neighborScvfIndices_);
297
4/4
✓ Branch 0 taken 3869750 times.
✓ Branch 1 taken 11922 times.
✓ Branch 2 taken 3869750 times.
✓ Branch 3 taken 11922 times.
15078882 const auto localFlippedIndex = flippedNeighborScvfIndices_[localScvfIdx][outsideScvIdx];
298
4/4
✓ Branch 0 taken 3869750 times.
✓ Branch 1 taken 11922 times.
✓ Branch 2 taken 3869750 times.
✓ Branch 3 taken 11922 times.
15078882 if (localFlippedIndex < scvfs_.size())
299 15052374 return scvfs_[localFlippedIndex];
300 else
301 26508 return neighborScvfs_[localFlippedIndex - scvfs_.size()];
302 }
303 }
304
305 //! iterator range for sub control volumes. Iterates over
306 //! all scvs of the bound element (not including neighbor scvs)
307 //! This is a free function found by means of ADL
308 //! To iterate over all sub control volumes of this FVElementGeometry use
309 //! for (auto&& scv : scvs(fvGeometry))
310 friend inline Dune::IteratorRange<typename std::array<SubControlVolume, 1>::const_iterator>
311 scvs(const ThisType& g)
312 {
313 using IteratorType = typename std::array<SubControlVolume, 1>::const_iterator;
314
26/32
✓ Branch 0 taken 1959248 times.
✓ Branch 1 taken 4324516 times.
✓ Branch 2 taken 1959248 times.
✓ Branch 3 taken 4142364 times.
✓ Branch 4 taken 2146680 times.
✓ Branch 5 taken 4142364 times.
✓ Branch 6 taken 5280 times.
✓ Branch 7 taken 188204 times.
✓ Branch 8 taken 5280 times.
✓ Branch 9 taken 6052 times.
✓ Branch 10 taken 8840 times.
✓ Branch 11 taken 6052 times.
✓ Branch 12 taken 5280 times.
✓ Branch 13 taken 51916 times.
✓ Branch 14 taken 5280 times.
✓ Branch 15 taken 48356 times.
✓ Branch 16 taken 3560 times.
✓ Branch 17 taken 48356 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 1242 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 1232 times.
✓ Branch 22 taken 10 times.
✓ Branch 23 taken 1232 times.
✓ Branch 25 taken 10 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 10 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 10 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 10 times.
✗ Branch 35 not taken.
187909179 return Dune::IteratorRange<IteratorType>(g.scvs_.begin(), g.scvs_.end());
315 }
316
317 //! iterator range for sub control volumes faces. Iterates over
318 //! all scvfs of the bound element (not including neighbor scvfs)
319 //! This is a free function found by means of ADL
320 //! To iterate over all sub control volume faces of this FVElementGeometry use
321 //! for (auto&& scvf : scvfs(fvGeometry))
322 friend inline Dune::IteratorRange<typename std::vector<SubControlVolumeFace>::const_iterator>
323 scvfs(const ThisType& g)
324 {
325 using IteratorType = typename std::vector<SubControlVolumeFace>::const_iterator;
326
12/24
✓ Branch 1 taken 400 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 400 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 400 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 400 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 400 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 400 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 10 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 10 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 10 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 10 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 10 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 10 times.
✗ Branch 35 not taken.
170287701 return Dune::IteratorRange<IteratorType>(g.scvfs_.begin(), g.scvfs_.end());
327 }
328
329 //! number of sub control volumes in this fv element geometry
330 std::size_t numScv() const
331
3/4
✓ Branch 0 taken 404096 times.
✓ Branch 1 taken 3515 times.
✓ Branch 2 taken 405376 times.
✗ Branch 3 not taken.
54482688 { return scvs_.size(); }
332
333 //! number of sub control volumes in this fv element geometry
334 std::size_t numScvf() const
335
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 647936 times.
✓ Branch 2 taken 2580 times.
✓ Branch 3 taken 647936 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
16845277 { return scvfs_.size(); }
336
337 /*!
338 * \brief bind the local view (r-value overload)
339 * This overload is called when an instance of this class is a temporary in the usage context
340 * This allows a usage like this: `const auto view = localView(...).bind(element);`
341 */
342 CCTpfaFVElementGeometry bind(const Element& element) &&
343 {
344
3/6
✓ Branch 1 taken 4811 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50012 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 100 times.
✗ Branch 8 not taken.
54923 this->bind_(element);
345 54923 return std::move(*this);
346 }
347
348 void bind(const Element& element) &
349 {
350
8/14
✓ Branch 1 taken 550261 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 87740 times.
✓ Branch 5 taken 36914 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 76900 times.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
✓ Branch 17 taken 100 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1928 times.
✗ Branch 21 not taken.
16169889 this->bind_(element);
351 }
352
353 /*!
354 * \brief bind the local view (r-value overload)
355 * This overload is called when an instance of this class is a temporary in the usage context
356 * This allows a usage like this: `const auto view = localView(...).bindElement(element);`
357 */
358 CCTpfaFVElementGeometry bindElement(const Element& element) &&
359 {
360
4/8
✓ Branch 1 taken 187611 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4440 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 371200 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 371200 times.
✗ Branch 11 not taken.
934451 this->bindElement_(element);
361 934451 return std::move(*this);
362 }
363
364 void bindElement(const Element& element) &
365 {
366
12/24
✓ Branch 1 taken 901617 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 452584 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 679846 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2433228 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 309701 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 378759 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 519406 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1990 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 52048 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 100528 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 320 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 376 times.
✗ Branch 35 not taken.
5830403 this->bindElement_(element);
367 }
368
369 //! Returns true if bind/bindElement has already been called
370 bool isBound() const
371
4/8
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
8 { return static_cast<bool>(element_); }
372
373 //! The bound element
374 const Element& element() const
375 2303880 { return *element_; }
376
377 //! The global finite volume geometry we are a restriction of
378 const GridGeometry& gridGeometry() const
379 { return *gridGeometryPtr_; }
380
381 //! Returns whether one of the geometry's scvfs lies on a boundary
382 bool hasBoundaryScvf() const
383 { return hasBoundaryScvf_; }
384
385 typename Element::Geometry geometry(const SubControlVolume& scv) const
386 { return gridGeometryPtr_->element(scv.dofIndex()).geometry(); }
387
388 4744 typename GridView::Intersection::Geometry geometry(const SubControlVolumeFace& scvf) const
389 {
390
0/4
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
9592 const auto element = gridGeometryPtr_->element(scvf.insideScvIdx());
391 9488 const auto& scvfIndices = gridGeometryPtr_->scvfIndicesOfScv(scvf.insideScvIdx());
392 4744 const LocalIndexType localScvfIdx = Detail::Tpfa::findLocalIndex(scvf.index(), scvfIndices);
393 4744 LocalIndexType localIdx = 0;
394
5/11
✓ Branch 1 taken 104 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 11600 times.
✓ Branch 4 taken 104 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 280 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 14 taken 176 times.
✗ Branch 15 not taken.
16904 for (const auto& intersection : intersections(gridGeometryPtr_->gridView(), element))
395 {
396
4/6
✓ Branch 0 taken 9252 times.
✓ Branch 1 taken 2412 times.
✓ Branch 2 taken 4912 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 64 times.
✗ Branch 5 not taken.
14228 if (intersection.neighbor() || intersection.boundary())
397 {
398
2/2
✓ Branch 0 taken 4744 times.
✓ Branch 1 taken 7136 times.
11880 if (localIdx == localScvfIdx)
399
1/2
✓ Branch 1 taken 104 times.
✗ Branch 2 not taken.
4848 return intersection.geometry();
400 else
401 7136 ++localIdx;
402 }
403 }
404
405 DUNE_THROW(Dune::InvalidStateException, "Could not find scvf geometry");
406 }
407
408 private:
409 //! Binding of an element preparing the geometries of the whole stencil
410 //! called by the local jacobian to prepare element assembly
411 17582757 void bind_(const Element& element)
412 {
413 17582757 bindElement_(element);
414
415 30698474 neighborScvs_.reserve(element.subEntities(1));
416 30698474 neighborScvfIndices_.reserve(element.subEntities(1));
417 30698474 neighborScvfs_.reserve(element.subEntities(1));
418
419
2/6
✓ Branch 1 taken 16224812 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16194412 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
35165514 std::vector<GridIndexType> handledNeighbors;
420
3/5
✓ Branch 1 taken 16194412 times.
✓ Branch 2 taken 30400 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 16194412 times.
✗ Branch 5 not taken.
30698474 handledNeighbors.reserve(element.subEntities(1));
421
422
17/21
✓ Branch 1 taken 3411368 times.
✓ Branch 2 taken 12813444 times.
✓ Branch 3 taken 34916008 times.
✓ Branch 4 taken 19861009 times.
✓ Branch 5 taken 49599 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 365534 times.
✓ Branch 8 taken 14477513 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 243934 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1071858 times.
✓ Branch 13 taken 407254 times.
✓ Branch 14 taken 11714485 times.
✓ Branch 15 taken 162332 times.
✓ Branch 16 taken 903358 times.
✓ Branch 17 taken 229202 times.
✓ Branch 18 taken 111726 times.
✓ Branch 19 taken 649328 times.
✓ Branch 20 taken 340928 times.
✗ Branch 21 not taken.
108005597 for (const auto& intersection : intersections(gridGeometry().gridView(), element))
423 {
424 // for inner intersections and periodic (according to grid interface) intersections make neighbor geometry
425
4/4
✓ Branch 0 taken 34125711 times.
✓ Branch 1 taken 12913919 times.
✓ Branch 2 taken 650837 times.
✓ Branch 3 taken 120834 times.
52243021 if (intersection.neighbor())
426 {
427
1/2
✓ Branch 1 taken 11726466 times.
✗ Branch 2 not taken.
62538256 const auto outside = intersection.outside();
428
2/4
✓ Branch 1 taken 11726466 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 11726466 times.
✗ Branch 5 not taken.
95080864 const auto outsideIdx = gridGeometry().elementMapper().index(outside);
429
430 // make outside geometries only if not done yet (could happen on non-conforming grids)
431
2/4
✓ Branch 4 taken 43302090 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 43302090 times.
✗ Branch 7 not taken.
190161728 if ( std::find(handledNeighbors.begin(), handledNeighbors.end(), outsideIdx) == handledNeighbors.end() )
432 {
433
1/2
✓ Branch 1 taken 43302090 times.
✗ Branch 2 not taken.
47540432 makeNeighborGeometries(outside, outsideIdx);
434
1/2
✓ Branch 1 taken 43302090 times.
✗ Branch 2 not taken.
47540432 handledNeighbors.push_back(outsideIdx);
435 }
436 }
437 }
438
439 // build flip index set for network, surface, and periodic grids
440
2/2
✓ Branch 0 taken 30400 times.
✓ Branch 1 taken 15993219 times.
17240022 if (dim < dimWorld || gridGeometry().isPeriodic())
441 {
442
2/4
✓ Branch 1 taken 231593 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 231593 times.
✗ Branch 5 not taken.
746270 flippedScvfIndices_.resize(scvfs_.size());
443
4/4
✓ Branch 0 taken 697076 times.
✓ Branch 1 taken 231593 times.
✓ Branch 2 taken 697076 times.
✓ Branch 3 taken 231593 times.
1899920 for (unsigned int localScvfIdx = 0; localScvfIdx < scvfs_.size(); ++localScvfIdx)
444 {
445
2/2
✓ Branch 0 taken 676112 times.
✓ Branch 1 taken 20964 times.
1153650 const auto& scvf = scvfs_[localScvfIdx];
446
2/2
✓ Branch 0 taken 676112 times.
✓ Branch 1 taken 20964 times.
1153650 if (scvf.boundary())
447 continue;
448
449
3/6
✓ Branch 1 taken 676112 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 676112 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 676112 times.
✗ Branch 8 not taken.
3350586 flippedScvfIndices_[localScvfIdx].resize(scvf.numOutsideScvs());
450
4/4
✓ Branch 0 taken 700694 times.
✓ Branch 1 taken 676112 times.
✓ Branch 2 taken 700694 times.
✓ Branch 3 taken 676112 times.
3387384 for (unsigned int localOutsideScvIdx = 0; localOutsideScvIdx < scvf.numOutsideScvs(); ++localOutsideScvIdx)
451 {
452 1153660 const auto globalOutsideScvIdx = scvf.outsideScvIdx(localOutsideScvIdx);
453
2/4
✓ Branch 0 taken 1534004 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1534004 times.
✗ Branch 3 not taken.
2554727 for (unsigned int localNeighborScvfIdx = 0; localNeighborScvfIdx < neighborScvfs_.size(); ++localNeighborScvfIdx)
454 {
455
6/6
✓ Branch 0 taken 700694 times.
✓ Branch 1 taken 833310 times.
✓ Branch 2 taken 700694 times.
✓ Branch 3 taken 833310 times.
✓ Branch 4 taken 700694 times.
✓ Branch 5 taken 833310 times.
7664181 if (neighborScvfs_[localNeighborScvfIdx].insideScvIdx() == globalOutsideScvIdx)
456 {
457 2307320 flippedScvfIndices_[localScvfIdx][localOutsideScvIdx] = localNeighborScvfIdx;
458 1153660 break;
459 }
460 }
461 }
462 }
463
464
2/4
✓ Branch 1 taken 231593 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 231593 times.
✗ Branch 5 not taken.
746270 flippedNeighborScvfIndices_.resize(neighborScvfs_.size());
465
4/4
✓ Branch 0 taken 700694 times.
✓ Branch 1 taken 231593 times.
✓ Branch 2 taken 700694 times.
✓ Branch 3 taken 231593 times.
1899930 for (unsigned int localScvfIdx = 0; localScvfIdx < neighborScvfs_.size(); ++localScvfIdx)
466 {
467
1/2
✓ Branch 1 taken 700694 times.
✗ Branch 2 not taken.
1153660 const auto& neighborScvf = neighborScvfs_[localScvfIdx];
468
3/6
✓ Branch 1 taken 700694 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 700694 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 700694 times.
✗ Branch 8 not taken.
3460980 flippedNeighborScvfIndices_[localScvfIdx].resize(neighborScvf.numOutsideScvs());
469
4/4
✓ Branch 0 taken 774710 times.
✓ Branch 1 taken 700694 times.
✓ Branch 2 taken 774710 times.
✓ Branch 3 taken 700694 times.
4835968 for (unsigned int localOutsideScvIdx = 0; localOutsideScvIdx < neighborScvf.numOutsideScvs(); ++localOutsideScvIdx)
470 {
471
3/6
✓ Branch 1 taken 774710 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 774710 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 774710 times.
✗ Branch 8 not taken.
3792972 flippedNeighborScvfIndices_[localScvfIdx][localOutsideScvIdx] = findFlippedScvfIndex_(neighborScvf.insideScvIdx(), neighborScvf.outsideScvIdx(localOutsideScvIdx));
472 }
473 }
474 }
475 17582757 }
476
477 //! Binding of an element preparing the geometries only inside the element
478 24667439 void bindElement_(const Element& element)
479 {
480 24667439 clear();
481
2/2
✓ Branch 0 taken 3722265 times.
✓ Branch 1 taken 13936436 times.
24667439 element_ = element;
482 42613395 scvfs_.reserve(element.subEntities(1));
483 42613395 scvfIndices_.reserve(element.subEntities(1));
484 24667439 makeElementGeometries(element);
485 24667439 }
486
487 1264324 GridIndexType findFlippedScvfIndex_(GridIndexType insideScvIdx, GridIndexType globalOutsideScvIdx)
488 {
489
4/4
✓ Branch 0 taken 2552480 times.
✓ Branch 1 taken 700694 times.
✓ Branch 2 taken 2552480 times.
✓ Branch 3 taken 700694 times.
5386150 for (unsigned int localNeighborScvfIdx = 0; localNeighborScvfIdx < neighborScvfs_.size(); ++localNeighborScvfIdx)
490 {
491
6/6
✓ Branch 0 taken 74016 times.
✓ Branch 1 taken 2478464 times.
✓ Branch 2 taken 74016 times.
✓ Branch 3 taken 2478464 times.
✓ Branch 4 taken 74016 times.
✓ Branch 5 taken 2478464 times.
12697470 if (neighborScvfs_[localNeighborScvfIdx].insideScvIdx() == globalOutsideScvIdx)
492 {
493 221328 return scvfs_.size() + localNeighborScvfIdx;
494 }
495 }
496
497 // go over all potential scvfs of the outside scv
498
2/4
✓ Branch 0 taken 1505049 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1505049 times.
✗ Branch 3 not taken.
3672882 for (unsigned int localOutsideScvfIdx = 0; localOutsideScvfIdx < scvfs_.size(); ++localOutsideScvfIdx)
499 {
500 2519222 const auto& outsideScvf = scvfs_[localOutsideScvfIdx];
501
4/4
✓ Branch 0 taken 1554579 times.
✓ Branch 1 taken 804355 times.
✓ Branch 2 taken 1554579 times.
✓ Branch 3 taken 804355 times.
3958896 for (unsigned int j = 0; j < outsideScvf.numOutsideScvs(); ++j)
502 {
503
4/4
✓ Branch 0 taken 700694 times.
✓ Branch 1 taken 853885 times.
✓ Branch 2 taken 700694 times.
✓ Branch 3 taken 853885 times.
5186668 if (outsideScvf.outsideScvIdx(j) == insideScvIdx)
504 {
505 1153660 return localOutsideScvfIdx;
506 }
507 }
508 }
509
510 DUNE_THROW(Dune::InvalidStateException, "No flipped version of this scvf found!");
511 }
512
513 //! create scvs and scvfs of the bound element
514 24667439 void makeElementGeometries(const Element& element)
515 {
516 using ScvfGridIndexStorage = typename SubControlVolumeFace::Traits::GridIndexStorage;
517
518 49334878 const auto eIdx = gridGeometry().elementMapper().index(element);
519
2/3
✓ Branch 2 taken 5050393 times.
✓ Branch 3 taken 1392785 times.
✗ Branch 4 not taken.
40043936 scvs_[0] = SubControlVolume(element.geometry(), eIdx);
520
1/2
✓ Branch 1 taken 6456698 times.
✗ Branch 2 not taken.
24667439 scvIndices_[0] = eIdx;
521
522
1/2
✓ Branch 1 taken 6456698 times.
✗ Branch 2 not taken.
24667439 const auto& scvFaceIndices = gridGeometry().scvfIndicesOfScv(eIdx);
523
1/2
✓ Branch 1 taken 6456698 times.
✗ Branch 2 not taken.
24667439 const auto& neighborVolVarIndices = gridGeometry().neighborVolVarIndices(eIdx);
524
525 // for network grids there might be multiple intersection with the same geometryInInside
526 // we identify those by the indexInInside for now (assumes conforming grids at branching facets)
527 // here we keep track of them
528
1/2
✓ Branch 1 taken 6456698 times.
✗ Branch 2 not taken.
25091883 std::vector<bool> handledScvf;
529 if (dim < dimWorld)
530
2/4
✓ Branch 1 taken 1115889 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1115889 times.
✗ Branch 5 not taken.
2681206 handledScvf.resize(element.subEntities(1), false);
531
532 24667439 int scvfCounter = 0;
533
18/21
✓ Branch 1 taken 6456698 times.
✓ Branch 2 taken 16533398 times.
✓ Branch 3 taken 47895640 times.
✓ Branch 4 taken 6939898 times.
✓ Branch 5 taken 18363035 times.
✓ Branch 6 taken 20293 times.
✓ Branch 7 taken 907503 times.
✓ Branch 8 taken 27130845 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 424303 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1848295 times.
✓ Branch 13 taken 752776 times.
✓ Branch 14 taken 19590222 times.
✓ Branch 15 taken 2569012 times.
✓ Branch 16 taken 450516 times.
✓ Branch 17 taken 2266752 times.
✓ Branch 18 taken 139449 times.
✓ Branch 19 taken 377763 times.
✓ Branch 21 taken 517212 times.
✗ Branch 22 not taken.
190015785 for (const auto& intersection : intersections(gridGeometry().gridView(), element))
534 {
535 if (dim < dimWorld)
536
7/9
✗ Branch 0 not taken.
✓ Branch 1 taken 2717268 times.
✓ Branch 2 taken 2007916 times.
✓ Branch 3 taken 709352 times.
✓ Branch 4 taken 2007916 times.
✓ Branch 5 taken 709352 times.
✓ Branch 6 taken 2007916 times.
✓ Branch 7 taken 709352 times.
✗ Branch 8 not taken.
3671968 if (handledScvf[intersection.indexInInside()])
537 continue;
538
539
2/2
✓ Branch 0 taken 45650504 times.
✓ Branch 1 taken 4287064 times.
75669646 const auto& scvfNeighborVolVarIndices = neighborVolVarIndices[scvfCounter];
540
7/8
✓ Branch 0 taken 45650504 times.
✓ Branch 1 taken 4598839 times.
✓ Branch 2 taken 23374737 times.
✓ Branch 3 taken 2312205 times.
✓ Branch 4 taken 521966 times.
✓ Branch 5 taken 2732 times.
✓ Branch 6 taken 73474 times.
✗ Branch 7 not taken.
80829614 if (intersection.neighbor() || intersection.boundary())
541 {
542
2/3
✓ Branch 0 taken 67996514 times.
✓ Branch 1 taken 70454946 times.
✗ Branch 2 not taken.
151326172 ScvfGridIndexStorage scvIndices;
543
3/5
✓ Branch 0 taken 67996514 times.
✓ Branch 1 taken 2458432 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2458432 times.
✗ Branch 5 not taken.
79022858 scvIndices.resize(scvfNeighborVolVarIndices.size() + 1);
544
1/2
✓ Branch 0 taken 67996514 times.
✗ Branch 1 not taken.
75663086 scvIndices[0] = eIdx;
545
5/10
✓ Branch 0 taken 70454946 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 70454946 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 70454946 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 70454946 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2458432 times.
✗ Branch 9 not taken.
306012116 std::copy(scvfNeighborVolVarIndices.begin(), scvfNeighborVolVarIndices.end(), scvIndices.begin()+1);
546
547
7/8
✓ Branch 0 taken 48999186 times.
✓ Branch 1 taken 2455437 times.
✓ Branch 2 taken 21255853 times.
✓ Branch 3 taken 4044766 times.
✓ Branch 4 taken 2800 times.
✓ Branch 5 taken 521690 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 73474 times.
82551815 const bool onBoundary = intersection.boundary() && !intersection.neighbor();
548
4/4
✓ Branch 0 taken 64014491 times.
✓ Branch 1 taken 6440455 times.
✓ Branch 2 taken 60983702 times.
✓ Branch 3 taken 3030789 times.
75663086 hasBoundaryScvf_ = (hasBoundaryScvf_ || onBoundary);
549
550
2/6
✓ Branch 1 taken 70454946 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 515004 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
75663086 scvfs_.emplace_back(intersection,
551 intersection.geometry(),
552
2/4
✓ Branch 1 taken 21354618 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 21354618 times.
✗ Branch 5 not taken.
151326172 scvFaceIndices[scvfCounter],
553 scvIndices,
554 onBoundary);
555
2/4
✓ Branch 1 taken 70454946 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 70454946 times.
✗ Branch 5 not taken.
151326172 scvfIndices_.emplace_back(scvFaceIndices[scvfCounter]);
556
1/2
✓ Branch 1 taken 1209040 times.
✗ Branch 2 not taken.
75663086 scvfCounter++;
557
558 // for surface and network grids mark that we handled this face
559 if (dim < dimWorld)
560
7/9
✗ Branch 0 not taken.
✓ Branch 1 taken 2458432 times.
✓ Branch 2 taken 2007916 times.
✓ Branch 3 taken 450516 times.
✓ Branch 4 taken 2007916 times.
✓ Branch 5 taken 450516 times.
✓ Branch 6 taken 2007916 times.
✓ Branch 7 taken 450516 times.
✗ Branch 8 not taken.
3359772 handledScvf[intersection.indexInInside()] = true;
561 }
562 }
563 24667439 }
564
565 //! create the necessary scvs and scvfs of the neighbor elements to the bound elements
566 47540432 void makeNeighborGeometries(const Element& element, const GridIndexType eIdx)
567 {
568 using ScvfGridIndexStorage = typename SubControlVolumeFace::Traits::GridIndexStorage;
569
570 // create the neighbor scv
571
1/2
✓ Branch 2 taken 10880344 times.
✗ Branch 3 not taken.
47769634 neighborScvs_.emplace_back(element.geometry(), eIdx);
572 47540432 neighborScvIndices_.push_back(eIdx);
573
574
1/2
✓ Branch 1 taken 11971388 times.
✗ Branch 2 not taken.
47540432 const auto& scvFaceIndices = gridGeometry().scvfIndicesOfScv(eIdx);
575
1/2
✓ Branch 1 taken 11971388 times.
✗ Branch 2 not taken.
47540432 const auto& neighborVolVarIndices = gridGeometry().neighborVolVarIndices(eIdx);
576
577 // for network grids there might be multiple intersection with the same geometryInInside
578 // we identify those by the indexInInside for now (assumes conforming grids at branching facets)
579 // here we keep track of them
580
1/2
✓ Branch 1 taken 11971388 times.
✗ Branch 2 not taken.
48277944 std::vector<bool> handledScvf;
581 if (dim < dimWorld)
582
2/4
✓ Branch 1 taken 580102 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 580102 times.
✗ Branch 5 not taken.
1395776 handledScvf.resize(element.subEntities(1), false);
583
584 47540432 int scvfCounter = 0;
585
18/22
✓ Branch 1 taken 11971388 times.
✓ Branch 2 taken 31330702 times.
✓ Branch 3 taken 92747748 times.
✓ Branch 4 taken 12453756 times.
✓ Branch 5 taken 32719077 times.
✓ Branch 6 taken 19199 times.
✓ Branch 7 taken 1328490 times.
✓ Branch 8 taken 52076070 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 846122 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 3682186 times.
✓ Branch 13 taken 1957640 times.
✓ Branch 14 taken 41488398 times.
✓ Branch 15 taken 1206286 times.
✓ Branch 16 taken 3808400 times.
✓ Branch 17 taken 589366 times.
✓ Branch 18 taken 753586 times.
✓ Branch 19 taken 2699398 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 985304 times.
✗ Branch 22 not taken.
366808490 for (const auto& intersection : intersections(gridGeometry().gridView(), element))
586 {
587 if (dim < dimWorld)
588
7/9
✗ Branch 0 not taken.
✓ Branch 1 taken 1930086 times.
✓ Branch 2 taken 490696 times.
✓ Branch 3 taken 1439390 times.
✓ Branch 4 taken 490696 times.
✓ Branch 5 taken 1439390 times.
✓ Branch 6 taken 490696 times.
✓ Branch 7 taken 1439390 times.
✗ Branch 8 not taken.
3556166 if (handledScvf[intersection.indexInInside()])
589 continue;
590
591
4/4
✓ Branch 0 taken 92257651 times.
✓ Branch 1 taken 44311543 times.
✓ Branch 2 taken 1718744 times.
✓ Branch 3 taken 240928 times.
152444434 if (intersection.neighbor())
592 {
593 // this catches inner and periodic scvfs
594
2/3
✓ Branch 0 taken 479360 times.
✓ Branch 1 taken 124725192 times.
✗ Branch 2 not taken.
142342616 const auto& scvfNeighborVolVarIndices = neighborVolVarIndices[scvfCounter];
595
8/11
✓ Branch 0 taken 479360 times.
✓ Branch 1 taken 124725192 times.
✓ Branch 2 taken 960846 times.
✓ Branch 3 taken 3142458 times.
✓ Branch 4 taken 125204552 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1787104 times.
✓ Branch 7 taken 123417448 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 123417448 times.
✗ Branch 10 not taken.
424178488 if (scvfNeighborVolVarIndices[0] < gridGeometry().gridView().size(0))
596 {
597 // only create subcontrol faces where the outside element is the bound element
598 if (dim == dimWorld)
599 {
600
7/10
✓ Branch 1 taken 41715488 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 73046190 times.
✓ Branch 5 taken 53993076 times.
✓ Branch 7 taken 41715488 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 41715488 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 11391286 times.
✓ Branch 13 taken 30324202 times.
556055584 if (scvfNeighborVolVarIndices[0] == gridGeometry().elementMapper().index(*element_))
601 {
602 93014728 ScvfGridIndexStorage scvIndices({eIdx, scvfNeighborVolVarIndices[0]});
603
2/6
✓ Branch 1 taken 42721988 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 229202 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
46507364 neighborScvfs_.emplace_back(intersection,
604 intersection.geometry(),
605
1/2
✓ Branch 1 taken 10774366 times.
✗ Branch 2 not taken.
46507364 scvFaceIndices[scvfCounter],
606 scvIndices,
607
1/2
✓ Branch 1 taken 10774366 times.
✗ Branch 2 not taken.
46507364 false);
608
609
2/4
✓ Branch 1 taken 42721988 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 42721988 times.
✗ Branch 5 not taken.
93014728 neighborScvfIndices_.push_back(scvFaceIndices[scvfCounter]);
610 }
611 }
612 // for network grids we can't use the intersection.outside() index as we can't assure that the
613 // first intersection with this indexInInside is the one that has our bound element as outside
614 // instead we check if the bound element's index is in the outsideScvIndices of the candidate scvf
615 // (will be optimized away for dim == dimWorld)
616 else
617 {
618
4/4
✓ Branch 0 taken 1850856 times.
✓ Branch 1 taken 1209128 times.
✓ Branch 2 taken 1850856 times.
✓ Branch 3 taken 1209128 times.
9045294 for (unsigned outsideScvIdx = 0; outsideScvIdx < scvfNeighborVolVarIndices.size(); ++outsideScvIdx)
619 {
620
13/14
✓ Branch 0 taken 12276 times.
✓ Branch 1 taken 1320740 times.
✓ Branch 2 taken 12276 times.
✓ Branch 3 taken 12996 times.
✓ Branch 4 taken 1552666 times.
✓ Branch 5 taken 298190 times.
✓ Branch 6 taken 12276 times.
✓ Branch 7 taken 1320740 times.
✓ Branch 8 taken 12276 times.
✓ Branch 9 taken 12996 times.
✓ Branch 10 taken 1307744 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 335180 times.
✓ Branch 13 taken 972564 times.
13708960 if (scvfNeighborVolVarIndices[outsideScvIdx] == gridGeometry().elementMapper().index(*element_))
621 {
622
2/4
✓ Branch 1 taken 580102 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 580102 times.
✗ Branch 4 not taken.
3099204 ScvfGridIndexStorage scvIndices;
623
2/4
✓ Branch 1 taken 580102 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 580102 times.
✗ Branch 5 not taken.
2066136 scvIndices.resize(scvfNeighborVolVarIndices.size() + 1);
624 1033068 scvIndices[0] = eIdx;
625
5/10
✓ Branch 0 taken 580102 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 580102 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 580102 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 580102 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 580102 times.
✗ Branch 9 not taken.
5165340 std::copy(scvfNeighborVolVarIndices.begin(), scvfNeighborVolVarIndices.end(), scvIndices.begin()+1);
626
1/2
✓ Branch 1 taken 580102 times.
✗ Branch 2 not taken.
1033068 neighborScvfs_.emplace_back(intersection,
627 intersection.geometry(),
628
1/2
✓ Branch 1 taken 580102 times.
✗ Branch 2 not taken.
1033068 scvFaceIndices[scvfCounter],
629 scvIndices,
630
1/4
✓ Branch 1 taken 580102 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
1033068 false);
631
632
2/4
✓ Branch 1 taken 580102 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 580102 times.
✗ Branch 5 not taken.
2066136 neighborScvfIndices_.push_back(scvFaceIndices[scvfCounter]);
633 break;
634 }
635 }
636 }
637
638 // for surface and network grids mark that we handled this face
639 if (dim < dimWorld)
640
1/3
✗ Branch 0 not taken.
✓ Branch 1 taken 1789230 times.
✗ Branch 2 not taken.
3328720 handledScvf[intersection.indexInInside()] = true;
641 142342616 scvfCounter++;
642 }
643 }
644
645 // only increase counter for boundary intersections
646 // (exclude periodic boundaries according to dune grid interface, they have been handled in neighbor==true)
647
3/4
✓ Branch 0 taken 7658782 times.
✓ Branch 1 taken 485588 times.
✓ Branch 2 taken 10402 times.
✗ Branch 3 not taken.
8403282 else if (intersection.boundary())
648 {
649 if (dim < dimWorld)
650
1/2
✓ Branch 1 taken 32976 times.
✗ Branch 2 not taken.
107616 handledScvf[intersection.indexInInside()] = true;
651 8379370 scvfCounter++;
652 }
653 }
654 47540432 }
655
656 //! Clear all local data
657 24667439 void clear()
658 {
659
2/2
✓ Branch 0 taken 5304952 times.
✓ Branch 1 taken 17685144 times.
24667439 scvfIndices_.clear();
660
2/2
✓ Branch 0 taken 5267800 times.
✓ Branch 1 taken 16606407 times.
24667439 scvfs_.clear();
661 24667439 flippedScvfIndices_.clear();
662
663
2/2
✓ Branch 0 taken 784172 times.
✓ Branch 1 taken 22205924 times.
24667439 neighborScvIndices_.clear();
664
2/2
✓ Branch 0 taken 784172 times.
✓ Branch 1 taken 22205924 times.
24667439 neighborScvfIndices_.clear();
665
2/2
✓ Branch 0 taken 784172 times.
✓ Branch 1 taken 22205924 times.
24667439 neighborScvs_.clear();
666
2/2
✓ Branch 0 taken 783974 times.
✓ Branch 1 taken 21090233 times.
24667439 neighborScvfs_.clear();
667 24667439 flippedNeighborScvfIndices_.clear();
668
669 24667439 hasBoundaryScvf_ = false;
670 24667439 }
671
672 std::optional<Element> element_; //!< the element to which this fvgeometry is bound
673 const GridGeometry* gridGeometryPtr_; //!< the grid fvgeometry
674
675 // local storage after binding an element
676 std::array<GridIndexType, 1> scvIndices_;
677 std::array<SubControlVolume, 1> scvs_;
678
679 std::vector<GridIndexType> scvfIndices_;
680 std::vector<SubControlVolumeFace> scvfs_;
681 std::vector<std::vector<GridIndexType>> flippedScvfIndices_;
682
683 std::vector<GridIndexType> neighborScvIndices_;
684 std::vector<SubControlVolume> neighborScvs_;
685
686 std::vector<GridIndexType> neighborScvfIndices_;
687 std::vector<SubControlVolumeFace> neighborScvfs_;
688 std::vector<std::vector<GridIndexType>> flippedNeighborScvfIndices_;
689
690 bool hasBoundaryScvf_ = false;
691 };
692
693 } // end namespace Dumux
694
695 #endif
696