GCC Code Coverage Report


Directory: Bembel/src/
File: Bembel/src/DuffyTrick/integrate4.hpp
Date: 2024-03-19 14:38:05
Exec Total Coverage
Lines: 26 26 100.0%
Functions: 5 5 100.0%
Branches: 51 98 52.0%

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 #ifndef BEMBEL_SRC_DUFFYTRICK_INTEGRATE4_HPP_
12 #define BEMBEL_SRC_DUFFYTRICK_INTEGRATE4_HPP_
13
14 namespace Bembel {
15 namespace DuffyTrick {
16 /**
17 * \ingroup DuffyTrick
18 * \brief quadrature routine for common vertex case.
19 * \todo be sure that map2element computes the weight h*Q.w(i) such that the
20 *integrand may then be scaled by qp1.weight * qp2.weight here we just set one
21 *weight to the actual weight, while the other one will be set to 1. This is to
22 *remain conforming to the structure of integrate0/1.
23 *
24 * Information that map2element has to provide:
25 * xi; w; Chi(xi); dChidx(xi); dChidy(xi);
26 **/
27 template <typename Derived, class T>
28 2268 void integrate4(const LinearOperatorBase<Derived> &LinOp, const T &super_space,
29 const ElementTreeNode &e1, int rot1, const ElementTreeNode &e2,
30 int rot2, const ElementSurfacePoints &ffield_qnodes1,
31 const ElementSurfacePoints &ffield_qnodes2, const Cubature &Q,
32 Eigen::Matrix<typename LinearOperatorTraits<Derived>::Scalar,
33 Eigen::Dynamic, Eigen::Dynamic> *intval) {
34
1/2
✓ Branch 1 taken 2268 times.
✗ Branch 2 not taken.
2268 intval->setZero();
35 2268 double h = e1.get_h();
36 2268 double t1 = 0;
37 2268 double t2 = 0;
38 2268 double t3 = 0;
39 2268 double t4 = 0;
40
6/12
✓ Branch 1 taken 2268 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2268 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2268 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2268 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2268 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2268 times.
✗ Branch 17 not taken.
2268 SurfacePoint qp1, qp2, qp3, qp4, qp5, qp6;
41
1/2
✓ Branch 1 taken 2268 times.
✗ Branch 2 not taken.
2268 Eigen::Vector2d pt1;
42 // llc of the element wrt [0,1]^2
43
2/2
✓ Branch 1 taken 38052 times.
✓ Branch 2 taken 2268 times.
40320 for (auto i = 0; i < Q.w_.size(); ++i) {
44
2/4
✓ Branch 1 taken 38052 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 38052 times.
✗ Branch 5 not taken.
38052 Eigen::Vector2d xi = Q.xi_.col(i);
45
2/4
✓ Branch 1 taken 38052 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 38052 times.
✗ Branch 5 not taken.
38052 double w = h * h * Q.w_(i) * std::pow(xi(0), 3.);
46
2/4
✓ Branch 1 taken 38052 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 38052 times.
✗ Branch 5 not taken.
38052 xi(1) *= xi(0);
47
4/8
✓ Branch 1 taken 38052 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 38052 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 38052 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 38052 times.
✗ Branch 11 not taken.
38052 super_space.map2surface(e1, tau(xi(0), xi(1), rot1), w, &qp1);
48
4/8
✓ Branch 1 taken 38052 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 38052 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 38052 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 38052 times.
✗ Branch 11 not taken.
38052 super_space.map2surface(e1, tau(xi(1), xi(0), rot1), w, &qp2);
49
4/8
✓ Branch 1 taken 38052 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 38052 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 38052 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 38052 times.
✗ Branch 11 not taken.
38052 super_space.map2surface(e2, tau(xi(0), xi(1), rot2), w, &qp3);
50
4/8
✓ Branch 1 taken 38052 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 38052 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 38052 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 38052 times.
✗ Branch 11 not taken.
38052 super_space.map2surface(e2, tau(xi(1), xi(0), rot2), w, &qp4);
51
2/2
✓ Branch 1 taken 3376548 times.
✓ Branch 2 taken 38052 times.
3414600 for (auto j = 0; j < Q.w_.size(); ++j) {
52
3/6
✓ Branch 1 taken 3376548 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3376548 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3376548 times.
✗ Branch 8 not taken.
3376548 auto eta = xi(0) * Q.xi_.col(j);
53
5/10
✓ Branch 1 taken 3376548 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3376548 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3376548 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3376548 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 3376548 times.
✗ Branch 14 not taken.
3376548 super_space.map2surface(e2, tau(eta(0), eta(1), rot2), Q.w_(j), &qp5);
54
5/10
✓ Branch 1 taken 3376548 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3376548 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3376548 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3376548 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 3376548 times.
✗ Branch 14 not taken.
3376548 super_space.map2surface(e1, tau(eta(0), eta(1), rot1), Q.w_(j), &qp6);
55
1/2
✓ Branch 1 taken 3376548 times.
✗ Branch 2 not taken.
3376548 LinOp.evaluateIntegrand(super_space, qp1, qp5, intval);
56
1/2
✓ Branch 1 taken 3376548 times.
✗ Branch 2 not taken.
3376548 LinOp.evaluateIntegrand(super_space, qp2, qp5, intval);
57
1/2
✓ Branch 1 taken 3376548 times.
✗ Branch 2 not taken.
3376548 LinOp.evaluateIntegrand(super_space, qp6, qp3, intval);
58
1/2
✓ Branch 1 taken 3376548 times.
✗ Branch 2 not taken.
3376548 LinOp.evaluateIntegrand(super_space, qp6, qp4, intval);
59 }
60 }
61 BEMBEL_UNUSED_(ffield_qnodes1);
62 BEMBEL_UNUSED_(ffield_qnodes2);
63 4536 return;
64 }
65 } // namespace DuffyTrick
66 } // namespace Bembel
67
68 #endif // BEMBEL_SRC_DUFFYTRICK_INTEGRATE4_HPP_
69