GCC Code Coverage Report


Directory: ../../../builds/dumux-repositories/
File: dumux/dumux/freeflow/navierstokes/boundarytypes.hh
Date: 2025-04-12 19:19:20
Exec Total Coverage
Lines: 29 29 100.0%
Functions: 9 9 100.0%
Branches: 137 236 58.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-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 NavierStokesModel
10 * \copydoc Dumux::NavierStokesBoundaryTypes
11 */
12 #ifndef FREEFLOW_NAVIERSTOKES_BOUNDARY_TYPES_HH
13 #define FREEFLOW_NAVIERSTOKES_BOUNDARY_TYPES_HH
14
15 #include <dumux/common/boundarytypes.hh>
16 #include <dumux/common/typetraits/typetraits.hh>
17
18 namespace Dumux {
19
20 /*!
21 * \ingroup NavierStokesModel
22 * \brief Class to specify the type of a boundary condition for the Navier-Stokes model.
23 */
24 template <int numEq>
25 class NavierStokesBoundaryTypes : public BoundaryTypes<numEq>
26 {
27 using ParentType = BoundaryTypes<numEq>;
28
29 public:
30 424955792 NavierStokesBoundaryTypes()
31 424955792 {
32
2/2
✓ Branch 0 taken 2468830529 times.
✓ Branch 1 taken 424953086 times.
2893800109 for (int eqIdx=0; eqIdx < numEq; ++eqIdx)
33 2468844443 resetEq(eqIdx);
34 424955666 }
35
36 /*!
37 * \brief Reset the boundary types for one equation.
38 */
39 5924045547 void resetEq(const int eqIdx)
40 {
41 5864398881 ParentType::resetEq(eqIdx);
42
43 5924045547 boundaryInfo_[eqIdx].isSymmetry = false;
44 5924045547 boundaryInfo_[eqIdx].isBeaversJoseph = false;
45
3/8
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 26 times.
4916963273 boundaryInfo_[eqIdx].isOutflow = false;
46 }
47
48 /*!
49 * \brief Sets a symmetry boundary condition for all equations
50 */
51 145736077 void setAllSymmetry()
52 {
53
2/2
✓ Branch 0 taken 947435608 times.
✓ Branch 1 taken 145736077 times.
1093171685 for (int eqIdx=0; eqIdx < numEq; ++eqIdx)
54 {
55 947435608 resetEq(eqIdx);
56 947435608 boundaryInfo_[eqIdx].isSymmetry = true;
57 }
58 145736077 }
59
60 /*!
61 * \brief Returns true if the there is a symmetry boundary condition
62 */
63 49924941 bool isSymmetry() const
64
28/44
✓ Branch 0 taken 12677255 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 832668 times.
✓ Branch 3 taken 13777488 times.
✓ Branch 4 taken 5193608 times.
✓ Branch 5 taken 1103606 times.
✓ Branch 6 taken 5327364 times.
✓ Branch 7 taken 661612 times.
✓ Branch 8 taken 6886286 times.
✓ Branch 9 taken 931696 times.
✓ Branch 10 taken 412058 times.
✓ Branch 11 taken 2012100 times.
✓ Branch 12 taken 24325 times.
✓ Branch 13 taken 84150 times.
✓ Branch 14 taken 35 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 35 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 55 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 30 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 50 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 50 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 70 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 30 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 50 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 50 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 70 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 30 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 50 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 50 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 70 times.
✗ Branch 43 not taken.
49924941 { return boundaryInfo_[0].isSymmetry; }
65
66 /*!
67 * \brief Prevent setting all boundary conditions to Dirichlet.
68 */
69 template<class T = void>
70 void setAllDirichlet()
71 {
72 static_assert(AlwaysFalse<T>::value, "Setting all boundary types to Dirichlet not permitted!");
73 }
74
75 /*!
76 * \brief Prevent setting all boundary conditions to Neumann.
77 */
78 template<class T = void>
79 void setAllNeumann()
80 {
81 static_assert(AlwaysFalse<T>::value, "Setting all boundary types to Neumann not permitted!");
82 }
83
84 /*!
85 * \brief Set a boundary condition for a single equation to
86 * Beavers-Joseph(-Saffmann) (special case of Dirichlet b.c.).
87 */
88 1331516 void setBeaversJoseph(const int eqIdx)
89 {
90 1331516 resetEq(eqIdx);
91 1331516 boundaryInfo_[eqIdx].isBeaversJoseph = true;
92 1331516 }
93
94 /*!
95 * \brief Returns true if an equation is used to specify a
96 * Beavers-Joseph(-Saffman) boundary condition.
97 *
98 * \param eqIdx The index of the equation
99 */
100 38880414 bool isBeaversJoseph(const int eqIdx) const
101
25/40
✓ Branch 0 taken 8287843 times.
✓ Branch 1 taken 111908 times.
✓ Branch 2 taken 40 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 255462 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 346812 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 13541 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 346812 times.
✓ Branch 11 taken 5221812 times.
✓ Branch 12 taken 149648 times.
✓ Branch 13 taken 5079880 times.
✓ Branch 14 taken 346812 times.
✓ Branch 15 taken 5271160 times.
✓ Branch 16 taken 255462 times.
✓ Branch 17 taken 13055402 times.
✓ Branch 18 taken 137420 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 40 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 40 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 40 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 40 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 40 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 40 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 40 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 40 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 40 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 40 times.
✗ Branch 39 not taken.
38880414 { return boundaryInfo_[eqIdx].isBeaversJoseph; }
102
103 /*!
104 * \brief Returns true if some equation is used to specify a
105 * Beavers-Joseph(-Saffman) boundary condition.
106 */
107 bool hasBeaversJoseph() const
108 {
109 for (int i = 0; i < numEq; ++i)
110 if (boundaryInfo_[i].isBeaversJoseph)
111 return true;
112 return false;
113 }
114
115 /*!
116 * \brief Set an outflow boundary condition
117 */
118 45135285 void setOutflow(const int eqIdx)
119 {
120 58315150 resetEq(eqIdx);
121 55524621 boundaryInfo_[eqIdx].isOutflow = true;
122 58315150 }
123
124 /*!
125 * \brief Returns true if an outflow boundary condition was set
126 * \param eqIdx The index of the equation
127 */
128 26128774 bool isOutflow(const int eqIdx) const
129
77/140
✓ Branch 0 taken 4349068 times.
✓ Branch 1 taken 4274242 times.
✓ Branch 2 taken 5212352 times.
✓ Branch 3 taken 3971114 times.
✓ Branch 4 taken 2611224 times.
✓ Branch 5 taken 2242714 times.
✓ Branch 6 taken 758541 times.
✓ Branch 7 taken 1225641 times.
✓ Branch 8 taken 98080 times.
✓ Branch 9 taken 623088 times.
✓ Branch 10 taken 60320 times.
✓ Branch 11 taken 270982 times.
✓ Branch 12 taken 56100 times.
✓ Branch 13 taken 81980 times.
✓ Branch 14 taken 20 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 40 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 20 times.
✓ Branch 20 taken 40 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 40 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 20 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 40 times.
✗ Branch 28 not taken.
✓ Branch 29 taken 20 times.
✓ Branch 30 taken 20 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 40 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 20 times.
✓ Branch 36 taken 20 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 40 times.
✗ Branch 40 not taken.
✓ Branch 41 taken 20 times.
✓ Branch 42 taken 40 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 40 times.
✗ Branch 46 not taken.
✓ Branch 47 taken 20 times.
✓ Branch 48 taken 15 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 40 times.
✗ Branch 52 not taken.
✓ Branch 53 taken 20 times.
✓ Branch 54 taken 35 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 40 times.
✗ Branch 58 not taken.
✓ Branch 59 taken 20 times.
✓ Branch 60 taken 35 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 40 times.
✗ Branch 64 not taken.
✓ Branch 65 taken 20 times.
✓ Branch 66 taken 55 times.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✓ Branch 69 taken 40 times.
✗ Branch 70 not taken.
✓ Branch 71 taken 20 times.
✓ Branch 72 taken 30 times.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✓ Branch 75 taken 40 times.
✗ Branch 76 not taken.
✓ Branch 77 taken 20 times.
✓ Branch 78 taken 50 times.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✓ Branch 81 taken 40 times.
✗ Branch 82 not taken.
✓ Branch 83 taken 20 times.
✓ Branch 84 taken 50 times.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✓ Branch 87 taken 40 times.
✗ Branch 88 not taken.
✓ Branch 89 taken 20 times.
✓ Branch 90 taken 70 times.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✓ Branch 93 taken 40 times.
✗ Branch 94 not taken.
✓ Branch 95 taken 20 times.
✓ Branch 96 taken 30 times.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✓ Branch 99 taken 40 times.
✗ Branch 100 not taken.
✓ Branch 101 taken 20 times.
✓ Branch 102 taken 50 times.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✓ Branch 105 taken 40 times.
✗ Branch 106 not taken.
✓ Branch 107 taken 20 times.
✓ Branch 108 taken 50 times.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✓ Branch 111 taken 40 times.
✗ Branch 112 not taken.
✓ Branch 113 taken 20 times.
✓ Branch 114 taken 70 times.
✗ Branch 115 not taken.
✗ Branch 116 not taken.
✓ Branch 117 taken 40 times.
✗ Branch 118 not taken.
✓ Branch 119 taken 20 times.
✓ Branch 120 taken 30 times.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✓ Branch 123 taken 40 times.
✗ Branch 124 not taken.
✓ Branch 125 taken 20 times.
✓ Branch 126 taken 50 times.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✓ Branch 129 taken 40 times.
✗ Branch 130 not taken.
✓ Branch 131 taken 20 times.
✓ Branch 132 taken 50 times.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✓ Branch 135 taken 40 times.
✗ Branch 136 not taken.
✓ Branch 137 taken 20 times.
✓ Branch 138 taken 70 times.
✗ Branch 139 not taken.
26128774 { return boundaryInfo_[eqIdx].isOutflow; }
130
131 /*!
132 * \brief Returns true if some equation has an outflow boundary condition
133 */
134 bool hasOutflow() const
135 {
136 for (int i = 0; i < numEq; ++i)
137 if (boundaryInfo_[i].isOutflow)
138 return true;
139 return false;
140 }
141
142 protected:
143 //! use bitfields to minimize the size
144 struct NavierStokesBoundaryInfo
145 {
146 bool isSymmetry : 1;
147 bool isOutflow : 1;
148 bool isBeaversJoseph : 1;
149 };
150
151 std::array<NavierStokesBoundaryInfo, numEq> boundaryInfo_;
152 };
153
154 } // end namespace Dumux
155
156 #endif
157