| 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_FARFIELDQUADRATURENODES_HPP_ | ||
| 13 | #define BEMBEL_SRC_DUFFYTRICK_FARFIELDQUADRATURENODES_HPP_ | ||
| 14 | |||
| 15 | namespace Bembel { | ||
| 16 | namespace DuffyTrick { | ||
| 17 | /** | ||
| 18 | * \ingroup DuffyTrick | ||
| 19 | * \brief evaluates a given quadrature on all surface panels storage format is | ||
| 20 | *qNodes.col(k) = [xi, w, Chi(xi); dsChi(xi); dtChi(xi)] | ||
| 21 | */ | ||
| 22 | template <class T> | ||
| 23 | 9 | std::vector<ElementSurfacePoints> computeFfieldQnodes(const T &super_space, | |
| 24 | const Cubature &Q) { | ||
| 25 | 9 | std::vector<ElementSurfacePoints> ffield_qnodes; | |
| 26 | 9 | int next = 0; | |
| 27 | // assume isotropic mesh width h! | ||
| 28 | 9 | double h = (super_space.get_mesh().get_element_tree().cpbegin())->get_h(); | |
| 29 | 9 | auto nE = super_space.get_mesh().get_number_of_elements(); | |
| 30 | 9 | auto pbegin = super_space.get_mesh().get_element_tree().cpbegin(); | |
| 31 | 9 | auto pend = super_space.get_mesh().get_element_tree().cpend(); | |
| 32 |
1/2✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
|
9 | ffield_qnodes.reserve(nE); |
| 33 |
1/2✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
|
9 | SurfacePoint surfpt; |
| 34 | |||
| 35 |
2/2✓ Branch 2 taken 622 times.
✓ Branch 3 taken 9 times.
|
631 | for (auto it = pbegin; it != pend; ++it) { |
| 36 |
1/2✓ Branch 2 taken 622 times.
✗ Branch 3 not taken.
|
622 | ffield_qnodes.emplace_back(Q.xi_.cols()); |
| 37 |
2/2✓ Branch 1 taken 12136 times.
✓ Branch 2 taken 622 times.
|
12758 | for (auto k = 0; k < Q.xi_.cols(); ++k) { |
| 38 | // the quadrature weight is scaled by mesh width | ||
| 39 | // this corresponds to a scaling of the basis functions | ||
| 40 | // with respect to the L^2 norm! | ||
| 41 |
4/8✓ Branch 1 taken 12136 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12136 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12136 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 12136 times.
✗ Branch 12 not taken.
|
12136 | super_space.map2surface(*it, Q.xi_.col(k), h * Q.w_(k), |
| 42 | 12136 | &ffield_qnodes[it->id_][k]); | |
| 43 | } | ||
| 44 | } | ||
| 45 | 18 | return ffield_qnodes; | |
| 46 | ✗ | } | |
| 47 | } // namespace DuffyTrick | ||
| 48 | } // namespace Bembel | ||
| 49 | #endif // BEMBEL_SRC_DUFFYTRICK_FARFIELDQUADRATURENODES_HPP_ | ||
| 50 |