GCC Code Coverage Report


Directory: ../../../builds/dumux-repositories/
File: dumux/dumux/discretization/facecentered/staggered/subcontrolvolume.hh
Date: 2025-04-12 19:19:20
Exec Total Coverage
Lines: 35 35 100.0%
Functions: 8 8 100.0%
Branches: 166 195 85.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 FaceCenteredStaggeredDiscretization
10 * \copydoc Dumux::FaceCenteredStaggeredSubControlVolume
11 */
12 #ifndef DUMUX_DISCRETIZATION_FACECENTERED_STAGGERED_SUBCONTROLVOLUME_HH
13 #define DUMUX_DISCRETIZATION_FACECENTERED_STAGGERED_SUBCONTROLVOLUME_HH
14
15 #include <array>
16 #include <utility>
17
18 #include <dune/geometry/type.hh>
19 #include <dune/geometry/axisalignedcubegeometry.hh>
20
21 #include <dumux/common/indextraits.hh>
22
23 namespace Dumux {
24
25 /*!
26 * \ingroup FaceCenteredStaggeredDiscretization
27 * \brief Default traits class to be used for the sub-control volumes
28 * for the face-centered staggered scheme
29 * \tparam GV the type of the grid view
30 */
31 template<class GridView>
32 struct FaceCenteredDefaultScvGeometryTraits
33 {
34 using GridIndexType = typename IndexTraits<GridView>::GridIndex;
35 using LocalIndexType = typename IndexTraits<GridView>::LocalIndex;
36 using Scalar = typename GridView::ctype;
37 using Element = typename GridView::template Codim<0>::Entity;
38 using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
39
40 static constexpr int dim = GridView::Grid::dimension;
41 static constexpr int dimWorld = GridView::Grid::dimensionworld;
42 using CornerStorage = std::array<GlobalPosition, (1<<(dim))>;
43 using Geometry = Dune::AxisAlignedCubeGeometry<Scalar, dim, dimWorld>;
44 };
45
46 /*!
47 * \ingroup FaceCenteredStaggeredDiscretization
48 * \brief Face centered staggered sub control volume
49 */
50 template<class GridView, class T = FaceCenteredDefaultScvGeometryTraits<GridView>>
51 class FaceCenteredStaggeredSubControlVolume
52 {
53 using Geometry = typename T::Geometry;
54 using CornerStorage = typename T::CornerStorage;
55 using Element = typename T::Element;
56 using GlobalPosition = typename T::GlobalPosition;
57 using Scalar = typename T::Scalar;
58 using GridIndexType = typename T::GridIndexType;
59 using SmallLocalIndexType = typename IndexTraits<GridView>::SmallLocalIndex;
60
61 using ElementGeometry = typename Element::Geometry;
62 using IntersectionGeometry = typename GridView::Intersection::Geometry;
63
64
65 public:
66 //! state the traits public and thus export all types
67 using Traits = T;
68
69 19673450 FaceCenteredStaggeredSubControlVolume() = default;
70
71
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 32 times.
10124302 FaceCenteredStaggeredSubControlVolume(const ElementGeometry& elementGeometry,
72 const IntersectionGeometry& intersectionGeometry,
73 const GridIndexType globalIndex,
74 const SmallLocalIndexType indexInElement,
75 const GridIndexType dofIdx,
76 const SmallLocalIndexType dofAxis,
77 const GridIndexType eIdx,
78 const bool boundary)
79
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 32 times.
39095680 : center_(0.5*(intersectionGeometry.center() + elementGeometry.center()))
80
2/2
✓ Branch 0 taken 33782 times.
✓ Branch 1 taken 498494 times.
10158052 , dofPosition_(intersectionGeometry.center())
81 10124302 , volume_(elementGeometry.volume()*0.5)
82 10124238 , globalIndex_(globalIndex)
83 10124238 , indexInElement_(indexInElement)
84 10124238 , dofIdx_(dofIdx)
85 10124238 , dofAxis_(dofAxis)
86 10124238 , eIdx_(eIdx)
87 10124302 , boundary_(boundary)
88 {
89
2/2
✓ Branch 0 taken 5062151 times.
✓ Branch 1 taken 5062151 times.
10124302 directionSign_ = (indexInElement % 2) ? 1.0 : -1.0;
90 10124238 }
91
92 //! The center of the sub control volume
93 2032072 const GlobalPosition& center() const
94
5/8
✓ Branch 1 taken 1376860 times.
✓ Branch 2 taken 537600 times.
✓ Branch 4 taken 856 times.
✓ Branch 5 taken 335244 times.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
✗ Branch 0 not taken.
✗ Branch 3 not taken.
81489048 { return center_; }
95
96 //! The position of the degree of freedom
97 54004472 const GlobalPosition& dofPosition() const
98
4/6
✓ Branch 1 taken 2099645 times.
✓ Branch 2 taken 19863 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 0 taken 10312 times.
✓ Branch 3 taken 71644 times.
580579533 { return dofPosition_; }
99
100 168739046 Scalar volume() const
101
4/4
✓ Branch 1 taken 11 times.
✓ Branch 2 taken 9589 times.
✓ Branch 3 taken 1749118 times.
✓ Branch 4 taken 349226 times.
64503488 { return volume_; }
102
103 684021676 GridIndexType dofIndex() const
104
46/50
✓ Branch 1 taken 12588682 times.
✓ Branch 2 taken 1056 times.
✓ Branch 4 taken 28812 times.
✓ Branch 5 taken 184 times.
✓ Branch 7 taken 2191366 times.
✓ Branch 8 taken 138 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 1858972 times.
✓ Branch 17 taken 909614 times.
✓ Branch 18 taken 32408 times.
✓ Branch 20 taken 6385586 times.
✓ Branch 21 taken 198466 times.
✓ Branch 22 taken 1144714 times.
✓ Branch 23 taken 1735432 times.
✓ Branch 24 taken 586696 times.
✓ Branch 25 taken 1543792 times.
✓ Branch 27 taken 2163084 times.
✓ Branch 28 taken 602219 times.
✓ Branch 29 taken 430514 times.
✓ Branch 30 taken 390138 times.
✓ Branch 0 taken 13942 times.
✓ Branch 3 taken 102612 times.
✓ Branch 6 taken 14 times.
✓ Branch 9 taken 8142 times.
✓ Branch 10 taken 360 times.
✗ Branch 11 not taken.
✓ Branch 26 taken 139281 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 2132640 times.
✓ Branch 31 taken 3777920 times.
✓ Branch 12 taken 13456 times.
✓ Branch 13 taken 6520 times.
✓ Branch 34 taken 1084860 times.
✓ Branch 35 taken 14160 times.
✓ Branch 36 taken 13872 times.
✓ Branch 37 taken 8800 times.
✓ Branch 33 taken 556272 times.
✓ Branch 39 taken 62100 times.
✓ Branch 40 taken 1120 times.
✓ Branch 41 taken 9688 times.
✓ Branch 42 taken 18324 times.
✓ Branch 43 taken 2608 times.
✓ Branch 44 taken 536 times.
✓ Branch 48 taken 3934 times.
✓ Branch 49 taken 3586 times.
✗ Branch 32 not taken.
✓ Branch 38 taken 1066500 times.
✓ Branch 45 taken 20 times.
✓ Branch 46 taken 1960 times.
✓ Branch 47 taken 760 times.
684100710 { return dofIdx_; }
105
106
2/2
✓ Branch 0 taken 71 times.
✓ Branch 1 taken 64553893 times.
72845498 GridIndexType index() const
107
15/18
✓ Branch 0 taken 204002788 times.
✓ Branch 1 taken 566784 times.
✓ Branch 3 taken 1936144 times.
✓ Branch 4 taken 1709120 times.
✓ Branch 6 taken 312606 times.
✓ Branch 7 taken 1798542 times.
✓ Branch 9 taken 2012722 times.
✓ Branch 10 taken 17328 times.
✓ Branch 12 taken 453 times.
✓ Branch 13 taken 768 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 7072 times.
✓ Branch 11 taken 14145 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 2 taken 1542420 times.
✓ Branch 5 taken 16620 times.
✓ Branch 8 taken 14373466 times.
380969102 { return globalIndex_; }
108
109 1427527980 GridIndexType elementIndex() const
110
14/17
✓ Branch 1 taken 229733826 times.
✓ Branch 2 taken 4508950 times.
✓ Branch 3 taken 5597470 times.
✓ Branch 4 taken 124579702 times.
✓ Branch 5 taken 420706 times.
✓ Branch 6 taken 1953460 times.
✓ Branch 7 taken 119208348 times.
✓ Branch 8 taken 19567092 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 3419472 times.
✓ Branch 11 taken 3716592 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 41408 times.
✗ Branch 17 not taken.
✓ Branch 0 taken 8625264 times.
✓ Branch 13 taken 9582 times.
✓ Branch 15 taken 323400 times.
1127679462 { return eIdx_; }
111
112 357053958 SmallLocalIndexType indexInElement() const
113
6/10
✓ Branch 0 taken 52328 times.
✓ Branch 1 taken 50376 times.
✓ Branch 2 taken 320 times.
✓ Branch 3 taken 992 times.
✓ Branch 5 taken 5100 times.
✓ Branch 6 taken 10100 times.
✗ Branch 4 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
357053958 { return indexInElement_; }
114
115 711552874 SmallLocalIndexType localDofIndex() const
116
9/12
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 12660060 times.
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 3313038 times.
✓ Branch 5 taken 28800 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 30 times.
✓ Branch 9 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 10 taken 60 times.
✓ Branch 11 taken 150 times.
✗ Branch 7 not taken.
294547444 { return indexInElement_; }
117
118 793306879 SmallLocalIndexType dofAxis() const
119
29/33
✓ Branch 0 taken 171502726 times.
✓ Branch 1 taken 33448334 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 50 times.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 60 times.
✓ Branch 9 taken 1745724 times.
✓ Branch 10 taken 152622 times.
✓ Branch 11 taken 158756 times.
✓ Branch 13 taken 130956 times.
✓ Branch 14 taken 58952 times.
✓ Branch 15 taken 193238 times.
✓ Branch 16 taken 2538286 times.
✓ Branch 17 taken 565798 times.
✓ Branch 18 taken 55590234 times.
✓ Branch 20 taken 28663604 times.
✓ Branch 21 taken 251790 times.
✓ Branch 22 taken 2381389 times.
✓ Branch 23 taken 1922049 times.
✓ Branch 6 taken 100 times.
✗ Branch 7 not taken.
✓ Branch 12 taken 59840 times.
✓ Branch 19 taken 105656 times.
✓ Branch 24 taken 243114 times.
✓ Branch 25 taken 6922864 times.
✓ Branch 26 taken 16970564 times.
✓ Branch 27 taken 27964 times.
✓ Branch 28 taken 8686 times.
✓ Branch 29 taken 344566 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 56 times.
✓ Branch 32 taken 56 times.
786638943 { return dofAxis_; }
120
121 5253342 std::int_least8_t directionSign() const
122
2/3
✓ Branch 1 taken 232 times.
✗ Branch 2 not taken.
✓ Branch 0 taken 224 times.
5253342 { return directionSign_; }
123
124 60677171 bool boundary() const
125
22/24
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 56 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1801004 times.
✓ Branch 4 taken 621502 times.
✓ Branch 5 taken 3619720 times.
✓ Branch 6 taken 679540 times.
✓ Branch 7 taken 7464693 times.
✓ Branch 8 taken 259412 times.
✓ Branch 9 taken 276794 times.
✓ Branch 10 taken 2946644 times.
✓ Branch 11 taken 11883626 times.
✓ Branch 12 taken 515680 times.
✓ Branch 13 taken 7960268 times.
✓ Branch 14 taken 800620 times.
✓ Branch 15 taken 2741544 times.
✓ Branch 16 taken 2968036 times.
✓ Branch 17 taken 8077910 times.
✓ Branch 18 taken 584918 times.
✓ Branch 19 taken 1280730 times.
✓ Branch 20 taken 519144 times.
✓ Branch 21 taken 1060902 times.
✓ Branch 22 taken 56 times.
✗ Branch 23 not taken.
60677171 { return boundary_; }
126
127 private:
128 GlobalPosition center_;
129 GlobalPosition dofPosition_;
130 Scalar volume_;
131 GridIndexType globalIndex_;
132 SmallLocalIndexType indexInElement_;
133 GridIndexType dofIdx_;
134 SmallLocalIndexType dofAxis_;
135 std::int_least8_t directionSign_;
136 GridIndexType eIdx_;
137 bool boundary_;
138 };
139
140 } // end namespace Dumux
141
142 #endif
143