GCC Code Coverage Report


Directory: ../../../builds/dumux-repositories/
File: /builds/dumux-repositories/dumux/dumux/discretization/staggered/freeflow/elementvolumevariables.hh
Date: 2024-05-04 19:09:25
Exec Total Coverage
Lines: 77 99 77.8%
Functions: 161 327 49.2%
Branches: 487 1046 46.6%

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 StaggeredDiscretization
10 * \copydoc Dumux::StaggeredElementVolumeVariables
11 */
12 #ifndef DUMUX_DISCRETIZATION_STAGGERED_ELEMENT_VOLUMEVARIABLES_HH
13 #define DUMUX_DISCRETIZATION_STAGGERED_ELEMENT_VOLUMEVARIABLES_HH
14
15 #include <algorithm>
16 #include <cassert>
17 #include <vector>
18 #include <utility>
19
20 #include <dune/common/exceptions.hh>
21 #include <dumux/discretization/staggered/elementsolution.hh>
22 #include <dumux/common/typetraits/vector.hh>
23
24 namespace Dumux {
25
26 /*!
27 * \ingroup StaggeredDiscretization
28 * \brief Base class for the element volume variables vector for the staggered model
29 */
30 template<class GVV, bool cachingEnabled>
31 class StaggeredElementVolumeVariables
32 {};
33
34 /*!
35 * \ingroup StaggeredDiscretization
36 * \brief Class for the element volume variables vector for the staggered model.
37 Specialization in case the volume variables are stored globally.
38 */
39 template<class GVV>
40 class StaggeredElementVolumeVariables<GVV, /*cachingEnabled*/true>
41 {
42 public:
43 //! export type of the grid volume variables
44 using GridVolumeVariables = GVV;
45
46 //! export type of the volume variables
47 using VolumeVariables = typename GridVolumeVariables::VolumeVariables;
48
49 //! Constructor
50 StaggeredElementVolumeVariables(const GridVolumeVariables& gridVolVars)
51 : gridVolVarsPtr_(&gridVolVars)
52
40/80
✓ Branch 1 taken 1331 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1331 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1331 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1331 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1331 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1360444 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1360444 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1360444 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1360444 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1360444 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1360444 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1360444 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1360444 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1360444 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1360444 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1360444 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1360444 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1360444 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1360444 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1360444 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1360444 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 1360444 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 1360444 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 1360444 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1360444 times.
✗ Branch 74 not taken.
✓ Branch 76 taken 51 times.
✗ Branch 77 not taken.
✓ Branch 79 taken 51 times.
✗ Branch 80 not taken.
✓ Branch 82 taken 51 times.
✗ Branch 83 not taken.
✓ Branch 85 taken 51 times.
✗ Branch 86 not taken.
✓ Branch 88 taken 51 times.
✗ Branch 89 not taken.
✓ Branch 91 taken 80 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 80 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 80 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 80 times.
✗ Branch 101 not taken.
✓ Branch 103 taken 80 times.
✗ Branch 104 not taken.
✓ Branch 106 taken 80 times.
✗ Branch 107 not taken.
✓ Branch 109 taken 80 times.
✗ Branch 110 not taken.
✓ Branch 112 taken 80 times.
✗ Branch 113 not taken.
✓ Branch 115 taken 80 times.
✗ Branch 116 not taken.
✓ Branch 118 taken 80 times.
✗ Branch 119 not taken.
27216590 , numScv_(gridVolVars.problem().gridGeometry().numScv())
53 {}
54
55 //! operator for the access with an scv
56 template<class SubControlVolume, typename std::enable_if_t<!std::is_integral<SubControlVolume>::value, int> = 0>
57 715048610 const VolumeVariables& operator [](const SubControlVolume& scv) const
58 {
59
2/4
✓ Branch 0 taken 715048610 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 715048610 times.
✗ Branch 3 not taken.
1430097220 if (scv.dofIndex() < numScv_)
60 2145145830 return gridVolVars().volVars(scv.dofIndex());
61 else
62 return boundaryVolumeVariables_[getLocalIdx_(scv.dofIndex())];
63 }
64
65 //! operator for the access with an index
66 //! needed for Staggered methods for the access to the boundary volume variables
67 5566394496 const VolumeVariables& operator [](const std::size_t scvIdx) const
68 {
69
2/2
✓ Branch 0 taken 5436706107 times.
✓ Branch 1 taken 129688389 times.
5566394496 if (scvIdx < numScv_)
70 10873412214 return gridVolVars().volVars(scvIdx);
71 else
72 129688389 return boundaryVolumeVariables_[getLocalIdx_(scvIdx)];
73 }
74
75 /*!
76 * \brief bind the local view (r-value overload)
77 * This overload is called when an instance of this class is a temporary in the usage context
78 * This allows a usage like this: `const auto view = localView(...).bind(element);`
79 */
80 template<class FVElementGeometry, class SolutionVector>
81 StaggeredElementVolumeVariables bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
82 const FVElementGeometry& fvGeometry,
83 const SolutionVector& sol) &&
84 {
85 this->bind_(element, fvGeometry, sol);
86 return std::move(*this);
87 }
88
89 template<class FVElementGeometry, class SolutionVector>
90 void bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
91 const FVElementGeometry& fvGeometry,
92 const SolutionVector& sol) &
93
1/2
✓ Branch 1 taken 89592 times.
✗ Branch 2 not taken.
119816 { this->bind_(element, fvGeometry, sol); }
94
95 /*!
96 * \brief bind the local view (r-value overload)
97 * This overload is called when an instance of this class is a temporary in the usage context
98 * This allows a usage like this: `const auto view = localView(...).bind(element);`
99 */
100 template<class FVElementGeometry, class SolutionVector>
101 StaggeredElementVolumeVariables bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
102 const FVElementGeometry& fvGeometry,
103 const SolutionVector& sol) &&
104 {
105 this->bindElement_(element, fvGeometry, sol);
106 return std::move(*this);
107 }
108
109 template<class FVElementGeometry, class SolutionVector>
110 void bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
111 const FVElementGeometry& fvGeometry,
112 const SolutionVector& sol) &
113 { this->bindElement_(element, fvGeometry, sol); }
114
115 //! The global volume variables object we are a restriction of
116 const GridVolumeVariables& gridVolVars() const
117 { return *gridVolVarsPtr_; }
118
119 private:
120
121 //! Clear all local storage
122 void clear_()
123 {
124 1324766 boundaryVolVarIndices_.clear();
125
2/2
✓ Branch 0 taken 96523 times.
✓ Branch 1 taken 565860 times.
662383 boundaryVolumeVariables_.clear();
126 }
127
128 //! Binding of an element, prepares the volume variables within the element stencil
129 //! called by the local jacobian to prepare element assembly. Specialization callable with MultiTypeBlockVector.
130 template<class FVElementGeometry, class SolutionVector, typename std::enable_if_t<isMultiTypeBlockVector<SolutionVector>::value, int> = 0>
131 void bind_(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
132 const FVElementGeometry& fvGeometry,
133 const SolutionVector& sol)
134 {
135 // forward to the actual method
136
6/12
✓ Branch 1 taken 470936 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 470936 times.
✗ Branch 5 not taken.
✓ Branch 11 taken 15112 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 15112 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 15112 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 15112 times.
✗ Branch 21 not taken.
6444096 bind_(element, fvGeometry, sol[FVElementGeometry::GridGeometry::cellCenterIdx()]);
137 }
138
139 //! Binding of an element, prepares the volume variables within the element stencil
140 //! called by the local jacobian to prepare element assembly
141 template<class FVElementGeometry, class SolutionVector, typename std::enable_if_t<!isMultiTypeBlockVector<SolutionVector>::value, int> = 0>
142 3311640 void bind_(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
143 const FVElementGeometry& fvGeometry,
144 const SolutionVector& sol)
145 {
146
4/4
✓ Branch 0 taken 662383 times.
✓ Branch 1 taken 2649257 times.
✓ Branch 2 taken 662383 times.
✓ Branch 3 taken 2649257 times.
6623280 if (!fvGeometry.hasBoundaryScvf())
147 return;
148
149
2/2
✓ Branch 0 taken 96523 times.
✓ Branch 1 taken 565860 times.
662383 clear_();
150 1324766 boundaryVolVarIndices_.reserve(fvGeometry.numScvf());
151 1324766 boundaryVolumeVariables_.reserve(fvGeometry.numScvf());
152
153 // handle the boundary volume variables
154
6/6
✓ Branch 0 taken 2649532 times.
✓ Branch 1 taken 662383 times.
✓ Branch 2 taken 2649532 times.
✓ Branch 3 taken 662383 times.
✓ Branch 4 taken 1944564 times.
✓ Branch 5 taken 704968 times.
3974298 for (auto&& scvf : scvfs(fvGeometry))
155 {
156 // if we are not on a boundary, skip the rest
157
2/2
✓ Branch 0 taken 1944564 times.
✓ Branch 1 taken 704968 times.
2649532 if (!scvf.boundary())
158 1944564 continue;
159
160 704968 const auto& problem = gridVolVars().problem();
161 704968 auto boundaryPriVars = gridVolVars().getBoundaryPriVars(problem, sol, element, scvf);
162 1409936 const auto elemSol = elementSolution<FVElementGeometry>(std::move(boundaryPriVars));
163
2/4
✓ Branch 1 taken 134252 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 134252 times.
✗ Branch 5 not taken.
1409936 auto&& scvI = fvGeometry.scv(scvf.insideScvIdx());
164
165
1/2
✓ Branch 1 taken 134252 times.
✗ Branch 2 not taken.
704968 VolumeVariables volVars;
166
1/2
✓ Branch 1 taken 704968 times.
✗ Branch 2 not taken.
704968 volVars.update(elemSol,
167 problem,
168 element,
169 scvI);
170
171
1/2
✓ Branch 1 taken 704968 times.
✗ Branch 2 not taken.
704968 boundaryVolumeVariables_.emplace_back(std::move(volVars));
172
3/8
✓ Branch 1 taken 704968 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 704968 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 704968 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
1409936 boundaryVolVarIndices_.push_back(scvf.outsideScvIdx());
173 }
174 }
175
176 //! function to prepare the vol vars within the element
177 template<class FVElementGeometry, class SolutionVector>
178 void bindElement_(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
179 const FVElementGeometry& fvGeometry,
180 const SolutionVector& sol)
181 {}
182
183 const GridVolumeVariables* gridVolVarsPtr_;
184
185 //! map a global scv index to the local storage index
186 129688389 int getLocalIdx_(const int volVarIdx) const
187 {
188 389065167 auto it = std::find(boundaryVolVarIndices_.begin(), boundaryVolVarIndices_.end(), volVarIdx);
189
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 129688389 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 129688389 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 129688389 times.
389065167 assert(it != boundaryVolVarIndices_.end() && "Could not find the current volume variables for volVarIdx!");
190 389065167 return std::distance(boundaryVolVarIndices_.begin(), it);
191 }
192
193 std::vector<std::size_t> boundaryVolVarIndices_;
194 std::vector<VolumeVariables> boundaryVolumeVariables_;
195 const std::size_t numScv_;
196 };
197
198
199 /*!
200 * \ingroup StaggeredDiscretization
201 * \brief Class for the element volume variables vector for the staggered model.
202 Specialization in case the volume variables are not stored globally.
203 */
204 template<class GVV>
205 class StaggeredElementVolumeVariables<GVV, /*cachingEnabled*/false>
206 {
207 using PrimaryVariables = typename GVV::VolumeVariables::PrimaryVariables;
208
209 public:
210 //! export type of the grid volume variables
211 using GridVolumeVariables = GVV;
212
213 //! export type of the volume variables
214 using VolumeVariables = typename GridVolumeVariables::VolumeVariables;
215
216 //! Constructor
217 StaggeredElementVolumeVariables(const GridVolumeVariables& gridVolVars)
218
72/144
✓ Branch 1 taken 1 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.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 1 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 1 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 76 taken 1 times.
✗ Branch 77 not taken.
✓ Branch 79 taken 1 times.
✗ Branch 80 not taken.
✓ Branch 82 taken 1 times.
✗ Branch 83 not taken.
✓ Branch 85 taken 1 times.
✗ Branch 86 not taken.
✓ Branch 88 taken 1 times.
✗ Branch 89 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 1 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 1 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 1 times.
✗ Branch 101 not taken.
✓ Branch 103 taken 1 times.
✗ Branch 104 not taken.
✓ Branch 106 taken 1 times.
✗ Branch 107 not taken.
✓ Branch 109 taken 1 times.
✗ Branch 110 not taken.
✓ Branch 112 taken 1 times.
✗ Branch 113 not taken.
✓ Branch 115 taken 1 times.
✗ Branch 116 not taken.
✓ Branch 118 taken 1 times.
✗ Branch 119 not taken.
✓ Branch 121 taken 1 times.
✗ Branch 122 not taken.
✓ Branch 124 taken 1 times.
✗ Branch 125 not taken.
✓ Branch 127 taken 1 times.
✗ Branch 128 not taken.
✓ Branch 130 taken 1 times.
✗ Branch 131 not taken.
✓ Branch 133 taken 1 times.
✗ Branch 134 not taken.
✓ Branch 136 taken 1 times.
✗ Branch 137 not taken.
✓ Branch 139 taken 1 times.
✗ Branch 140 not taken.
✓ Branch 142 taken 1 times.
✗ Branch 143 not taken.
✓ Branch 145 taken 1 times.
✗ Branch 146 not taken.
✓ Branch 148 taken 1 times.
✗ Branch 149 not taken.
✓ Branch 151 taken 1 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 1 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 1 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 1 times.
✗ Branch 161 not taken.
✓ Branch 163 taken 1 times.
✗ Branch 164 not taken.
✓ Branch 166 taken 1 times.
✗ Branch 167 not taken.
✓ Branch 169 taken 1 times.
✗ Branch 170 not taken.
✓ Branch 172 taken 1 times.
✗ Branch 173 not taken.
✓ Branch 175 taken 1 times.
✗ Branch 176 not taken.
✓ Branch 178 taken 1 times.
✗ Branch 179 not taken.
✓ Branch 181 taken 1 times.
✗ Branch 182 not taken.
✓ Branch 184 taken 1 times.
✗ Branch 185 not taken.
✓ Branch 187 taken 1 times.
✗ Branch 188 not taken.
✓ Branch 190 taken 1 times.
✗ Branch 191 not taken.
✓ Branch 193 taken 1 times.
✗ Branch 194 not taken.
✓ Branch 196 taken 1 times.
✗ Branch 197 not taken.
✓ Branch 199 taken 1 times.
✗ Branch 200 not taken.
✓ Branch 202 taken 1 times.
✗ Branch 203 not taken.
✓ Branch 205 taken 1 times.
✗ Branch 206 not taken.
✓ Branch 208 taken 1 times.
✗ Branch 209 not taken.
✓ Branch 211 taken 1 times.
✗ Branch 212 not taken.
✓ Branch 214 taken 1 times.
✗ Branch 215 not taken.
72 : gridVolVarsPtr_(&gridVolVars) {}
219
220 /*!
221 * \brief bind the local view (r-value overload)
222 * This overload is called when an instance of this class is a temporary in the usage context
223 * This allows a usage like this: `const auto view = localView(...).bind(element);`
224 */
225 template<class FVElementGeometry, class SolutionVector>
226 StaggeredElementVolumeVariables bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
227 const FVElementGeometry& fvGeometry,
228 const SolutionVector& sol) &&
229 {
230 this->bind_(element, fvGeometry, sol);
231 return std::move(*this);
232 }
233
234 template<class FVElementGeometry, class SolutionVector>
235 void bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
236 const FVElementGeometry& fvGeometry,
237 const SolutionVector& sol) &
238 600 { this->bind_(element, fvGeometry, sol); }
239
240 /*!
241 * \brief bind the local view (r-value overload)
242 * This overload is called when an instance of this class is a temporary in the usage context
243 * This allows a usage like this: `const auto view = localView(...).bind(element);`
244 */
245 template<class FVElementGeometry, class SolutionVector>
246 StaggeredElementVolumeVariables bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
247 const FVElementGeometry& fvGeometry,
248 const SolutionVector& sol) &&
249 {
250 this->bindElement_(element, fvGeometry, sol);
251 return std::move(*this);
252 }
253
254 template<class FVElementGeometry, class SolutionVector>
255 void bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
256 const FVElementGeometry& fvGeometry,
257 const SolutionVector& sol) &
258 { this->bindElement_(element, fvGeometry, sol); }
259
260 //! const operator for the access with an scv
261 template<class SubControlVolume, typename std::enable_if_t<!std::is_integral<SubControlVolume>::value, int> = 0>
262 const VolumeVariables& operator [](const SubControlVolume& scv) const
263 { return volumeVariables_[getLocalIdx_(scv.dofIndex())]; }
264
265 //! operator for the access with an scv
266 template<class SubControlVolume, typename std::enable_if_t<!std::is_integral<SubControlVolume>::value, int> = 0>
267 VolumeVariables& operator [](const SubControlVolume& scv)
268 1200 { return volumeVariables_[getLocalIdx_(scv.dofIndex())]; }
269
270 //! const operator for the access with an index
271 const VolumeVariables& operator [](std::size_t scvIdx) const
272 { return volumeVariables_[getLocalIdx_(scvIdx)]; }
273
274 //! operator for the access with an index
275 VolumeVariables& operator [](std::size_t scvIdx)
276 { return volumeVariables_[getLocalIdx_(scvIdx)]; }
277
278 //! The global volume variables object we are a restriction of
279 const GridVolumeVariables& gridVolVars() const
280 { return *gridVolVarsPtr_; }
281
282 private:
283 //! Binding of an element, prepares the volume variables within the element stencil
284 //! called by the local jacobian to prepare element assembly. Specialization callable with MultiTypeBlockVector.
285 template<class FVElementGeometry, class SolutionVector, typename std::enable_if_t<isMultiTypeBlockVector<SolutionVector>::value, int> = 0>
286 void bind_(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
287 const FVElementGeometry& fvGeometry,
288 const SolutionVector& sol)
289 {
290 // forward to the actual method
291
48/96
✓ Branch 1 taken 25 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 25 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 25 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 25 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 25 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 25 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 25 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 25 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 25 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 25 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 25 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 25 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 25 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 25 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 25 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 25 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 25 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 25 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 25 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 25 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 25 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 25 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 25 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 25 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 25 times.
✗ Branch 74 not taken.
✓ Branch 76 taken 25 times.
✗ Branch 77 not taken.
✓ Branch 79 taken 25 times.
✗ Branch 80 not taken.
✓ Branch 82 taken 25 times.
✗ Branch 83 not taken.
✓ Branch 85 taken 25 times.
✗ Branch 86 not taken.
✓ Branch 88 taken 25 times.
✗ Branch 89 not taken.
✓ Branch 91 taken 25 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 25 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 25 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 25 times.
✗ Branch 101 not taken.
✓ Branch 103 taken 25 times.
✗ Branch 104 not taken.
✓ Branch 106 taken 25 times.
✗ Branch 107 not taken.
✓ Branch 109 taken 25 times.
✗ Branch 110 not taken.
✓ Branch 112 taken 25 times.
✗ Branch 113 not taken.
✓ Branch 115 taken 25 times.
✗ Branch 116 not taken.
✓ Branch 118 taken 25 times.
✗ Branch 119 not taken.
✓ Branch 121 taken 25 times.
✗ Branch 122 not taken.
✓ Branch 124 taken 25 times.
✗ Branch 125 not taken.
✓ Branch 127 taken 25 times.
✗ Branch 128 not taken.
✓ Branch 130 taken 25 times.
✗ Branch 131 not taken.
✓ Branch 133 taken 25 times.
✗ Branch 134 not taken.
✓ Branch 136 taken 25 times.
✗ Branch 137 not taken.
✓ Branch 139 taken 25 times.
✗ Branch 140 not taken.
✓ Branch 142 taken 25 times.
✗ Branch 143 not taken.
1200 bind_(element, fvGeometry, sol[FVElementGeometry::GridGeometry::cellCenterIdx()]);
292 }
293
294 //! Binding of an element, prepares the volume variables within the element stencil
295 //! called by the local jacobian to prepare element assembly
296 template<class FVElementGeometry, class SolutionVector, typename std::enable_if_t<!isMultiTypeBlockVector<SolutionVector>::value, int> = 0>
297 1200 void bind_(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
298 const FVElementGeometry& fvGeometry,
299 const SolutionVector& sol)
300 {
301 2400 clear_();
302
303 1200 const auto& problem = gridVolVars().problem();
304 1200 const auto& gridGeometry = fvGeometry.gridGeometry();
305 1200 const auto globalI = gridGeometry.elementMapper().index(element);
306
2/2
✓ Branch 0 taken 550 times.
✓ Branch 1 taken 50 times.
1200 const auto& map = gridGeometry.connectivityMap();
307 constexpr auto cellCenterIdx = FVElementGeometry::GridGeometry::cellCenterIdx();
308
2/2
✓ Branch 0 taken 550 times.
✓ Branch 1 taken 50 times.
1200 const auto& connectivityMapI = map(cellCenterIdx, cellCenterIdx, globalI);
309
2/2
✓ Branch 0 taken 550 times.
✓ Branch 1 taken 50 times.
1200 const auto numDofs = connectivityMapI.size();
310
311
2/2
✓ Branch 0 taken 550 times.
✓ Branch 1 taken 50 times.
1200 auto&& scvI = fvGeometry.scv(globalI);
312
313 // resize local containers to the required size (for internal elements)
314 1200 volumeVariables_.resize(numDofs+1);
315 1200 volVarIndices_.resize(numDofs+1);
316 1200 int localIdx = 0;
317
318 // Lambda to update the volume variables of the given index
319 16320 auto doVolVarUpdate = [&](int globalJ)
320 {
321 2520 const auto& elementJ = gridGeometry.element(globalJ);
322
48/48
✓ Branch 0 taken 25 times.
✓ Branch 1 taken 80 times.
✓ Branch 2 taken 25 times.
✓ Branch 3 taken 80 times.
✓ Branch 4 taken 25 times.
✓ Branch 5 taken 80 times.
✓ Branch 6 taken 25 times.
✓ Branch 7 taken 80 times.
✓ Branch 8 taken 25 times.
✓ Branch 9 taken 80 times.
✓ Branch 10 taken 25 times.
✓ Branch 11 taken 80 times.
✓ Branch 12 taken 25 times.
✓ Branch 13 taken 80 times.
✓ Branch 14 taken 25 times.
✓ Branch 15 taken 80 times.
✓ Branch 16 taken 25 times.
✓ Branch 17 taken 80 times.
✓ Branch 18 taken 25 times.
✓ Branch 19 taken 80 times.
✓ Branch 20 taken 25 times.
✓ Branch 21 taken 80 times.
✓ Branch 22 taken 25 times.
✓ Branch 23 taken 80 times.
✓ Branch 24 taken 25 times.
✓ Branch 25 taken 80 times.
✓ Branch 26 taken 25 times.
✓ Branch 27 taken 80 times.
✓ Branch 28 taken 25 times.
✓ Branch 29 taken 80 times.
✓ Branch 30 taken 25 times.
✓ Branch 31 taken 80 times.
✓ Branch 32 taken 25 times.
✓ Branch 33 taken 80 times.
✓ Branch 34 taken 25 times.
✓ Branch 35 taken 80 times.
✓ Branch 36 taken 25 times.
✓ Branch 37 taken 80 times.
✓ Branch 38 taken 25 times.
✓ Branch 39 taken 80 times.
✓ Branch 40 taken 25 times.
✓ Branch 41 taken 80 times.
✓ Branch 42 taken 25 times.
✓ Branch 43 taken 80 times.
✓ Branch 44 taken 25 times.
✓ Branch 45 taken 80 times.
✓ Branch 46 taken 25 times.
✓ Branch 47 taken 80 times.
2520 auto&& scvJ = fvGeometry.scv(globalJ);
323
0/48
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ 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 not taken.
✗ Branch 35 not taken.
✗ Branch 38 not taken.
✗ 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.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
7560 const auto elemSol = makeElementSolutionFromCellCenterPrivars<PrimaryVariables>(sol[globalJ]);
324
24/48
✓ Branch 1 taken 105 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 105 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 105 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 105 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 105 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 105 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 105 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 105 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 105 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 105 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 105 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 105 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 105 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 105 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 105 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 105 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 105 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 105 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 105 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 105 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 105 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 105 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 105 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 105 times.
✗ Branch 71 not taken.
2520 volumeVariables_[localIdx].update(elemSol,
325
24/48
✓ Branch 1 taken 105 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 105 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 105 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 105 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 105 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 105 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 105 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 105 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 105 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 105 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 105 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 105 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 105 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 105 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 105 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 105 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 105 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 105 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 105 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 105 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 105 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 105 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 105 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 105 times.
✗ Branch 71 not taken.
2520 problem,
326 elementJ,
327 scvJ);
328
48/96
✓ Branch 0 taken 105 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 105 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 105 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 105 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 105 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 105 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 105 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 105 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 105 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 105 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 105 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 105 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 105 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 105 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 105 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 105 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 105 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 105 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 105 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 105 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 105 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 105 times.
✗ Branch 43 not taken.
✓ Branch 44 taken 105 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 105 times.
✗ Branch 47 not taken.
✓ Branch 48 taken 105 times.
✗ Branch 49 not taken.
✓ Branch 50 taken 105 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 105 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 105 times.
✗ Branch 55 not taken.
✓ Branch 56 taken 105 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 105 times.
✗ Branch 59 not taken.
✓ Branch 60 taken 105 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 105 times.
✗ Branch 63 not taken.
✓ Branch 64 taken 105 times.
✗ Branch 65 not taken.
✓ Branch 66 taken 105 times.
✗ Branch 67 not taken.
✓ Branch 68 taken 105 times.
✗ Branch 69 not taken.
✓ Branch 70 taken 105 times.
✗ Branch 71 not taken.
✓ Branch 72 taken 105 times.
✗ Branch 73 not taken.
✓ Branch 74 taken 105 times.
✗ Branch 75 not taken.
✓ Branch 76 taken 105 times.
✗ Branch 77 not taken.
✓ Branch 78 taken 105 times.
✗ Branch 79 not taken.
✓ Branch 80 taken 105 times.
✗ Branch 81 not taken.
✓ Branch 82 taken 105 times.
✗ Branch 83 not taken.
✓ Branch 84 taken 105 times.
✗ Branch 85 not taken.
✓ Branch 86 taken 105 times.
✗ Branch 87 not taken.
✓ Branch 88 taken 105 times.
✗ Branch 89 not taken.
✓ Branch 90 taken 105 times.
✗ Branch 91 not taken.
✓ Branch 92 taken 105 times.
✗ Branch 93 not taken.
✓ Branch 94 taken 105 times.
✗ Branch 95 not taken.
5040 volVarIndices_[localIdx] = scvJ.dofIndex();
329
24/48
✓ Branch 0 taken 105 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 105 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 105 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 105 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 105 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 105 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 105 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 105 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 105 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 105 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 105 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 105 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 105 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 105 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 105 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 105 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 105 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 105 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 105 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 105 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 105 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 105 times.
✗ Branch 43 not taken.
✓ Branch 44 taken 105 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 105 times.
✗ Branch 47 not taken.
2520 ++localIdx;
330 };
331
332 // Update the volume variables of the element at hand
333 1200 doVolVarUpdate(globalI);
334
335 // Update the volume variables of the neighboring elements
336
4/4
✓ Branch 0 taken 1920 times.
✓ Branch 1 taken 600 times.
✓ Branch 2 taken 1920 times.
✓ Branch 3 taken 600 times.
7440 for (const auto& globalJ : connectivityMapI)
337 3840 doVolVarUpdate(globalJ);
338
339
2/2
✓ Branch 0 taken 384 times.
✓ Branch 1 taken 216 times.
1200 if (fvGeometry.hasBoundaryScvf())
340 {
341 // Update boundary volume variables
342
4/4
✓ Branch 0 taken 1536 times.
✓ Branch 1 taken 384 times.
✓ Branch 2 taken 1536 times.
✓ Branch 3 taken 384 times.
4608 for (auto&& scvf : scvfs(fvGeometry))
343 {
344 // if we are not on a boundary, skip to the next scvf
345
2/2
✓ Branch 0 taken 1056 times.
✓ Branch 1 taken 480 times.
3072 if (!scvf.boundary())
346 2112 continue;
347
348 960 volumeVariables_.resize(localIdx+1);
349 960 volVarIndices_.resize(localIdx+1);
350
351 960 auto boundaryPriVars = gridVolVars().getBoundaryPriVars(problem, sol, element, scvf);
352
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
1920 auto elemSol = elementSolution<FVElementGeometry>(std::move(boundaryPriVars));
353
2/4
✓ Branch 1 taken 480 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 480 times.
✗ Branch 5 not taken.
1920 volumeVariables_[localIdx].update(elemSol,
354 problem,
355 element,
356 scvI);
357
2/4
✓ Branch 0 taken 480 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 480 times.
✗ Branch 3 not taken.
1920 volVarIndices_[localIdx] = scvf.outsideScvIdx();
358
1/2
✓ Branch 0 taken 480 times.
✗ Branch 1 not taken.
960 ++localIdx;
359 }
360 }
361 1200 }
362
363 //! Binding of an element, prepares the volume variables within the element stencil
364 //! called by the local jacobian to prepare element assembly. Specialization callable with MultiTypeBlockVector.
365 template<class FVElementGeometry, class SolutionVector, typename std::enable_if_t<isMultiTypeBlockVector<SolutionVector>::value, int> = 0>
366 void bindElement_(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
367 const FVElementGeometry& fvGeometry,
368 const SolutionVector& sol)
369 {
370 // forward to the actual method
371 bindElement_(element, fvGeometry, sol[FVElementGeometry::GridGeometry::cellCenterIdx()]);
372 }
373
374 //! Binding of an element, prepares only the volume variables of the element.
375 //! Specialization for Staggered models
376 template<class FVElementGeometry, class SolutionVector, typename std::enable_if_t<!isMultiTypeBlockVector<SolutionVector>::value, int> = 0>
377 void bindElement_(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
378 const FVElementGeometry& fvGeometry,
379 const SolutionVector& sol)
380 {
381 clear_();
382
383 const auto globalI = fvGeometry.gridGeometry().elementMapper().index(element);
384 volumeVariables_.resize(1);
385 volVarIndices_.resize(1);
386
387 // update the volume variables of the element
388 auto&& scv = fvGeometry.scv(globalI);
389
390 const auto elemSol = makeElementSolutionFromCellCenterPrivars<PrimaryVariables>(sol[globalI]);
391 volumeVariables_[0].update(elemSol,
392 gridVolVars().problem(),
393 element,
394 scv);
395 volVarIndices_[0] = scv.dofIndex();
396 }
397
398 //! Clear all local storage
399 void clear_()
400 {
401
48/96
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 24 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 24 times.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 24 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 24 times.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 24 times.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 24 times.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 24 times.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 24 times.
✓ Branch 35 taken 1 times.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✓ Branch 38 taken 24 times.
✓ Branch 39 taken 1 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✓ Branch 42 taken 24 times.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✓ Branch 46 taken 24 times.
✓ Branch 47 taken 1 times.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✓ Branch 50 taken 24 times.
✓ Branch 51 taken 1 times.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✓ Branch 54 taken 24 times.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 24 times.
✓ Branch 59 taken 1 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✓ Branch 62 taken 24 times.
✓ Branch 63 taken 1 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✓ Branch 66 taken 24 times.
✓ Branch 67 taken 1 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✓ Branch 70 taken 24 times.
✓ Branch 71 taken 1 times.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✓ Branch 74 taken 24 times.
✓ Branch 75 taken 1 times.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✓ Branch 78 taken 24 times.
✓ Branch 79 taken 1 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 82 taken 24 times.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✓ Branch 86 taken 24 times.
✓ Branch 87 taken 1 times.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✓ Branch 90 taken 24 times.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✓ Branch 94 taken 24 times.
✓ Branch 95 taken 1 times.
600 volVarIndices_.clear();
402
48/96
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 3 taken 24 times.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 9 taken 24 times.
✓ Branch 10 taken 1 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 15 taken 24 times.
✓ Branch 16 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 21 taken 24 times.
✓ Branch 22 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 27 taken 24 times.
✓ Branch 28 taken 1 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✓ Branch 33 taken 24 times.
✓ Branch 34 taken 1 times.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✓ Branch 39 taken 24 times.
✓ Branch 40 taken 1 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✓ Branch 45 taken 24 times.
✓ Branch 46 taken 1 times.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✓ Branch 51 taken 24 times.
✓ Branch 52 taken 1 times.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✓ Branch 57 taken 24 times.
✓ Branch 58 taken 1 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✓ Branch 63 taken 24 times.
✓ Branch 64 taken 1 times.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✓ Branch 69 taken 24 times.
✓ Branch 70 taken 1 times.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✓ Branch 75 taken 24 times.
✓ Branch 76 taken 1 times.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✓ Branch 81 taken 24 times.
✓ Branch 82 taken 1 times.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✓ Branch 87 taken 24 times.
✓ Branch 88 taken 1 times.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✓ Branch 93 taken 24 times.
✓ Branch 94 taken 1 times.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✓ Branch 99 taken 24 times.
✓ Branch 100 taken 1 times.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✓ Branch 105 taken 24 times.
✓ Branch 106 taken 1 times.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✓ Branch 111 taken 24 times.
✓ Branch 112 taken 1 times.
✗ Branch 114 not taken.
✗ Branch 115 not taken.
✓ Branch 117 taken 24 times.
✓ Branch 118 taken 1 times.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✓ Branch 123 taken 24 times.
✓ Branch 124 taken 1 times.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
✓ Branch 129 taken 24 times.
✓ Branch 130 taken 1 times.
✗ Branch 132 not taken.
✗ Branch 133 not taken.
✓ Branch 135 taken 24 times.
✓ Branch 136 taken 1 times.
✗ Branch 138 not taken.
✗ Branch 139 not taken.
✓ Branch 141 taken 24 times.
✓ Branch 142 taken 1 times.
1176 volumeVariables_.clear();
403 }
404
405 const GridVolumeVariables* gridVolVarsPtr_;
406
407 600 int getLocalIdx_(const int volVarIdx) const
408 {
409 1800 auto it = std::find(volVarIndices_.begin(), volVarIndices_.end(), volVarIdx);
410 1800 assert(it != volVarIndices_.end() && "Could not find the current volume variables for volVarIdx!");
411 1800 return std::distance(volVarIndices_.begin(), it);
412 }
413
414 std::vector<std::size_t> volVarIndices_;
415 std::vector<VolumeVariables> volumeVariables_;
416 };
417
418 } // end namespace Dumux
419
420 #endif
421