GCC Code Coverage Report


Directory: Bembel/src/
File: Bembel/src/Geometry/Geometry.hpp
Date: 2024-03-19 14:38:05
Exec Total Coverage
Lines: 14 15 93.3%
Functions: 4 4 100.0%
Branches: 7 12 58.3%

Line Branch Exec Source
1 // This file is part of Bembel, the higher order C++ boundary element library.
2 //
3 // Copyright (C) 2024 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_GEOMETRY_GEOMETRY_HPP_
12 #define BEMBEL_SRC_GEOMETRY_GEOMETRY_HPP_
13
14 namespace Bembel {
15 /**
16 * \ingroup Geometry
17 * \brief this class wraps a GeometryVector and provides some basic
18 * functionality, like reading Geometry files
19 */
20 class Geometry {
21 public:
22 //////////////////////////////////////////////////////////////////////////////
23 // Constructors
24 //////////////////////////////////////////////////////////////////////////////
25 /**
26 * \brief Default constructor.
27 */
28 Geometry() {}
29 /**
30 * \brief Constructor.
31 *
32 * This constructor initializes a geometry specified in a given file. We can
33 * handle .dat and .igs at the moment.
34 *
35 * \param filename File name of the .dat or .igs file.
36 */
37
1/2
✓ Branch 2 taken 27 times.
✗ Branch 3 not taken.
27 explicit Geometry(const std::string &filename) { init_Geometry(filename); }
38 /**
39 * \brief Move constructor.
40 */
41 Geometry(Geometry &&other) { geometry_ = std::move(other.geometry_); }
42 /**
43 * \brief Copy constructor.
44 *
45 * Though we are using a shared pointer, we are creating an actual copy here.
46 * might be useful if we want to modify the geometry object.
47 */
48 Geometry(const Geometry &other) {
49 geometry_ = std::make_shared<PatchVector>();
50 *geometry_ = *(other.geometry_);
51 }
52 /**
53 * \brief Copy constructor.
54 *
55 * Though we are using a shared pointer, we are creating an actual copy here.
56 * might be useful if we want to modify the geometry object.
57 *
58 * \param in Geometry provided as PatchVector.
59 */
60 explicit Geometry(const PatchVector &in) {
61 geometry_ = std::make_shared<PatchVector>();
62 *geometry_ = in;
63 }
64 /**
65 * \brief Copy assignment operator for the Geometry class.
66 *
67 * This copy assignment operator is explicitly deleted to prevent copying of
68 * Geometry objects.
69 *
70 * \return A reference to the updated Geometry object.
71 */
72 Geometry &operator=(Geometry other) {
73 std::swap(geometry_, other.geometry_);
74 return *this;
75 }
76 //////////////////////////////////////////////////////////////////////////////
77 // init_Geometry
78 //////////////////////////////////////////////////////////////////////////////
79 /**
80 * \brief Initialize the geometry from a geometry given by a file.
81 *
82 * Note that the Shredder is required. The order of ansatz functions allows to
83 * be chosen higher than the smoothness of the NÙRBS mappings. Thus, we need
84 * to shredder the geometry mappings to have Bezier patches. You can achieve
85 * the higher regularity by changing coefficients in the projector.
86 *
87 * \param filename Filename of a .dat or .igs file.
88 */
89 27 inline void init_Geometry(const std::string &filename) {
90
1/2
✓ Branch 2 taken 27 times.
✗ Branch 3 not taken.
27 std::string file_suffix = filename.substr(filename.find('.') + 1);
91 27 PatchVector tmp;
92
93
2/2
✓ Branch 1 taken 26 times.
✓ Branch 2 taken 1 times.
27 if (file_suffix.compare("dat") == 0)
94 26 tmp = PatchShredder(LoadGeometryFileDAT(filename));
95
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 else if (file_suffix.compare("igs") == 0)
96 1 tmp = PatchShredder(LoadGeometryFileIGS(filename));
97 else
98 assert(!"File type unknown!");
99
100
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
27 geometry_ = std::make_shared<PatchVector>();
101
1/2
✓ Branch 2 taken 27 times.
✗ Branch 3 not taken.
27 *geometry_ = tmp;
102 27 }
103 //////////////////////////////////////////////////////////////////////////////
104 // getters
105 //////////////////////////////////////////////////////////////////////////////
106 /**
107 * \brief Return const reference to the geometry.
108 *
109 * \return Const reference to the PatchVector.
110 */
111 const PatchVector &get_geometry() const { return *geometry_; }
112 /**
113 * \brief Return reference to the geometry.
114 *
115 * \return Reference to the PatchVector.
116 */
117 3280 PatchVector &get_geometry() { return *geometry_; }
118 /**
119 * \brief Return const pointer to the geometry.
120 *
121 * \return Const shared pointer to the PatchVector.
122 */
123 168 const std::shared_ptr<PatchVector> get_geometry_ptr() const {
124 168 return geometry_;
125 }
126 /**
127 * \brief Return pointer to the geometry.
128 *
129 * \return Shared pointer to the PatchVector.
130 */
131 std::shared_ptr<PatchVector> get_geometry_ptr() { return geometry_; }
132
133 /**
134 * \brief Get number of patches.
135 *
136 * \return Number of patches.
137 */
138 int get_number_of_patches() const { return geometry_->size(); }
139 //////////////////////////////////////////////////////////////////////////////
140 // private member variables
141 //////////////////////////////////////////////////////////////////////////////
142 private:
143 std::shared_ptr<PatchVector> geometry_;
144 };
145 } // namespace Bembel
146 #endif // BEMBEL_SRC_GEOMETRY_GEOMETRY_HPP_
147