GCC Code Coverage Report


Directory: Bembel/src/
File: Bembel/src/DuffyTrick/compareElements.hpp
Date: 2024-03-19 14:38:05
Exec Total Coverage
Lines: 26 26 100.0%
Functions: 1 1 100.0%
Branches: 35 54 64.8%

Line Branch Exec Source
1 // This file is part of Bembel, the higher order C++ boundary element library.
2 //
3 // Copyright (C) 2022 see <http://www.bembel.eu>
4 //
5 // It was written as part of a cooperation of J. Doelz, H. Harbrecht, S. Kurz,
6 // M. Multerer, S. Schoeps, and F. Wolf at Technische Universitaet Darmstadt,
7 // Universitaet Basel, and Universita della Svizzera italiana, Lugano. This
8 // source code is subject to the GNU General Public License version 3 and
9 // provided WITHOUT ANY WARRANTY, see <http://www.bembel.eu> for further
10 // information.
11
12 #ifndef BEMBEL_SRC_DUFFYTRICK_COMPAREELEMENTS_HPP_
13 #define BEMBEL_SRC_DUFFYTRICK_COMPAREELEMENTS_HPP_
14
15 namespace Bembel {
16 namespace DuffyTrick {
17 /**
18 * \ingroup DuffyTrick
19 * \brief Compares two elements for similarities and determines, how the
20 *elements have to be rotated to move the similarity to the first vertices_ or
21 *edge
22 */
23 39524 Eigen::Vector3i compareElements(const ElementTreeNode &e1,
24 const ElementTreeNode &e2, double *dist) {
25 39524 Eigen::Vector3i retval;
26 39524 retval.setZero();
27 // check if the two elements are identical and directly return;
28
2/2
✓ Branch 2 taken 638 times.
✓ Branch 3 taken 38886 times.
39524 if (std::addressof(e1) == std::addressof(e2)) {
29
3/6
✓ Branch 1 taken 638 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 638 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 638 times.
✗ Branch 8 not taken.
638 retval << 4, 4, 2;
30 638 *dist = 0;
31 638 return retval;
32 } else {
33 // if they are not identical, check if they have a positive distance
34 // check for common vertices
35
1/2
✓ Branch 2 taken 38886 times.
✗ Branch 3 not taken.
38886 *dist = (e1.midpoint_ - e2.midpoint_).norm() - e1.radius_ - e2.radius_;
36
2/2
✓ Branch 0 taken 34368 times.
✓ Branch 1 taken 4518 times.
38886 *dist = *dist >= 0 ? *dist : 0;
37 // check if elements are distinct and return now
38
2/2
✓ Branch 0 taken 30360 times.
✓ Branch 1 taken 8526 times.
38886 if (*dist > .5 / (1 << e1.level_)) {
39
3/6
✓ Branch 1 taken 30360 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 30360 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 30360 times.
✗ Branch 8 not taken.
30360 retval << 4, 4, 0;
40 30360 return retval;
41 // otherwise check for common edge/vertex. Note that there is a
42 // short circuit: either two elements share a single edge or
43 // single point. everything else will break the code
44 } else {
45
2/2
✓ Branch 0 taken 24978 times.
✓ Branch 1 taken 3702 times.
28680 for (auto rot1 = 0; rot1 < 4; ++rot1)
46
2/2
✓ Branch 0 taken 92046 times.
✓ Branch 1 taken 20154 times.
112200 for (auto rot2 = 0; rot2 < 4; ++rot2)
47 // check for common vertices_
48
2/2
✓ Branch 2 taken 4824 times.
✓ Branch 3 taken 87222 times.
92046 if (e1.vertices_[rot1] == e2.vertices_[rot2]) {
49 // if there is a common vertices_, check for common edge
50
2/2
✓ Branch 2 taken 630 times.
✓ Branch 3 taken 4194 times.
4824 if (e1.vertices_[3] == e2.vertices_[(rot2 + 1) % 4]) {
51
3/6
✓ Branch 1 taken 630 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 630 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 630 times.
✗ Branch 8 not taken.
630 retval << 3, rot2, 3;
52 4824 return retval;
53
2/2
✓ Branch 1 taken 1890 times.
✓ Branch 2 taken 2304 times.
8388 } else if (e1.vertices_[(rot1 + 1) % 4] ==
54 4194 e2.vertices_[(rot2 + 3) % 4]) {
55
3/6
✓ Branch 1 taken 1890 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1890 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1890 times.
✗ Branch 8 not taken.
1890 retval << rot1, (rot2 + 3) % 4, 3;
56 1890 return retval;
57 } else {
58
3/6
✓ Branch 1 taken 2304 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2304 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2304 times.
✗ Branch 8 not taken.
2304 retval << rot1, rot2, 4;
59 2304 return retval;
60 }
61 }
62
3/6
✓ Branch 1 taken 3702 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3702 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3702 times.
✗ Branch 8 not taken.
3702 retval << 4, 4, 0;
63 3702 return retval;
64 }
65 }
66 // if you ended up here, something went terribly wrong
67 retval << 4, 4, -1;
68 return retval;
69 }
70 } // namespace DuffyTrick
71 } // namespace Bembel
72
73 #endif // BEMBEL_SRC_DUFFYTRICK_COMPAREELEMENTS_HPP_
74