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 |