GCC Code Coverage Report


Directory: ../../../builds/dumux-repositories/
File: /builds/dumux-repositories/dumux/dumux/freeflow/rans/problem.hh
Date: 2024-05-04 19:09:25
Exec Total Coverage
Lines: 233 269 86.6%
Functions: 896 1058 84.7%
Branches: 792 1927 41.1%

Line Branch Exec Source
1 // -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 // vi: set et ts=4 sw=4 sts=4:
3 //
4 // SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5 // SPDX-License-Identifier: GPL-3.0-or-later
6 //
7 /*!
8 * \file
9 * \ingroup RANSModel
10 * \copydoc Dumux::RANSProblem
11 */
12 #ifndef DUMUX_RANS_PROBLEM_HH
13 #define DUMUX_RANS_PROBLEM_HH
14
15 #include <algorithm>
16
17 #include <dune/common/fmatrix.hh>
18 #include <dumux/common/properties.hh>
19 #include <dumux/common/staggeredfvproblem.hh>
20 #include <dumux/discretization/localview.hh>
21 #include <dumux/discretization/method.hh>
22 #include <dumux/discretization/walldistance.hh>
23 #include <dumux/discretization/staggered/elementsolution.hh>
24 #include <dumux/freeflow/navierstokes/staggered/problem.hh>
25 #include "model.hh"
26
27 namespace Dumux {
28
29 //! forward declare
30 template<class TypeTag, TurbulenceModel turbulenceModel>
31 class RANSProblemImpl;
32
33 //! the turbulence-model-specfic RANS problem
34 template<class TypeTag>
35 using RANSProblem = RANSProblemImpl<TypeTag, GetPropType<TypeTag, Properties::ModelTraits>::turbulenceModel()>;
36
37 /*!
38 * \ingroup RANSModel
39 * \brief Reynolds-Averaged Navier-Stokes problem base class.
40 *
41 * This implements some base functionality for RANS models.
42 * Especially vectors containing all wall-relevant properties, which are accessed
43 * by the volumevariables.
44 */
45 template<class TypeTag>
46 class RANSProblemBase : public NavierStokesStaggeredProblem<TypeTag>
47 {
48 using ParentType = NavierStokesStaggeredProblem<TypeTag>;
49 using Implementation = GetPropType<TypeTag, Properties::Problem>;
50
51 using Scalar = GetPropType<TypeTag, Properties::Scalar>;
52
53 using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
54 using FVElementGeometry = typename GridGeometry::LocalView;
55 using GridView = typename GridGeometry::GridView;
56 using Element = typename GridView::template Codim<0>::Entity;
57 using SubControlVolume = typename FVElementGeometry::SubControlVolume;
58 using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
59 using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>;
60 using PrimaryVariables = typename VolumeVariables::PrimaryVariables;
61 using CellCenterPrimaryVariables = GetPropType<TypeTag, Properties::CellCenterPrimaryVariables>;
62 using FacePrimaryVariables = GetPropType<TypeTag, Properties::FacePrimaryVariables>;
63 using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
64
65 using GlobalPosition = typename SubControlVolumeFace::GlobalPosition;
66
67 static constexpr auto dim = GridView::dimension;
68 static constexpr int numCorners = SubControlVolumeFace::numCornersPerFace;
69 using DimVector = GlobalPosition;
70 using DimMatrix = Dune::FieldMatrix<Scalar, dim, dim>;
71
72 struct WallElementInformation
73 {
74 // store the element indices for all elements with an intersection on the wall
75 unsigned int wallElementIdx;
76 // for each wall element, store the faces normal axis
77 unsigned int wallFaceNormalAxis;
78 // for each wall element, store the location of the face center and each corner.
79 GlobalPosition wallFaceCenter;
80 std::array<GlobalPosition, numCorners> wallFaceCorners;
81 };
82
83 public:
84
85 /*!
86 * \brief The constructor
87 * \param gridGeometry The finite volume grid geometry
88 * \param paramGroup The parameter group in which to look for runtime parameters first (default is "")
89 */
90 70 RANSProblemBase(std::shared_ptr<const GridGeometry> gridGeometry, const std::string& paramGroup = "")
91
17/60
✓ Branch 2 taken 50 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 50 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 50 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 50 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 50 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 50 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 50 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 50 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 50 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 50 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 50 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 50 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 50 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 50 times.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
140 : ParentType(gridGeometry, paramGroup)
92 {
93
7/16
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 50 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 50 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 50 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
350 if ( !(hasParamInGroup(this->paramGroup(), "RANS.IsFlatWallBounded")))
94 {
95 std::cout << "The parameter \"Rans.IsFlatWallBounded\" is not specified. \n"
96 << " -- Based on the grid and the boundary conditions specified by the user,"
97 << " this parameter is set to be "<< std::boolalpha << isFlatWallBounded() << "\n";
98 }
99
100 // update size and initial values of the global vectors
101
4/8
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
280 wallDistance_.resize(this->gridGeometry().elementMapper().size(), std::numeric_limits<Scalar>::max());
102
4/8
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
280 neighborIdx_.resize(this->gridGeometry().elementMapper().size());
103
4/8
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
350 velocity_.resize(this->gridGeometry().elementMapper().size(), DimVector(0.0));
104
4/8
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
350 velocityGradients_.resize(this->gridGeometry().elementMapper().size(), DimMatrix(0.0));
105
4/8
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
280 stressTensorScalarProduct_.resize(this->gridGeometry().elementMapper().size(), 0.0);
106
4/8
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
280 vorticityTensorScalarProduct_.resize(this->gridGeometry().elementMapper().size(), 0.0);
107
4/8
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
280 flowDirectionAxis_.resize(this->gridGeometry().elementMapper().size(), fixedFlowDirectionAxis_);
108
4/8
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
280 storedViscosity_.resize(this->gridGeometry().elementMapper().size(), 0.0);
109
4/10
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
280 storedDensity_.resize(this->gridGeometry().elementMapper().size(), 0.0);
110 70 }
111
112 /*!
113 * \brief Update the static (solution independent) relations to the walls and neighbors
114 */
115 70 void updateStaticWallProperties()
116 {
117 70 std::cout << "Update static wall properties. ";
118 70 calledUpdateStaticWallProperties = true;
119
120 70 checkForWalls_();
121 70 findWallDistances_();
122 70 findNeighborIndices_();
123 70 }
124
125 /*!
126 * \brief Update the dynamic (solution dependent) turbulence parameters
127 *
128 * \param curSol The solution vector.
129 */
130 template<class SolutionVector>
131 1127 void updateDynamicWallProperties(const SolutionVector& curSol)
132 {
133 2254 std::cout << "Update dynamic wall properties." << std::endl;
134
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1107 times.
1127 if (!calledUpdateStaticWallProperties)
135 DUNE_THROW(Dune::InvalidStateException,
136 "You have to call updateStaticWallProperties() once before you call updateDynamicWallProperties().");
137
138 1127 calculateCCVelocities_(curSol);
139 1127 calculateCCVelocityGradients_();
140 1127 calculateMaxMinVelocities_();
141 1127 calculateStressTensor_();
142 1127 calculateVorticityTensor_();
143 1127 storeViscosities_(curSol);
144 1127 }
145
146 /*!
147 * \brief Returns whether a wall function should be used at a given face
148 *
149 * \param element The element.
150 * \param scvf The sub control volume face.
151 * \param eqIdx The equation index.
152 */
153 bool useWallFunction(const Element& element,
154 const SubControlVolumeFace& scvf,
155 const int& eqIdx) const
156 { return false; }
157
158 /*!
159 * \brief Returns an additional wall function momentum flux
160 */
161 template<class ElementVolumeVariables, class ElementFaceVariables>
162 FacePrimaryVariables wallFunction(const Element& element,
163 const FVElementGeometry& fvGeometry,
164 const ElementVolumeVariables& elemVolVars,
165 const ElementFaceVariables& elemFaceVars,
166 const SubControlVolumeFace& scvf,
167 const SubControlVolumeFace& lateralBoundaryFace) const
168 { return FacePrimaryVariables(0.0); }
169
170 /*!
171 * \brief Returns an additional wall function flux for cell-centered quantities
172 */
173 template<class ElementVolumeVariables, class ElementFaceVariables>
174 CellCenterPrimaryVariables wallFunction(const Element& element,
175 const FVElementGeometry& fvGeometry,
176 const ElementVolumeVariables& elemVolVars,
177 const ElementFaceVariables& elemFaceVars,
178 const SubControlVolumeFace& scvf) const
179 { return CellCenterPrimaryVariables(0.0); }
180
181 /*!
182 * \brief Returns whether a given sub control volume face is on a wall
183 */
184 1005804617 bool isFlatWallBounded() const
185 {
186
4/6
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 1005771615 times.
✓ Branch 3 taken 50 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 50 times.
✗ Branch 7 not taken.
1005804617 static const bool hasAlignedWalls = hasAlignedWalls_();
187 1005804617 return hasAlignedWalls;
188 }
189
190 /*!
191 * \brief Returns the Karman constant
192 */
193 const Scalar karmanConstant() const
194 { return 0.41; }
195
196 //! \brief Returns the \f$ \beta_{\omega} \f$ constant
197 const Scalar betaOmega() const
198 { return 0.0708; }
199
200 /*!
201 * \brief Return the turbulent Prandtl number \f$ [-] \f$ which is used to convert
202 * the eddy viscosity to an eddy thermal conductivity
203 */
204 43055122 Scalar turbulentPrandtlNumber() const
205 {
206
3/4
✓ Branch 0 taken 25 times.
✓ Branch 1 taken 43053397 times.
✓ Branch 3 taken 25 times.
✗ Branch 4 not taken.
43055157 static const Scalar turbulentPrandtlNumber
207
2/4
✓ Branch 1 taken 25 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 25 times.
✗ Branch 5 not taken.
105 = getParamFromGroup<Scalar>(this->paramGroup(), "RANS.TurbulentPrandtlNumber", 1.0);
208 43055122 return turbulentPrandtlNumber;
209 }
210
211 /*!
212 * \brief Return the turbulent Schmidt number \f$ [-] \f$ which is used to convert
213 * the eddy viscosity to an eddy diffusivity
214 */
215 98533912 Scalar turbulentSchmidtNumber() const
216 {
217
3/4
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 98530462 times.
✓ Branch 3 taken 50 times.
✗ Branch 4 not taken.
98533982 static const Scalar turbulentSchmidtNumber
218
2/4
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
210 = getParamFromGroup<Scalar>(this->paramGroup(), "RANS.TurbulentSchmidtNumber", 1.0);
219 98533912 return turbulentSchmidtNumber;
220 }
221
222 139797016 int wallNormalAxis(const int elementIdx) const
223 {
224
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 139791884 times.
139797016 if (!isFlatWallBounded())
225 DUNE_THROW(Dune::NotImplemented, "\n Due to grid/geometric concerns, models requiring a wallNormalAxis "
226 << "can only be used for flat wall bounded flows. "
227 << "\n If your geometry is a flat channel, "
228 << "please set the runtime parameter RANS.IsFlatWallBounded to true. \n");
229 279594032 return wallNormalAxis_[elementIdx];
230 }
231
232 169490604 int flowDirectionAxis(const int elementIdx) const
233 {
234
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 169484872 times.
169490604 if (!isFlatWallBounded())
235 DUNE_THROW(Dune::NotImplemented, "\n Due to grid/geometric concerns, models requiring a flowDirectionAxis "
236 << "can only be used for flat wall bounded flows. "
237 << "\n If your geometry is a flat channel, "
238 << "please set the runtime parameter RANS.IsFlatWallBounded to true. \n");
239 338981208 return flowDirectionAxis_[elementIdx];
240 }
241
242 598219908 unsigned int wallElementIndex(const int elementIdx) const
243 {
244
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 598201268 times.
598219908 if (!isFlatWallBounded())
245 DUNE_THROW(Dune::NotImplemented, "\n Due to grid/geometric concerns, models requiring a wallElementIndex "
246 << "can only be used for flat wall bounded flows. "
247 << "\n If your geometry is a flat channel, "
248 << "please set the runtime parameter RANS.IsFlatWallBounded to true. \n");
249 1196439816 return wallElementIdx_[elementIdx];
250
251 }
252
253 Scalar wallDistance(const int elementIdx) const
254
6/60
✓ Branch 3 taken 16832 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 16832 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 16832 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 16832 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 16832 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 16832 times.
✗ Branch 19 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 111 not taken.
✗ Branch 112 not taken.
✗ Branch 114 not taken.
✗ Branch 115 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✗ Branch 123 not taken.
✗ Branch 124 not taken.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
369701112 { return wallDistance_[elementIdx]; }
255
256 5146204 GlobalPosition cellCenter(const int elementIdx) const
257 {
258 10292408 const auto& element = this->gridGeometry().element(elementIdx);
259 5146204 return element.geometry().center();
260 }
261
262 unsigned int neighborIndex(const int elementIdx, const int axisIdx, const int sideIdx) const
263
200/482
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 100 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 10 times.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 22 taken 100 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 100 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 100 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 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✓ Branch 43 taken 100 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 100 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 100 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 not taken.
✗ Branch 59 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 64 taken 100 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 100 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 100 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 10 times.
✗ Branch 74 not taken.
✓ Branch 76 taken 10 times.
✗ Branch 77 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✓ Branch 85 taken 100 times.
✗ Branch 86 not taken.
✓ Branch 88 taken 100 times.
✗ Branch 89 not taken.
✓ Branch 91 taken 100 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 10 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 10 times.
✗ Branch 98 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✓ Branch 106 taken 100 times.
✗ Branch 107 not taken.
✓ Branch 109 taken 100 times.
✗ Branch 110 not taken.
✓ Branch 112 taken 100 times.
✗ Branch 113 not taken.
✓ Branch 115 taken 10 times.
✗ Branch 116 not taken.
✓ Branch 118 taken 10 times.
✗ Branch 119 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✗ Branch 124 not taken.
✗ Branch 125 not taken.
✓ Branch 127 taken 100 times.
✗ Branch 128 not taken.
✓ Branch 130 taken 100 times.
✗ Branch 131 not taken.
✓ Branch 133 taken 100 times.
✗ Branch 134 not taken.
✓ Branch 136 taken 10 times.
✗ Branch 137 not taken.
✓ Branch 139 taken 10 times.
✗ Branch 140 not taken.
✗ Branch 142 not taken.
✗ Branch 143 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✓ Branch 148 taken 100 times.
✗ Branch 149 not taken.
✓ Branch 151 taken 100 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 100 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 10 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 10 times.
✗ Branch 161 not taken.
✗ Branch 163 not taken.
✗ Branch 164 not taken.
✗ Branch 166 not taken.
✗ Branch 167 not taken.
✓ Branch 169 taken 100 times.
✗ Branch 170 not taken.
✓ Branch 172 taken 100 times.
✗ Branch 173 not taken.
✓ Branch 175 taken 100 times.
✗ Branch 176 not taken.
✓ Branch 178 taken 10 times.
✗ Branch 179 not taken.
✓ Branch 181 taken 10 times.
✗ Branch 182 not taken.
✗ Branch 184 not taken.
✗ Branch 185 not taken.
✗ Branch 187 not taken.
✗ Branch 188 not taken.
✓ Branch 190 taken 100 times.
✗ Branch 191 not taken.
✓ Branch 193 taken 100 times.
✗ Branch 194 not taken.
✓ Branch 196 taken 100 times.
✗ Branch 197 not taken.
✓ Branch 199 taken 10 times.
✗ Branch 200 not taken.
✓ Branch 202 taken 10 times.
✗ Branch 203 not taken.
✗ Branch 205 not taken.
✗ Branch 206 not taken.
✗ Branch 208 not taken.
✗ Branch 209 not taken.
✓ Branch 211 taken 100 times.
✗ Branch 212 not taken.
✓ Branch 214 taken 100 times.
✗ Branch 215 not taken.
✓ Branch 217 taken 100 times.
✗ Branch 218 not taken.
✓ Branch 220 taken 10 times.
✗ Branch 221 not taken.
✓ Branch 223 taken 10 times.
✗ Branch 224 not taken.
✗ Branch 226 not taken.
✗ Branch 227 not taken.
✗ Branch 229 not taken.
✗ Branch 230 not taken.
✓ Branch 232 taken 100 times.
✗ Branch 233 not taken.
✓ Branch 235 taken 100 times.
✗ Branch 236 not taken.
✓ Branch 238 taken 100 times.
✗ Branch 239 not taken.
✓ Branch 241 taken 10 times.
✗ Branch 242 not taken.
✓ Branch 244 taken 10 times.
✗ Branch 245 not taken.
✗ Branch 247 not taken.
✗ Branch 248 not taken.
✗ Branch 250 not taken.
✗ Branch 251 not taken.
✓ Branch 253 taken 100 times.
✗ Branch 254 not taken.
✓ Branch 256 taken 100 times.
✗ Branch 257 not taken.
✓ Branch 259 taken 100 times.
✗ Branch 260 not taken.
✓ Branch 262 taken 10 times.
✗ Branch 263 not taken.
✓ Branch 265 taken 10 times.
✗ Branch 266 not taken.
✗ Branch 268 not taken.
✗ Branch 269 not taken.
✗ Branch 271 not taken.
✗ Branch 272 not taken.
✓ Branch 274 taken 100 times.
✗ Branch 275 not taken.
✓ Branch 277 taken 100 times.
✗ Branch 278 not taken.
✓ Branch 280 taken 100 times.
✗ Branch 281 not taken.
✓ Branch 283 taken 10 times.
✗ Branch 284 not taken.
✓ Branch 286 taken 10 times.
✗ Branch 287 not taken.
✗ Branch 289 not taken.
✗ Branch 290 not taken.
✗ Branch 292 not taken.
✗ Branch 293 not taken.
✓ Branch 295 taken 100 times.
✗ Branch 296 not taken.
✓ Branch 298 taken 100 times.
✗ Branch 299 not taken.
✓ Branch 301 taken 100 times.
✗ Branch 302 not taken.
✓ Branch 304 taken 10 times.
✗ Branch 305 not taken.
✓ Branch 307 taken 10 times.
✗ Branch 308 not taken.
✗ Branch 310 not taken.
✗ Branch 311 not taken.
✗ Branch 313 not taken.
✗ Branch 314 not taken.
✓ Branch 316 taken 100 times.
✗ Branch 317 not taken.
✓ Branch 319 taken 100 times.
✗ Branch 320 not taken.
✓ Branch 322 taken 100 times.
✗ Branch 323 not taken.
✓ Branch 325 taken 10 times.
✗ Branch 326 not taken.
✓ Branch 328 taken 10 times.
✗ Branch 329 not taken.
✗ Branch 331 not taken.
✗ Branch 332 not taken.
✗ Branch 334 not taken.
✗ Branch 335 not taken.
✓ Branch 337 taken 100 times.
✗ Branch 338 not taken.
✓ Branch 340 taken 100 times.
✗ Branch 341 not taken.
✓ Branch 343 taken 100 times.
✗ Branch 344 not taken.
✓ Branch 346 taken 10 times.
✗ Branch 347 not taken.
✓ Branch 349 taken 10 times.
✗ Branch 350 not taken.
✗ Branch 352 not taken.
✗ Branch 353 not taken.
✗ Branch 355 not taken.
✗ Branch 356 not taken.
✓ Branch 358 taken 100 times.
✗ Branch 359 not taken.
✓ Branch 361 taken 100 times.
✗ Branch 362 not taken.
✓ Branch 364 taken 100 times.
✗ Branch 365 not taken.
✓ Branch 367 taken 10 times.
✗ Branch 368 not taken.
✓ Branch 370 taken 10 times.
✗ Branch 371 not taken.
✗ Branch 373 not taken.
✗ Branch 374 not taken.
✗ Branch 376 not taken.
✗ Branch 377 not taken.
✓ Branch 379 taken 100 times.
✗ Branch 380 not taken.
✓ Branch 382 taken 100 times.
✗ Branch 383 not taken.
✓ Branch 385 taken 100 times.
✗ Branch 386 not taken.
✓ Branch 388 taken 10 times.
✗ Branch 389 not taken.
✓ Branch 391 taken 10 times.
✗ Branch 392 not taken.
✗ Branch 394 not taken.
✗ Branch 395 not taken.
✗ Branch 397 not taken.
✗ Branch 398 not taken.
✓ Branch 400 taken 100 times.
✗ Branch 401 not taken.
✓ Branch 403 taken 100 times.
✗ Branch 404 not taken.
✓ Branch 406 taken 100 times.
✗ Branch 407 not taken.
✓ Branch 409 taken 10 times.
✗ Branch 410 not taken.
✓ Branch 412 taken 10 times.
✗ Branch 413 not taken.
✗ Branch 415 not taken.
✗ Branch 416 not taken.
✗ Branch 418 not taken.
✗ Branch 419 not taken.
✓ Branch 421 taken 50 times.
✗ Branch 422 not taken.
✓ Branch 424 taken 50 times.
✗ Branch 425 not taken.
✓ Branch 427 taken 50 times.
✗ Branch 428 not taken.
✓ Branch 430 taken 50 times.
✗ Branch 431 not taken.
✓ Branch 433 taken 50 times.
✗ Branch 434 not taken.
✓ Branch 436 taken 50 times.
✗ Branch 437 not taken.
✓ Branch 439 taken 50 times.
✗ Branch 440 not taken.
✓ Branch 442 taken 50 times.
✗ Branch 443 not taken.
✓ Branch 445 taken 50 times.
✗ Branch 446 not taken.
✓ Branch 448 taken 50 times.
✗ Branch 449 not taken.
✓ Branch 451 taken 50 times.
✗ Branch 452 not taken.
✓ Branch 454 taken 50 times.
✗ Branch 455 not taken.
✓ Branch 457 taken 50 times.
✗ Branch 458 not taken.
✓ Branch 460 taken 50 times.
✗ Branch 461 not taken.
✓ Branch 463 taken 50 times.
✗ Branch 464 not taken.
✓ Branch 466 taken 50 times.
✗ Branch 467 not taken.
✓ Branch 469 taken 50 times.
✗ Branch 470 not taken.
✓ Branch 472 taken 50 times.
✗ Branch 473 not taken.
✓ Branch 475 taken 50 times.
✗ Branch 476 not taken.
✓ Branch 478 taken 50 times.
✗ Branch 479 not taken.
✓ Branch 481 taken 50 times.
✗ Branch 482 not taken.
✓ Branch 484 taken 50 times.
✗ Branch 485 not taken.
✓ Branch 487 taken 50 times.
✗ Branch 488 not taken.
✓ Branch 490 taken 50 times.
✗ Branch 491 not taken.
✓ Branch 493 taken 50 times.
✗ Branch 494 not taken.
✓ Branch 496 taken 50 times.
✗ Branch 497 not taken.
✓ Branch 499 taken 50 times.
✗ Branch 500 not taken.
✓ Branch 502 taken 50 times.
✗ Branch 503 not taken.
✓ Branch 505 taken 25 times.
✗ Branch 506 not taken.
✓ Branch 508 taken 25 times.
✗ Branch 509 not taken.
✓ Branch 511 taken 25 times.
✗ Branch 512 not taken.
✓ Branch 514 taken 25 times.
✗ Branch 515 not taken.
✓ Branch 517 taken 25 times.
✗ Branch 518 not taken.
✓ Branch 520 taken 25 times.
✗ Branch 521 not taken.
✓ Branch 523 taken 25 times.
✗ Branch 524 not taken.
✓ Branch 526 taken 25 times.
✗ Branch 527 not taken.
✓ Branch 529 taken 25 times.
✗ Branch 530 not taken.
✓ Branch 532 taken 25 times.
✗ Branch 533 not taken.
✓ Branch 535 taken 25 times.
✗ Branch 536 not taken.
✓ Branch 538 taken 25 times.
✗ Branch 539 not taken.
✓ Branch 541 taken 25 times.
✗ Branch 542 not taken.
✓ Branch 544 taken 25 times.
✗ Branch 545 not taken.
✓ Branch 547 taken 25 times.
✗ Branch 548 not taken.
✓ Branch 550 taken 25 times.
✗ Branch 551 not taken.
✓ Branch 553 taken 25 times.
✗ Branch 554 not taken.
✓ Branch 556 taken 25 times.
✗ Branch 557 not taken.
✓ Branch 559 taken 25 times.
✗ Branch 560 not taken.
✓ Branch 562 taken 25 times.
✗ Branch 563 not taken.
✓ Branch 565 taken 25 times.
✗ Branch 566 not taken.
✓ Branch 568 taken 25 times.
✗ Branch 569 not taken.
✓ Branch 571 taken 25 times.
✗ Branch 572 not taken.
✓ Branch 574 taken 25 times.
✗ Branch 575 not taken.
✓ Branch 577 taken 25 times.
✗ Branch 578 not taken.
✓ Branch 580 taken 25 times.
✗ Branch 581 not taken.
✓ Branch 583 taken 25 times.
✗ Branch 584 not taken.
✓ Branch 586 taken 25 times.
✗ Branch 587 not taken.
✓ Branch 589 taken 50 times.
✗ Branch 590 not taken.
✓ Branch 592 taken 50 times.
✗ Branch 593 not taken.
✓ Branch 595 taken 50 times.
✗ Branch 596 not taken.
✓ Branch 598 taken 50 times.
✗ Branch 599 not taken.
✓ Branch 601 taken 50 times.
✗ Branch 602 not taken.
✓ Branch 604 taken 50 times.
✗ Branch 605 not taken.
✓ Branch 607 taken 50 times.
✗ Branch 608 not taken.
✓ Branch 610 taken 5 times.
✗ Branch 611 not taken.
✓ Branch 613 taken 5 times.
✗ Branch 614 not taken.
✓ Branch 616 taken 5 times.
✗ Branch 617 not taken.
✓ Branch 619 taken 5 times.
✗ Branch 620 not taken.
✓ Branch 622 taken 50 times.
✗ Branch 623 not taken.
✓ Branch 625 taken 50 times.
✗ Branch 626 not taken.
✓ Branch 628 taken 50 times.
✗ Branch 629 not taken.
✓ Branch 631 taken 50 times.
✗ Branch 632 not taken.
✓ Branch 634 taken 50 times.
✗ Branch 635 not taken.
✓ Branch 637 taken 50 times.
✗ Branch 638 not taken.
✓ Branch 640 taken 50 times.
✗ Branch 641 not taken.
✓ Branch 643 taken 5 times.
✗ Branch 644 not taken.
✓ Branch 646 taken 5 times.
✗ Branch 647 not taken.
✓ Branch 649 taken 5 times.
✗ Branch 650 not taken.
✓ Branch 652 taken 5 times.
✗ Branch 653 not taken.
✓ Branch 655 taken 50 times.
✗ Branch 656 not taken.
✓ Branch 658 taken 50 times.
✗ Branch 659 not taken.
✓ Branch 661 taken 50 times.
✗ Branch 662 not taken.
✓ Branch 664 taken 50 times.
✗ Branch 665 not taken.
✓ Branch 667 taken 50 times.
✗ Branch 668 not taken.
✓ Branch 670 taken 50 times.
✗ Branch 671 not taken.
✓ Branch 673 taken 50 times.
✗ Branch 674 not taken.
✓ Branch 676 taken 5 times.
✗ Branch 677 not taken.
✓ Branch 679 taken 5 times.
✗ Branch 680 not taken.
✓ Branch 682 taken 5 times.
✗ Branch 683 not taken.
✓ Branch 685 taken 5 times.
✗ Branch 686 not taken.
✓ Branch 688 taken 50 times.
✗ Branch 689 not taken.
✓ Branch 691 taken 50 times.
✗ Branch 692 not taken.
✓ Branch 694 taken 50 times.
✗ Branch 695 not taken.
✓ Branch 697 taken 50 times.
✗ Branch 698 not taken.
✓ Branch 700 taken 50 times.
✗ Branch 701 not taken.
✓ Branch 703 taken 50 times.
✗ Branch 704 not taken.
✓ Branch 706 taken 50 times.
✗ Branch 707 not taken.
✓ Branch 709 taken 5 times.
✗ Branch 710 not taken.
✓ Branch 712 taken 5 times.
✗ Branch 713 not taken.
✓ Branch 715 taken 5 times.
✗ Branch 716 not taken.
✓ Branch 718 taken 5 times.
✗ Branch 719 not taken.
5392472 { return neighborIdx_[elementIdx][axisIdx][sideIdx];}
264
265 DimVector ccVelocityVector(const int elementIdx) const
266 196584928 { return velocity_[elementIdx]; }
267
268 Scalar ccVelocity(const int elementIdx, const int axisIdx) const
269
123/281
✓ Branch 0 taken 254516 times.
✓ Branch 1 taken 167566 times.
✓ Branch 2 taken 211275 times.
✓ Branch 3 taken 210807 times.
✓ Branch 4 taken 3543 times.
✓ Branch 5 taken 64361 times.
✓ Branch 7 taken 100 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 10 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 50 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 25 times.
✓ Branch 22 taken 25 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 26 taken 100 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 100 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 10 times.
✗ Branch 33 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✓ Branch 38 taken 50 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 25 times.
✓ Branch 41 taken 25 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✓ Branch 45 taken 100 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 100 times.
✗ Branch 49 not taken.
✓ Branch 51 taken 10 times.
✗ Branch 52 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 50 times.
✗ Branch 58 not taken.
✓ Branch 59 taken 25 times.
✓ Branch 60 taken 25 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 64 taken 100 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 100 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 10 times.
✗ Branch 71 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✓ Branch 76 taken 50 times.
✗ Branch 77 not taken.
✓ Branch 78 taken 25 times.
✓ Branch 79 taken 25 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 100 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 100 times.
✗ Branch 87 not taken.
✓ Branch 89 taken 10 times.
✗ Branch 90 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✓ Branch 95 taken 50 times.
✗ Branch 96 not taken.
✓ Branch 97 taken 25 times.
✓ Branch 98 taken 25 times.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✓ Branch 102 taken 100 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 100 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 10 times.
✗ Branch 109 not taken.
✗ Branch 112 not taken.
✗ Branch 113 not taken.
✓ Branch 114 taken 50 times.
✗ Branch 115 not taken.
✓ Branch 116 taken 25 times.
✓ Branch 117 taken 25 times.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✓ Branch 121 taken 100 times.
✗ Branch 122 not taken.
✓ Branch 124 taken 100 times.
✗ Branch 125 not taken.
✓ Branch 127 taken 10 times.
✗ Branch 128 not taken.
✗ Branch 131 not taken.
✗ Branch 132 not taken.
✓ Branch 133 taken 50 times.
✗ Branch 134 not taken.
✓ Branch 135 taken 25 times.
✓ Branch 136 taken 25 times.
✗ Branch 137 not taken.
✗ Branch 138 not taken.
✓ Branch 140 taken 100 times.
✗ Branch 141 not taken.
✓ Branch 143 taken 100 times.
✗ Branch 144 not taken.
✓ Branch 146 taken 10 times.
✗ Branch 147 not taken.
✗ Branch 150 not taken.
✗ Branch 151 not taken.
✓ Branch 152 taken 50 times.
✗ Branch 153 not taken.
✓ Branch 154 taken 25 times.
✓ Branch 155 taken 25 times.
✗ Branch 156 not taken.
✗ Branch 157 not taken.
✓ Branch 159 taken 100 times.
✗ Branch 160 not taken.
✓ Branch 162 taken 100 times.
✗ Branch 163 not taken.
✓ Branch 165 taken 10 times.
✗ Branch 166 not taken.
✗ Branch 169 not taken.
✗ Branch 170 not taken.
✓ Branch 171 taken 50 times.
✗ Branch 172 not taken.
✓ Branch 173 taken 25 times.
✓ Branch 174 taken 25 times.
✗ Branch 175 not taken.
✗ Branch 176 not taken.
✓ Branch 178 taken 100 times.
✗ Branch 179 not taken.
✓ Branch 181 taken 100 times.
✗ Branch 182 not taken.
✓ Branch 184 taken 10 times.
✗ Branch 185 not taken.
✗ Branch 188 not taken.
✗ Branch 189 not taken.
✓ Branch 190 taken 50 times.
✗ Branch 191 not taken.
✓ Branch 192 taken 25 times.
✓ Branch 193 taken 25 times.
✗ Branch 194 not taken.
✗ Branch 195 not taken.
✓ Branch 197 taken 100 times.
✗ Branch 198 not taken.
✓ Branch 200 taken 100 times.
✗ Branch 201 not taken.
✓ Branch 203 taken 10 times.
✗ Branch 204 not taken.
✗ Branch 207 not taken.
✗ Branch 208 not taken.
✓ Branch 209 taken 50 times.
✗ Branch 210 not taken.
✓ Branch 211 taken 25 times.
✓ Branch 212 taken 25 times.
✗ Branch 213 not taken.
✗ Branch 214 not taken.
✓ Branch 216 taken 100 times.
✗ Branch 217 not taken.
✓ Branch 219 taken 100 times.
✗ Branch 220 not taken.
✓ Branch 222 taken 10 times.
✗ Branch 223 not taken.
✗ Branch 226 not taken.
✗ Branch 227 not taken.
✓ Branch 228 taken 50 times.
✗ Branch 229 not taken.
✓ Branch 230 taken 25 times.
✓ Branch 231 taken 25 times.
✗ Branch 232 not taken.
✗ Branch 233 not taken.
✓ Branch 235 taken 100 times.
✗ Branch 236 not taken.
✓ Branch 238 taken 100 times.
✗ Branch 239 not taken.
✓ Branch 241 taken 10 times.
✗ Branch 242 not taken.
✗ Branch 245 not taken.
✗ Branch 246 not taken.
✓ Branch 247 taken 50 times.
✗ Branch 248 not taken.
✓ Branch 249 taken 25 times.
✓ Branch 250 taken 25 times.
✗ Branch 251 not taken.
✗ Branch 252 not taken.
✓ Branch 254 taken 100 times.
✗ Branch 255 not taken.
✓ Branch 257 taken 100 times.
✗ Branch 258 not taken.
✓ Branch 260 taken 10 times.
✗ Branch 261 not taken.
✗ Branch 264 not taken.
✗ Branch 265 not taken.
✓ Branch 266 taken 50 times.
✗ Branch 267 not taken.
✓ Branch 268 taken 25 times.
✓ Branch 269 taken 25 times.
✗ Branch 270 not taken.
✗ Branch 271 not taken.
✓ Branch 273 taken 100 times.
✗ Branch 274 not taken.
✓ Branch 276 taken 100 times.
✗ Branch 277 not taken.
✓ Branch 279 taken 10 times.
✗ Branch 280 not taken.
✗ Branch 283 not taken.
✗ Branch 284 not taken.
✓ Branch 285 taken 50 times.
✗ Branch 286 not taken.
✓ Branch 287 taken 25 times.
✓ Branch 288 taken 25 times.
✗ Branch 289 not taken.
✗ Branch 290 not taken.
✓ Branch 292 taken 100 times.
✗ Branch 293 not taken.
✓ Branch 295 taken 100 times.
✗ Branch 296 not taken.
✓ Branch 298 taken 10 times.
✗ Branch 299 not taken.
✗ Branch 302 not taken.
✗ Branch 303 not taken.
✓ Branch 304 taken 50 times.
✗ Branch 305 not taken.
✓ Branch 306 taken 25 times.
✓ Branch 307 taken 25 times.
✗ Branch 308 not taken.
✗ Branch 309 not taken.
✓ Branch 311 taken 100 times.
✗ Branch 312 not taken.
✓ Branch 314 taken 100 times.
✗ Branch 315 not taken.
✓ Branch 317 taken 10 times.
✗ Branch 318 not taken.
✗ Branch 321 not taken.
✗ Branch 322 not taken.
✓ Branch 323 taken 50 times.
✗ Branch 324 not taken.
✓ Branch 325 taken 25 times.
✓ Branch 326 taken 25 times.
✗ Branch 327 not taken.
✗ Branch 328 not taken.
✓ Branch 330 taken 100 times.
✗ Branch 331 not taken.
✓ Branch 333 taken 100 times.
✗ Branch 334 not taken.
✓ Branch 336 taken 10 times.
✗ Branch 337 not taken.
✗ Branch 340 not taken.
✗ Branch 341 not taken.
✓ Branch 342 taken 50 times.
✗ Branch 343 not taken.
✓ Branch 344 taken 25 times.
✓ Branch 345 taken 25 times.
✗ Branch 346 not taken.
✗ Branch 347 not taken.
✓ Branch 349 taken 100 times.
✗ Branch 350 not taken.
✓ Branch 352 taken 100 times.
✗ Branch 353 not taken.
✓ Branch 355 taken 10 times.
✗ Branch 356 not taken.
✗ Branch 359 not taken.
✗ Branch 360 not taken.
✓ Branch 361 taken 50 times.
✗ Branch 362 not taken.
✓ Branch 363 taken 25 times.
✓ Branch 364 taken 25 times.
✗ Branch 365 not taken.
✗ Branch 366 not taken.
✓ Branch 368 taken 100 times.
✗ Branch 369 not taken.
✓ Branch 371 taken 100 times.
✗ Branch 372 not taken.
✓ Branch 374 taken 10 times.
✗ Branch 375 not taken.
✗ Branch 378 not taken.
✗ Branch 379 not taken.
259233522 { return velocity_[elementIdx][axisIdx]; }
270
271 DimVector velocityMaximum(const int elementIdx) const
272
4/40
✓ Branch 5 taken 33664 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 33664 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 33664 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 33664 times.
✗ Branch 15 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 111 not taken.
✗ Branch 112 not taken.
✗ Branch 114 not taken.
✗ Branch 115 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✗ Branch 123 not taken.
✗ Branch 124 not taken.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
367357888 { return velocityMaximum_[elementIdx]; }
273
274 DimVector velocityMinimum(const int elementIdx) const
275
2/20
✓ Branch 5 taken 33664 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 33664 times.
✗ Branch 9 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
367357888 { return velocityMinimum_[elementIdx]; }
276
277 DimMatrix velocityGradientTensor(const int elementIdx) const
278 196584928 { return velocityGradients_[elementIdx]; }
279
280 Scalar velocityGradient(const int elementIdx, const int i, const int j) const
281
89/248
✓ Branch 0 taken 136136 times.
✓ Branch 1 taken 85213430 times.
✓ Branch 2 taken 136136 times.
✓ Branch 3 taken 85213430 times.
✓ Branch 4 taken 136136 times.
✓ Branch 5 taken 85213430 times.
✓ Branch 6 taken 136136 times.
✓ Branch 7 taken 85213430 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 16982 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 150 times.
✓ Branch 12 taken 16832 times.
✓ Branch 13 taken 150 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 16982 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 150 times.
✓ Branch 18 taken 16832 times.
✓ Branch 19 taken 150 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 16982 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 150 times.
✓ Branch 24 taken 16832 times.
✓ Branch 25 taken 150 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 16982 times.
✗ Branch 28 not taken.
✓ Branch 29 taken 150 times.
✓ Branch 30 taken 16832 times.
✓ Branch 31 taken 150 times.
✗ Branch 32 not taken.
✓ Branch 33 taken 17007 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 175 times.
✓ Branch 36 taken 16832 times.
✓ Branch 37 taken 175 times.
✗ Branch 38 not taken.
✓ Branch 39 taken 17007 times.
✗ Branch 40 not taken.
✓ Branch 41 taken 175 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 175 times.
✗ Branch 44 not taken.
✓ Branch 45 taken 175 times.
✗ Branch 46 not taken.
✓ Branch 47 taken 175 times.
✗ Branch 48 not taken.
✓ Branch 49 taken 175 times.
✗ Branch 50 not taken.
✓ Branch 51 taken 175 times.
✗ Branch 52 not taken.
✓ Branch 53 taken 175 times.
✗ Branch 54 not taken.
✓ Branch 55 taken 175 times.
✗ Branch 56 not taken.
✓ Branch 57 taken 175 times.
✗ Branch 58 not taken.
✓ Branch 59 taken 175 times.
✗ Branch 60 not taken.
✓ Branch 61 taken 175 times.
✗ Branch 62 not taken.
✓ Branch 63 taken 175 times.
✗ Branch 64 not taken.
✓ Branch 65 taken 175 times.
✗ Branch 66 not taken.
✓ Branch 67 taken 175 times.
✗ Branch 68 not taken.
✓ Branch 69 taken 175 times.
✗ Branch 70 not taken.
✓ Branch 71 taken 175 times.
✗ Branch 72 not taken.
✓ Branch 73 taken 175 times.
✗ Branch 74 not taken.
✓ Branch 75 taken 175 times.
✗ Branch 76 not taken.
✓ Branch 77 taken 175 times.
✗ Branch 78 not taken.
✓ Branch 79 taken 175 times.
✗ Branch 80 not taken.
✓ Branch 81 taken 175 times.
✗ Branch 82 not taken.
✓ Branch 83 taken 175 times.
✗ Branch 84 not taken.
✓ Branch 85 taken 175 times.
✗ Branch 86 not taken.
✓ Branch 87 taken 175 times.
✗ Branch 88 not taken.
✓ Branch 89 taken 175 times.
✗ Branch 90 not taken.
✓ Branch 91 taken 175 times.
✗ Branch 92 not taken.
✓ Branch 93 taken 175 times.
✗ Branch 94 not taken.
✓ Branch 95 taken 175 times.
✗ Branch 96 not taken.
✓ Branch 97 taken 175 times.
✗ Branch 98 not taken.
✓ Branch 99 taken 175 times.
✗ Branch 100 not taken.
✓ Branch 101 taken 175 times.
✗ Branch 102 not taken.
✓ Branch 103 taken 175 times.
✗ Branch 104 not taken.
✓ Branch 105 taken 175 times.
✗ Branch 106 not taken.
✓ Branch 107 taken 175 times.
✗ Branch 108 not taken.
✓ Branch 109 taken 175 times.
✗ Branch 110 not taken.
✓ Branch 111 taken 175 times.
✗ Branch 112 not taken.
✓ Branch 113 taken 175 times.
✗ Branch 114 not taken.
✓ Branch 115 taken 175 times.
✗ Branch 116 not taken.
✓ Branch 117 taken 175 times.
✗ Branch 118 not taken.
✓ Branch 119 taken 175 times.
✗ Branch 120 not taken.
✓ Branch 121 taken 175 times.
✗ Branch 122 not taken.
✓ Branch 123 taken 175 times.
✗ Branch 124 not taken.
✓ Branch 125 taken 175 times.
✗ Branch 126 not taken.
✓ Branch 127 taken 175 times.
✗ Branch 128 not taken.
✓ Branch 129 taken 175 times.
✗ Branch 130 not taken.
✓ Branch 131 taken 175 times.
✗ Branch 132 not taken.
✓ Branch 133 taken 175 times.
✗ Branch 134 not taken.
✓ Branch 135 taken 175 times.
✗ Branch 136 not taken.
✓ Branch 137 taken 175 times.
✗ Branch 138 not taken.
✓ Branch 139 taken 175 times.
✗ Branch 140 not taken.
✓ Branch 141 taken 175 times.
✗ Branch 142 not taken.
✓ Branch 143 taken 175 times.
✗ Branch 144 not taken.
✓ Branch 145 taken 175 times.
✗ Branch 146 not taken.
✓ Branch 147 taken 175 times.
✗ Branch 148 not taken.
✓ Branch 149 taken 175 times.
✗ Branch 150 not taken.
✓ Branch 151 taken 175 times.
✗ Branch 152 not taken.
✓ Branch 153 taken 175 times.
✗ Branch 154 not taken.
✓ Branch 155 taken 175 times.
✗ Branch 156 not taken.
✓ Branch 157 taken 175 times.
✗ Branch 158 not taken.
✓ Branch 159 taken 175 times.
✗ Branch 161 not taken.
✗ Branch 162 not taken.
✗ Branch 164 not taken.
✗ Branch 165 not taken.
✗ Branch 167 not taken.
✗ Branch 168 not taken.
✗ Branch 170 not taken.
✗ Branch 171 not taken.
✗ Branch 173 not taken.
✗ Branch 174 not taken.
✗ Branch 176 not taken.
✗ Branch 177 not taken.
✗ Branch 179 not taken.
✗ Branch 180 not taken.
✗ Branch 182 not taken.
✗ Branch 183 not taken.
✗ Branch 185 not taken.
✗ Branch 186 not taken.
✗ Branch 188 not taken.
✗ Branch 189 not taken.
✗ Branch 191 not taken.
✗ Branch 192 not taken.
✗ Branch 194 not taken.
✗ Branch 195 not taken.
✗ Branch 197 not taken.
✗ Branch 198 not taken.
✗ Branch 200 not taken.
✗ Branch 201 not taken.
✗ Branch 203 not taken.
✗ Branch 204 not taken.
✗ Branch 206 not taken.
✗ Branch 207 not taken.
✗ Branch 209 not taken.
✗ Branch 210 not taken.
✗ Branch 212 not taken.
✗ Branch 213 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 218 not taken.
✗ Branch 219 not taken.
✗ Branch 221 not taken.
✗ Branch 222 not taken.
✗ Branch 224 not taken.
✗ Branch 225 not taken.
✗ Branch 227 not taken.
✗ Branch 228 not taken.
✗ Branch 230 not taken.
✗ Branch 231 not taken.
✗ Branch 233 not taken.
✗ Branch 234 not taken.
✗ Branch 236 not taken.
✗ Branch 237 not taken.
✗ Branch 239 not taken.
✗ Branch 240 not taken.
✗ Branch 242 not taken.
✗ Branch 243 not taken.
✗ Branch 245 not taken.
✗ Branch 246 not taken.
✗ Branch 248 not taken.
✗ Branch 249 not taken.
✗ Branch 251 not taken.
✗ Branch 252 not taken.
✗ Branch 254 not taken.
✗ Branch 255 not taken.
✗ Branch 257 not taken.
✗ Branch 258 not taken.
✗ Branch 260 not taken.
✗ Branch 261 not taken.
✗ Branch 263 not taken.
✗ Branch 264 not taken.
✗ Branch 266 not taken.
✗ Branch 267 not taken.
✗ Branch 269 not taken.
✗ Branch 270 not taken.
✗ Branch 272 not taken.
✗ Branch 273 not taken.
✗ Branch 275 not taken.
✗ Branch 276 not taken.
✗ Branch 278 not taken.
✗ Branch 279 not taken.
✗ Branch 281 not taken.
✗ Branch 282 not taken.
✗ Branch 284 not taken.
✗ Branch 285 not taken.
✗ Branch 287 not taken.
✗ Branch 288 not taken.
✗ Branch 290 not taken.
✗ Branch 291 not taken.
347487648 { return velocityGradients_[elementIdx][i][j]; }
282
283 Scalar stressTensorScalarProduct(const int elementIdx) const
284 186060632 { return stressTensorScalarProduct_[elementIdx]; }
285
286 Scalar vorticityTensorScalarProduct(const int elementIdx) const
287 53732960 { return vorticityTensorScalarProduct_[elementIdx]; }
288
289 Scalar storedViscosity(const int elementIdx) const
290 673834808 { return storedViscosity_[elementIdx]; }
291
292 Scalar storedDensity(const int elementIdx) const
293 673964240 { return storedDensity_[elementIdx]; }
294
295 Scalar kinematicViscosity(const int elementIdx) const
296
6/60
✓ Branch 4 taken 16832 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 16832 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 16832 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 16832 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 16832 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 16832 times.
✗ Branch 20 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 112 not taken.
✗ Branch 113 not taken.
✗ Branch 115 not taken.
✗ Branch 116 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✗ Branch 124 not taken.
✗ Branch 125 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✗ Branch 136 not taken.
✗ Branch 137 not taken.
✗ Branch 139 not taken.
✗ Branch 140 not taken.
✗ Branch 142 not taken.
✗ Branch 143 not taken.
650688888 { return storedViscosity(elementIdx) / storedDensity(elementIdx); }
297
298 bool calledUpdateStaticWallProperties = false;
299
300 private:
301
302 70 bool hasAlignedWalls_() const
303 {
304
7/16
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 50 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 50 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 50 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 50 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
350 if ( hasParamInGroup(this->paramGroup(), "RANS.IsFlatWallBounded"))
305 {
306
3/6
✓ Branch 0 taken 50 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 50 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 50 times.
✗ Branch 7 not taken.
70 static const bool isFlatWallBounded = getParamFromGroup<bool>(this->paramGroup(), "RANS.IsFlatWallBounded");
307 70 return isFlatWallBounded;
308 }
309
310 std::vector<int> wallFaceAxis;
311 wallFaceAxis.reserve(this->gridGeometry().numBoundaryScvf());
312
313 const auto gridView = this->gridGeometry().gridView();
314 auto fvGeometry = localView(this->gridGeometry());
315 for (const auto& element : elements(gridView))
316 {
317 fvGeometry.bindElement(element);
318 for (const auto& scvf : scvfs(fvGeometry))
319 if (!scvf.boundary() && asImp_().boundaryTypes(element, scvf).hasWall()) // only search for walls at a global boundary
320 wallFaceAxis.push_back(scvf.directionIndex());
321 }
322
323 // Returns if all wall directions are the same
324 return std::all_of(wallFaceAxis.begin(), wallFaceAxis.end(), [firstDir=wallFaceAxis[0]](auto dir){ return (dir == firstDir);} ) ;
325 }
326
327 70 void checkForWalls_()
328 {
329
2/4
✓ Branch 3 taken 50 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 20 times.
✗ Branch 7 not taken.
280 for (const auto& element : elements(this->gridGeometry().gridView()))
330 {
331
2/4
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
140 auto fvGeometry = localView(this->gridGeometry());
332
1/2
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
70 fvGeometry.bindElement(element);
333
2/4
✓ Branch 0 taken 110 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 110 times.
✗ Branch 3 not taken.
200 for (auto&& scvf : scvfs(fvGeometry))
334
2/2
✓ Branch 1 taken 50 times.
✓ Branch 2 taken 60 times.
144 if (asImp_().boundaryTypes(element, scvf).hasWall())
335 70 return;
336 }
337 // If reached, no walls were found using the boundary types has wall function.
338 DUNE_THROW(Dune::InvalidStateException, "No walls are are specified with the setWall() function");
339 }
340
341 /*!
342 * \brief Use the boundary search algorithm to find the shortest distance to a wall for each element
343 *
344 * Also store the wall element's index, and its direction in the case of flat wall bounded problems
345 */
346 70 void findWallDistances_()
347 {
348 610 WallDistance wallInformation(this->gridGeometry(), WallDistance<GridGeometry>::atElementCenters,
349 140 [this] (const FVElementGeometry& fvGeometry, const SubControlVolumeFace& scvf)
350
28/28
✓ Branch 2 taken 540 times.
✓ Branch 3 taken 1330 times.
✓ Branch 16 taken 5 times.
✓ Branch 17 taken 15 times.
✓ Branch 20 taken 5 times.
✓ Branch 21 taken 15 times.
✓ Branch 24 taken 5 times.
✓ Branch 25 taken 15 times.
✓ Branch 28 taken 5 times.
✓ Branch 29 taken 15 times.
✓ Branch 32 taken 5 times.
✓ Branch 33 taken 15 times.
✓ Branch 36 taken 5 times.
✓ Branch 37 taken 15 times.
✓ Branch 40 taken 5 times.
✓ Branch 41 taken 15 times.
✓ Branch 44 taken 5 times.
✓ Branch 45 taken 15 times.
✓ Branch 48 taken 5 times.
✓ Branch 49 taken 15 times.
✓ Branch 52 taken 5 times.
✓ Branch 53 taken 15 times.
✓ Branch 56 taken 5 times.
✓ Branch 57 taken 15 times.
✓ Branch 60 taken 5 times.
✓ Branch 61 taken 15 times.
✓ Branch 64 taken 5 times.
✓ Branch 65 taken 15 times.
4540 { return asImp_().boundaryTypes(fvGeometry.element(), scvf).hasWall(); });
351
1/2
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
70 wallDistance_ = wallInformation.wallDistance();
352
1/2
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
70 storeWallElementAndDirectionIndex_(wallInformation.wallData());
353 70 }
354
355 template <class WallData>
356 70 void storeWallElementAndDirectionIndex_(const WallData& wallData)
357 {
358 // The wall Direction Index is used for flat quadrilateral channel problems only
359 if (!(GridGeometry::discMethod == DiscretizationMethods::staggered))
360 DUNE_THROW(Dune::NotImplemented, "The wall direction Index can only be calculated for quadrilateral structured grids");
361
362 // If isFlatWallBounded, the corresponding wall element is stored for each element
363
2/2
✓ Branch 1 taken 47 times.
✓ Branch 2 taken 3 times.
70 if (isFlatWallBounded())
364 {
365 134 wallNormalAxis_.resize(wallData.size());
366 134 wallElementIdx_.resize(wallData.size());
367
368
1/2
✓ Branch 3 taken 6347 times.
✗ Branch 4 not taken.
13868 for (const auto& element : elements(this->gridGeometry().gridView()))
369 {
370 20400 unsigned int elementIdx = this->gridGeometry().elementMapper().index(element);
371
2/4
✓ Branch 1 taken 6300 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6300 times.
✗ Branch 5 not taken.
13600 wallElementIdx_[elementIdx] = wallData[elementIdx].eIdx;
372
8/14
✓ Branch 1 taken 6300 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6300 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6300 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 6300 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 500 times.
✓ Branch 12 taken 5800 times.
✓ Branch 13 taken 500 times.
✓ Branch 14 taken 5800 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
34000 if ( ! (hasParam("RANS.WallNormalAxis")) )
373 {
374 1000 GlobalPosition wallOuterNormal = wallData[elementIdx].scvfOuterNormal;
375 if constexpr (dim == 2) // 2D
376 3000 wallNormalAxis_[elementIdx] = (wallOuterNormal[0] == 1) ? 0 : 1;
377 else // 3D
378 wallNormalAxis_[elementIdx] = (wallOuterNormal[0] == 1) ? 0 : ((wallOuterNormal[1] == 1) ? 1 : 2);
379 }
380 else
381 11600 wallNormalAxis_[elementIdx] = fixedWallNormalAxis_;
382 }
383 }
384 70 }
385
386 /*!
387 * \brief Store all direct neighbor indices for each element
388 */
389 70 void findNeighborIndices_()
390 {
391 // search for neighbor Idxs
392
1/2
✓ Branch 3 taken 7086 times.
✗ Branch 4 not taken.
15282 for (const auto& element : elements(this->gridGeometry().gridView()))
393 {
394 15072 unsigned int elementIdx = this->gridGeometry().elementMapper().index(element);
395
2/2
✓ Branch 1 taken 14072 times.
✓ Branch 2 taken 7036 times.
22608 for (unsigned int axisIdx = 0; axisIdx < dim; ++axisIdx)
396 {
397 45216 neighborIdx_[elementIdx][axisIdx][0] = elementIdx;
398 45216 neighborIdx_[elementIdx][axisIdx][1] = elementIdx;
399 }
400
401
2/2
✓ Branch 3 taken 7036 times.
✓ Branch 4 taken 28144 times.
60288 for (const auto& intersection : intersections(this->gridGeometry().gridView(), element))
402 {
403
1/2
✓ Branch 0 taken 28144 times.
✗ Branch 1 not taken.
30144 if (intersection.boundary())
404 continue;
405
406 109896 unsigned int neighborIdx = this->gridGeometry().elementMapper().index(intersection.outside());
407
2/2
✓ Branch 0 taken 51748 times.
✓ Branch 1 taken 25874 times.
82422 for (unsigned int axisIdx = 0; axisIdx < dim; ++axisIdx)
408 {
409
6/6
✓ Branch 3 taken 25874 times.
✓ Branch 4 taken 25874 times.
✓ Branch 5 taken 25874 times.
✓ Branch 6 taken 25874 times.
✓ Branch 7 taken 25874 times.
✓ Branch 8 taken 25874 times.
54948 if (abs(cellCenter(elementIdx)[axisIdx] - cellCenter(neighborIdx)[axisIdx]) > 1e-8)
410 {
411
4/4
✓ Branch 3 taken 12937 times.
✓ Branch 4 taken 12937 times.
✓ Branch 5 taken 12937 times.
✓ Branch 6 taken 12937 times.
27474 if (cellCenter(elementIdx)[axisIdx] > cellCenter(neighborIdx)[axisIdx])
412 54948 neighborIdx_[elementIdx][axisIdx][0] = neighborIdx;
413
414
4/4
✓ Branch 3 taken 12937 times.
✓ Branch 4 taken 12937 times.
✓ Branch 5 taken 12937 times.
✓ Branch 6 taken 12937 times.
27474 if (cellCenter(elementIdx)[axisIdx] < cellCenter(neighborIdx)[axisIdx])
415 54948 neighborIdx_[elementIdx][axisIdx][1] = neighborIdx;
416 }
417 }
418 }
419 }
420 70 }
421
422 template<class SolutionVector>
423 1127 void calculateCCVelocities_(const SolutionVector& curSol)
424 {
425
2/4
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
2254 auto fvGeometry = localView(this->gridGeometry());
426 // calculate cell-center-averaged velocities
427
6/11
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 246055 times.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 20 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 520 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 500 times.
✗ Branch 14 not taken.
495357 for (const auto& element : elements(this->gridGeometry().gridView()))
428 {
429
1/2
✓ Branch 1 taken 500 times.
✗ Branch 2 not taken.
245968 fvGeometry.bindElement(element);
430 737904 unsigned int elementIdx = this->gridGeometry().elementMapper().index(element);
431
432 // calculate velocities
433 245968 DimVector velocityTemp(0.0);
434
4/4
✓ Branch 0 taken 981872 times.
✓ Branch 1 taken 245468 times.
✓ Branch 2 taken 981872 times.
✓ Branch 3 taken 245468 times.
1479808 for (auto&& scvf : scvfs(fvGeometry))
435 {
436 983872 const int dofIdxFace = scvf.dofIndex();
437 1967744 const auto numericalSolutionFace = curSol[GridGeometry::faceIdx()][dofIdxFace][Indices::velocity(scvf.directionIndex())];
438 1967744 velocityTemp[scvf.directionIndex()] += numericalSolutionFace;
439 }
440
2/2
✓ Branch 0 taken 490936 times.
✓ Branch 1 taken 245468 times.
737904 for (unsigned int axisIdx = 0; axisIdx < dim; ++axisIdx)
441 1967744 velocity_[elementIdx][axisIdx] = velocityTemp[axisIdx] * 0.5; // faces are equidistant to cell center
442 }
443 1127 }
444
445
446 1127 void calculateCCVelocityGradients_()
447 {
448 using std::abs;
449
450 // calculate cell-center-averaged velocity gradients, maximum, and minimum values
451
2/4
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
2254 auto fvGeometry = localView(this->gridGeometry());
452
5/9
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 246055 times.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 20 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 520 times.
✗ Branch 10 not taken.
495357 for (const auto& element : elements(this->gridGeometry().gridView()))
453 {
454 491936 const unsigned int elementIdx = this->gridGeometry().elementMapper().index(element);
455
456
2/2
✓ Branch 1 taken 490936 times.
✓ Branch 2 taken 245468 times.
737904 for (unsigned int j = 0; j < dim; ++j)
457 {
458
2/2
✓ Branch 0 taken 981872 times.
✓ Branch 1 taken 490936 times.
1475808 for (unsigned int i = 0; i < dim; ++i)
459 {
460
1/2
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
983872 const unsigned int neighborIndex0 = neighborIndex(elementIdx, j, 0);
461
1/2
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
983872 const unsigned int neighborIndex1 = neighborIndex(elementIdx, j, 1);
462
463
2/4
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2000 times.
✗ Branch 5 not taken.
1967744 velocityGradients_[elementIdx][i][j]
464
2/4
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2000 times.
✗ Branch 5 not taken.
1967744 = (ccVelocity(neighborIndex1, i) - ccVelocity(neighborIndex0, i))
465
5/10
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2000 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2000 times.
✗ Branch 14 not taken.
983872 / (cellCenter(neighborIndex1)[j] - cellCenter(neighborIndex0)[j]);
466
467
8/14
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 981872 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 979872 times.
✓ Branch 7 taken 2000 times.
✓ Branch 8 taken 979872 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2000 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2000 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2000 times.
983872 if (abs(cellCenter(neighborIndex1)[j] - cellCenter(neighborIndex0)[j]) < 1e-8)
468 velocityGradients_[elementIdx][i][j] = 0.0;
469 }
470 }
471
472
1/2
✓ Branch 1 taken 500 times.
✗ Branch 2 not taken.
245968 fvGeometry.bindElement(element);
473
6/6
✓ Branch 0 taken 981872 times.
✓ Branch 1 taken 245468 times.
✓ Branch 2 taken 981872 times.
✓ Branch 3 taken 245468 times.
✓ Branch 4 taken 68690 times.
✓ Branch 5 taken 911182 times.
2459680 for (auto&& scvf : scvfs(fvGeometry))
474 {
475 // adapt calculations for Dirichlet condition
476 983872 unsigned int axisIdx = scvf.directionIndex();
477
2/2
✓ Branch 0 taken 69090 times.
✓ Branch 1 taken 912782 times.
983872 if (scvf.boundary())
478 {
479
2/2
✓ Branch 0 taken 138180 times.
✓ Branch 1 taken 69090 times.
208470 for (unsigned int velIdx = 0; velIdx < dim; ++velIdx)
480 {
481
2/2
✓ Branch 1 taken 52100 times.
✓ Branch 2 taken 86080 times.
139540 if (!asImp_().boundaryTypes(element, scvf).isDirichlet(Indices::velocity(velIdx)))
482 52700 continue;
483
484
1/2
✓ Branch 1 taken 200 times.
✗ Branch 2 not taken.
86680 Scalar dirichletVelocity = asImp_().dirichlet(element, scvf)[Indices::velocity(velIdx)];
485
486
1/2
✓ Branch 1 taken 200 times.
✗ Branch 2 not taken.
86280 unsigned int neighborIdx = neighborIndex(elementIdx, axisIdx, 0);
487
8/12
✓ Branch 1 taken 200 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 68690 times.
✓ Branch 4 taken 17390 times.
✓ Branch 5 taken 68690 times.
✓ Branch 6 taken 17190 times.
✓ Branch 7 taken 200 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 200 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 200 times.
✗ Branch 12 not taken.
258840 if (scvf.center()[axisIdx] < cellCenter(elementIdx)[axisIdx])
488 138180 neighborIdx = neighborIndex(elementIdx, axisIdx, 1);
489
490 172560 velocityGradients_[elementIdx][velIdx][axisIdx]
491
1/2
✓ Branch 1 taken 200 times.
✗ Branch 2 not taken.
86280 = (ccVelocity(neighborIdx, velIdx) - dirichletVelocity)
492
1/2
✓ Branch 1 taken 200 times.
✗ Branch 2 not taken.
86280 / (cellCenter(neighborIdx)[axisIdx] - scvf.center()[axisIdx]);
493 }
494 }
495
496 // Calculate the BJS-velocity by accounting for all sub faces.
497
4/7
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 979872 times.
✓ Branch 4 taken 2000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2000 times.
✗ Branch 8 not taken.
2951616 std::vector<int> bjsNumFaces(dim, 0);
498
4/12
✓ Branch 1 taken 981872 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 981872 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 981872 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 981872 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
3935488 std::vector<unsigned int> bjsNeighbor(dim, 0);
499 983872 DimVector bjsVelocityAverage(0.0);
500 983872 DimVector normalNormCoordinate(0.0);
501 983872 unsigned int velCompIdx = Indices::velocity(scvf.directionIndex());
502 983872 const int numSubFaces = scvf.pairData().size();
503
2/2
✓ Branch 0 taken 1963744 times.
✓ Branch 1 taken 981872 times.
2951616 for(int localSubFaceIdx = 0; localSubFaceIdx < numSubFaces; ++localSubFaceIdx)
504 {
505
8/8
✓ Branch 0 taken 137380 times.
✓ Branch 1 taken 1822364 times.
✓ Branch 2 taken 137380 times.
✓ Branch 3 taken 1822364 times.
✓ Branch 4 taken 137380 times.
✓ Branch 5 taken 1822364 times.
✓ Branch 6 taken 137380 times.
✓ Branch 7 taken 1822364 times.
7870976 const auto& lateralFace = fvGeometry.scvf(scvf.insideScvIdx(), scvf.pairData()[localSubFaceIdx].localLateralFaceIdx);
506
507 // adapt calculations for Beavers-Joseph-Saffman condition
508 1967744 unsigned int lateralAxisIdx = lateralFace.directionIndex();
509
4/6
✓ Branch 0 taken 138180 times.
✓ Branch 1 taken 1825564 times.
✓ Branch 3 taken 138180 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 138180 times.
✗ Branch 6 not taken.
1968864 if (lateralFace.boundary() && (asImp_().boundaryTypes(element, lateralFace).isBeaversJoseph(Indices::velocity(velCompIdx))))
510 {
511 unsigned int neighborIdx = neighborIndex(elementIdx, lateralAxisIdx, 0);
512 if (lateralFace.center()[lateralAxisIdx] < cellCenter(elementIdx)[lateralAxisIdx])
513 neighborIdx = neighborIndex(elementIdx, lateralAxisIdx, 1);
514
515 const SubControlVolume& scv = fvGeometry.scv(scvf.insideScvIdx());
516 bjsVelocityAverage[lateralAxisIdx] += ParentType::beaversJosephVelocity(element, scv, scvf, lateralFace, ccVelocity(elementIdx, velCompIdx), 0.0);
517 if (bjsNumFaces[lateralAxisIdx] > 0 && neighborIdx != bjsNeighbor[lateralAxisIdx])
518 DUNE_THROW(Dune::InvalidStateException, "Two different neighborIdx should not occur");
519 bjsNeighbor[lateralAxisIdx] = neighborIdx;
520 normalNormCoordinate[lateralAxisIdx] = lateralFace.center()[lateralAxisIdx];
521 bjsNumFaces[lateralAxisIdx]++;
522 }
523 }
524
2/2
✓ Branch 0 taken 1963744 times.
✓ Branch 1 taken 981872 times.
2951616 for (unsigned axisIdx = 0; axisIdx < dim; ++axisIdx)
525 {
526
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1963744 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1963744 times.
3935488 if (bjsNumFaces[axisIdx] == 0)
527 continue;
528
529 unsigned int neighborIdx = bjsNeighbor[axisIdx];
530 bjsVelocityAverage[axisIdx] /= bjsNumFaces[axisIdx];
531
532 velocityGradients_[elementIdx][velCompIdx][axisIdx]
533 = (ccVelocity(neighborIdx, velCompIdx) - bjsVelocityAverage[axisIdx])
534 / (cellCenter(neighborIdx)[axisIdx] - normalNormCoordinate[axisIdx]);
535 }
536 }
537 }
538 1127 }
539
540 1127 void calculateMaxMinVelocities_()
541 {
542 using std::abs;
543
2/2
✓ Branch 1 taken 970 times.
✓ Branch 2 taken 137 times.
1127 if (isFlatWallBounded())
544 {
545 // If the parameter isFlatWallBounded is set to true,
546 // the maximum/minimum velocities are calculated along a profile perpendicular to the corresponding wall face.
547
548 // re-initialize min and max values
549 4950 velocityMaximum_.assign(this->gridGeometry().elementMapper().size(), DimVector(1e-16));
550 4950 velocityMinimum_.assign(this->gridGeometry().elementMapper().size(), DimVector(std::numeric_limits<Scalar>::max()));
551
552 // For each profile perpendicular to the channel wall, find the max and minimum velocities
553
1/2
✓ Branch 3 taken 212486 times.
✗ Branch 4 not taken.
427992 for (const auto& element : elements(this->gridGeometry().gridView()))
554 {
555 636048 const unsigned int elementIdx = this->gridGeometry().elementMapper().index(element);
556 212016 Scalar maxVelocity = 0.0;
557 212016 const unsigned int wallElementIdx = wallElementIndex(elementIdx);
558
559
2/2
✓ Branch 0 taken 423032 times.
✓ Branch 1 taken 211516 times.
636048 for (unsigned int axisIdx = 0; axisIdx < dim; ++axisIdx)
560 {
561
12/12
✓ Branch 0 taken 255466 times.
✓ Branch 1 taken 167566 times.
✓ Branch 2 taken 255466 times.
✓ Branch 3 taken 167566 times.
✓ Branch 4 taken 255466 times.
✓ Branch 5 taken 167566 times.
✓ Branch 6 taken 255466 times.
✓ Branch 7 taken 167566 times.
✓ Branch 8 taken 255466 times.
✓ Branch 9 taken 167566 times.
✓ Branch 10 taken 255466 times.
✓ Branch 11 taken 167566 times.
2544192 if (abs(ccVelocity(elementIdx, axisIdx)) > abs(velocityMaximum_[wallElementIdx][axisIdx]))
562 769398 velocityMaximum_[wallElementIdx][axisIdx] = ccVelocity(elementIdx, axisIdx);
563
564
12/12
✓ Branch 0 taken 108034 times.
✓ Branch 1 taken 314998 times.
✓ Branch 2 taken 108034 times.
✓ Branch 3 taken 314998 times.
✓ Branch 4 taken 108034 times.
✓ Branch 5 taken 314998 times.
✓ Branch 6 taken 108034 times.
✓ Branch 7 taken 314998 times.
✓ Branch 8 taken 108034 times.
✓ Branch 9 taken 314998 times.
✓ Branch 10 taken 108034 times.
✓ Branch 11 taken 314998 times.
2544192 if (abs(ccVelocity(elementIdx, axisIdx)) < abs(velocityMinimum_[wallElementIdx][axisIdx]))
565 324702 velocityMinimum_[wallElementIdx][axisIdx] = ccVelocity(elementIdx, axisIdx);
566
567 // Set the flow direction axis as the direction of the max velocity
568
13/22
✓ Branch 1 taken 423032 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 423032 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 423032 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 423032 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 211750 times.
✓ Branch 12 taken 211282 times.
✓ Branch 13 taken 211750 times.
✓ Branch 14 taken 211282 times.
✓ Branch 15 taken 211750 times.
✓ Branch 16 taken 211282 times.
✓ Branch 17 taken 423032 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 211282 times.
✓ Branch 20 taken 211750 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
1908378 if ((hasParam("RANS.FlowDirectionAxis") != 1) && (maxVelocity) < abs(ccVelocity(elementIdx, axisIdx)))
569 {
570 423564 maxVelocity = abs(ccVelocity(elementIdx, axisIdx));
571 423564 flowDirectionAxis_[elementIdx] = axisIdx;
572 }
573 }
574 }
575 }
576 else
577 {
578 // If the parameter isFlatWallBounded is set to false, or not set,
579 // the maximum/minimum velocities are calculated as a global max/min throughout the domain.
580
581 137 DimVector maxVelocity(0.0);
582 137 DimVector minVelocity(std::numeric_limits<Scalar>::max());
583 // Find the max and minimum velocities in the full domain
584
1/2
✓ Branch 3 taken 34089 times.
✗ Branch 4 not taken.
68315 for (const auto& element : elements(this->gridGeometry().gridView()))
585 {
586 67904 const unsigned int elementIdx = this->gridGeometry().elementMapper().index(element);
587
588
2/2
✓ Branch 1 taken 67904 times.
✓ Branch 2 taken 33952 times.
101856 for (unsigned int axisIdx = 0; axisIdx < dim; ++axisIdx)
589 {
590
10/10
✓ Branch 0 taken 3543 times.
✓ Branch 1 taken 64361 times.
✓ Branch 2 taken 3543 times.
✓ Branch 3 taken 64361 times.
✓ Branch 4 taken 3543 times.
✓ Branch 5 taken 64361 times.
✓ Branch 6 taken 3543 times.
✓ Branch 7 taken 64361 times.
✓ Branch 8 taken 3543 times.
✓ Branch 9 taken 64361 times.
339520 if (abs(ccVelocity(elementIdx, axisIdx)) > abs(maxVelocity[axisIdx]))
591 10629 maxVelocity[axisIdx] = ccVelocity(elementIdx, axisIdx);
592
593
10/10
✓ Branch 0 taken 2740 times.
✓ Branch 1 taken 65164 times.
✓ Branch 2 taken 2740 times.
✓ Branch 3 taken 65164 times.
✓ Branch 4 taken 2740 times.
✓ Branch 5 taken 65164 times.
✓ Branch 6 taken 2740 times.
✓ Branch 7 taken 65164 times.
✓ Branch 8 taken 2740 times.
✓ Branch 9 taken 65164 times.
339520 if (abs(ccVelocity(elementIdx, axisIdx)) < abs(minVelocity[axisIdx]))
594 8220 minVelocity[axisIdx] = ccVelocity(elementIdx, axisIdx);
595 }
596 }
597 548 velocityMaximum_.assign(this->gridGeometry().elementMapper().size(), maxVelocity);
598 548 velocityMinimum_.assign(this->gridGeometry().elementMapper().size(), minVelocity);
599 }
600 1127 }
601
602 1127 void calculateStressTensor_()
603 {
604
1/2
✓ Branch 3 taken 246575 times.
✗ Branch 4 not taken.
495317 for (const auto& element : elements(this->gridGeometry().gridView()))
605 {
606 737904 unsigned int elementIdx = this->gridGeometry().elementMapper().index(element);
607 245968 Dune::FieldMatrix<Scalar, GridView::dimension, GridView::dimension> stressTensor(0.0);
608
2/2
✓ Branch 0 taken 490936 times.
✓ Branch 1 taken 245468 times.
737904 for (unsigned int j = 0; j < dim; ++j)
609 {
610
2/2
✓ Branch 0 taken 981872 times.
✓ Branch 1 taken 490936 times.
1475808 for (unsigned int i = 0; i < dim; ++i)
611 {
612 2951616 stressTensor[j][i] = 0.5 * velocityGradient(elementIdx, j, i)
613 1967744 + 0.5 * velocityGradient(elementIdx, i, j);
614 }
615 }
616 245968 stressTensorScalarProduct_[elementIdx] = 0.0;
617
2/2
✓ Branch 0 taken 490936 times.
✓ Branch 1 taken 245468 times.
737904 for (unsigned int j = 0; j < dim; ++j)
618 {
619
2/2
✓ Branch 0 taken 981872 times.
✓ Branch 1 taken 490936 times.
1475808 for (unsigned int i = 0; i < dim; ++i)
620 {
621 4919360 stressTensorScalarProduct_[elementIdx] += stressTensor[j][i] * stressTensor[j][i];
622 }
623 }
624 }
625 1127 }
626
627 1127 void calculateVorticityTensor_()
628 {
629
1/2
✓ Branch 3 taken 246575 times.
✗ Branch 4 not taken.
495317 for (const auto& element : elements(this->gridGeometry().gridView()))
630 {
631 737904 unsigned int elementIdx = this->gridGeometry().elementMapper().index(element);
632 245968 Dune::FieldMatrix<Scalar, GridView::dimension, GridView::dimension> vorticityTensor(0.0);
633
2/2
✓ Branch 0 taken 490936 times.
✓ Branch 1 taken 245468 times.
737904 for (unsigned int j = 0; j < dim; ++j)
634 {
635
2/2
✓ Branch 0 taken 981872 times.
✓ Branch 1 taken 490936 times.
1475808 for (unsigned int i = 0; i < dim; ++i)
636 {
637 2951616 vorticityTensor[j][i] = 0.5 * velocityGradient(elementIdx, j, i)
638 1967744 - 0.5 * velocityGradient(elementIdx, i, j);
639 }
640 }
641 245968 vorticityTensorScalarProduct_[elementIdx] = 0.0;
642
2/2
✓ Branch 0 taken 490936 times.
✓ Branch 1 taken 245468 times.
737904 for (unsigned int j = 0; j < dim; ++j)
643 {
644
2/2
✓ Branch 0 taken 981872 times.
✓ Branch 1 taken 490936 times.
1475808 for (unsigned int i = 0; i < dim; ++i)
645 {
646 4919360 vorticityTensorScalarProduct_[elementIdx] += vorticityTensor[j][i] * vorticityTensor[j][i];
647 }
648 }
649 }
650 1127 }
651
652 template<class SolutionVector>
653 1127 void storeViscosities_(const SolutionVector& curSol)
654 {
655 // calculate or call all secondary variables
656
2/4
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
2254 auto fvGeometry = localView(this->gridGeometry());
657
5/9
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 246055 times.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 20 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 520 times.
✗ Branch 10 not taken.
495357 for (const auto& element : elements(this->gridGeometry().gridView()))
658 {
659 737904 unsigned int elementIdx = this->gridGeometry().elementMapper().index(element);
660
1/2
✓ Branch 1 taken 500 times.
✗ Branch 2 not taken.
245968 fvGeometry.bindElement(element);
661
6/6
✓ Branch 0 taken 500 times.
✓ Branch 1 taken 500 times.
✓ Branch 2 taken 244968 times.
✓ Branch 3 taken 244968 times.
✓ Branch 4 taken 244968 times.
✓ Branch 5 taken 244968 times.
981872 for (auto&& scv : scvs(fvGeometry))
662 {
663 245968 const int dofIdx = scv.dofIndex();
664 // construct a privars object from the cell center solution vector
665 491936 const auto& cellCenterPriVars = curSol[GridGeometry::cellCenterIdx()][dofIdx];
666 245968 PrimaryVariables priVars = makePriVarsFromCellCenterPriVars<PrimaryVariables>(cellCenterPriVars);
667
1/4
✓ Branch 1 taken 500 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
491936 auto elemSol = elementSolution<typename GridGeometry::LocalView>(std::move(priVars));
668
669 245968 VolumeVariables volVars;
670
1/2
✓ Branch 1 taken 245468 times.
✗ Branch 2 not taken.
245968 volVars.update(elemSol, asImp_(), element, scv);
671
2/4
✓ Branch 0 taken 245468 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 245468 times.
✗ Branch 3 not taken.
491936 storedDensity_[elementIdx] = volVars.density();
672
3/6
✓ Branch 0 taken 245468 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 245468 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 245468 times.
✗ Branch 5 not taken.
737904 storedViscosity_[elementIdx] = volVars.viscosity();
673 }
674 }
675 1127 }
676
677 const int fixedFlowDirectionAxis_ = getParam<int>("RANS.FlowDirectionAxis", 0);
678 const int fixedWallNormalAxis_ = getParam<int>("RANS.WallNormalAxis", 1);
679
680 std::vector<unsigned int> wallNormalAxis_;
681 std::vector<unsigned int> flowDirectionAxis_;
682 std::vector<Scalar> wallDistance_;
683 std::vector<unsigned int> wallElementIdx_;
684 std::vector<std::array<std::array<unsigned int, 2>, dim>> neighborIdx_;
685
686 std::vector<DimVector> velocity_;
687 std::vector<DimVector> velocityMaximum_;
688 std::vector<DimVector> velocityMinimum_;
689 std::vector<DimMatrix> velocityGradients_;
690
691 std::vector<Scalar> stressTensorScalarProduct_;
692 std::vector<Scalar> vorticityTensorScalarProduct_;
693
694 std::vector<Scalar> storedDensity_;
695 std::vector<Scalar> storedViscosity_;
696
697 //! Returns the implementation of the problem (i.e. static polymorphism)
698 Implementation &asImp_()
699 { return *static_cast<Implementation *>(this); }
700
701 //! \copydoc asImp_()
702 const Implementation &asImp_() const
703 { return *static_cast<const Implementation *>(this); }
704 };
705
706 } // end namespace Dumux
707
708 #endif
709