GCC Code Coverage Report


Directory: ../../../builds/dumux-repositories/
File: dumux/dumux/discretization/walldistance.hh
Date: 2025-04-12 19:19:20
Exec Total Coverage
Lines: 96 98 98.0%
Functions: 286 286 100.0%
Branches: 305 1095 27.9%

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-FileCopyrightText: 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 Discretization
10 * \copydoc Dumux::WallDistance
11 */
12 #ifndef DUMUX_DISCRETIZATION_WALL_DISTANCE_HH
13 #define DUMUX_DISCRETIZATION_WALL_DISTANCE_HH
14
15 #include <vector>
16
17 #include <dune/common/parallel/mpihelper.hh>
18 #include <dune/common/shared_ptr.hh>
19 #include <dune/common/reservedvector.hh>
20 #include <dune/grid/common/partitionset.hh>
21
22 #include <dumux/common/tag.hh>
23 #include <dumux/common/indextraits.hh>
24 #include <dumux/parallel/parallel_for.hh>
25 #include <dumux/geometry/distancefield.hh>
26
27 namespace Dumux {
28
29 /*!
30 * \ingroup Discretization
31 * \brief Class to calculate the wall distance at every element or vertex of a grid
32 * \tparam GridGeometry The grid geometry.
33 * \tparam DistanceField The type of distance field to use (parameterized with the geometry type)
34 */
35 template<class GridGeometry, template<class> class DistanceField = AABBDistanceField>
36 class WallDistance
37 {
38 using GridView = typename GridGeometry::GridView;
39 using GridIndexType = typename IndexTraits<GridView>::GridIndex;
40 using SubControlVolumeFace = typename GridGeometry::SubControlVolumeFace;
41 using FVElementGeometry = typename GridGeometry::LocalView;
42 using Element = typename GridGeometry::GridView::template Codim<0>::Entity;
43 using Scalar = typename GridView::Grid::ctype;
44 using GlobalPosition = typename SubControlVolumeFace::GlobalPosition;
45
46 static constexpr int dim = GridView::dimension;
47 static constexpr int dimWorld = GridView::dimensionworld;
48 static_assert(dim == dimWorld, "Wall distances cannot be computed for embedded surface or network domains.");
49
50 using CornerStorage = Dune::ReservedVector<GlobalPosition, (1<<(GridView::dimension-1))>;
51
52 // We use a simplified geometry type here which allows much easier MPI communication
53 // for parallel runs compared to the Dune geometry types (due to fixed-size storage).
54 // This type only implements a minimal part of the Geometry interface.
55 struct SimpleGeometry
56 {
57 6400 SimpleGeometry() = default;
58 42688 SimpleGeometry(CornerStorage&& corners)
59 42688 : corners_(std::move(corners))
60 42688 , center_(0.0)
61 {
62
2/2
✓ Branch 0 taken 81468 times.
✓ Branch 1 taken 21664 times.
204344 for (int i = 0; i < corners_.size(); ++i)
63 323312 center_ += corners_[i];
64 42688 center_ /= corners_.size();
65 42688 }
66
67 using GlobalCoordinate = GlobalPosition;
68 using ctype = typename GlobalCoordinate::value_type;
69 static constexpr int coorddimension = GridView::dimensionworld;
70 static constexpr int mydimension = GridView::dimension-1;
71
72 835065 std::size_t corners() const
73
22/44
✓ Branch 0 taken 640 times.
✓ Branch 1 taken 640 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 213155 times.
✓ Branch 8 taken 96 times.
✓ Branch 9 taken 96 times.
✓ Branch 10 taken 48 times.
✓ Branch 11 taken 48 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 14064 times.
✓ Branch 14 taken 14064 times.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 23040 times.
✓ Branch 20 taken 7680 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 9744 times.
✓ Branch 23 taken 9744 times.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 5760 times.
✓ Branch 29 taken 1920 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 290679 times.
✓ Branch 32 taken 290679 times.
✗ Branch 33 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 32580 times.
✓ Branch 38 taken 10860 times.
✓ Branch 39 taken 213155 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✓ Branch 46 taken 7240 times.
✓ Branch 47 taken 3620 times.
835065 { return corners_.size(); }
74
75 604658 const auto& corner(int i) const
76 621910 { return corners_[i]; }
77
78
6/12
✓ Branch 1 taken 736 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7680 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1920 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 10860 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 3620 times.
✗ Branch 17 not taken.
24864 const auto& center() const
79 { return center_; }
80
81 private:
82 CornerStorage corners_;
83 GlobalCoordinate center_;
84 };
85
86 40468 struct WallDataImpl
87 {
88 GridIndexType eIdx;
89 GridIndexType scvfIdx;
90 GlobalPosition scvfOuterNormal;
91 int rank; // for parallel runs
92 };
93
94 struct ElementCenters {};
95 struct VertexCenters {};
96
97 public:
98 static constexpr auto atElementCenters = Utility::Tag<ElementCenters>{};
99 static constexpr auto atVertexCenters = Utility::Tag<VertexCenters>{};
100 using WallData = WallDataImpl;
101
102 /*!
103 * \brief Constructs a new wall distance object
104 * \param gridGeometry the grid geometry of the grid
105 * \param tag the policy (either WallDistance::atElementCenters or WallDistance::atVertexCenters)
106 * \param select a selection functor taking an scvf and returning bool signifying whether the scvfs is part of the wall
107 */
108 template<class LocationTag, class ScvfSelectionFunctor>
109 110 WallDistance(std::shared_ptr<const GridGeometry> gridGeometry, LocationTag tag, const ScvfSelectionFunctor& select)
110 110 : gridGeometry_(gridGeometry)
111 {
112
1/2
✓ Branch 1 taken 70 times.
✗ Branch 2 not taken.
110 initializeWallDistance_(select, tag);
113 110 }
114
115 /*!
116 * \brief Constructs a new wall distance object
117 * \param gridGeometry the grid geometry of the grid
118 * \param tag the policy (either WallDistance::atElementCenters or WallDistance::atVertexCenters)
119 * \note selects all boundary scvfs as wall faces
120 */
121 template<class LocationTag>
122 20 WallDistance(std::shared_ptr<const GridGeometry> gridGeometry, LocationTag tag)
123
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
40 : WallDistance(gridGeometry, tag, [](const FVElementGeometry& fvGeometry, const SubControlVolumeFace& scvf) { return true; }) {}
124
125 //! caller has to make sure the lifetime of grid geometry exceeds the lifetime of wall distance
126 template<class LocationTag, class ScvfSelectionFunctor>
127 90 WallDistance(const GridGeometry& gridGeometry, LocationTag tag, const ScvfSelectionFunctor& select)
128
1/2
✓ Branch 1 taken 60 times.
✗ Branch 2 not taken.
180 : WallDistance(Dune::stackobject_to_shared_ptr(gridGeometry), tag, select) {}
129
130 //! caller has to make sure the lifetime of grid geometry exceeds the lifetime of wall distance
131 template<class LocationTag>
132 20 WallDistance(const GridGeometry& gridGeometry, LocationTag tag)
133
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
40 : WallDistance(Dune::stackobject_to_shared_ptr(gridGeometry), tag) {}
134
135 /*!
136 * \brief Returns a vector storing the distance from each DOF location to the nearest wall.
137 * For the atElementCenter policy, this is the distance from the element center to the nearest wall.
138 * For the atVertexCenter policy, this is the distance from the vertex to the nearest wall.
139 */
140
20/40
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 4 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
70 const std::vector<Scalar>& wallDistance() const
141 { return distance_; }
142
143 /*!
144 * \brief Returns a vector storing additional information about the nearest scvf on the wall (element index and scvf index).
145 * For the atElementCenter policy, this information is given for each element
146 * For the atVertexCenter policy, this information is given for each vertex.
147 */
148
20/40
✓ Branch 1 taken 31 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
50 const std::vector<WallData>& wallData() const
149 { return wallData_; }
150
151 private:
152 /*!
153 * \brief Perform the actual calculation of wall distances.
154 * \param considerFace Function object (e.g. a lambda) that determines whether a certain scvf shall be considered
155 * for the calculation of wall distances.
156 * \param loc Location a which the distance to the wall shall be calculated (elementCenter or vertex)
157 */
158 template<class ConsiderFaceFunction, class LocationTag>
159 110 void initializeWallDistance_(const ConsiderFaceFunction& considerFace, LocationTag loc)
160 {
161 110 const std::size_t numSamplingPoints = (loc == atElementCenters)
162 110 ? gridGeometry_->gridView().size(0)
163 20 : gridGeometry_->gridView().size(dim);
164 // Reset the containers.
165 110 wallData_.resize(numSamplingPoints);
166 110 distance_.resize(numSamplingPoints, std::numeric_limits<Scalar>::max());
167
168 110 std::vector<SimpleGeometry> wallGeometries;
169
1/2
✓ Branch 1 taken 70 times.
✗ Branch 2 not taken.
110 wallGeometries.reserve(gridGeometry_->numBoundaryScvf());
170
171 110 std::vector<WallData> tempWallData;
172
1/2
✓ Branch 1 taken 70 times.
✗ Branch 2 not taken.
110 tempWallData.reserve(gridGeometry_->numBoundaryScvf());
173
174 // Loop over all elements: find all wall scvfs.
175
1/2
✓ Branch 1 taken 70 times.
✗ Branch 2 not taken.
110 auto fvGeometry = localView(*gridGeometry_);
176
6/10
✓ Branch 1 taken 70 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 11458 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 504 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 34328 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 34328 times.
✓ Branch 13 taken 4 times.
186166 for (const auto& element : elements(gridGeometry_->gridView(), Dune::Partitions::interior))
177 {
178
3/3
✓ Branch 1 taken 41306 times.
✓ Branch 2 taken 4230 times.
✓ Branch 0 taken 180 times.
84896 fvGeometry.bindElement(element);
179
2/2
✓ Branch 0 taken 33950 times.
✓ Branch 1 taken 11766 times.
84896 if (!fvGeometry.hasBoundaryScvf())
180 63114 continue;
181
182
1/2
✓ Branch 1 taken 7216 times.
✗ Branch 2 not taken.
21782 const auto eIdx = gridGeometry_->elementMapper().index(element);
183
184
4/4
✓ Branch 0 taken 24622 times.
✓ Branch 1 taken 58630 times.
✓ Branch 2 taken 83252 times.
✓ Branch 3 taken 11766 times.
181286 for (const auto& scvf : scvfs(fvGeometry))
185 {
186
4/4
✓ Branch 0 taken 24622 times.
✓ Branch 1 taken 58630 times.
✓ Branch 2 taken 640 times.
✓ Branch 3 taken 1630 times.
181856 if (scvf.boundary() && considerFace(fvGeometry, scvf))
187 {
188
1/2
✓ Branch 1 taken 21664 times.
✗ Branch 2 not taken.
42788 const auto& geo = fvGeometry.geometry(scvf);
189 42788 CornerStorage corners;
190
3/3
✓ Branch 1 taken 69700 times.
✓ Branch 2 taken 16076 times.
✓ Branch 0 taken 17356 times.
204644 for (int i = 0; i < geo.corners(); ++i)
191 161856 corners.push_back(geo.corner(i));
192
193
1/2
✓ Branch 1 taken 21664 times.
✗ Branch 2 not taken.
42788 wallGeometries.emplace_back(std::move(corners));
194
3/5
✗ Branch 0 not taken.
✓ Branch 1 taken 7184 times.
✓ Branch 3 taken 7184 times.
✗ Branch 4 not taken.
✓ Branch 2 taken 14480 times.
42788 tempWallData.push_back(WallData{
195
3/5
✗ Branch 0 not taken.
✓ Branch 1 taken 7184 times.
✓ Branch 3 taken 7184 times.
✗ Branch 4 not taken.
✓ Branch 2 taken 14480 times.
42788 eIdx, scvf.index(), scvf.unitOuterNormal(), gridGeometry_->gridView().comm().rank()
196 });
197 7240 }
198 }
199 }
200
201 #if HAVE_MPI
202 // Handle parallel runs. We need to prepare a global vector of wall geometries,
203 // containing the wall geometries of each process in order to get a correct distance field.
204
3/5
✗ Branch 0 not taken.
✓ Branch 1 taken 66 times.
✓ Branch 3 taken 66 times.
✗ Branch 4 not taken.
✓ Branch 2 taken 4 times.
110 const bool isParallel = gridGeometry_->gridView().comm().size() > 1;
205 110 std::vector<SimpleGeometry> globalWallGeometries;
206 110 std::vector<WallData> globalTempWallData;
207
2/6
✓ Branch 1 taken 70 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 70 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
150 const auto distanceField = [&]
208 {
209
24/40
✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 1 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 39 taken 1 times.
70 if (isParallel)
210 {
211
4/40
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
8 const auto& communication = gridGeometry_->gridView().comm();
212 8 const int totalNumberOfBoundaryGeometries = communication.sum(wallGeometries.size());
213 8 globalWallGeometries.resize(totalNumberOfBoundaryGeometries);
214 8 globalTempWallData.resize(totalNumberOfBoundaryGeometries);
215
216 // prepare a displacement vector
217
4/40
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
8 std::vector<int> numGeosPerProcLocal{static_cast<int>(wallGeometries.size())};
218
8/132
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 89 not taken.
✗ Branch 90 not taken.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✗ Branch 113 not taken.
✗ Branch 114 not taken.
✗ Branch 116 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✗ Branch 124 not taken.
✗ Branch 125 not taken.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
✗ Branch 129 not taken.
✗ Branch 130 not taken.
✗ Branch 132 not taken.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✗ Branch 135 not taken.
✗ Branch 137 not taken.
✗ Branch 138 not taken.
✗ Branch 140 not taken.
✗ Branch 141 not taken.
✗ Branch 142 not taken.
✗ Branch 143 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✗ Branch 148 not taken.
✗ Branch 149 not taken.
✗ Branch 150 not taken.
✗ Branch 151 not taken.
✗ Branch 153 not taken.
✗ Branch 154 not taken.
✗ Branch 156 not taken.
✗ Branch 157 not taken.
✗ Branch 158 not taken.
✗ Branch 159 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✓ Branch 16 taken 2 times.
✓ Branch 19 taken 2 times.
✗ Branch 32 not taken.
✗ Branch 35 not taken.
✗ Branch 40 not taken.
✗ Branch 43 not taken.
✗ Branch 56 not taken.
✗ Branch 59 not taken.
✗ Branch 64 not taken.
✗ Branch 67 not taken.
8 std::vector<int> numGeosPerProcGlobal(communication.size());
219
8/80
✗ 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 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ 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 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 2 times.
✗ Branch 59 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 112 not taken.
✗ Branch 113 not taken.
✗ Branch 115 not taken.
✗ Branch 116 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
16 communication.allgather(numGeosPerProcLocal.data(), 1, numGeosPerProcGlobal.data());
220
221
4/85
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 84 not taken.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 99 not taken.
✗ Branch 5 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 35 not taken.
8 std::vector<int> disp(communication.size(), 0);
222 8 disp[1] = numGeosPerProcGlobal[0];
223
4/40
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
8 for (int i = 2; i < numGeosPerProcGlobal.size(); ++i)
224 disp[i] = disp[i-1] + numGeosPerProcGlobal[i-1];
225
226 // concatenate the wall geometries and temp scvf data of each process into a global vector
227
4/40
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ 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 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
8 communication.allgatherv(
228
4/40
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ 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 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
8 wallGeometries.data(),
229
4/40
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ 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 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
8 wallGeometries.size(),
230 globalWallGeometries.data(),
231 numGeosPerProcGlobal.data(),
232 disp.data()
233 );
234
235 8 communication.allgatherv(
236
4/40
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ 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 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
8 tempWallData.data(),
237
4/40
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ 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 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
8 tempWallData.size(),
238 globalTempWallData.data(),
239 numGeosPerProcGlobal.data(),
240 disp.data()
241 );
242
243 // pass the global vector of wall geometries to the distance field
244
4/40
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ 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 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
8 return DistanceField<SimpleGeometry>(globalWallGeometries);
245 8 }
246 else
247 62 return DistanceField<SimpleGeometry>(wallGeometries);
248 }();
249 #else
250 const DistanceField<SimpleGeometry> distanceField(wallGeometries);
251 #endif
252
253 // compute sampling points
254
1/2
✓ Branch 1 taken 70 times.
✗ Branch 2 not taken.
110 std::vector<GlobalPosition> points(numSamplingPoints);
255 if (loc == atElementCenters)
256
6/10
✓ Branch 1 taken 60 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9528 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 17164 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 17164 times.
✓ Branch 13 taken 2 times.
105958 for (const auto& element : elements(gridGeometry_->gridView()))
257
3/6
✓ Branch 1 taken 17164 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 17164 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 17164 times.
✗ Branch 9 not taken.
59128 points[gridGeometry_->elementMapper().index(element)] = element.geometry().center();
258 else
259
6/9
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3572 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 3872 times.
22052 for (const auto& vertex : vertices(gridGeometry_->gridView()))
260
1/2
✓ Branch 4 taken 3872 times.
✗ Branch 5 not taken.
14872 points[gridGeometry_->vertexMapper().index(vertex)] = vertex.geometry().corner(0);
261
262 // get the actual distances (this is the most expensive part)
263 if (loc == atElementCenters)
264 {
265 53354 const auto kernel = [&](std::size_t eIdx){
266
22/40
✗ Branch 1 not taken.
✓ Branch 2 taken 6625 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 89 times.
✓ Branch 7 taken 640 times.
✓ Branch 8 taken 537 times.
✓ Branch 10 taken 640 times.
✓ Branch 11 taken 537 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 8607 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 8607 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 25 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 25 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 25 times.
✗ Branch 28 not taken.
✓ Branch 29 taken 25 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 25 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 25 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 25 times.
✗ Branch 40 not taken.
✓ Branch 41 taken 25 times.
✗ Branch 43 not taken.
✓ Branch 44 taken 25 times.
✗ Branch 46 not taken.
✓ Branch 47 taken 25 times.
✗ Branch 49 not taken.
✓ Branch 50 taken 25 times.
✗ Branch 52 not taken.
✓ Branch 53 taken 25 times.
✗ Branch 55 not taken.
✓ Branch 56 taken 25 times.
✗ Branch 58 not taken.
✓ Branch 59 taken 25 times.
26632 const auto [d, idx] = distanceField.distanceAndIndex(points[eIdx]);
267
22/40
✗ Branch 0 not taken.
✓ Branch 1 taken 6625 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 89 times.
✓ Branch 4 taken 640 times.
✓ Branch 5 taken 537 times.
✓ Branch 6 taken 640 times.
✓ Branch 7 taken 537 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 8607 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 8607 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 25 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 25 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 25 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 25 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 25 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 25 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 25 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 25 times.
✗ Branch 28 not taken.
✓ Branch 29 taken 25 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 25 times.
✗ Branch 32 not taken.
✓ Branch 33 taken 25 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 25 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 25 times.
✗ Branch 38 not taken.
✓ Branch 39 taken 25 times.
26632 distance_[eIdx] = d;
268 #if HAVE_MPI
269
22/40
✗ Branch 0 not taken.
✓ Branch 1 taken 6625 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 89 times.
✓ Branch 4 taken 640 times.
✓ Branch 5 taken 537 times.
✓ Branch 6 taken 640 times.
✓ Branch 7 taken 537 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 8607 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 8607 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 25 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 25 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 25 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 25 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 25 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 25 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 25 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 25 times.
✗ Branch 28 not taken.
✓ Branch 29 taken 25 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 25 times.
✗ Branch 32 not taken.
✓ Branch 33 taken 25 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 25 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 25 times.
✗ Branch 38 not taken.
✓ Branch 39 taken 25 times.
26632 wallData_[eIdx] = isParallel ? globalTempWallData[idx] : tempWallData[idx];
270 #else
271 wallData_[eIdx] = tempWallData[idx];
272 #endif
273 };
274
275
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
90 runKernel_(numSamplingPoints, kernel);
276 }
277 else
278 {
279 14892 const auto kernel = [&](std::size_t vIdx){
280
8/12
✗ Branch 1 not taken.
✓ Branch 2 taken 81 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 81 times.
✓ Branch 7 taken 972 times.
✓ Branch 8 taken 729 times.
✓ Branch 10 taken 972 times.
✓ Branch 11 taken 729 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1936 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1936 times.
7436 const auto [d, idx] = distanceField.distanceAndIndex(points[vIdx]);
281
8/12
✗ Branch 0 not taken.
✓ Branch 1 taken 81 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 81 times.
✓ Branch 4 taken 972 times.
✓ Branch 5 taken 729 times.
✓ Branch 6 taken 972 times.
✓ Branch 7 taken 729 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1936 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 1936 times.
7436 distance_[vIdx] = d;
282 #if HAVE_MPI
283
8/12
✗ Branch 0 not taken.
✓ Branch 1 taken 81 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 81 times.
✓ Branch 4 taken 972 times.
✓ Branch 5 taken 729 times.
✓ Branch 6 taken 972 times.
✓ Branch 7 taken 729 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1936 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 1936 times.
7436 wallData_[vIdx] = isParallel ? globalTempWallData[idx] : tempWallData[idx];
284 #else
285 wallData_[vIdx] = tempWallData[idx];
286 #endif
287 };
288
289
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
20 runKernel_(numSamplingPoints, kernel);
290 }
291 354 }
292
293 template<class Kernel>
294 110 void runKernel_(std::size_t size, const Kernel& kernel)
295 {
296 // parallelize, if we have enough work (enough evaluation points)
297
1/2
✓ Branch 0 taken 70 times.
✗ Branch 1 not taken.
110 if (size > 10000)
298 Dumux::parallelFor(size, [&](const std::size_t i){ kernel(i); });
299 else
300
2/2
✓ Branch 1 taken 34068 times.
✓ Branch 2 taken 70 times.
61710 for (std::size_t i = 0; i < size; ++i) kernel(i);
301 110 }
302
303 std::vector<Scalar> distance_;
304 std::vector<WallData> wallData_;
305 std::shared_ptr<const GridGeometry> gridGeometry_;
306 };
307
308 } // end namespace Dumux
309
310 #endif
311