GCC Code Coverage Report


Directory: ../../../builds/dumux-repositories/
File: dumux/dumux/common/fvproblem.hh
Date: 2025-04-12 19:19:20
Exec Total Coverage
Lines: 57 59 96.6%
Functions: 580 917 63.2%
Branches: 963 1769 54.4%

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 Core
10 * \brief Base class for all finite volume problems
11 */
12 #ifndef DUMUX_COMMON_FV_PROBLEM_HH
13 #define DUMUX_COMMON_FV_PROBLEM_HH
14
15 #include <memory>
16 #include <map>
17
18 #include <dune/common/fvector.hh>
19 #include <dune/grid/common/gridenums.hh>
20
21 #include <dumux/common/properties.hh>
22 #include <dumux/common/parameters.hh>
23 #include <dumux/common/boundarytypes.hh>
24 #include <dumux/common/numeqvector.hh>
25 #include <dumux/discretization/method.hh>
26 #include <dumux/discretization/extrusion.hh>
27
28 #include <dumux/assembly/initialsolution.hh>
29
30 namespace Dumux {
31
32 /*!
33 * \ingroup Core
34 * \brief Base class for all finite-volume problems
35 *
36 * \note All quantities (regarding the units) are specified assuming a
37 * three-dimensional world. Problems discretized using 2D grids
38 * are assumed to be extruded by \f$1 m\f$ and 1D grids are assumed
39 * to have a cross section of \f$1m \times 1m\f$.
40 */
41 template<class TypeTag>
42 class FVProblem
43 {
44 using Implementation = GetPropType<TypeTag, Properties::Problem>;
45
46 using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
47 using FVElementGeometry = typename GridGeometry::LocalView;
48 using GridView = typename GridGeometry::GridView;
49 using SubControlVolume = typename FVElementGeometry::SubControlVolume;
50 using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
51 using Extrusion = Extrusion_t<GridGeometry>;
52 using Element = typename GridView::template Codim<0>::Entity;
53 using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
54
55 enum { dim = GridView::dimension };
56
57 using PointSource = GetPropType<TypeTag, Properties::PointSource>;
58 using PointSourceHelper = GetPropType<TypeTag, Properties::PointSourceHelper>;
59 using PointSourceMap = std::map< std::pair<std::size_t, std::size_t>,
60 std::vector<PointSource> >;
61
62 static constexpr bool isCVFE = DiscretizationMethods::isCVFE<typename GridGeometry::DiscretizationMethod>;
63 static constexpr bool isStaggered = GridGeometry::discMethod == DiscretizationMethods::staggered;
64
65 using Scalar = GetPropType<TypeTag, Properties::Scalar>;
66 using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
67 using NumEqVector = Dumux::NumEqVector<GetPropType<TypeTag, Properties::PrimaryVariables>>;
68 using BoundaryTypes = Dumux::BoundaryTypes<PrimaryVariables::size()>;
69
70 public:
71 //! export traits of this problem
72 struct Traits
73 {
74 using Scalar = FVProblem::Scalar;
75 using PrimaryVariables = FVProblem::PrimaryVariables;
76 using NumEqVector = FVProblem::NumEqVector;
77 };
78
79 /*!
80 * \brief Constructor
81 * \param gridGeometry The finite volume grid geometry
82 * \param paramGroup The parameter group in which to look for runtime parameters first (default is "")
83 */
84 1281 FVProblem(std::shared_ptr<const GridGeometry> gridGeometry, const std::string& paramGroup = "")
85 1281 : gridGeometry_(gridGeometry)
86
2/4
✓ Branch 1 taken 849 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 849 times.
✗ Branch 5 not taken.
2562 , paramGroup_(paramGroup)
87 {
88 // set a default name for the problem
89
1/2
✓ Branch 1 taken 849 times.
✗ Branch 2 not taken.
1281 problemName_ = getParamFromGroup<std::string>(paramGroup, "Problem.Name", "sim");
90 1281 }
91
92 /*!
93 * \brief The problem name.
94 *
95 * This is used as a prefix for files generated by the simulation.
96 * It could be either overwritten by the problem files, or simply
97 * declared over the setName() function in the application file.
98 */
99 296 const std::string& name() const
100 {
101
4/6
✓ Branch 1 taken 236 times.
✓ Branch 2 taken 14 times.
✓ Branch 4 taken 49 times.
✓ Branch 5 taken 24 times.
✗ Branch 3 not taken.
✗ Branch 6 not taken.
327 return problemName_;
102 }
103
104 /*!
105 * \brief Set the problem name.
106 *
107 * \param newName The problem's name
108 */
109 void setName(const std::string& newName)
110 {
111 problemName_ = newName;
112 }
113
114 /*!
115 * \name Boundary conditions and sources defining the problem
116 */
117 // \{
118
119 /*!
120 * \brief Specifies which kind of boundary condition should be
121 * used for which equation on a given boundary segment.
122 *
123 * \param element The finite element
124 * \param scv The sub control volume
125 */
126
7/8
✓ Branch 0 taken 1148940 times.
✓ Branch 1 taken 18274 times.
✓ Branch 2 taken 11245 times.
✓ Branch 3 taken 4852 times.
✓ Branch 4 taken 125656 times.
✓ Branch 5 taken 2632 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 8 times.
4809612 auto boundaryTypes(const Element &element,
127 const SubControlVolume &scv) const
128 {
129 if (!isCVFE)
130 DUNE_THROW(Dune::InvalidStateException,
131 "boundaryTypes(..., scv) called for non-CVFE method.");
132
133 // forward it to the method which only takes the global coordinate
134
11/12
✓ Branch 0 taken 3705766 times.
✓ Branch 1 taken 327524 times.
✓ Branch 2 taken 250370 times.
✓ Branch 3 taken 102630 times.
✓ Branch 4 taken 156203 times.
✓ Branch 5 taken 76075 times.
✓ Branch 6 taken 11437 times.
✓ Branch 7 taken 3772 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 8 times.
✓ Branch 10 taken 34 times.
✓ Branch 11 taken 102 times.
4846347 return asImp_().boundaryTypesAtPos(scv.dofPosition());
135 }
136
137 /*!
138 * \brief Specifies which kind of boundary condition should be
139 * used for which equation on a given boundary segment.
140 *
141 * \param element The finite element
142 * \param scvf The sub control volume face
143 */
144
17/18
✓ Branch 0 taken 172541 times.
✓ Branch 1 taken 1390644 times.
✓ Branch 2 taken 47857 times.
✓ Branch 3 taken 9236044 times.
✓ Branch 4 taken 156217 times.
✓ Branch 5 taken 109939 times.
✓ Branch 6 taken 97453 times.
✓ Branch 7 taken 6174586 times.
✓ Branch 8 taken 22994 times.
✓ Branch 9 taken 463302 times.
✓ Branch 10 taken 34164 times.
✓ Branch 11 taken 75536 times.
✓ Branch 12 taken 924 times.
✓ Branch 13 taken 4316 times.
✓ Branch 14 taken 150 times.
✓ Branch 15 taken 82 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 8 times.
474467411 auto boundaryTypes(const Element &element,
145 const SubControlVolumeFace &scvf) const
146 {
147 if (isCVFE)
148
0/20
✗ 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.
280 DUNE_THROW(Dune::InvalidStateException,
149 "boundaryTypes(..., scvf) called for CVFE method.");
150
151 // forward it to the method which only takes the global coordinate
152
120/200
✓ Branch 0 taken 777737 times.
✓ Branch 1 taken 3204079 times.
✓ Branch 2 taken 5179669 times.
✓ Branch 3 taken 5821801 times.
✓ Branch 4 taken 8920268 times.
✓ Branch 5 taken 52728040 times.
✓ Branch 6 taken 8555612 times.
✓ Branch 7 taken 81515305 times.
✓ Branch 8 taken 8230656 times.
✓ Branch 9 taken 33332449 times.
✓ Branch 10 taken 6863154 times.
✓ Branch 11 taken 15688879 times.
✓ Branch 12 taken 5265994 times.
✓ Branch 13 taken 60936244 times.
✓ Branch 14 taken 2445512 times.
✓ Branch 15 taken 97974874 times.
✓ Branch 16 taken 814392 times.
✓ Branch 17 taken 60252961 times.
✓ Branch 18 taken 68802 times.
✓ Branch 19 taken 26956 times.
✓ Branch 20 taken 88556 times.
✓ Branch 21 taken 20533 times.
✓ Branch 22 taken 47762 times.
✓ Branch 23 taken 20845 times.
✓ Branch 24 taken 11031 times.
✓ Branch 25 taken 2809 times.
✓ Branch 26 taken 1214 times.
✓ Branch 27 taken 1303 times.
✓ Branch 28 taken 5 times.
✓ Branch 29 taken 15 times.
✓ Branch 30 taken 5 times.
✓ Branch 31 taken 15 times.
✗ 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.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✓ Branch 56 taken 10 times.
✓ Branch 57 taken 30 times.
✓ Branch 58 taken 40 times.
✗ Branch 59 not taken.
✓ Branch 60 taken 1 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 10 times.
✓ Branch 63 taken 30 times.
✓ Branch 64 taken 40 times.
✗ Branch 65 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 68 taken 10 times.
✓ Branch 69 taken 30 times.
✓ Branch 70 taken 40 times.
✗ Branch 71 not taken.
✓ Branch 72 taken 1 times.
✗ Branch 73 not taken.
✓ Branch 74 taken 10 times.
✓ Branch 75 taken 30 times.
✓ Branch 76 taken 40 times.
✗ Branch 77 not taken.
✓ Branch 78 taken 1 times.
✗ Branch 79 not taken.
✓ Branch 80 taken 10 times.
✓ Branch 81 taken 30 times.
✓ Branch 82 taken 40 times.
✗ Branch 83 not taken.
✓ Branch 84 taken 1 times.
✗ Branch 85 not taken.
✓ Branch 86 taken 10 times.
✓ Branch 87 taken 30 times.
✓ Branch 88 taken 40 times.
✗ Branch 89 not taken.
✓ Branch 90 taken 1 times.
✗ Branch 91 not taken.
✓ Branch 92 taken 10 times.
✓ Branch 93 taken 30 times.
✓ Branch 94 taken 40 times.
✗ Branch 95 not taken.
✓ Branch 96 taken 1 times.
✗ Branch 97 not taken.
✓ Branch 98 taken 10 times.
✓ Branch 99 taken 30 times.
✓ Branch 100 taken 40 times.
✗ Branch 101 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 104 taken 10 times.
✓ Branch 105 taken 30 times.
✓ Branch 106 taken 40 times.
✗ Branch 107 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✓ Branch 112 taken 10 times.
✓ Branch 113 taken 30 times.
✓ Branch 114 taken 40 times.
✗ Branch 115 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✓ Branch 120 taken 10 times.
✓ Branch 121 taken 30 times.
✓ Branch 122 taken 40 times.
✗ Branch 123 not taken.
✓ Branch 124 taken 1 times.
✗ Branch 125 not taken.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
✓ Branch 128 taken 10 times.
✓ Branch 129 taken 30 times.
✓ Branch 130 taken 40 times.
✗ Branch 131 not taken.
✓ Branch 132 taken 1 times.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✗ Branch 135 not taken.
✓ Branch 136 taken 10 times.
✓ Branch 137 taken 30 times.
✓ Branch 138 taken 40 times.
✗ Branch 139 not taken.
✓ Branch 140 taken 1 times.
✗ Branch 141 not taken.
✓ Branch 142 taken 10 times.
✓ Branch 143 taken 30 times.
✓ Branch 144 taken 40 times.
✗ Branch 145 not taken.
✓ Branch 146 taken 1 times.
✗ Branch 147 not taken.
✓ Branch 148 taken 10 times.
✓ Branch 149 taken 30 times.
✓ Branch 150 taken 40 times.
✗ Branch 151 not taken.
✓ Branch 152 taken 1 times.
✗ Branch 153 not taken.
✓ Branch 154 taken 10 times.
✓ Branch 155 taken 30 times.
✓ Branch 156 taken 40 times.
✗ Branch 157 not taken.
✓ Branch 158 taken 1 times.
✗ Branch 159 not taken.
✓ Branch 160 taken 10 times.
✓ Branch 161 taken 30 times.
✓ Branch 162 taken 40 times.
✗ Branch 163 not taken.
✓ Branch 164 taken 1 times.
✗ Branch 165 not taken.
✗ Branch 166 not taken.
✗ Branch 167 not taken.
✓ Branch 168 taken 10 times.
✓ Branch 169 taken 30 times.
✓ Branch 170 taken 40 times.
✗ Branch 171 not taken.
✓ Branch 172 taken 1 times.
✗ Branch 173 not taken.
✗ Branch 174 not taken.
✗ Branch 175 not taken.
✓ Branch 176 taken 10 times.
✓ Branch 177 taken 30 times.
✓ Branch 178 taken 40 times.
✗ Branch 179 not taken.
✓ Branch 180 taken 1 times.
✗ Branch 181 not taken.
✗ Branch 182 not taken.
✗ Branch 183 not taken.
✓ Branch 184 taken 10 times.
✓ Branch 185 taken 30 times.
✓ Branch 186 taken 40 times.
✗ Branch 187 not taken.
✓ Branch 188 taken 1 times.
✗ Branch 189 not taken.
✗ Branch 190 not taken.
✗ Branch 191 not taken.
✓ Branch 192 taken 15 times.
✓ Branch 193 taken 5 times.
✓ Branch 194 taken 15 times.
✓ Branch 195 taken 5 times.
✓ Branch 196 taken 15 times.
✓ Branch 197 taken 5 times.
✓ Branch 198 taken 15 times.
✓ Branch 199 taken 5 times.
475356236 return asImp_().boundaryTypesAtPos(scvf.ipGlobal());
153 }
154
155 /*!
156 * \brief Specifies which kind of boundary condition should be
157 * used for which equation on a given boundary segment.
158 *
159 * \param globalPos The position of the finite volume in global coordinates
160 */
161 BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const
162 {
163 //! As a default, i.e. if the user's problem does not overload any boundaryTypes method
164 //! set Dirichlet boundary conditions everywhere for all primary variables
165 BoundaryTypes bcTypes;
166 bcTypes.setAllDirichlet();
167 return bcTypes;
168 }
169
170 /*!
171 * \brief Evaluate the boundary conditions for a dirichlet
172 * control volume face.
173 *
174 * \param element The finite element
175 * \param scvf the sub control volume face
176 * \note used for cell-centered discretization schemes
177 */
178
10/12
✓ Branch 0 taken 29651 times.
✓ Branch 1 taken 466172 times.
✓ Branch 2 taken 16646 times.
✓ Branch 3 taken 18678 times.
✓ Branch 4 taken 112808 times.
✓ Branch 5 taken 2980 times.
✓ Branch 6 taken 100 times.
✓ Branch 7 taken 43 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 5976 times.
✓ Branch 11 taken 1488 times.
3237569 PrimaryVariables dirichlet(const Element &element, const SubControlVolumeFace &scvf) const
179 {
180 // forward it to the method which only takes the global coordinate
181 if (isCVFE)
182 {
183 DUNE_THROW(Dune::InvalidStateException, "dirichlet(scvf) called for CVFE method.");
184 }
185 else
186
35/57
✓ Branch 1 taken 780994 times.
✓ Branch 2 taken 35056 times.
✓ Branch 4 taken 254910 times.
✓ Branch 5 taken 13720 times.
✓ Branch 7 taken 172053 times.
✓ Branch 8 taken 27664 times.
✓ Branch 10 taken 110 times.
✓ Branch 11 taken 80 times.
✓ Branch 13 taken 130 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 11658 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 10 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 10 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 10 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 10 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 10 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 10 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 10 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 10 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 10 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 10 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 10 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 10 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 10 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 10 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 5 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 5 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 5 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 5 times.
✗ Branch 71 not taken.
✓ Branch 0 taken 29651 times.
✓ Branch 3 taken 87673 times.
✓ Branch 6 taken 153772 times.
✓ Branch 9 taken 421636 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 5976 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 69478 times.
✓ Branch 24 taken 69478 times.
3402957 return asImp_().dirichletAtPos(scvf.ipGlobal());
187 }
188
189 /*!
190 * \brief Evaluate the boundary conditions for a dirichlet
191 * control volume.
192 *
193 * \param element The finite element
194 * \param scv the sub control volume
195 * \note used for cell-centered discretization schemes
196 */
197
3/4
✓ Branch 0 taken 161726 times.
✓ Branch 1 taken 129972 times.
✓ Branch 2 taken 136 times.
✗ Branch 3 not taken.
702922 PrimaryVariables dirichlet(const Element &element, const SubControlVolume &scv) const
198 {
199 // forward it to the method which only takes the global coordinate
200 if (!isCVFE && !isStaggered)
201 {
202 DUNE_THROW(Dune::InvalidStateException, "dirichlet(scv) called for other than CVFE or staggered method.");
203 }
204 else
205
8/12
✓ Branch 0 taken 209678 times.
✓ Branch 1 taken 285442 times.
✓ Branch 2 taken 39628 times.
✓ Branch 3 taken 185475 times.
✓ Branch 4 taken 63315 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 640 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 9712 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 9072 times.
✗ Branch 13 not taken.
1175352 return asImp_().dirichletAtPos(scv.dofPosition());
206 }
207
208 /*!
209 * \brief Evaluate the boundary conditions for a dirichlet
210 * control volume.
211 *
212 * \param globalPos The position of the center of the finite volume
213 * for which the dirichlet condition ought to be
214 * set in global coordinates
215 */
216 PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const
217 {
218 // Throw an exception (there is no reasonable default value
219 // for Dirichlet conditions)
220 DUNE_THROW(Dune::InvalidStateException,
221 "The problem specifies that some boundary "
222 "segments are dirichlet, but does not provide "
223 "a dirichlet() or a dirichletAtPos() method.");
224 }
225
226 /*!
227 * \brief If internal Dirichlet constraints are enabled
228 * Enables / disables internal (non-boundary) Dirichlet constraints. If this is overloaded
229 * to return true, the assembler calls problem.hasInternalDirichletConstraint(element, scv).
230 * This means you have to implement the following member function
231 *
232 * std::bitset<N> hasInternalDirichletConstraint(const Element& element, const SubControlVolume& scv) const;
233 *
234 * where N is the number of equations and where the return value defines for each equation if the corresponding dof associated
235 * with the element/scv pair is constraint. If true is returned for a dof, the assembler calls
236 * problem.internalDirichlet(element, scv). This means you have to additionally implement the following member function
237 *
238 * PrimaryVariables internalDirichlet(const Element& element, const SubControlVolume& scv) const;
239 *
240 * which returns the enforced Dirichlet values the dof associated with the element/scv pair.
241 */
242 static constexpr bool enableInternalDirichletConstraints()
243 { return false; }
244
245 /*!
246 * \brief Evaluate the boundary conditions for a neumann
247 * boundary segment.
248 *
249 * This is the method for the case where the Neumann condition is
250 * potentially solution dependent
251 *
252 * \param element The finite element
253 * \param fvGeometry The finite-volume geometry
254 * \param elemVolVars All volume variables for the element
255 * \param elemFluxVarsCache Flux variables caches for all faces in stencil
256 * \param scvf The sub control volume face
257 *
258 * Negative values mean influx.
259 * E.g. for the mass balance that would be the mass flux in \f$ [ kg / (m^2 \cdot s)] \f$.
260 */
261 template<class ElementVolumeVariables, class ElementFluxVariablesCache>
262
6/6
✓ Branch 0 taken 289656 times.
✓ Branch 1 taken 9431019 times.
✓ Branch 2 taken 202100 times.
✓ Branch 3 taken 2720954 times.
✓ Branch 4 taken 176 times.
✓ Branch 5 taken 448 times.
37523967 NumEqVector neumann(const Element& element,
263 const FVElementGeometry& fvGeometry,
264 const ElementVolumeVariables& elemVolVars,
265 const ElementFluxVariablesCache& elemFluxVarsCache,
266 const SubControlVolumeFace& scvf) const
267 {
268 // forward it to the interface with only the global position
269
8/8
✓ Branch 0 taken 7127108 times.
✓ Branch 1 taken 9909086 times.
✓ Branch 2 taken 220524 times.
✓ Branch 3 taken 2699090 times.
✓ Branch 4 taken 567670 times.
✓ Branch 5 taken 21864 times.
✓ Branch 6 taken 36800 times.
✓ Branch 7 taken 7552 times.
55646106 return asImp_().neumannAtPos(scvf.ipGlobal());
270 }
271
272 /*!
273 * \brief Evaluate the boundary conditions for a neumann
274 * boundary segment.
275 *
276 * \param globalPos The position of the boundary face's integration point in global coordinates
277 *
278 * Negative values mean influx.
279 * E.g. for the mass balance that would be the mass flux in \f$ [ kg / (m^2 \cdot s)] \f$.
280 */
281
4/6
✓ Branch 0 taken 17440 times.
✓ Branch 1 taken 4320 times.
✓ Branch 2 taken 2976 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
15815157 NumEqVector neumannAtPos(const GlobalPosition &globalPos) const
282 {
283 //! As a default, i.e. if the user's problem does not overload any neumann method
284 //! return no-flow Neumann boundary conditions at all Neumann boundaries
285
5/6
✓ Branch 0 taken 529656 times.
✓ Branch 1 taken 251684 times.
✓ Branch 2 taken 3572 times.
✓ Branch 3 taken 2377676 times.
✓ Branch 4 taken 563720 times.
✗ Branch 5 not taken.
11256208 return NumEqVector(0.0);
286 }
287
288 /*!
289 * \brief Evaluate the source term for all phases within a given
290 * sub-control-volume.
291 *
292 * This is the method for the case where the source term is
293 * potentially solution dependent and requires some quantities that
294 * are specific to the fully-implicit method.
295 *
296 * \param element The finite element
297 * \param fvGeometry The finite-volume geometry
298 * \param elemVolVars All volume variables for the element
299 * \param scv The sub control volume
300 *
301 * For this method, the return parameter stores the conserved quantity rate
302 * generated or annihilate per volume unit. Positive values mean
303 * that the conserved quantity is created, negative ones mean that it vanishes.
304 * E.g. for the mass balance that would be a mass rate in \f$ [ kg / (m^3 \cdot s)] \f$.
305 */
306 template<class ElementVolumeVariables>
307
2/2
✓ Branch 0 taken 17400 times.
✓ Branch 1 taken 1152160 times.
467581718 NumEqVector source(const Element &element,
308 const FVElementGeometry& fvGeometry,
309 const ElementVolumeVariables& elemVolVars,
310 const SubControlVolume &scv) const
311 {
312 // forward to solution independent, fully-implicit specific interface
313
6/10
✓ Branch 0 taken 61618316 times.
✓ Branch 1 taken 61944705 times.
✓ Branch 2 taken 8113376 times.
✓ Branch 3 taken 7409460 times.
✓ Branch 4 taken 3483648 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 21896 times.
✗ Branch 9 not taken.
552418462 return asImp_().sourceAtPos(scv.center());
314 }
315
316 /*!
317 * \brief Evaluate the source term for all phases within a given
318 * sub-control-volume.
319 *
320 * \param globalPos The position of the center of the finite volume
321 * for which the source term ought to be
322 * specified in global coordinates
323 *
324 * For this method, the values parameter stores the conserved quantity rate
325 * generated or annihilate per volume unit. Positive values mean
326 * that the conserved quantity is created, negative ones mean that it vanishes.
327 * E.g. for the mass balance that would be a mass rate in \f$ [ kg / (m^3 \cdot s)] \f$.
328 */
329
6/10
✓ Branch 0 taken 6720756 times.
✓ Branch 1 taken 45626657 times.
✓ Branch 2 taken 8113376 times.
✓ Branch 3 taken 2326660 times.
✓ Branch 4 taken 3483648 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 21896 times.
✗ Branch 9 not taken.
580213284 NumEqVector sourceAtPos(const GlobalPosition &globalPos) const
330 {
331 //! As a default, i.e. if the user's problem does not overload any source method
332 //! return 0.0 (no source terms)
333
2/3
✓ Branch 1 taken 190629776 times.
✗ Branch 2 not taken.
✓ Branch 0 taken 606126570 times.
1491740196 return NumEqVector(0.0);
334 }
335
336 /*!
337 * \brief Applies a vector of point sources. The point sources
338 * are possibly solution dependent.
339 *
340 * \param pointSources A vector of PointSource s that contain
341 source values for all phases and space positions.
342 *
343 * For this method, the values method of the point source
344 * has to return the absolute rate values in units
345 * \f$ [ \textnormal{unit of conserved quantity} / s ] \f$.
346 * Positive values mean that the conserved quantity is created, negative ones mean that it vanishes.
347 * E.g. for the mass balance that would be a mass rate in \f$ [ kg / s ] \f$.
348 */
349 void addPointSources(std::vector<PointSource>& pointSources) const {}
350
351 /*!
352 * \brief Evaluate the point sources (added by addPointSources)
353 * for all phases within a given sub-control-volume.
354 *
355 * This is the method for the case where the point source is
356 * solution dependent
357 *
358 * \param source A single point source
359 * \param element The finite element
360 * \param fvGeometry The finite-volume geometry
361 * \param elemVolVars All volume variables for the element
362 * \param scv The sub control volume
363 *
364 * For this method, the values() method of the point sources returns
365 * the absolute conserved quantity rate generated or annihilate in
366 * units \f$ [ \textnormal{unit of conserved quantity} / s ] \f$.
367 * Positive values mean that the conserved quantity is created, negative ones mean that it vanishes.
368 * E.g. for the mass balance that would be a mass rate in \f$ [ kg / s ] \f$.
369 */
370 template<class ElementVolumeVariables>
371 void pointSource(PointSource& source,
372 const Element &element,
373 const FVElementGeometry& fvGeometry,
374 const ElementVolumeVariables& elemVolVars,
375 const SubControlVolume &scv) const
376 {
377 // forward to space dependent interface method
378 11162 asImp_().pointSourceAtPos(source, source.position());
379 }
380
381 /*!
382 * \brief Evaluate the point sources (added by addPointSources)
383 * for all phases within a given sub-control-volume.
384 *
385 * This is the method for the case where the point source is space dependent
386 *
387 * \param pointSource A single point source
388 * \param globalPos The point source position in global coordinates
389 *
390 * For this method, the \a values() method of the point sources returns
391 * the absolute conserved quantity rate generated or annihilate in
392 * units \f$ [ \textnormal{unit of conserved quantity} / s ] \f$. Positive values mean
393 * that the conserved quantity is created, negative ones mean that it vanishes.
394 * E.g. for the mass balance that would be a mass rate in \f$ [ kg / s ] \f$.
395 */
396 void pointSourceAtPos(PointSource& pointSource,
397 const GlobalPosition &globalPos) const {}
398
399 /*!
400 * \brief Add source term derivative to the Jacobian
401 * \note Only needed in case of analytic differentiation and solution dependent sources
402 */
403 template<class MatrixBlock, class VolumeVariables>
404 void addSourceDerivatives(MatrixBlock& block,
405 const Element& element,
406 const FVElementGeometry& fvGeometry,
407 const VolumeVariables& volVars,
408 const SubControlVolume& scv) const {}
409
410 /*!
411 * \brief Adds contribution of point sources for a specific sub control volume
412 * to the values.
413 * Caution: Only overload this method in the implementation if you know
414 * what you are doing.
415 */
416 template<class ElementVolumeVariables>
417 94979251 NumEqVector scvPointSources(const Element &element,
418 const FVElementGeometry& fvGeometry,
419 const ElementVolumeVariables& elemVolVars,
420 const SubControlVolume &scv) const
421 {
422 94979251 NumEqVector source(0);
423 94979251 auto scvIdx = scv.indexInElement();
424
2/3
✗ Branch 0 not taken.
✓ Branch 1 taken 42890733 times.
✓ Branch 2 taken 12720783 times.
94979251 auto key = std::make_pair(gridGeometry_->elementMapper().index(element), scvIdx);
425
3/4
✓ Branch 0 taken 42706046 times.
✓ Branch 1 taken 12905470 times.
✓ Branch 3 taken 7196 times.
✗ Branch 4 not taken.
94979251 if (pointSourceMap_.count(key))
426 {
427 // Add the contributions to the dof source values
428 // We divide by the volume. In the local residual this will be multiplied with the same
429 // factor again. That's because the user specifies absolute values in kg/s.
430
2/3
✓ Branch 1 taken 7196 times.
✓ Branch 2 taken 2172 times.
✗ Branch 3 not taken.
25796682 const auto volume = Extrusion::volume(fvGeometry, scv)*elemVolVars[scv].extrusionFactor();
431
432
6/7
✓ Branch 1 taken 38547425 times.
✓ Branch 2 taken 12896102 times.
✓ Branch 4 taken 9440 times.
✓ Branch 5 taken 72 times.
✓ Branch 6 taken 9368 times.
✓ Branch 7 taken 9368 times.
✗ Branch 3 not taken.
102877418 for (const auto& ps : pointSourceMap_.at(key))
433 {
434 // we make a copy of the local point source here
435 77080736 auto pointSource = ps;
436
437 // Note: two concepts are implemented here. The PointSource property can be set to a
438 // customized point source function achieving variable point sources,
439 // see TimeDependentPointSource for an example. The second imitated the standard
440 // dumux source interface with solDependentPointSource / pointSourceAtPos, methods
441 // that can be overloaded in the actual problem class also achieving variable point sources.
442 // The first one is more convenient for simple function like a time dependent source.
443 // The second one might be more convenient for e.g. a solution dependent point source.
444
445 // we do an update e.g. used for TimeDependentPointSource
446
1/2
✓ Branch 1 taken 9440 times.
✗ Branch 2 not taken.
77080736 pointSource.update(asImp_(), element, fvGeometry, elemVolVars, scv);
447 // call convenience problem interface function
448
1/2
✓ Branch 0 taken 72 times.
✗ Branch 1 not taken.
77080736 asImp_().pointSource(pointSource, element, fvGeometry, elemVolVars, scv);
449 // at last take care about multiplying with the correct volume
450
1/2
✓ Branch 0 taken 72 times.
✗ Branch 1 not taken.
84140306 pointSource /= volume*pointSource.embeddings();
451 // add the point source values to the local residual
452
1/2
✓ Branch 0 taken 9440 times.
✗ Branch 1 not taken.
84140306 source += pointSource.values();
453 }
454 }
455
456 94979251 return source;
457 }
458
459 /*!
460 * \brief Compute the point source map, i.e. which scvs have point source contributions
461 * \note Call this on the problem before assembly if you want to enable point sources set
462 * via the addPointSources member function.
463 */
464 147 void computePointSourceMap()
465 {
466 // clear the given point source maps in case it's not empty
467 147 pointSourceMap_.clear();
468
469 // get and apply point sources if any given in the problem
470 147 std::vector<PointSource> sources;
471
3/4
✓ Branch 1 taken 80 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 49 times.
✓ Branch 4 taken 5 times.
147 asImp_().addPointSources(sources);
472
473 // if there are point sources calculate point source locations and save them in a map
474
2/2
✓ Branch 0 taken 75 times.
✓ Branch 1 taken 5 times.
147 if (!sources.empty())
475 124 PointSourceHelper::computePointSourceMap(*gridGeometry_, sources, pointSourceMap_, paramGroup());
476 147 }
477
478 /*!
479 * \brief Get the point source map. It stores the point sources per scv
480 */
481 const PointSourceMap& pointSourceMap() const
482
9/10
✓ Branch 0 taken 11585796 times.
✓ Branch 1 taken 466259532 times.
✓ Branch 2 taken 14697184 times.
✓ Branch 3 taken 51503778 times.
✓ Branch 4 taken 3993616 times.
✓ Branch 5 taken 82420272 times.
✓ Branch 6 taken 570827 times.
✓ Branch 7 taken 26919584 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 3470 times.
657954059 { return pointSourceMap_; }
483
484 /*!
485 * \brief Applies the initial solution for all degrees of freedom of the grid.
486 * \param sol the initial solution vector
487 */
488 template<class SolutionVector>
489 511 void applyInitialSolution(SolutionVector& sol) const
490 {
491
5/8
✓ Branch 1 taken 398 times.
✓ Branch 2 taken 1 times.
✓ Branch 4 taken 99 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
507 assembleInitialSolution(sol, asImp_());
492 504 }
493
494 /*!
495 * \brief Evaluate the initial value for a entity
496 *
497 * \param entity The dof entity
498 */
499 template<class Entity>
500 1558742 PrimaryVariables initial(const Entity& entity) const
501 {
502
7/10
✓ Branch 0 taken 21077 times.
✓ Branch 1 taken 46407 times.
✓ Branch 2 taken 125047 times.
✓ Branch 3 taken 18575 times.
✓ Branch 4 taken 4148 times.
✓ Branch 5 taken 22874 times.
✓ Branch 9 taken 72 times.
✗ Branch 10 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1727209 return asImp_().initialAtPos(entity.geometry().center());
503 }
504
505 /*!
506 * \brief Evaluate the initial value for a control volume.
507 *
508 * \param globalPos The global position
509 */
510 1 PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const
511 {
512 // Throw an exception (there is no reasonable default value
513 // for initial values)
514
10/20
✓ 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.
4 DUNE_THROW(Dune::InvalidStateException,
515 "The problem does not provide "
516 "an initial() or an initialAtPos() method.");
517 }
518
519 //! The finite volume grid geometry
520 2207876207 const GridGeometry& gridGeometry() const
521
438/907
✓ Branch 1 taken 279731717 times.
✓ Branch 2 taken 13777822 times.
✓ Branch 4 taken 12366122 times.
✓ Branch 5 taken 6076391 times.
✓ Branch 7 taken 4498819 times.
✓ Branch 8 taken 5773926 times.
✓ Branch 10 taken 3618855 times.
✓ Branch 11 taken 1354199 times.
✓ Branch 13 taken 1878399 times.
✓ Branch 14 taken 1003805 times.
✓ Branch 16 taken 442408 times.
✓ Branch 17 taken 4929341 times.
✓ Branch 19 taken 1480865 times.
✓ Branch 20 taken 20342862 times.
✓ Branch 22 taken 716632 times.
✓ Branch 23 taken 494424 times.
✓ Branch 25 taken 30223404 times.
✓ Branch 26 taken 528932 times.
✓ Branch 28 taken 480701 times.
✓ Branch 29 taken 5423144 times.
✓ Branch 31 taken 424066 times.
✓ Branch 32 taken 798215 times.
✓ Branch 34 taken 232007 times.
✓ Branch 35 taken 138323 times.
✓ Branch 37 taken 982333 times.
✓ Branch 38 taken 311446 times.
✓ Branch 40 taken 2687855 times.
✓ Branch 41 taken 1131526 times.
✓ Branch 43 taken 1532339 times.
✓ Branch 44 taken 1037722 times.
✓ Branch 46 taken 286823 times.
✓ Branch 47 taken 772489 times.
✓ Branch 49 taken 162369 times.
✓ Branch 50 taken 875580 times.
✓ Branch 52 taken 3999599 times.
✓ Branch 53 taken 39610566 times.
✓ Branch 55 taken 10564536 times.
✓ Branch 56 taken 42762190 times.
✓ Branch 58 taken 7526714 times.
✓ Branch 59 taken 37628564 times.
✓ Branch 61 taken 9478253 times.
✓ Branch 62 taken 96655979 times.
✓ Branch 64 taken 23547006 times.
✓ Branch 65 taken 38735148 times.
✓ Branch 67 taken 79096987 times.
✓ Branch 68 taken 16261475 times.
✓ Branch 70 taken 90379894 times.
✓ Branch 71 taken 5980920 times.
✓ Branch 73 taken 1 times.
✓ Branch 74 taken 62564 times.
✓ Branch 76 taken 1 times.
✓ Branch 77 taken 1491 times.
✓ Branch 79 taken 136513 times.
✓ Branch 80 taken 3 times.
✓ Branch 82 taken 134401 times.
✓ Branch 83 taken 4 times.
✓ Branch 85 taken 106 times.
✓ Branch 86 taken 63 times.
✓ Branch 88 taken 200 times.
✓ Branch 89 taken 1819 times.
✓ Branch 91 taken 959754 times.
✓ Branch 92 taken 463925 times.
✓ Branch 94 taken 11546066 times.
✓ Branch 95 taken 8506206 times.
✓ Branch 97 taken 19174259 times.
✓ Branch 98 taken 6191308 times.
✓ Branch 100 taken 9090623 times.
✓ Branch 101 taken 7284068 times.
✓ Branch 103 taken 36865672 times.
✓ Branch 104 taken 3214438 times.
✓ Branch 106 taken 57211465 times.
✓ Branch 107 taken 11235517 times.
✓ Branch 109 taken 54905762 times.
✓ Branch 110 taken 4538423 times.
✓ Branch 112 taken 30029607 times.
✓ Branch 113 taken 35887103 times.
✓ Branch 115 taken 7200044 times.
✓ Branch 116 taken 28687094 times.
✓ Branch 118 taken 335197 times.
✓ Branch 119 taken 335194 times.
✓ Branch 121 taken 39 times.
✓ Branch 122 taken 36 times.
✓ Branch 124 taken 3 times.
✓ Branch 125 taken 34 times.
✓ Branch 127 taken 1 times.
✓ Branch 128 taken 34 times.
✓ Branch 130 taken 37 times.
✓ Branch 131 taken 34 times.
✓ Branch 133 taken 1 times.
✓ Branch 134 taken 2 times.
✓ Branch 136 taken 37 times.
✗ Branch 137 not taken.
✓ Branch 139 taken 1 times.
✓ Branch 140 taken 35 times.
✓ Branch 142 taken 1 times.
✗ Branch 143 not taken.
✓ Branch 145 taken 1 times.
✗ Branch 146 not taken.
✓ Branch 148 taken 2 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.
✓ Branch 217 taken 1 times.
✗ Branch 218 not taken.
✓ Branch 220 taken 1 times.
✗ Branch 221 not taken.
✓ Branch 223 taken 1 times.
✗ Branch 224 not taken.
✓ Branch 226 taken 1 times.
✗ Branch 227 not taken.
✓ Branch 229 taken 1 times.
✗ Branch 230 not taken.
✓ Branch 232 taken 1 times.
✗ Branch 233 not taken.
✓ Branch 235 taken 1 times.
✗ Branch 236 not taken.
✓ Branch 238 taken 1 times.
✗ Branch 239 not taken.
✓ Branch 241 taken 1 times.
✗ Branch 242 not taken.
✓ Branch 244 taken 1 times.
✗ Branch 245 not taken.
✓ Branch 247 taken 1 times.
✗ Branch 248 not taken.
✓ Branch 250 taken 1 times.
✗ Branch 251 not taken.
✓ Branch 253 taken 1 times.
✗ Branch 254 not taken.
✓ Branch 256 taken 1 times.
✗ Branch 257 not taken.
✓ Branch 259 taken 1 times.
✗ Branch 260 not taken.
✓ Branch 262 taken 1 times.
✗ Branch 263 not taken.
✓ Branch 265 taken 1 times.
✗ Branch 266 not taken.
✓ Branch 268 taken 1 times.
✗ Branch 269 not taken.
✓ Branch 271 taken 1 times.
✗ Branch 272 not taken.
✓ Branch 274 taken 1 times.
✗ Branch 275 not taken.
✓ Branch 277 taken 1 times.
✗ Branch 278 not taken.
✓ Branch 280 taken 1 times.
✗ Branch 281 not taken.
✓ Branch 283 taken 1 times.
✗ Branch 284 not taken.
✓ Branch 286 taken 1 times.
✗ Branch 287 not taken.
✓ Branch 289 taken 1 times.
✗ Branch 290 not taken.
✓ Branch 292 taken 1 times.
✗ Branch 293 not taken.
✓ Branch 295 taken 1 times.
✗ Branch 296 not taken.
✓ Branch 298 taken 1 times.
✗ Branch 299 not taken.
✓ Branch 301 taken 1 times.
✗ Branch 302 not taken.
✓ Branch 304 taken 1 times.
✗ Branch 305 not taken.
✓ Branch 307 taken 1 times.
✗ Branch 308 not taken.
✓ Branch 310 taken 1 times.
✗ Branch 311 not taken.
✓ Branch 313 taken 1 times.
✗ Branch 314 not taken.
✓ Branch 316 taken 1 times.
✗ Branch 317 not taken.
✓ Branch 319 taken 1 times.
✗ Branch 320 not taken.
✓ Branch 322 taken 1 times.
✗ Branch 323 not taken.
✓ Branch 325 taken 1 times.
✗ Branch 326 not taken.
✓ Branch 328 taken 1 times.
✗ Branch 329 not taken.
✓ Branch 331 taken 1 times.
✗ Branch 332 not taken.
✓ Branch 334 taken 1 times.
✗ Branch 335 not taken.
✓ Branch 337 taken 1 times.
✗ Branch 338 not taken.
✓ Branch 340 taken 1 times.
✗ Branch 341 not taken.
✓ Branch 343 taken 1 times.
✗ Branch 344 not taken.
✓ Branch 346 taken 1 times.
✗ Branch 347 not taken.
✓ Branch 349 taken 1 times.
✗ Branch 350 not taken.
✓ Branch 352 taken 1 times.
✗ Branch 353 not taken.
✓ Branch 355 taken 1 times.
✗ Branch 356 not taken.
✓ Branch 358 taken 1 times.
✗ Branch 359 not taken.
✓ Branch 361 taken 1 times.
✗ Branch 362 not taken.
✓ Branch 364 taken 1 times.
✗ Branch 365 not taken.
✓ Branch 367 taken 1 times.
✗ Branch 368 not taken.
✓ Branch 370 taken 1 times.
✗ Branch 371 not taken.
✓ Branch 373 taken 1 times.
✗ Branch 374 not taken.
✓ Branch 376 taken 1 times.
✗ Branch 377 not taken.
✓ Branch 379 taken 1 times.
✗ Branch 380 not taken.
✓ Branch 382 taken 1 times.
✗ Branch 383 not taken.
✓ Branch 385 taken 1 times.
✗ Branch 386 not taken.
✓ Branch 388 taken 1 times.
✗ Branch 389 not taken.
✓ Branch 391 taken 1 times.
✗ Branch 392 not taken.
✓ Branch 394 taken 1 times.
✗ Branch 395 not taken.
✓ Branch 397 taken 1 times.
✗ Branch 398 not taken.
✓ Branch 400 taken 1 times.
✗ Branch 401 not taken.
✓ Branch 403 taken 1 times.
✗ Branch 404 not taken.
✓ Branch 406 taken 1 times.
✗ Branch 407 not taken.
✓ Branch 409 taken 1 times.
✗ Branch 410 not taken.
✓ Branch 412 taken 1 times.
✗ Branch 413 not taken.
✓ Branch 415 taken 1 times.
✗ Branch 416 not taken.
✓ Branch 418 taken 1 times.
✗ Branch 419 not taken.
✓ Branch 421 taken 1 times.
✗ Branch 422 not taken.
✓ Branch 424 taken 1 times.
✗ Branch 425 not taken.
✓ Branch 427 taken 1 times.
✗ Branch 428 not taken.
✓ Branch 430 taken 1 times.
✗ Branch 431 not taken.
✓ Branch 433 taken 1 times.
✗ Branch 434 not taken.
✓ Branch 436 taken 1 times.
✗ Branch 437 not taken.
✓ Branch 439 taken 1 times.
✗ Branch 440 not taken.
✓ Branch 442 taken 1 times.
✗ Branch 443 not taken.
✓ Branch 445 taken 1 times.
✗ Branch 446 not taken.
✓ Branch 448 taken 1 times.
✗ Branch 449 not taken.
✓ Branch 451 taken 1 times.
✗ Branch 452 not taken.
✓ Branch 454 taken 1 times.
✗ Branch 455 not taken.
✓ Branch 457 taken 1 times.
✗ Branch 458 not taken.
✓ Branch 460 taken 1 times.
✗ Branch 461 not taken.
✓ Branch 463 taken 1 times.
✗ Branch 464 not taken.
✓ Branch 466 taken 1 times.
✗ Branch 467 not taken.
✓ Branch 469 taken 1 times.
✗ Branch 470 not taken.
✓ Branch 472 taken 1 times.
✗ Branch 473 not taken.
✓ Branch 475 taken 1 times.
✗ Branch 476 not taken.
✓ Branch 478 taken 1 times.
✗ Branch 479 not taken.
✓ Branch 481 taken 1 times.
✗ Branch 482 not taken.
✓ Branch 484 taken 1 times.
✗ Branch 485 not taken.
✓ Branch 487 taken 1 times.
✗ Branch 488 not taken.
✓ Branch 490 taken 1 times.
✗ Branch 491 not taken.
✓ Branch 493 taken 1 times.
✗ Branch 494 not taken.
✓ Branch 496 taken 1 times.
✗ Branch 497 not taken.
✓ Branch 499 taken 1 times.
✗ Branch 500 not taken.
✓ Branch 502 taken 1 times.
✗ Branch 503 not taken.
✓ Branch 505 taken 1 times.
✗ Branch 506 not taken.
✓ Branch 508 taken 1 times.
✗ Branch 509 not taken.
✓ Branch 511 taken 1 times.
✗ Branch 512 not taken.
✓ Branch 514 taken 1 times.
✗ Branch 515 not taken.
✓ Branch 517 taken 1 times.
✗ Branch 518 not taken.
✓ Branch 520 taken 1 times.
✗ Branch 521 not taken.
✓ Branch 523 taken 1 times.
✗ Branch 524 not taken.
✓ Branch 526 taken 1 times.
✗ Branch 527 not taken.
✓ Branch 529 taken 1 times.
✗ Branch 530 not taken.
✓ Branch 532 taken 1 times.
✗ Branch 533 not taken.
✓ Branch 535 taken 1 times.
✗ Branch 536 not taken.
✓ Branch 538 taken 1 times.
✗ Branch 539 not taken.
✗ Branch 541 not taken.
✗ Branch 542 not taken.
✗ Branch 544 not taken.
✗ Branch 545 not taken.
✗ Branch 547 not taken.
✗ Branch 548 not taken.
✗ Branch 550 not taken.
✗ Branch 551 not taken.
✗ Branch 553 not taken.
✗ Branch 554 not taken.
✗ Branch 556 not taken.
✗ Branch 557 not taken.
✗ Branch 559 not taken.
✗ Branch 560 not taken.
✗ Branch 562 not taken.
✗ Branch 563 not taken.
✗ Branch 565 not taken.
✗ Branch 566 not taken.
✗ Branch 568 not taken.
✗ Branch 569 not taken.
✗ Branch 571 not taken.
✗ Branch 572 not taken.
✗ Branch 574 not taken.
✗ Branch 575 not taken.
✗ Branch 577 not taken.
✗ Branch 578 not taken.
✗ Branch 580 not taken.
✗ Branch 581 not taken.
✗ Branch 583 not taken.
✗ Branch 584 not taken.
✗ Branch 586 not taken.
✗ Branch 587 not taken.
✗ Branch 589 not taken.
✗ Branch 590 not taken.
✗ Branch 592 not taken.
✗ Branch 593 not taken.
✗ Branch 595 not taken.
✗ Branch 596 not taken.
✗ Branch 598 not taken.
✗ Branch 599 not taken.
✗ Branch 601 not taken.
✗ Branch 602 not taken.
✗ Branch 604 not taken.
✗ Branch 605 not taken.
✗ Branch 607 not taken.
✗ Branch 608 not taken.
✗ Branch 610 not taken.
✗ Branch 611 not taken.
✓ Branch 681 taken 1 times.
✗ Branch 682 not taken.
✓ Branch 697 taken 1 times.
✗ Branch 698 not taken.
✓ Branch 701 taken 1 times.
✗ Branch 702 not taken.
✓ Branch 711 taken 1 times.
✗ Branch 712 not taken.
✓ Branch 714 taken 1 times.
✗ Branch 715 not taken.
✓ Branch 730 taken 1 times.
✗ Branch 731 not taken.
✓ Branch 734 taken 1 times.
✗ Branch 735 not taken.
✓ Branch 744 taken 1 times.
✗ Branch 745 not taken.
✓ Branch 747 taken 1 times.
✗ Branch 748 not taken.
✓ Branch 763 taken 1 times.
✗ Branch 764 not taken.
✓ Branch 767 taken 1 times.
✗ Branch 768 not taken.
✓ Branch 777 taken 1 times.
✗ Branch 778 not taken.
✓ Branch 780 taken 1 times.
✗ Branch 781 not taken.
✓ Branch 796 taken 1 times.
✗ Branch 797 not taken.
✓ Branch 800 taken 1 times.
✗ Branch 801 not taken.
✓ Branch 810 taken 1 times.
✗ Branch 811 not taken.
✓ Branch 813 taken 1 times.
✗ Branch 814 not taken.
✓ Branch 829 taken 1 times.
✗ Branch 830 not taken.
✓ Branch 833 taken 1 times.
✗ Branch 834 not taken.
✓ Branch 843 taken 1 times.
✗ Branch 844 not taken.
✓ Branch 846 taken 1 times.
✗ Branch 847 not taken.
✓ Branch 862 taken 1 times.
✗ Branch 863 not taken.
✓ Branch 866 taken 1 times.
✗ Branch 867 not taken.
✓ Branch 876 taken 1 times.
✗ Branch 877 not taken.
✓ Branch 879 taken 1 times.
✗ Branch 880 not taken.
✓ Branch 895 taken 1 times.
✗ Branch 896 not taken.
✓ Branch 899 taken 1 times.
✗ Branch 900 not taken.
✓ Branch 909 taken 1 times.
✗ Branch 910 not taken.
✓ Branch 912 taken 1 times.
✗ Branch 913 not taken.
✓ Branch 928 taken 1 times.
✗ Branch 929 not taken.
✓ Branch 932 taken 1 times.
✗ Branch 933 not taken.
✓ Branch 942 taken 1 times.
✗ Branch 943 not taken.
✓ Branch 945 taken 1 times.
✗ Branch 946 not taken.
✓ Branch 961 taken 1 times.
✗ Branch 962 not taken.
✓ Branch 965 taken 1 times.
✗ Branch 966 not taken.
✓ Branch 975 taken 1 times.
✗ Branch 976 not taken.
✗ Branch 978 not taken.
✗ Branch 979 not taken.
✗ Branch 981 not taken.
✗ Branch 982 not taken.
✓ Branch 984 taken 1 times.
✗ Branch 985 not taken.
✓ Branch 1000 taken 1 times.
✗ Branch 1001 not taken.
✓ Branch 1004 taken 1 times.
✗ Branch 1005 not taken.
✓ Branch 1014 taken 1 times.
✗ Branch 1015 not taken.
✗ Branch 1017 not taken.
✗ Branch 1018 not taken.
✗ Branch 1020 not taken.
✗ Branch 1021 not taken.
✓ Branch 1023 taken 1 times.
✗ Branch 1024 not taken.
✓ Branch 1039 taken 1 times.
✗ Branch 1040 not taken.
✓ Branch 1043 taken 1 times.
✗ Branch 1044 not taken.
✓ Branch 1053 taken 1 times.
✗ Branch 1054 not taken.
✗ Branch 1056 not taken.
✗ Branch 1057 not taken.
✗ Branch 1059 not taken.
✗ Branch 1060 not taken.
✓ Branch 1062 taken 1 times.
✗ Branch 1063 not taken.
✓ Branch 1078 taken 1 times.
✗ Branch 1079 not taken.
✓ Branch 1082 taken 1 times.
✗ Branch 1083 not taken.
✓ Branch 1092 taken 1 times.
✗ Branch 1093 not taken.
✗ Branch 1095 not taken.
✗ Branch 1096 not taken.
✗ Branch 1098 not taken.
✗ Branch 1099 not taken.
✓ Branch 1101 taken 1 times.
✗ Branch 1102 not taken.
✓ Branch 1117 taken 1 times.
✗ Branch 1118 not taken.
✓ Branch 1121 taken 1 times.
✗ Branch 1122 not taken.
✓ Branch 1131 taken 1 times.
✗ Branch 1132 not taken.
✓ Branch 1134 taken 1 times.
✗ Branch 1135 not taken.
✓ Branch 1150 taken 1 times.
✗ Branch 1151 not taken.
✓ Branch 1154 taken 1 times.
✗ Branch 1155 not taken.
✓ Branch 1164 taken 1 times.
✗ Branch 1165 not taken.
✓ Branch 1167 taken 1 times.
✗ Branch 1168 not taken.
✓ Branch 1183 taken 1 times.
✗ Branch 1184 not taken.
✓ Branch 1187 taken 1 times.
✗ Branch 1188 not taken.
✓ Branch 1197 taken 1 times.
✗ Branch 1198 not taken.
✓ Branch 1200 taken 1 times.
✗ Branch 1201 not taken.
✓ Branch 1216 taken 1 times.
✗ Branch 1217 not taken.
✓ Branch 1220 taken 1 times.
✗ Branch 1221 not taken.
✓ Branch 1230 taken 1 times.
✗ Branch 1231 not taken.
✓ Branch 1234 taken 1 times.
✗ Branch 1235 not taken.
✓ Branch 1250 taken 1 times.
✗ Branch 1251 not taken.
✓ Branch 1254 taken 1 times.
✗ Branch 1255 not taken.
✓ Branch 1264 taken 1 times.
✗ Branch 1265 not taken.
✗ Branch 1267 not taken.
✗ Branch 1268 not taken.
✗ Branch 1270 not taken.
✗ Branch 1271 not taken.
✓ Branch 1274 taken 1 times.
✗ Branch 1275 not taken.
✓ Branch 1290 taken 1 times.
✗ Branch 1291 not taken.
✓ Branch 1294 taken 1 times.
✗ Branch 1295 not taken.
✓ Branch 1304 taken 1 times.
✗ Branch 1305 not taken.
✗ Branch 1307 not taken.
✗ Branch 1308 not taken.
✗ Branch 1310 not taken.
✗ Branch 1311 not taken.
✓ Branch 1314 taken 1 times.
✗ Branch 1315 not taken.
✓ Branch 1330 taken 1 times.
✗ Branch 1331 not taken.
✓ Branch 1334 taken 1 times.
✗ Branch 1335 not taken.
✓ Branch 1344 taken 1 times.
✗ Branch 1345 not taken.
✗ Branch 1347 not taken.
✗ Branch 1348 not taken.
✗ Branch 1350 not taken.
✗ Branch 1351 not taken.
✓ Branch 1354 taken 1 times.
✗ Branch 1355 not taken.
✓ Branch 1370 taken 1 times.
✗ Branch 1371 not taken.
✓ Branch 1374 taken 1 times.
✗ Branch 1375 not taken.
✓ Branch 1384 taken 1 times.
✗ Branch 1385 not taken.
✗ Branch 1387 not taken.
✗ Branch 1388 not taken.
✗ Branch 1390 not taken.
✗ Branch 1391 not taken.
✗ Branch 1402 not taken.
✗ Branch 1403 not taken.
✗ Branch 1405 not taken.
✗ Branch 1406 not taken.
✗ Branch 1408 not taken.
✗ Branch 1409 not taken.
✗ Branch 1411 not taken.
✗ Branch 1412 not taken.
✗ Branch 1414 not taken.
✗ Branch 1415 not taken.
✗ Branch 1417 not taken.
✗ Branch 1418 not taken.
✗ Branch 1420 not taken.
✗ Branch 1421 not taken.
✗ Branch 1425 not taken.
✗ Branch 1426 not taken.
✗ Branch 1429 not taken.
✗ Branch 1430 not taken.
✗ Branch 1433 not taken.
✗ Branch 1434 not taken.
✗ Branch 1438 not taken.
✗ Branch 1439 not taken.
✗ Branch 1441 not taken.
✗ Branch 1442 not taken.
✗ Branch 1444 not taken.
✗ Branch 1445 not taken.
✗ Branch 1447 not taken.
✗ Branch 1448 not taken.
✗ Branch 1450 not taken.
✗ Branch 1451 not taken.
✗ Branch 1453 not taken.
✗ Branch 1454 not taken.
✗ Branch 1456 not taken.
✗ Branch 1457 not taken.
✗ Branch 1461 not taken.
✗ Branch 1462 not taken.
✗ Branch 1465 not taken.
✗ Branch 1466 not taken.
✗ Branch 1469 not taken.
✗ Branch 1470 not taken.
✗ Branch 1474 not taken.
✗ Branch 1475 not taken.
✗ Branch 1477 not taken.
✗ Branch 1478 not taken.
✗ Branch 1480 not taken.
✗ Branch 1481 not taken.
✗ Branch 1483 not taken.
✗ Branch 1484 not taken.
✗ Branch 1486 not taken.
✗ Branch 1487 not taken.
✗ Branch 1489 not taken.
✗ Branch 1490 not taken.
✗ Branch 1492 not taken.
✗ Branch 1493 not taken.
✗ Branch 1497 not taken.
✗ Branch 1498 not taken.
✗ Branch 1501 not taken.
✗ Branch 1502 not taken.
✗ Branch 1505 not taken.
✗ Branch 1506 not taken.
✗ Branch 1510 not taken.
✗ Branch 1511 not taken.
✗ Branch 1513 not taken.
✗ Branch 1514 not taken.
✗ Branch 1516 not taken.
✗ Branch 1517 not taken.
✗ Branch 1519 not taken.
✗ Branch 1520 not taken.
✗ Branch 1522 not taken.
✗ Branch 1523 not taken.
✗ Branch 1525 not taken.
✗ Branch 1526 not taken.
✗ Branch 1528 not taken.
✗ Branch 1529 not taken.
✗ Branch 1533 not taken.
✗ Branch 1534 not taken.
✗ Branch 1537 not taken.
✗ Branch 1538 not taken.
✗ Branch 1541 not taken.
✗ Branch 1542 not taken.
✓ Branch 1545 taken 1 times.
✗ Branch 1546 not taken.
✓ Branch 1548 taken 1 times.
✗ Branch 1549 not taken.
✓ Branch 1558 taken 1 times.
✗ Branch 1559 not taken.
✓ Branch 1561 taken 1 times.
✗ Branch 1562 not taken.
✓ Branch 1571 taken 1 times.
✗ Branch 1572 not taken.
✓ Branch 1574 taken 1 times.
✗ Branch 1575 not taken.
✓ Branch 1584 taken 1 times.
✗ Branch 1585 not taken.
✓ Branch 1587 taken 1 times.
✗ Branch 1588 not taken.
✓ Branch 1597 taken 1 times.
✗ Branch 1598 not taken.
✓ Branch 1604 taken 1 times.
✗ Branch 1605 not taken.
✓ Branch 1611 taken 1 times.
✗ Branch 1612 not taken.
✓ Branch 1618 taken 1 times.
✗ Branch 1619 not taken.
✓ Branch 1625 taken 1 times.
✗ Branch 1626 not taken.
✓ Branch 1628 taken 1 times.
✗ Branch 1629 not taken.
✓ Branch 1633 taken 1 times.
✗ Branch 1634 not taken.
✓ Branch 1637 taken 1 times.
✗ Branch 1638 not taken.
✓ Branch 1641 taken 1 times.
✗ Branch 1642 not taken.
✓ Branch 1650 taken 1 times.
✗ Branch 1651 not taken.
✓ Branch 1653 taken 1 times.
✗ Branch 1654 not taken.
✓ Branch 1658 taken 1 times.
✗ Branch 1659 not taken.
✓ Branch 1662 taken 1 times.
✗ Branch 1663 not taken.
✓ Branch 1666 taken 1 times.
✗ Branch 1667 not taken.
✓ Branch 1675 taken 1 times.
✗ Branch 1676 not taken.
✓ Branch 1678 taken 1 times.
✗ Branch 1679 not taken.
✓ Branch 1683 taken 1 times.
✗ Branch 1684 not taken.
✓ Branch 1687 taken 1 times.
✗ Branch 1688 not taken.
✓ Branch 1691 taken 1 times.
✗ Branch 1692 not taken.
✓ Branch 1700 taken 1 times.
✗ Branch 1701 not taken.
✓ Branch 1703 taken 1 times.
✗ Branch 1704 not taken.
✓ Branch 1708 taken 1 times.
✗ Branch 1709 not taken.
✓ Branch 1712 taken 1 times.
✗ Branch 1713 not taken.
✓ Branch 1716 taken 1 times.
✗ Branch 1717 not taken.
✓ Branch 1725 taken 1 times.
✗ Branch 1726 not taken.
✓ Branch 1728 taken 1 times.
✗ Branch 1729 not taken.
✓ Branch 1736 taken 1 times.
✗ Branch 1737 not taken.
✓ Branch 1739 taken 1 times.
✗ Branch 1740 not taken.
✓ Branch 1747 taken 1 times.
✗ Branch 1748 not taken.
✓ Branch 1750 taken 1 times.
✗ Branch 1751 not taken.
✓ Branch 1758 taken 1 times.
✗ Branch 1759 not taken.
✓ Branch 1761 taken 1 times.
✗ Branch 1762 not taken.
✗ Branch 1776 not taken.
✓ Branch 1777 taken 1 times.
✓ Branch 1779 taken 1 times.
✗ Branch 1780 not taken.
✗ Branch 1781 not taken.
✓ Branch 1782 taken 1 times.
✓ Branch 1784 taken 1 times.
✗ Branch 1785 not taken.
✗ Branch 1786 not taken.
✓ Branch 1787 taken 1 times.
✓ Branch 1789 taken 1 times.
✗ Branch 1790 not taken.
✗ Branch 1791 not taken.
✓ Branch 1792 taken 1 times.
✓ Branch 1794 taken 1 times.
✗ Branch 1795 not taken.
✗ Branch 1796 not taken.
✓ Branch 1797 taken 1 times.
✓ Branch 1799 taken 1 times.
✗ Branch 1800 not taken.
✗ Branch 1801 not taken.
✓ Branch 1802 taken 1 times.
✓ Branch 1804 taken 1 times.
✗ Branch 1805 not taken.
✗ Branch 1806 not taken.
✓ Branch 1807 taken 1 times.
✓ Branch 1809 taken 1 times.
✗ Branch 1810 not taken.
✗ Branch 1811 not taken.
✓ Branch 1812 taken 1 times.
✓ Branch 1814 taken 1 times.
✗ Branch 1815 not taken.
✗ Branch 1816 not taken.
✓ Branch 1817 taken 1 times.
✓ Branch 1819 taken 1 times.
✗ Branch 1820 not taken.
✗ Branch 1821 not taken.
✓ Branch 1822 taken 1 times.
✓ Branch 1824 taken 1 times.
✗ Branch 1825 not taken.
✗ Branch 1826 not taken.
✓ Branch 1827 taken 1 times.
✓ Branch 1829 taken 1 times.
✗ Branch 1830 not taken.
✗ Branch 1831 not taken.
✓ Branch 1832 taken 1 times.
✓ Branch 1834 taken 1 times.
✗ Branch 1835 not taken.
✗ Branch 1836 not taken.
✓ Branch 1837 taken 1 times.
✓ Branch 1839 taken 1 times.
✗ Branch 1840 not taken.
✗ Branch 1841 not taken.
✓ Branch 1842 taken 1 times.
✓ Branch 1844 taken 1 times.
✗ Branch 1845 not taken.
✗ Branch 1846 not taken.
✓ Branch 1847 taken 1 times.
✓ Branch 1849 taken 1 times.
✗ Branch 1850 not taken.
✗ Branch 1851 not taken.
✓ Branch 1852 taken 1 times.
✓ Branch 1854 taken 1 times.
✗ Branch 1855 not taken.
✗ Branch 1856 not taken.
✓ Branch 1857 taken 1 times.
✓ Branch 1859 taken 1 times.
✗ Branch 1860 not taken.
✗ Branch 1861 not taken.
✓ Branch 1862 taken 1 times.
✓ Branch 1864 taken 1 times.
✗ Branch 1865 not taken.
✗ Branch 1866 not taken.
✓ Branch 1867 taken 1 times.
✓ Branch 1869 taken 1 times.
✗ Branch 1870 not taken.
✗ Branch 1871 not taken.
✓ Branch 1872 taken 1 times.
✓ Branch 1874 taken 1 times.
✗ Branch 1875 not taken.
✗ Branch 1876 not taken.
✓ Branch 1877 taken 1 times.
✓ Branch 1879 taken 1 times.
✗ Branch 1880 not taken.
✗ Branch 1881 not taken.
✓ Branch 1882 taken 1 times.
✓ Branch 1884 taken 1 times.
✗ Branch 1885 not taken.
✗ Branch 1886 not taken.
✓ Branch 1887 taken 1 times.
✓ Branch 1889 taken 1 times.
✗ Branch 1890 not taken.
✗ Branch 1891 not taken.
✓ Branch 1892 taken 1 times.
✓ Branch 1894 taken 1 times.
✗ Branch 1895 not taken.
✓ Branch 3 taken 267795312 times.
✓ Branch 9 taken 3672600 times.
✓ Branch 27 taken 618178 times.
✓ Branch 30 taken 364751 times.
✓ Branch 33 taken 514837 times.
✓ Branch 39 taken 852532 times.
✓ Branch 42 taken 949375 times.
✓ Branch 45 taken 1288769 times.
✓ Branch 48 taken 497747 times.
✓ Branch 51 taken 935314 times.
✓ Branch 69 taken 4695181 times.
✓ Branch 6 taken 8590109 times.
✓ Branch 24 taken 2592134 times.
✓ Branch 0 taken 10617627 times.
✓ Branch 12 taken 1628043 times.
✓ Branch 15 taken 1415778 times.
✓ Branch 18 taken 557227 times.
✓ Branch 36 taken 422597 times.
✓ Branch 21 taken 341571 times.
✓ Branch 54 taken 22203795 times.
✓ Branch 57 taken 283308251 times.
✓ Branch 60 taken 36081495 times.
✓ Branch 63 taken 127965812 times.
✓ Branch 66 taken 297937567 times.
✓ Branch 72 taken 73408576 times.
✓ Branch 75 taken 4858 times.
✓ Branch 78 taken 562 times.
✓ Branch 84 taken 123 times.
✓ Branch 102 taken 53182682 times.
✓ Branch 105 taken 50754223 times.
✓ Branch 108 taken 26337703 times.
✓ Branch 111 taken 8024823 times.
✓ Branch 114 taken 2234182 times.
✓ Branch 87 taken 134811 times.
✓ Branch 99 taken 32808313 times.
✓ Branch 90 taken 10166540 times.
✓ Branch 93 taken 9702743 times.
✓ Branch 96 taken 1880845 times.
✓ Branch 126 taken 36 times.
✗ Branch 135 not taken.
✓ Branch 138 taken 1 times.
✗ Branch 141 not taken.
✓ Branch 117 taken 11059278 times.
✓ Branch 120 taken 10724122 times.
✗ Branch 123 not taken.
✗ Branch 129 not taken.
✗ Branch 132 not taken.
✗ Branch 144 not taken.
✗ Branch 147 not taken.
✓ Branch 150 taken 1 times.
✓ Branch 81 taken 2 times.
2464277597 { return *gridGeometry_; }
522
523 //! The parameter group in which to retrieve runtime parameters
524
23/48
✓ Branch 1 taken 44 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 34 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 34 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 18 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 9 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 9 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 8 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 7 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 7 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 5 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 2 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2 times.
✗ 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 1 times.
✗ Branch 56 not taken.
✗ Branch 58 not taken.
✗ 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.
130310055 const std::string& paramGroup() const
525
192/309
✓ Branch 1 taken 7269 times.
✓ Branch 2 taken 2 times.
✓ Branch 4 taken 58513 times.
✓ Branch 5 taken 3 times.
✓ Branch 7 taken 6921 times.
✓ Branch 8 taken 11 times.
✓ Branch 10 taken 3747 times.
✓ Branch 11 taken 14 times.
✓ Branch 13 taken 4583553 times.
✓ Branch 14 taken 53 times.
✓ Branch 16 taken 1438381 times.
✓ Branch 17 taken 74161 times.
✓ Branch 19 taken 7607245 times.
✓ Branch 20 taken 503813 times.
✓ Branch 22 taken 20715543 times.
✓ Branch 23 taken 1144408 times.
✓ Branch 25 taken 19431494 times.
✓ Branch 26 taken 6014002 times.
✓ Branch 28 taken 20027632 times.
✓ Branch 29 taken 5262839 times.
✓ Branch 31 taken 13088823 times.
✓ Branch 32 taken 1733500 times.
✓ Branch 34 taken 2137906 times.
✓ Branch 35 taken 1287543 times.
✓ Branch 37 taken 185703 times.
✓ Branch 38 taken 3181 times.
✓ Branch 40 taken 883335 times.
✓ Branch 41 taken 12113 times.
✓ Branch 43 taken 2755122 times.
✓ Branch 44 taken 1478466 times.
✓ Branch 46 taken 44 times.
✓ Branch 47 taken 231907 times.
✓ Branch 49 taken 842106 times.
✓ Branch 50 taken 46 times.
✓ Branch 52 taken 34 times.
✓ Branch 53 taken 130494 times.
✓ Branch 55 taken 31 times.
✓ Branch 56 taken 7 times.
✓ Branch 58 taken 27 times.
✓ Branch 59 taken 3 times.
✓ Branch 61 taken 24 times.
✓ Branch 62 taken 2 times.
✓ Branch 64 taken 25 times.
✓ Branch 65 taken 2 times.
✓ Branch 67 taken 25 times.
✓ Branch 68 taken 1 times.
✓ Branch 70 taken 19 times.
✓ Branch 71 taken 4 times.
✓ Branch 73 taken 19 times.
✓ Branch 74 taken 4 times.
✓ Branch 76 taken 5 times.
✓ Branch 77 taken 6 times.
✓ Branch 79 taken 3 times.
✓ Branch 80 taken 6 times.
✓ Branch 82 taken 3 times.
✓ Branch 83 taken 6 times.
✓ Branch 85 taken 1 times.
✓ Branch 86 taken 6 times.
✓ Branch 88 taken 1 times.
✓ Branch 89 taken 4 times.
✓ Branch 91 taken 1 times.
✓ Branch 92 taken 2 times.
✓ Branch 94 taken 1 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 1 times.
✓ Branch 98 taken 1 times.
✓ Branch 100 taken 1 times.
✓ Branch 101 taken 1 times.
✓ Branch 103 taken 1 times.
✓ Branch 104 taken 1 times.
✓ Branch 106 taken 1 times.
✓ Branch 107 taken 1 times.
✓ Branch 109 taken 1 times.
✓ Branch 110 taken 1 times.
✓ Branch 112 taken 1 times.
✓ Branch 113 taken 1 times.
✓ Branch 115 taken 1 times.
✓ Branch 116 taken 1 times.
✓ Branch 118 taken 1 times.
✓ Branch 119 taken 1 times.
✓ Branch 121 taken 1 times.
✓ Branch 122 taken 57 times.
✓ 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 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.
✓ Branch 217 taken 1 times.
✗ Branch 218 not taken.
✓ Branch 220 taken 1 times.
✗ Branch 221 not taken.
✓ Branch 223 taken 1 times.
✗ Branch 224 not taken.
✓ Branch 226 taken 1 times.
✗ Branch 227 not taken.
✓ Branch 229 taken 1 times.
✗ Branch 230 not taken.
✓ Branch 232 taken 1 times.
✗ Branch 233 not taken.
✓ Branch 235 taken 1 times.
✗ Branch 236 not taken.
✓ Branch 238 taken 1 times.
✗ Branch 239 not taken.
✓ Branch 241 taken 1 times.
✗ Branch 242 not taken.
✓ Branch 244 taken 1 times.
✗ Branch 245 not taken.
✓ Branch 247 taken 1 times.
✗ Branch 248 not taken.
✓ Branch 250 taken 1 times.
✗ Branch 251 not taken.
✓ Branch 253 taken 1 times.
✗ Branch 254 not taken.
✓ Branch 256 taken 1 times.
✗ Branch 257 not taken.
✓ Branch 259 taken 1 times.
✗ Branch 260 not taken.
✓ Branch 262 taken 1 times.
✗ Branch 263 not taken.
✓ Branch 265 taken 1 times.
✗ Branch 266 not taken.
✓ Branch 268 taken 1 times.
✗ Branch 269 not taken.
✓ Branch 271 taken 1 times.
✗ Branch 272 not taken.
✓ Branch 274 taken 1 times.
✗ Branch 275 not taken.
✓ Branch 277 taken 1 times.
✗ Branch 278 not taken.
✓ Branch 280 taken 1 times.
✗ Branch 281 not taken.
✓ Branch 283 taken 1 times.
✗ Branch 284 not taken.
✓ Branch 286 taken 1 times.
✗ Branch 287 not taken.
✓ Branch 289 taken 1 times.
✗ Branch 290 not taken.
✓ Branch 292 taken 1 times.
✗ Branch 293 not taken.
✓ Branch 295 taken 1 times.
✗ Branch 296 not taken.
✓ Branch 298 taken 1 times.
✗ Branch 299 not taken.
✓ Branch 301 taken 1 times.
✗ Branch 302 not taken.
✓ Branch 304 taken 1 times.
✗ Branch 305 not taken.
✓ Branch 307 taken 1 times.
✗ Branch 308 not taken.
✓ Branch 310 taken 1 times.
✗ Branch 311 not taken.
✓ Branch 313 taken 1 times.
✗ Branch 314 not taken.
✓ Branch 316 taken 1 times.
✗ Branch 317 not taken.
✓ Branch 319 taken 1 times.
✗ Branch 320 not taken.
✓ Branch 322 taken 1 times.
✗ Branch 323 not taken.
✓ Branch 325 taken 1 times.
✗ Branch 326 not taken.
✓ Branch 328 taken 1 times.
✗ Branch 329 not taken.
✓ Branch 331 taken 1 times.
✗ Branch 332 not taken.
✓ Branch 334 taken 1 times.
✗ Branch 335 not taken.
✓ Branch 337 taken 1 times.
✗ Branch 338 not taken.
✓ Branch 340 taken 1 times.
✗ Branch 341 not taken.
✓ Branch 343 taken 1 times.
✗ Branch 344 not taken.
✓ Branch 346 taken 1 times.
✗ Branch 347 not taken.
✓ Branch 349 taken 1 times.
✗ Branch 350 not taken.
✓ Branch 352 taken 1 times.
✗ Branch 353 not taken.
✓ Branch 355 taken 1 times.
✗ Branch 356 not taken.
✓ Branch 358 taken 1 times.
✗ Branch 359 not taken.
✓ Branch 361 taken 1 times.
✗ Branch 362 not taken.
✓ Branch 364 taken 1 times.
✗ Branch 365 not taken.
✓ Branch 367 taken 1 times.
✗ Branch 368 not taken.
✓ Branch 370 taken 1 times.
✗ Branch 371 not taken.
✓ Branch 373 taken 1 times.
✗ Branch 374 not taken.
✓ Branch 376 taken 1 times.
✗ Branch 377 not taken.
✓ Branch 379 taken 1 times.
✗ Branch 380 not taken.
✓ Branch 382 taken 1 times.
✗ Branch 383 not taken.
✓ Branch 385 taken 1 times.
✗ Branch 386 not taken.
✓ Branch 388 taken 1 times.
✗ Branch 389 not taken.
✓ Branch 391 taken 1 times.
✗ Branch 392 not taken.
✗ Branch 394 not taken.
✗ Branch 395 not taken.
✓ Branch 397 taken 1 times.
✗ Branch 398 not taken.
✗ Branch 400 not taken.
✗ Branch 401 not taken.
✓ Branch 403 taken 1 times.
✗ Branch 404 not taken.
✗ Branch 406 not taken.
✗ Branch 407 not taken.
✓ Branch 409 taken 1 times.
✗ Branch 410 not taken.
✗ Branch 412 not taken.
✗ Branch 413 not taken.
✓ Branch 415 taken 1 times.
✗ Branch 416 not taken.
✓ Branch 418 taken 1 times.
✗ Branch 419 not taken.
✓ Branch 421 taken 1 times.
✗ Branch 422 not taken.
✓ Branch 424 taken 1 times.
✗ Branch 425 not taken.
✓ Branch 12 taken 57695 times.
✓ Branch 15 taken 7610698 times.
✓ Branch 18 taken 525882 times.
✓ Branch 21 taken 4756081 times.
✓ Branch 24 taken 2546696 times.
✓ Branch 27 taken 2022756 times.
✓ Branch 30 taken 557929 times.
✓ Branch 33 taken 10507 times.
✓ Branch 36 taken 1478659 times.
✓ Branch 39 taken 656765 times.
✓ Branch 42 taken 2251658 times.
✓ Branch 45 taken 10179581 times.
✓ Branch 48 taken 8 times.
✓ Branch 51 taken 646 times.
✓ Branch 54 taken 9 times.
✓ Branch 9 taken 5290 times.
✗ Branch 72 not taken.
✗ Branch 75 not taken.
✗ Branch 78 not taken.
✗ Branch 81 not taken.
✗ Branch 84 not taken.
✗ Branch 87 not taken.
✗ Branch 90 not taken.
✗ Branch 93 not taken.
✓ Branch 57 taken 11 times.
✓ Branch 60 taken 6 times.
✓ Branch 63 taken 5 times.
✓ Branch 3 taken 269567 times.
✓ Branch 6 taken 247235 times.
✗ Branch 99 not taken.
✗ Branch 102 not taken.
✗ Branch 105 not taken.
✗ Branch 108 not taken.
✗ Branch 111 not taken.
✗ Branch 114 not taken.
✗ Branch 117 not taken.
✗ Branch 120 not taken.
✗ Branch 123 not taken.
✗ Branch 66 not taken.
✗ Branch 69 not taken.
✓ Branch 0 taken 2 times.
144828094 { return paramGroup_; }
526
527 protected:
528 //! Returns the implementation of the problem (i.e. static polymorphism)
529 Implementation &asImp_()
530 { return *static_cast<Implementation *>(this); }
531
532 //! \copydoc asImp_()
533 const Implementation &asImp_() const
534 { return *static_cast<const Implementation *>(this); }
535
536 private:
537 //! The finite volume grid geometry
538 std::shared_ptr<const GridGeometry> gridGeometry_;
539
540 //! The parameter group in which to retrieve runtime parameters
541 std::string paramGroup_;
542
543 //! The name of the problem
544 std::string problemName_;
545
546 //! A map from an scv to a vector of point sources
547 PointSourceMap pointSourceMap_;
548 };
549
550 } // end namespace Dumux
551
552 #endif
553