GCC Code Coverage Report


Directory: ../../../builds/dumux-repositories/
File: /builds/dumux-repositories/dumux/test/io/gridmanager/gridmanagertests.hh
Date: 2024-05-04 19:09:25
Exec Total Coverage
Lines: 106 114 93.0%
Functions: 25 49 51.0%
Branches: 251 509 49.3%

Line Branch Exec Source
1 //
2 // SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
3 // SPDX-License-Identifier: GPL-3.0-or-later
4 //
5 /*!
6 * \file
7 *
8 * \brief Some tests for the grid creator
9 * \note This can/should be extended
10 */
11
12 #ifndef DUMUX_TEST_IO_GRIDMANAGER_TESTS_HH
13 #define DUMUX_TEST_IO_GRIDMANAGER_TESTS_HH
14
15 #include <dune/grid/common/datahandleif.hh>
16 #include <dune/grid/common/mcmgmapper.hh>
17 #include <dune/grid/io/file/vtk.hh>
18
19 #include <dumux/io/grid/gridmanager.hh>
20 #include <dumux/discretization/method.hh>
21 #include <dumux/common/gridcapabilities.hh>
22
23 namespace Dumux {
24
25 /*!
26 * \brief data handle for parallel communication which takes
27 * the minimum non-zero values that are attached to vertices
28 */
29 template <class GridView>
30 class VertexHandleNonZeroMin
31 : public Dune::CommDataHandleIF< VertexHandleNonZeroMin<GridView>, int >
32 {
33 using Container = std::vector<int>;
34
35 public:
36 4 VertexHandleNonZeroMin(Container &container, const GridView &gridView)
37 : gridView_(gridView)
38 8 , container_(container)
39 {}
40
41 bool contains(int dim, int codim) const
42 {
43 // only communicate vertices
44 return codim == dim;
45 }
46
47 bool fixedSize(int dim, int codim) const
48 {
49 // for each vertex we communicate a single field vector which
50 // has a fixed size
51 return true;
52 }
53
54 template<class EntityType>
55 size_t size (const EntityType &e) const
56 {
57 // communicate a field type per entity
58 return 1;
59 }
60
61 template<class MessageBufferImp, class EntityType>
62 2868 void gather(MessageBufferImp &buff, const EntityType &e) const
63 {
64
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 246 times.
2868 int vIdx = gridView_.indexSet().index(e);
65 6228 buff.write(container_[vIdx]);
66 2868 }
67
68 template<class MessageBufferImp, class EntityType>
69 2868 void scatter(MessageBufferImp &buff, const EntityType &e, size_t n)
70 {
71
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 246 times.
✓ Branch 2 taken 158 times.
✓ Branch 3 taken 88 times.
2868 int vIdx = gridView_.indexSet().index(e);
72 int tmp;
73
2/2
✓ Branch 0 taken 158 times.
✓ Branch 1 taken 88 times.
2868 buff.read(tmp);
74 using std::min;
75
2/2
✓ Branch 0 taken 841 times.
✓ Branch 1 taken 593 times.
2868 if (tmp > 0)
76 {
77
4/4
✓ Branch 0 taken 495 times.
✓ Branch 1 taken 346 times.
✓ Branch 2 taken 495 times.
✓ Branch 3 taken 346 times.
3364 if (container_[vIdx] == 0)
78 990 container_[vIdx] = tmp;
79 else
80
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 346 times.
692 container_[vIdx] = min(container_[vIdx], tmp);
81 }
82 2868 }
83
84 private:
85 const GridView gridView_;
86 Container &container_;
87 };
88
89 template<class Grid>
90 class GridManagerTests
91 {
92 using GridView = typename Grid::LeafGridView;
93 using Scalar = double;
94 static const int dim = Grid::dimension;
95 using GridManager = typename Dumux::GridManager<Grid>;
96
97 public:
98
99 6 static void testBoundaryAndElementMarkers(const std::string& type = "gmsh",
100 const std::string& vtkFileName = "test",
101 bool refine = true)
102 {
103 // make the grid manager and initialize the grid
104 6 GridManager gridManager;
105
5/12
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 6 times.
✓ Branch 12 taken 6 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
12 gridManager.init();
106
1/4
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
12 auto gridData = gridManager.getGridData();
107
2/4
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
6 const auto& leafGridView = gridManager.grid().leafGridView();
108
109 // read the boundary and element markers as well as the rank
110
6/18
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 6 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 6 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
36 std::vector<int> boundaryMarker, elementMarker, rank;
111
1/2
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
6 getBoundaryMarkers_(leafGridView, gridData, boundaryMarker);
112
1/2
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
6 getElementMarkers_(leafGridView, gridData, elementMarker, type);
113
1/2
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
6 getRank_(leafGridView, rank);
114
115 // construct a vtk output writer and attach the boundary markers
116
9/18
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 6 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 6 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 6 times.
✓ Branch 20 taken 6 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 6 times.
✗ Branch 24 not taken.
30 Dune::VTKSequenceWriter<typename Grid::LeafGridView> vtkWriter(leafGridView, vtkFileName, ".", "");
117
5/12
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 6 times.
✓ Branch 12 taken 6 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
12 vtkWriter.addVertexData(boundaryMarker, "boundaryMarker");
118
5/12
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 6 times.
✓ Branch 12 taken 6 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
12 vtkWriter.addCellData(elementMarker, "elementMarker");
119
5/12
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 6 times.
✓ Branch 12 taken 6 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
12 vtkWriter.addCellData(rank, "rank");
120
1/2
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
6 vtkWriter.write(0);
121
122
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 5 times.
6 if (refine)
123 {
124 // refine grid once and write out the markers again
125
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 gridManager.grid().globalRefine(1);
126
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 getBoundaryMarkers_(leafGridView, gridData, boundaryMarker);
127
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 getElementMarkers_(leafGridView, gridData, elementMarker, type);
128
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 getRank_(leafGridView, rank);
129
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 vtkWriter.write(1);
130 }
131 6 }
132
133 12 static void testElementMarkers(const std::string& type = "gmsh",
134 const std::string& vtkFileName = "test",
135 bool refine = true)
136 {
137 // make the grid manager and initialize the grid
138 12 GridManager gridManager;
139
6/14
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 12 times.
✓ Branch 12 taken 12 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 12 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
24 gridManager.init();
140
1/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
24 auto gridData = gridManager.getGridData();
141
142 // read the element markers and the rank
143
4/10
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
48 std::vector<int> elementMarker, rank;
144
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 getElementMarkers_(gridManager.grid().leafGridView(), gridData, elementMarker, type);
145
3/8
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
12 getRank_(gridManager.grid().leafGridView(), rank);
146
147 // construct a vtk output writer and attach the element markers
148
12/26
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 12 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 12 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 12 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 12 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 12 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 12 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 12 times.
✓ Branch 28 taken 12 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 12 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
36 Dune::VTKSequenceWriter<typename Grid::LeafGridView> vtkWriter(gridManager.grid().leafGridView(), vtkFileName, ".", "");
149
5/12
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 12 times.
✓ Branch 12 taken 12 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
24 vtkWriter.addCellData(elementMarker, "elementMarker");
150
5/12
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 12 times.
✓ Branch 12 taken 12 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
24 vtkWriter.addCellData(rank, "rank");
151
1/2
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
12 vtkWriter.write(0);
152
153
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if (refine)
154 {
155 // refine grid once and write out the markers again
156
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 gridManager.grid().globalRefine(1);
157
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 getElementMarkers_(gridManager.grid().leafGridView(), gridData, elementMarker, type);
158
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 getRank_(gridManager.grid().leafGridView(), rank);
159
1/2
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
12 vtkWriter.write(1);
160 }
161 12 }
162
163 6 static void testVertexMarkers(const std::string& type = "dgf",
164 const std::string& vtkFileName = "test")
165 {
166 // make the grid manager and initialize the grid
167 6 GridManager gridManager;
168
5/12
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 6 times.
✓ Branch 12 taken 6 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
12 gridManager.init();
169
1/4
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
12 auto gridData = gridManager.getGridData();
170
171 // read the element markers and the rank
172
2/4
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
12 std::vector<int> vertexMarker;
173
3/8
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
6 getVertexMarkers_(gridManager.grid().levelGridView(0), gridData, vertexMarker, type);
174
175 // construct a vtk output writer and attach the element markers
176
12/26
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 6 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 6 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 6 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 6 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 6 times.
✓ Branch 28 taken 6 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 6 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
18 Dune::VTKSequenceWriter<typename Grid::LevelGridView> vtkWriter(gridManager.grid().levelGridView(0), vtkFileName, ".", "");
177
5/12
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 6 times.
✓ Branch 12 taken 6 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
12 vtkWriter.addVertexData(vertexMarker, "vertexData");
178
1/2
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
6 vtkWriter.write(0);
179 6 }
180
181 private:
182
183 31 static void getRank_(const GridView& gridView, std::vector<int>& rank)
184 {
185
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 18 times.
31 rank.clear();
186 31 rank.resize(gridView.size(0));
187
188
11/12
✓ Branch 1 taken 116932 times.
✓ Branch 2 taken 31 times.
✓ Branch 3 taken 116932 times.
✓ Branch 4 taken 16 times.
✓ Branch 5 taken 15 times.
✓ Branch 6 taken 116932 times.
✓ Branch 7 taken 107588 times.
✓ Branch 8 taken 15 times.
✓ Branch 9 taken 107588 times.
✓ Branch 10 taken 15 times.
✓ Branch 12 taken 107588 times.
✗ Branch 13 not taken.
449071 for(const auto& element : elements(gridView))
189 {
190
2/5
✗ Branch 0 not taken.
✓ Branch 1 taken 224520 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 107588 times.
✗ Branch 5 not taken.
224520 auto eIdx = gridView.indexSet().index(element);
191
3/6
✓ Branch 2 taken 107588 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 107588 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 107588 times.
✗ Branch 9 not taken.
575316 rank[eIdx] = gridView.comm().rank();
192 }
193 31 }
194
195 template<class GridData>
196 31 static void getElementMarkers_(const GridView& gridView,
197 const GridData& gridData,
198 std::vector<int>& elementMarker,
199 const std::string& type)
200 {
201
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 18 times.
31 elementMarker.clear();
202 31 elementMarker.resize(gridView.size(0));
203
204
12/14
✓ Branch 1 taken 116932 times.
✓ Branch 2 taken 31 times.
✓ Branch 3 taken 116932 times.
✓ Branch 4 taken 16 times.
✓ Branch 5 taken 15 times.
✓ Branch 6 taken 116932 times.
✓ Branch 7 taken 107588 times.
✓ Branch 8 taken 15 times.
✓ Branch 9 taken 107588 times.
✓ Branch 10 taken 15 times.
✓ Branch 12 taken 107588 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 107588 times.
✗ Branch 16 not taken.
224551 for(const auto& element : elements(gridView))
205 {
206
2/5
✗ Branch 0 not taken.
✓ Branch 1 taken 224520 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 107588 times.
✗ Branch 5 not taken.
224520 const auto eIdx = gridView.indexSet().index(element);
207
2/2
✓ Branch 1 taken 142912 times.
✓ Branch 2 taken 81608 times.
224520 if (type == "gmsh")
208
2/4
✓ Branch 1 taken 62910 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 62910 times.
✗ Branch 5 not taken.
285824 elementMarker[eIdx] = gridData->getElementDomainMarker(element);
209
1/2
✓ Branch 1 taken 81608 times.
✗ Branch 2 not taken.
81608 else if (type == "dgf")
210
2/4
✓ Branch 1 taken 44678 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 44678 times.
✗ Branch 5 not taken.
163216 elementMarker[eIdx] = gridData->parameters(element)[0];
211 else
212 DUNE_THROW(Dune::InvalidStateException, "No parameters for type " << type);
213 }
214 31 }
215
216 template<class LevelGridView, class GridData>
217 6 static void getVertexMarkers_(const LevelGridView& gridView,
218 const GridData& gridData,
219 std::vector<int>& vertexMarker,
220 const std::string& type)
221 {
222
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
6 if (type != "dgf")
223 DUNE_THROW(Dune::InvalidStateException, "Vertex marker only exist for dgf grids.");
224
225
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6 times.
6 vertexMarker.clear();
226 6 vertexMarker.resize(gridView.size(Grid::dimension));
227
228
8/10
✗ Branch 0 not taken.
✓ Branch 1 taken 6 times.
✓ Branch 4 taken 7723 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 7723 times.
✓ Branch 7 taken 3 times.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 3 times.
✓ Branch 11 taken 7711 times.
23172 for (const auto& vertex : vertices(gridView.grid().levelGridView(0)))
229 {
230
1/2
✓ Branch 1 taken 7711 times.
✗ Branch 2 not taken.
15434 const auto vIdx = gridView.indexSet().index(vertex);
231
7/9
✓ Branch 1 taken 7711 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 7720 times.
✓ Branch 4 taken 7714 times.
✓ Branch 5 taken 7720 times.
✓ Branch 7 taken 7711 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 7711 times.
✗ Branch 11 not taken.
30868 vertexMarker[vIdx] = gridData->parameters(vertex)[0];
232 }
233 6 }
234
235 template<class GridData>
236 7 static void getBoundaryMarkers_(const GridView& gridView,
237 const GridData& gridData,
238 std::vector<int>& boundaryMarker)
239 {
240
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 6 times.
7 boundaryMarker.clear();
241 7 boundaryMarker.resize(gridView.size(dim), 0);
242
243
10/12
✓ Branch 1 taken 22498 times.
✓ Branch 2 taken 7 times.
✓ Branch 3 taken 22498 times.
✓ Branch 4 taken 4 times.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 5178 times.
✓ Branch 8 taken 3 times.
✓ Branch 9 taken 5178 times.
✓ Branch 10 taken 3 times.
✓ Branch 12 taken 5178 times.
✗ Branch 13 not taken.
55359 for(const auto& element : elements(gridView))
244 {
245
9/14
✓ Branch 1 taken 5178 times.
✓ Branch 2 taken 22498 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46222 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 112490 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 18546 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 19180 times.
✓ Branch 14 taken 70812 times.
✓ Branch 16 taken 89992 times.
✓ Branch 17 taken 5178 times.
✗ Branch 18 not taken.
229292 for(const auto& intersection : intersections(gridView, element))
246 {
247
3/3
✓ Branch 0 taken 19180 times.
✓ Branch 1 taken 72608 times.
✓ Branch 2 taken 16750 times.
108538 if (!intersection.boundary())
248 continue;
249
250
2/4
✓ Branch 1 taken 7234 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7234 times.
✗ Branch 5 not taken.
12672 const auto refElement = referenceElement(element.geometry());
251
1/2
✓ Branch 1 taken 1796 times.
✗ Branch 2 not taken.
12672 const auto numVertices = refElement.size(intersection.indexInInside(), 1, dim);
252 // loop over vertices of the intersection facet
253
2/2
✓ Branch 1 taken 21702 times.
✓ Branch 2 taken 7234 times.
28936 for(std::size_t vIdx = 0; vIdx < numVertices; vIdx++)
254 {
255 // get local vertex index with respect to the element
256
1/2
✓ Branch 1 taken 5388 times.
✗ Branch 2 not taken.
38016 auto vIdxLocal = refElement.subEntity(intersection.indexInInside(), 1, vIdx, dim);
257
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 21702 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16314 times.
✓ Branch 4 taken 5388 times.
✗ Branch 5 not taken.
21702 auto vIdxGlobal = gridView.indexSet().subIndex(element, vIdxLocal, dim);
258
259 // make sure we always take the lowest non-zero marker (problem dependent!)
260
4/4
✓ Branch 0 taken 3781 times.
✓ Branch 1 taken 17921 times.
✓ Branch 2 taken 3781 times.
✓ Branch 3 taken 17921 times.
43404 if (boundaryMarker[vIdxGlobal] == 0)
261
2/4
✓ Branch 1 taken 3781 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3781 times.
✗ Branch 5 not taken.
15124 boundaryMarker[vIdxGlobal] = gridData->getBoundaryDomainMarker(intersection);
262 else
263 {
264
4/6
✓ Branch 1 taken 17921 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 17921 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 84 times.
✓ Branch 7 taken 17837 times.
53763 if (boundaryMarker[vIdxGlobal] > gridData->getBoundaryDomainMarker(intersection))
265
2/4
✓ Branch 1 taken 84 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 84 times.
✗ Branch 5 not taken.
336 boundaryMarker[vIdxGlobal] = gridData->getBoundaryDomainMarker(intersection);
266 }
267 }
268 }
269 }
270
271 // In a parallel setting, it is possible that not all boundary vertices
272 // will be reached on each process by the procedure above that loops
273 // over the boundary intersections and their vertices. This mandates the
274 // following synchronization.
275
5/6
✗ Branch 0 not taken.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 3 times.
✓ Branch 5 taken 2 times.
7 if (gridView.comm().size() > 1)
276 {
277 4 VertexHandleNonZeroMin<GridView> dataHandle(boundaryMarker, gridView);
278 if constexpr (Detail::canCommunicate<typename GridView::Traits::Grid, GridView::dimension>)
279 4 gridView.communicate(dataHandle,
280 Dune::InteriorBorder_All_Interface,
281 Dune::ForwardCommunication);
282 else
283 DUNE_THROW(Dune::InvalidStateException, "Cannot call getBoundaryMarkers_ on multiple processes for a grid that cannot communicate codim-" << GridView::dimension << "-entities");
284 }
285 7 }
286 };
287
288 } // end namespace Dumux
289
290 #endif
291