GCC Code Coverage Report


Directory: ../../../builds/dumux-repositories/
File: dumux/test/io/gridmanager/gridmanagertests.hh
Date: 2025-04-19 19:19:10
Exec Total Coverage
Lines: 118 118 100.0%
Functions: 29 35 82.9%
Branches: 160 342 46.8%

Line Branch Exec Source
1 //
2 // SPDX-FileCopyrightText: 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 4 : gridView_(gridView)
38 4 , container_(container)
39 {}
40
41 48 bool contains(int dim, int codim) const
42 {
43 // only communicate vertices
44 48 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 2622 void gather(MessageBufferImp &buff, const EntityType &e) const
63 {
64
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 246 times.
2622 int vIdx = gridView_.indexSet().index(e);
65 2622 buff.write(container_[vIdx]);
66 2622 }
67
68 template<class MessageBufferImp, class EntityType>
69 2622 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.
2622 int vIdx = gridView_.indexSet().index(e);
72 int tmp;
73 2622 buff.read(tmp);
74 using std::min;
75
2/2
✓ Branch 0 taken 841 times.
✓ Branch 1 taken 593 times.
2622 if (tmp > 0)
76 {
77
2/2
✓ Branch 0 taken 495 times.
✓ Branch 1 taken 346 times.
1524 if (container_[vIdx] == 0)
78 968 container_[vIdx] = tmp;
79 else
80
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 346 times.
556 container_[vIdx] = min(container_[vIdx], tmp);
81 }
82 2622 }
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
1/2
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
6 GridManager gridManager;
105
2/4
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
6 gridManager.init();
106
1/2
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
6 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 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
4/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 11 taken 6 times.
✗ Branch 12 not taken.
12 Dune::VTKSequenceWriter<typename Grid::LeafGridView> vtkWriter(leafGridView, vtkFileName, ".", "");
117
2/4
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
12 vtkWriter.addVertexData(boundaryMarker, "boundaryMarker");
118
2/4
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
12 vtkWriter.addCellData(elementMarker, "elementMarker");
119
1/2
✓ Branch 1 taken 6 times.
✗ Branch 2 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 12 }
132
133 template<class Marker = int>
134 15 static void testElementMarkers(const std::string& type = "gmsh",
135 const std::string& vtkFileName = "test",
136 bool refine = true)
137 {
138 // make the grid manager and initialize the grid
139
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
15 GridManager gridManager;
140
2/4
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 gridManager.init();
141
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
15 auto gridData = gridManager.getGridData();
142
143 // read the element markers and the rank
144 15 std::vector<Marker> elementMarker;
145 15 std::vector<int> rank;
146
2/4
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 getElementMarkers_(gridManager.grid().leafGridView(), gridData, elementMarker, type);
147
3/6
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 8 not taken.
15 getRank_(gridManager.grid().leafGridView(), rank);
148
149 // construct a vtk output writer and attach the element markers
150
5/10
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 15 times.
✗ Branch 11 not taken.
✓ Branch 15 taken 15 times.
✗ Branch 16 not taken.
15 Dune::VTKSequenceWriter<typename Grid::LeafGridView> vtkWriter(gridManager.grid().leafGridView(), vtkFileName, ".", "");
151
2/4
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 6 not taken.
30 vtkWriter.addCellData(elementMarker, "elementMarker");
152
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
30 vtkWriter.addCellData(rank, "rank");
153
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
15 vtkWriter.write(0);
154
155
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 if (refine)
156 {
157 // refine grid once and write out the markers again
158
2/4
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 gridManager.grid().globalRefine(1);
159
2/4
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 getElementMarkers_(gridManager.grid().leafGridView(), gridData, elementMarker, type);
160
2/4
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 getRank_(gridManager.grid().leafGridView(), rank);
161
1/2
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
15 vtkWriter.write(1);
162 }
163 33 }
164
165 template<class Marker = int>
166 9 static void testVertexMarkers(const std::string& type = "dgf",
167 const std::string& vtkFileName = "test")
168 {
169 // make the grid manager and initialize the grid
170
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 GridManager gridManager;
171
2/4
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
9 gridManager.init();
172
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 auto gridData = gridManager.getGridData();
173
174 // read the element markers and the rank
175 9 std::vector<Marker> vertexMarker;
176
3/6
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 9 times.
✗ Branch 8 not taken.
9 getVertexMarkers_(gridManager.grid().levelGridView(0), gridData, vertexMarker, type);
177
178 // construct a vtk output writer and attach the element markers
179
5/12
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 9 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
✓ Branch 15 taken 9 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
9 Dune::VTKSequenceWriter<typename Grid::LevelGridView> vtkWriter(gridManager.grid().levelGridView(0), vtkFileName, ".", "");
180
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
18 vtkWriter.addVertexData(vertexMarker, "vertexData");
181
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 vtkWriter.write(0);
182 21 }
183
184 private:
185
186
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 21 times.
37 static void getRank_(const GridView& gridView, std::vector<int>& rank)
187 {
188 37 rank.clear();
189 37 rank.resize(gridView.size(0));
190
191
7/12
✓ Branch 1 taken 116953 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 37 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 122852 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 122852 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 122852 times.
✓ Branch 13 taken 21 times.
✗ Branch 0 not taken.
✓ Branch 3 taken 116932 times.
485588 for(const auto& element : elements(gridView))
192 {
193
1/2
✓ Branch 1 taken 122852 times.
✗ Branch 2 not taken.
239784 auto eIdx = gridView.indexSet().index(element);
194
1/2
✓ Branch 1 taken 122852 times.
✗ Branch 2 not taken.
239784 rank[eIdx] = gridView.comm().rank();
195 }
196 37 }
197
198 template<class GridData, class Marker>
199
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 21 times.
37 static void getElementMarkers_(const GridView& gridView,
200 const GridData& gridData,
201 std::vector<Marker>& elementMarker,
202 const std::string& type)
203 {
204 37 elementMarker.clear();
205 37 elementMarker.resize(gridView.size(0));
206
207
7/10
✓ Branch 1 taken 116953 times.
✓ Branch 2 taken 116932 times.
✓ Branch 4 taken 21 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 122852 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 122852 times.
✓ Branch 10 taken 21 times.
✗ Branch 0 not taken.
✓ Branch 3 taken 16 times.
362736 for(const auto& element : elements(gridView))
208 {
209
2/3
✓ Branch 1 taken 159782 times.
✗ Branch 2 not taken.
✓ Branch 0 taken 80002 times.
239784 const auto eIdx = gridView.indexSet().index(element);
210
2/2
✓ Branch 0 taken 142912 times.
✓ Branch 1 taken 96872 times.
239784 if (type == "gmsh")
211
1/2
✓ Branch 1 taken 62910 times.
✗ Branch 2 not taken.
142912 elementMarker[eIdx] = gridData->getElementDomainMarker(element);
212
2/2
✓ Branch 0 taken 81608 times.
✓ Branch 1 taken 15264 times.
96872 else if (type == "dgf")
213
1/2
✓ Branch 1 taken 44678 times.
✗ Branch 2 not taken.
81608 elementMarker[eIdx] = gridData->parameters(element)[0];
214
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 15264 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
15264 else if (type == "vtu" || type == "vtk")
215
1/2
✓ Branch 1 taken 15264 times.
✗ Branch 2 not taken.
30528 elementMarker[eIdx] = gridData->getParameter(element, "elementMarker");
216 else
217
1/26
✗ 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 31 not taken.
✗ Branch 32 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✓ Branch 40 taken 122852 times.
✗ Branch 41 not taken.
239784 DUNE_THROW(Dune::InvalidStateException, "No parameters for type " << type);
218 }
219 37 }
220
221 template<class LevelGridView, class GridData, class Marker>
222 9 static void getVertexMarkers_(const LevelGridView& gridView,
223 const GridData& gridData,
224 std::vector<Marker>& vertexMarker,
225 const std::string& type)
226 {
227
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 if (type == "gmsh")
228
1/22
✗ 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 33 not taken.
✓ Branch 34 taken 9 times.
9 DUNE_THROW(Dune::InvalidStateException, "Vertex markers are not supported for gmsh grids.");
229
230 9 vertexMarker.clear();
231
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
9 vertexMarker.resize(gridView.size(Grid::dimension));
232
233
6/8
✓ Branch 2 taken 7729 times.
✓ Branch 3 taken 3 times.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 6 times.
✓ Branch 8 taken 10434 times.
✓ Branch 11 taken 10434 times.
✗ Branch 12 not taken.
18187 for (const auto& vertex : vertices(gridView.grid().levelGridView(0)))
234 {
235
1/2
✓ Branch 0 taken 7723 times.
✗ Branch 1 not taken.
18157 const auto vIdx = gridView.indexSet().index(vertex);
236
2/2
✓ Branch 0 taken 15434 times.
✓ Branch 1 taken 2723 times.
18157 if (type == "dgf")
237
1/2
✓ Branch 1 taken 7711 times.
✗ Branch 2 not taken.
15434 vertexMarker[vIdx] = gridData->parameters(vertex)[0];
238
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2723 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
2723 else if (type == "vtu" || type == "vtk")
239
1/2
✓ Branch 1 taken 2723 times.
✗ Branch 2 not taken.
5446 vertexMarker[vIdx] = gridData->getParameter(vertex, "vertexData");
240 else
241
2/27
✗ 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 31 not taken.
✗ Branch 32 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✓ Branch 40 taken 10437 times.
✗ Branch 41 not taken.
✓ Branch 39 taken 7720 times.
18157 DUNE_THROW(Dune::InvalidStateException, "No parameters for type " << type);
242 }
243 9 }
244
245 template<class GridData, class Marker>
246
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 6 times.
7 static void getBoundaryMarkers_(const GridView& gridView,
247 const GridData& gridData,
248 std::vector<Marker>& boundaryMarker)
249 {
250 7 boundaryMarker.clear();
251 7 boundaryMarker.resize(gridView.size(dim), 0);
252
253
5/7
✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 5178 times.
✓ Branch 7 taken 3 times.
✓ Branch 0 taken 22498 times.
27695 for(const auto& element : elements(gridView))
254 {
255
10/14
✓ Branch 1 taken 5178 times.
✓ Branch 2 taken 22498 times.
✓ Branch 7 taken 18546 times.
✓ Branch 8 taken 89992 times.
✓ Branch 9 taken 23724 times.
✓ Branch 10 taken 112490 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 19180 times.
✓ Branch 17 taken 5178 times.
✗ Branch 18 not taken.
✗ Branch 3 not taken.
✓ Branch 5 taken 22498 times.
✗ Branch 6 not taken.
✓ Branch 13 taken 70812 times.
458816 for(const auto& intersection : intersections(gridView, element))
256 {
257
2/3
✓ Branch 0 taken 16750 times.
✓ Branch 1 taken 7234 times.
✗ Branch 2 not taken.
108538 if (!intersection.boundary())
258 continue;
259
260
2/4
✓ Branch 1 taken 7234 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1796 times.
✗ Branch 6 not taken.
7234 const auto refElement = referenceElement(element.geometry());
261 7234 const auto numVertices = refElement.size(intersection.indexInInside(), 1, dim);
262 // loop over vertices of the intersection facet
263
2/2
✓ Branch 1 taken 21702 times.
✓ Branch 2 taken 7234 times.
28936 for(std::size_t vIdx = 0; vIdx < numVertices; vIdx++)
264 {
265 // get local vertex index with respect to the element
266
3/4
✓ Branch 1 taken 5388 times.
✓ Branch 2 taken 16314 times.
✓ Branch 5 taken 5388 times.
✗ Branch 6 not taken.
21702 auto vIdxLocal = refElement.subEntity(intersection.indexInInside(), 1, vIdx, dim);
267
1/2
✓ Branch 1 taken 21702 times.
✗ Branch 2 not taken.
21702 auto vIdxGlobal = gridView.indexSet().subIndex(element, vIdxLocal, dim);
268
269 // make sure we always take the lowest non-zero marker (problem dependent!)
270
2/2
✓ Branch 0 taken 3781 times.
✓ Branch 1 taken 17921 times.
21702 if (boundaryMarker[vIdxGlobal] == 0)
271
1/2
✓ Branch 1 taken 3781 times.
✗ Branch 2 not taken.
7562 boundaryMarker[vIdxGlobal] = gridData->getBoundaryDomainMarker(intersection);
272 else
273 {
274
3/4
✓ Branch 1 taken 17921 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 84 times.
✓ Branch 4 taken 17837 times.
35842 if (boundaryMarker[vIdxGlobal] > gridData->getBoundaryDomainMarker(intersection))
275
1/2
✓ Branch 1 taken 84 times.
✗ Branch 2 not taken.
168 boundaryMarker[vIdxGlobal] = gridData->getBoundaryDomainMarker(intersection);
276 }
277 }
278 }
279 }
280
281 // In a parallel setting, it is possible that not all boundary vertices
282 // will be reached on each process by the procedure above that loops
283 // over the boundary intersections and their vertices. This mandates the
284 // following synchronization.
285
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 3 times.
7 if (gridView.comm().size() > 1)
286 {
287 4 VertexHandleNonZeroMin<GridView> dataHandle(boundaryMarker, gridView);
288 if constexpr (Detail::canCommunicate<typename GridView::Traits::Grid, GridView::dimension>)
289 4 gridView.communicate(dataHandle,
290 Dune::InteriorBorder_All_Interface,
291 Dune::ForwardCommunication);
292 else
293 DUNE_THROW(Dune::InvalidStateException, "Cannot call getBoundaryMarkers_ on multiple processes for a grid that cannot communicate codim-" << GridView::dimension << "-entities");
294 }
295 7 }
296 };
297
298 } // end namespace Dumux
299
300 #endif
301