16 using coord_t = Eigen::Vector2d;
18 using quad_coord_t = Eigen::Matrix<double, 2, 4>;
19 using tria_coord_t = Eigen::Matrix<double, 2, 3>;
22 std::unique_ptr<lf::mesh::hybrid2d::MeshFactory> mesh_factory_ptr =
23 std::make_unique<lf::mesh::hybrid2d::MeshFactory>(2);
28 mesh_factory_ptr->AddPoint(coord_t({1.5 * scale, 2 * scale}));
29 mesh_factory_ptr->AddPoint(coord_t({1 * scale, 1 * scale}));
30 mesh_factory_ptr->AddPoint(coord_t({2 * scale, 1 * scale}));
31 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 0 * scale}));
32 mesh_factory_ptr->AddPoint(coord_t({1.5 * scale, 0 * scale}));
33 mesh_factory_ptr->AddPoint(coord_t({3 * scale, 0 * scale}));
34 mesh_factory_ptr->AddPoint(coord_t({3 * scale, 2 * scale}));
35 mesh_factory_ptr->AddPoint(coord_t({3 * scale, 3 * scale}));
36 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 3 * scale}));
37 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 1 * scale}));
40 mesh_factory_ptr->AddEntity(
42 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
43 mesh_factory_ptr->AddEntity(
45 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
46 mesh_factory_ptr->AddEntity(
48 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
49 mesh_factory_ptr->AddEntity(
51 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
52 mesh_factory_ptr->AddEntity(
54 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
55 mesh_factory_ptr->AddEntity(
57 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
58 mesh_factory_ptr->AddEntity(
60 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
61 mesh_factory_ptr->AddEntity(
63 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
64 mesh_factory_ptr->AddEntity(
66 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
71 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 0 * scale}));
72 mesh_factory_ptr->AddPoint(coord_t({2 * scale, 0 * scale}));
73 mesh_factory_ptr->AddPoint(coord_t({4 * scale, 0 * scale}));
74 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 2 * scale}));
75 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 3 * scale}));
76 mesh_factory_ptr->AddPoint(coord_t({2 * scale, 4 * scale}));
77 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 4 * scale}));
78 mesh_factory_ptr->AddPoint(coord_t({4 * scale, 4 * scale}));
79 mesh_factory_ptr->AddPoint(coord_t({4 * scale, 2 * scale}));
80 mesh_factory_ptr->AddPoint(coord_t({1 * scale, 1 * scale}));
81 mesh_factory_ptr->AddPoint(coord_t({3 * scale, 1 * scale}));
82 mesh_factory_ptr->AddPoint(coord_t({3 * scale, 2 * scale}));
83 mesh_factory_ptr->AddPoint(coord_t({2 * scale, 3 * scale}));
84 mesh_factory_ptr->AddPoint(coord_t({1 * scale, 2 * scale}));
85 mesh_factory_ptr->AddPoint(coord_t({2 * scale, 2 * scale}));
87 quad_coord_t quad_coord(2, 4);
89 quad_coord << 0.0, 2.0, 3.0, 1.0, 0.0, 0.0, 1.0, 1.0;
91 mesh_factory_ptr->AddEntity(
93 std::make_unique<lf::geometry::Parallelogram>(quad_coord));
95 mesh_factory_ptr->AddEntity(
97 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
99 mesh_factory_ptr->AddEntity(
101 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
103 mesh_factory_ptr->AddEntity(
105 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
107 mesh_factory_ptr->AddEntity(
109 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
111 quad_coord << 0, 2, 2, 0, 3, 3, 4, 4;
113 mesh_factory_ptr->AddEntity(
115 std::make_unique<lf::geometry::Parallelogram>(quad_coord));
117 mesh_factory_ptr->AddEntity(
119 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
121 mesh_factory_ptr->AddEntity(
123 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
125 mesh_factory_ptr->AddEntity(
127 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
129 quad_coord << 2, 3, 3, 2, 2, 1, 2, 3;
131 mesh_factory_ptr->AddEntity(
133 std::make_unique<lf::geometry::Parallelogram>(quad_coord));
135 quad_coord << 1, 1, 2, 2, 2, 1, 2, 3;
137 mesh_factory_ptr->AddEntity(
139 std::make_unique<lf::geometry::Parallelogram>(quad_coord));
143 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 0 * scale}));
144 mesh_factory_ptr->AddPoint(coord_t({1 * scale, 0 * scale}));
145 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 1 * scale}));
146 mesh_factory_ptr->AddPoint(coord_t({1 * scale, 1 * scale}));
147 mesh_factory_ptr->AddPoint(coord_t({1.5 * scale, 0.5 * scale}));
148 quad_coord_t quad_coord(2, 4);
150 quad_coord << 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0;
151 mesh_factory_ptr->AddEntity(
153 std::make_unique<lf::geometry::Parallelogram>(quad_coord));
155 mesh_factory_ptr->AddEntity(
157 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
163 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 0 * scale}));
164 mesh_factory_ptr->AddPoint(coord_t({1.5 * scale, 0 * scale}));
165 mesh_factory_ptr->AddPoint(coord_t({3 * scale, 0 * scale}));
166 mesh_factory_ptr->AddPoint(coord_t({1 * scale, 1 * scale}));
167 mesh_factory_ptr->AddPoint(coord_t({2 * scale, 1 * scale}));
168 mesh_factory_ptr->AddPoint(coord_t({3 * scale, 1 * scale}));
169 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 1.5 * scale}));
170 mesh_factory_ptr->AddPoint(coord_t({2 * scale, 1.5 * scale}));
171 mesh_factory_ptr->AddPoint(coord_t({1 * scale, 2 * scale}));
172 mesh_factory_ptr->AddPoint(coord_t({3 * scale, 2 * scale}));
173 mesh_factory_ptr->AddPoint(coord_t({0 * scale, 3 * scale}));
174 mesh_factory_ptr->AddPoint(coord_t({1.5 * scale, 3 * scale}));
175 mesh_factory_ptr->AddPoint(coord_t({3 * scale, 3 * scale}));
178 mesh_factory_ptr->AddEntity(
180 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
181 mesh_factory_ptr->AddEntity(
183 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
184 mesh_factory_ptr->AddEntity(
186 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
187 mesh_factory_ptr->AddEntity(
189 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
190 mesh_factory_ptr->AddEntity(
192 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
193 mesh_factory_ptr->AddEntity(
195 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
196 mesh_factory_ptr->AddEntity(
198 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
199 mesh_factory_ptr->AddEntity(
201 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
202 mesh_factory_ptr->AddEntity(
204 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
205 mesh_factory_ptr->AddEntity(
207 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
208 mesh_factory_ptr->AddEntity(
210 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
211 mesh_factory_ptr->AddEntity(
213 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
214 mesh_factory_ptr->AddEntity(
216 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
217 mesh_factory_ptr->AddEntity(
219 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
220 mesh_factory_ptr->AddEntity(
222 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
232 .setTopRightCorner(Eigen::Vector2d{1 * scale, 1 * scale})
235 return builder.
Build();
241 std::array<std::array<double, 2>, 16> node_coord{
242 std::array<double, 2>({0, 0}), std::array<double, 2>({1, 0}),
243 std::array<double, 2>({2, 0}), std::array<double, 2>({3, 0}),
244 std::array<double, 2>({0, 1}), std::array<double, 2>({1, 1}),
245 std::array<double, 2>({2, 1}), std::array<double, 2>({3, 1}),
246 std::array<double, 2>({0, 2}), std::array<double, 2>({1, 2}),
247 std::array<double, 2>({2, 2}), std::array<double, 2>({3, 2}),
248 std::array<double, 2>({0, 3}), std::array<double, 2>({1, 3}),
249 std::array<double, 2>({2, 3}), std::array<double, 2>({3, 3})};
252 for (
const auto &node : node_coord) {
253 mesh_factory_ptr->AddPoint(coord_t({node[0] * scale, node[1] * scale}));
257 std::array<std::array<size_type, 3>, 4> tria_nodes{
258 std::array<size_type, 3>({0, 4, 5}),
259 std::array<size_type, 3>({2, 3, 7}),
260 std::array<size_type, 3>({8, 9, 12}),
261 std::array<size_type, 3>({11, 15, 14}),
265 std::array<std::array<size_type, 4>, 7> quad_nodes{
266 std::array<size_type, 4>({0, 1, 6, 5}),
267 std::array<size_type, 4>({1, 2, 7, 6}),
268 std::array<size_type, 4>({5, 6, 10, 9}),
269 std::array<size_type, 4>({6, 7, 11, 10}),
270 std::array<size_type, 4>({9, 10, 13, 12}),
271 std::array<size_type, 4>({10, 11, 14, 13}),
272 std::array<size_type, 4>({4, 5, 9, 8})};
275 for (
const auto &node : tria_nodes) {
276 mesh_factory_ptr->AddEntity(
278 std::array<size_type, 3>{{node[0], node[1], node[2]}},
279 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
283 for (
const auto &node : quad_nodes) {
284 quad_coord_t quad_coord(2, 4);
285 for (
int n_pt = 0; n_pt < 4; ++n_pt) {
286 quad_coord(0, n_pt) = node_coord[node[n_pt]][0];
287 quad_coord(1, n_pt) = node_coord[node[n_pt]][1];
289 mesh_factory_ptr->AddEntity(
291 std::array<size_type, 4>{{node[0], node[1], node[2], node[3]}},
292 std::make_unique<lf::geometry::Parallelogram>(quad_coord));
300 std::array<std::array<double, 2>, 8> node_coord{
301 std::array<double, 2>({0 , 0 }),
302 std::array<double, 2>({1 , 0 }),
303 std::array<double, 2>({0.2 , 1.0 }),
304 std::array<double, 2>({0.5 , 0.0 }),
305 std::array<double, 2>({0.6 , 0.5 }),
306 std::array<double, 2>({0.1 , 0.5 }),
307 std::array<double, 2>({0.15, 0.75 }),
308 std::array<double, 2>({0.4 , 0.75 })};
312 std::array<std::array<size_type, 3>, 2> tria_nodes{
313 std::array<size_type, 3>({3, 1, 4}),
314 std::array<size_type, 3>({7, 6, 2})};
317 std::array<std::array<size_type, 4>, 1> quad_nodes{
318 std::array<size_type, 4>({5, 4, 7, 6})};
321 std::array<std::array<size_type, 4>, 1> parg_nodes{
322 std::array<size_type, 4>({0, 3, 4, 5})};
325 for (
const auto &node : node_coord) {
326 mesh_factory_ptr->AddPoint(coord_t({node[0] * scale, node[1] * scale}));
330 for (
const auto &node : tria_nodes) {
331 mesh_factory_ptr->AddEntity(
333 std::array<size_type, 3>{{node[0], node[1], node[2]}},
334 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
338 for (
const auto &node : quad_nodes) {
339 quad_coord_t quad_coord(2, 4);
340 for (
int n_pt = 0; n_pt < 4; ++n_pt) {
341 quad_coord(0, n_pt) = node_coord[node[n_pt]][0];
342 quad_coord(1, n_pt) = node_coord[node[n_pt]][1];
344 mesh_factory_ptr->AddEntity(
346 std::array<size_type, 4>{{node[0], node[1], node[2], node[3]}},
347 std::make_unique<lf::geometry::QuadO1>(quad_coord));
351 for (
const auto &node : parg_nodes) {
352 quad_coord_t quad_coord(2, 4);
353 for (
int n_pt = 0; n_pt < 4; ++n_pt) {
354 quad_coord(0, n_pt) = node_coord[node[n_pt]][0];
355 quad_coord(1, n_pt) = node_coord[node[n_pt]][1];
357 mesh_factory_ptr->AddEntity(
359 std::array<size_type, 4>{{node[0], node[1], node[2], node[3]}},
360 std::make_unique<lf::geometry::Parallelogram>(quad_coord));
369 std::array<std::array<double, 2>, 5> node_coord{
370 std::array<double, 2>({0 , 0 }),
371 std::array<double, 2>({1 , 0 }),
372 std::array<double, 2>({1 , 1 }),
373 std::array<double, 2>({0 , 1 }),
374 std::array<double, 2>({0.5 , 1 })};
378 for (
const auto &node : node_coord) {
379 mesh_factory_ptr->AddPoint(coord_t({node[0] * scale, node[1] * scale}));
382 mesh_factory_ptr->AddEntity(
384 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
386 mesh_factory_ptr->AddEntity(
388 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
395 std::array<std::array<double, 2>, 10> node_coord{
396 std::array<double, 2>({0, 0 }),
397 std::array<double, 2>({1, 0 }),
398 std::array<double, 2>({2, 0 }),
399 std::array<double, 2>({3, 0 }),
400 std::array<double, 2>({0 ,2 }),
401 std::array<double, 2>({1 ,2 }),
402 std::array<double, 2>({3 ,2 }),
403 std::array<double, 2>({0 ,3 }),
404 std::array<double, 2>({1 ,3 }),
405 std::array<double, 2>({3 ,3 })};
409 std::array<std::array<size_type, 3>, 5> tria_nodes{
410 std::array<size_type, 3>({1, 2, 5}),
411 std::array<size_type, 3>({2, 3, 6}),
412 std::array<size_type, 3>({5, 2, 6}),
413 std::array<size_type, 3>({4, 5, 7}),
414 std::array<size_type, 3>({5, 8, 7})};
417 std::array<std::array<size_type, 4>, 2> parg_nodes{
418 std::array<size_type, 4>({0, 1, 5, 4}),
419 std::array<size_type, 4>({5, 6, 9, 8})};
422 for (
const auto &node : node_coord) {
423 mesh_factory_ptr->AddPoint(coord_t({node[0] * scale, node[1] * scale}));
427 for (
const auto &node : tria_nodes) {
428 mesh_factory_ptr->AddEntity(
430 std::array<size_type, 3>{{node[0], node[1], node[2]}},
431 std::unique_ptr<lf::geometry::Geometry>(
nullptr));
435 for (
const auto &node : parg_nodes) {
436 quad_coord_t quad_coord(2, 4);
437 for (
int n_pt = 0; n_pt < 4; ++n_pt) {
438 quad_coord(0, n_pt) = node_coord[node[n_pt]][0];
439 quad_coord(1, n_pt) = node_coord[node[n_pt]][1];
441 mesh_factory_ptr->AddEntity(
443 std::array<size_type, 4>{{node[0], node[1], node[2], node[3]}},
444 std::make_unique<lf::geometry::Parallelogram>(quad_coord));
449 LF_VERIFY_MSG(
false,
"Illegal selector for test meshes");
455 return mesh_factory_ptr->Build();