FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
tetris_hexa.cpp
1// FEAT3: Finite Element Analysis Toolbox, Version 3
2// Copyright (C) 2010 by Stefan Turek & the FEAT group
3// FEAT3 is released under the GNU General Public License version 3,
4// see the file 'copyright.txt' in the top level directory for details.
5
6#include <kernel/geometry/test_aux/tetris_hexa.hpp>
7#include <kernel/geometry/test_aux/copy_comp_set.hpp>
8
9namespace FEAT
10{
11 namespace Geometry
12 {
13 namespace TestAux
14 {
15 HexaMesh* create_tetris_mesh_3d()
16 {
17 Index num_entities[] =
18 {
19 20, // vertices
20 36, // edges
21 21, // quads
22 4 // hexas
23 };
24
25 // create mesh
26 HexaMesh* mesh = new HexaMesh(num_entities);
27
28 // set up vertex coordinates array
29 Real vtx[20*3] =
30 {
31 0.0, -1.0, 1.0,
32 1.0, -1.0, 1.0,
33 -1.0, 0.0, 1.0,
34 0.0, 0.0, 1.0,
35 1.0, 0.0, 1.0,
36 -1.0, 1.0, 1.0,
37 0.0, 1.0, 1.0,
38 1.0, 1.0, 1.0,
39 0.0, -1.0, 0.0,
40 1.0, -1.0, 0.0,
41 -1.0, 0.0, 0.0,
42 0.0, 0.0, 0.0,
43 1.0, 0.0, 0.0,
44 -1.0, 1.0, 0.0,
45 0.0, 1.0, 0.0,
46 1.0, 1.0, 0.0,
47 0.0, -1.0, -1.0,
48 1.0, -1.0, -1.0,
49 0.0, 0.0, -1.0,
50 1.0, 0.0, -1.0
51 };
52 copy_vtx(mesh->get_vertex_set(), vtx);
53
54 // set up vertices-at-edge
55 Index v_e[36*2] =
56 {
57 0, 1, //0
58 0, 3,
59 1, 4,
60 2, 3,
61 3, 4,
62 2, 5, //5
63 3, 6,
64 4, 7,
65 5, 6,
66 6, 7,
67 8, 0, //10
68 9, 1,
69 10, 2,
70 11, 3,
71 12, 4,
72 13, 5, //15
73 14, 6,
74 15, 7,
75 8, 9,
76 8, 11,
77 9, 12, //20
78 10, 11,
79 11, 12,
80 10, 13,
81 11, 14,
82 12, 15, //25
83 13, 14,
84 14, 15,
85 16, 8,
86 17, 9,
87 18, 11, //30
88 19, 12,
89 16, 17,
90 16, 18,
91 17, 19,
92 18, 19, //35
93 };
94 copy_idx(mesh->get_index_set<1,0>(), v_e);
95
96 // set up vertices-at-quad
97 Index v_q[21*4] =
98 {
99 0, 1, 3, 4, //0
100 2, 3, 5, 6,
101 3, 4, 6, 7,
102 8, 9, 0, 1,
103 8, 11, 0, 3,
104 9, 12, 1, 4, //5
105 10, 11, 2, 3,
106 11, 12, 3, 4,
107 10, 13, 2, 5,
108 11, 14, 3, 6,
109 12, 15, 4, 7, //10
110 13, 14, 5, 6,
111 14, 15, 6, 7,
112 8 , 9, 11, 12,
113 10, 11, 13, 14,
114 11, 12, 14, 15, //15
115 16, 17, 8, 9,
116 16, 18, 8, 11,
117 17, 19, 9, 12,
118 18, 19, 11, 12,
119 16, 17, 18, 19 //20
120 };
121 copy_idx(mesh->get_index_set<2,0>(), v_q);
122
123 // set up edges-at-quad
124 Index e_q[21*4] =
125 {
126 0, 4, 1, 2,
127 3, 8, 5, 6,
128 4, 9, 6, 7,
129 18, 0, 10, 11,
130 19, 1, 10, 13,
131 20, 2, 11, 14,
132 21, 3, 12, 13,
133 22, 4, 13, 14,
134 23, 5, 12, 15,
135 24, 6, 13, 16,
136 25, 7, 14, 17, //10
137 26, 8, 15, 16,
138 27, 9, 16, 17,
139 18, 22, 19, 20,
140 21, 26, 23, 24,
141 22, 27, 24, 25,
142 32, 18, 28, 29,
143 33, 19, 28, 30,
144 34, 20, 29, 31,
145 35, 22, 30, 31,
146 32, 35, 33, 34 //20
147 };
148 copy_idx(mesh->get_index_set<2,1>(), e_q);
149
150 // set up vertices-at-cell
151 Index v_c[4*8] =
152 {
153 8, 9, 11, 12, 0, 1, 3, 4,
154 10, 11, 13, 14, 2, 3, 5, 6,
155 11, 12, 14, 15, 3, 4, 6, 7,
156 16, 17, 18, 19, 8, 9, 11, 12
157 };
158 copy_idx(mesh->get_index_set<3, 0>(), v_c);
159
160 // set up edges-at-cell
161 Index e_c[4*12] =
162 {
163 18, 22, 0, 4, 19, 20, 1, 2, 10, 11, 13, 14,
164 21, 26, 3, 8, 23, 24, 5, 6, 12, 13, 15, 16,
165 22, 27, 4, 9, 24, 25, 6, 7, 13, 14, 16, 17,
166 32, 35, 18, 22, 33, 34, 19, 20, 28, 29, 30, 31
167 };
168 copy_idx(mesh->get_index_set<3,1>(), e_c);
169
170 // set up faces-at-cell
171 Index f_c[4*6] =
172 {
173 13, 0, 3, 7, 4, 5,
174 14, 1, 6, 11, 8, 9,
175 15, 2, 7, 12, 9, 10,
176 20, 13, 16, 19, 17, 18
177 };
178 copy_idx(mesh->get_index_set<3,2>(), f_c);
179
180 // okay
181 return mesh;
182 }
183
184 void validate_refined_tetris_mesh_3d(const HexaMesh& mesh)
185 {
186 // validate sizes
187 if(mesh.get_num_entities(0) != 81)
188 throw String("Vertex count mismatch");
189 if(mesh.get_num_entities(1) != 180)
190 throw String("Edge count mismatch");
191 if(mesh.get_num_entities(2) != 132)
192 throw String("Quad count mismatch");
193 if(mesh.get_num_entities(3) != 32)
194 throw String("Cube count mismatch");
195
196 // ca. 2491 indices
197
198 // vertex coordinates array
199 static const Real vtx[] =
200 {
201 0.0, -1.0, 1.0,
202 1.0, -1.0, 1.0,
203 -1.0, 0.0, 1.0,
204 0.0, 0.0, 1.0,
205 1.0, 0.0, 1.0,
206 -1.0, 1.0, 1.0,
207 0.0, 1.0, 1.0,
208 1.0, 1.0, 1.0,
209 0.0, -1.0, 0.0,
210 1.0, -1.0, 0.0,
211 -1.0, 0.0, 0.0, //10
212 0.0, 0.0, 0.0,
213 1.0, 0.0, 0.0,
214 -1.0, 1.0, 0.0,
215 0.0, 1.0, 0.0,
216 1.0, 1.0, 0.0,
217 0.0, -1.0, -1.0,
218 1.0, -1.0, -1.0,
219 0.0, 0.0, -1.0,
220 1.0, 0.0, -1.0,
221
222 // edges
223 0.5, -1.0, 1.0, //20
224 0.0, -0.5, 1.0,
225 1.0, -0.5, 1.0,
226 -0.5, 0.0, 1.0,
227 0.5, 0.0, 1.0,
228 -1.0, 0.5, 1.0,
229 0.0, 0.5, 1.0,
230 1.0, 0.5, 1.0,
231 -0.5, 1.0, 1.0,
232 0.5, 1.0, 1.0,
233 0.0, -1.0, 0.5, //30
234 1.0, -1.0, 0.5,
235 -1.0, 0.0, 0.5,
236 0.0, 0.0, 0.5,
237 1.0, 0.0, 0.5,
238 -1.0, 1.0, 0.5,
239 0.0, 1.0, 0.5,
240 1.0, 1.0, 0.5,
241 0.5, -1.0, 0.0,
242 0.0, -0.5, 0.0,
243 1.0, -0.5, 0.0, //40
244 -0.5, 0.0, 0.0,
245 0.5, 0.0, 0.0,
246 -1.0, 0.5, 0.0,
247 0.0, 0.5, 0.0,
248 1.0, 0.5, 0.0,
249 -0.5, 1.0, 0.0,
250 0.5, 1.0, 0.0,
251 0.0, -1.0, -0.5,
252 1.0, -1.0, -0.5,
253 0.0, 0.0, -0.5, //50
254 1.0, 0.0, -0.5,
255 0.5, -1.0, -1.0,
256 0.0, -0.5, -1.0,
257 1.0, -0.5, -1.0,
258 0.5, 0.0, -1.0,
259
260 //quads
261 0.5, -0.5, 1.0,
262 -0.5, 0.5, 1.0,
263 0.5, 0.5, 1.0,
264 0.5, -1.0, 0.5,
265 0.0, -0.5, 0.5, //60
266 1.0, -0.5, 0.5,
267 -0.5, 0.0, 0.5,
268 0.5, 0.0, 0.5,
269 -1.0, 0.5, 0.5,
270 0.0, 0.5, 0.5,
271 1.0, 0.5, 0.5,
272 -0.5, 1.0, 0.5,
273 0.5, 1.0, 0.5,
274 0.5, -0.5, 0.0,
275 -0.5, 0.5, 0.0, //70
276 0.5, 0.5, 0.0,
277 0.5, -1.0, -0.5,
278 0.0, -0.5, -0.5,
279 1.0, -0.5, -0.5,
280 0.5, 0.0, -0.5,
281 0.5, -0.5, -1.0,
282
283 //cells
284 0.5, -0.5, 0.5,
285 -0.5, 0.5, 0.5,
286 0.5, 0.5, 0.5,
287 0.5, -0.5, -0.5
288 };
289
290
291 // vertices-at-edge array
292 static const Index v_e[] =
293 {
294 //edges
295 0, 20,
296 20, 1,
297 0, 21,
298 21, 3,
299 1, 22,
300 22, 4,
301 2, 23,
302 23, 3,
303 3, 24,
304 24, 4,
305 2, 25, //10
306 25, 5,
307 3, 26,
308 26, 6,
309 4, 27,
310 27, 7,
311 5, 28,
312 28, 6,
313 6, 29,
314 29, 7,
315 8, 30, //20
316 30, 0,
317 9, 31,
318 31, 1,
319 10, 32,
320 32, 2,
321 11, 33,
322 33, 3,
323 12, 34,
324 34, 4,
325 13, 35, //30
326 35, 5,
327 14, 36,
328 36, 6,
329 15, 37,
330 37, 7,
331 8, 38,
332 38, 9,
333 8, 39,
334 39, 11,
335 9, 40, //40
336 40, 12,
337 10, 41,
338 41, 11,
339 11, 42,
340 42, 12,
341 10, 43,
342 43, 13,
343 11, 44,
344 44, 14,
345 12, 45, //50
346 45, 15,
347 13, 46,
348 46, 14,
349 14, 47,
350 47, 15,
351 16, 48,
352 48, 8,
353 17, 49,
354 49, 9,
355 18, 50, //60
356 50, 11,
357 19, 51,
358 51, 12,
359 16, 52,
360 52, 17,
361 16, 53,
362 53, 18,
363 17, 54,
364 54, 19,
365 18, 55, //70
366 55, 19,
367
368 //quads
369 20, 56,
370 56, 24,
371 21, 56,
372 56, 22,
373 23, 57,
374 57, 28,
375 25, 57,
376 57, 26,
377 24, 58, //80
378 58, 29,
379 26, 58,
380 58, 27,
381 38, 59,
382 59, 20,
383 30, 59,
384 59, 31,
385 39, 60,
386 60, 21,
387 30, 60, //90
388 60, 33,
389 40, 61,
390 61, 22,
391 31, 61,
392 61, 34,
393 41, 62,
394 62, 23,
395 32, 62,
396 62, 33,
397 42, 63, //100
398 63, 24,
399 33, 63,
400 63, 34,
401 43, 64,
402 64, 25,
403 32, 64,
404 64, 35,
405 44, 65,
406 65, 26,
407 33, 65, //110
408 65, 36,
409 45, 66,
410 66, 27,
411 34, 66,
412 66, 37,
413 46, 67,
414 67, 28,
415 35, 67,
416 67, 36,
417 47, 68, //120
418 68, 29,
419 36, 68,
420 68, 37,
421 38, 69,
422 69, 42,
423 39, 69,
424 69, 40,
425 41, 70,
426 70, 46,
427 43, 70, //130
428 70, 44,
429 42, 71,
430 71, 47,
431 44, 71,
432 71, 45,
433 52, 72,
434 72, 38,
435 48, 72,
436 72, 49,
437 53, 73, //140
438 73, 39,
439 48, 73,
440 73, 50,
441 54, 74,
442 74, 40,
443 49, 74,
444 74, 51,
445 55, 75,
446 75, 42,
447 50, 75, //150
448 75, 51,
449 52, 76,
450 76, 55,
451 53, 76,
452 76, 54,
453
454 //cubes
455 69, 77,
456 77, 56,
457 59, 77,
458 77, 63,
459 60, 77, //160
460 77, 61,
461 70, 78,
462 78, 57,
463 62, 78,
464 78, 67,
465 64, 78,
466 78, 65,
467 71, 79,
468 79, 58,
469 63, 79, //170
470 79, 68,
471 65, 79,
472 79, 66,
473 76, 80,
474 80, 69,
475 72, 80,
476 80, 75,
477 73, 80,
478 80, 74
479 };
480
481 // vertices-at-quad
482 static const Index v_q[] =
483 {
484 0, 20, 21, 56,
485 20, 1, 56, 22,
486 21, 56, 3, 24,
487 56, 22, 24, 4,
488 2, 23, 25, 57,
489 23, 3, 57, 26,
490 25, 57, 5, 28,
491 57, 26, 28, 6,
492 3, 24, 26, 58,
493 24, 4, 58, 27,
494 26, 58, 6, 29, //10
495 58, 27, 29, 7,
496 8, 38, 30, 59,
497 38, 9, 59, 31,
498 30, 59, 0, 20,
499 59, 31, 20, 1,
500 8, 39, 30, 60,
501 39, 11, 60, 33,
502 30, 60, 0, 21,
503 60, 33, 21, 3,
504 9, 40, 31, 61, //20
505 40, 12, 61, 34,
506 31, 61, 1, 22,
507 61, 34, 22, 4,
508 10, 41, 32, 62,
509 41, 11, 62, 33,
510 32, 62, 2, 23,
511 62, 33, 23, 3,
512 11, 42, 33, 63,
513 42, 12, 63, 34,
514 33, 63, 3, 24, //30
515 63, 34, 24, 4,
516 10, 43, 32, 64,
517 43, 13, 64, 35,
518 32, 64, 2, 25,
519 64, 35, 25, 5,
520 11, 44, 33, 65,
521 44, 14, 65, 36,
522 33, 65, 3, 26,
523 65, 36, 26, 6,
524 12, 45, 34, 66, //40
525 45, 15, 66, 37,
526 34, 66, 4, 27,
527 66, 37, 27, 7,
528 13, 46, 35, 67,
529 46, 14, 67, 36,
530 35, 67, 5, 28,
531 67, 36, 28, 6,
532 14, 47, 36, 68,
533 47, 15, 68, 37,
534 36, 68, 6, 29, //50
535 68, 37, 29, 7,
536 8, 38, 39, 69,
537 38, 9, 69, 40,
538 39, 69, 11, 42,
539 69, 40, 42, 12,
540 10, 41, 43, 70,
541 41, 11, 70, 44,
542 43, 70, 13, 46,
543 70, 44, 46, 14,
544 11, 42, 44, 71, //60
545 42, 12, 71, 45,
546 44, 71, 14, 47,
547 71, 45, 47, 15,
548 16, 52, 48, 72,
549 52, 17, 72, 49,
550 48, 72, 8, 38,
551 72, 49, 38, 9,
552 16, 53, 48, 73,
553 53, 18, 73, 50,
554 48, 73, 8, 39, //70
555 73, 50, 39, 11,
556 17, 54, 49, 74,
557 54, 19, 74, 51,
558 49, 74, 9, 40,
559 74, 51, 40, 12,
560 18, 55, 50, 75,
561 55, 19, 75, 51,
562 50, 75, 11, 42,
563 75, 51, 42, 12,
564 16, 52, 53, 76, //80
565 52, 17, 76, 54,
566 53, 76, 18, 55,
567 76, 54, 55, 19,
568
569 //cubes
570 38, 69, 59, 77,
571 69, 42, 77, 63,
572 59, 77, 20, 56,
573 77, 63, 56, 24,
574 39, 69, 60, 77,
575 69, 40, 77, 61,
576 60, 77, 21, 56, //90
577 77, 61, 56, 22,
578 30, 59, 60, 77,
579 59, 31, 77, 61,
580 60, 77, 33, 63,
581 77, 61, 63, 34,
582 41, 70, 62, 78,
583 70, 46, 78, 67,
584 62, 78, 23, 57,
585 78, 67, 57, 28,
586 43, 70, 64, 78, //100
587 70, 44, 78, 65,
588 64, 78, 25, 57,
589 78, 65, 57, 26,
590 32, 62, 64, 78,
591 62, 33, 78, 65,
592 64, 78, 35, 67,
593 78, 65, 67, 36,
594 42, 71, 63, 79,
595 71, 47, 79, 68,
596 63, 79, 24, 58, //110
597 79, 68, 58, 29,
598 44, 71, 65, 79,
599 71, 45, 79, 66,
600 65, 79, 26, 58,
601 79, 66, 58, 27,
602 33, 63, 65, 79,
603 63, 34, 79, 66,
604 65, 79, 36, 68,
605 79, 66, 68, 37,
606 52, 76, 72, 80, //120
607 76, 55, 80, 75,
608 72, 80, 38, 69,
609 80, 75, 69, 42,
610 53, 76, 73, 80,
611 76, 54, 80, 74,
612 73, 80, 39, 69,
613 80, 74, 69, 40,
614 48, 72, 73, 80,
615 72, 49, 80, 74,
616 73, 80, 50, 75, //130
617 80, 74, 75, 51
618 };
619
620 // vertices-at-cube
621 static const Index v_c[] =
622 {
623 8, 38, 39, 69, 30, 59, 60, 77, //0
624 38, 9, 69, 40, 59, 31, 77, 61,
625 39, 69, 11, 42, 60, 77, 33, 63,
626 69, 40, 42, 12, 77, 61, 63, 34,
627 30, 59, 60, 77, 0, 20, 21, 56,
628 59, 31, 77, 61, 20, 1, 56, 22,
629 60, 77, 33, 63, 21, 56, 3, 24,
630 77, 61, 63, 34, 56, 22, 24, 4,
631 10, 41, 43, 70, 32, 62, 64, 78,
632 41, 11, 70, 44, 62, 33, 78, 65,
633 43, 70, 13, 46, 64, 78, 35, 67, //10
634 70, 44, 46, 14, 78, 65, 67, 36,
635 32, 62, 64, 78, 2, 23, 25, 57,
636 62, 33, 78, 65, 23, 3, 57, 26,
637 64, 78, 35, 67, 25, 57, 5, 28,
638 78, 65, 67, 36, 57, 26, 28, 6,
639 11, 42, 44, 71, 33, 63, 65, 79,
640 42, 12, 71, 45, 63, 34, 79, 66,
641 44, 71, 14, 47, 65, 79, 36, 68,
642 71, 45, 47, 15, 79, 66, 68, 37,
643 33, 63, 65, 79,3, 24, 26, 58, //20
644 63, 34, 79, 66, 24, 4, 58, 27,
645 65, 79, 36, 68, 26, 58, 6, 29,
646 79, 66, 68, 37, 58, 27, 29, 7,
647 16, 52, 53, 76, 48, 72, 73, 80,
648 52, 17, 76, 54, 72, 49, 80, 74,
649 53, 76, 18, 55, 73, 80, 50, 75,
650 76, 54, 55, 19, 80, 74, 75, 51,
651 48, 72, 73, 80, 8, 38, 39, 69,
652 72, 49, 80, 74,38, 9, 69, 40,
653 73, 80, 50, 75, 39, 69, 11, 42, //30
654 80, 74, 75, 51, 69, 40, 42, 12
655 };
656
657 // edges-at-quad
658 static const Index e_q[] =
659 {
660 0, 74, 2, 72,
661 1, 75, 72, 4,
662 74, 8, 3, 73,
663 75, 9, 73, 5,
664
665 6, 78, 10, 76,
666 7, 79, 76, 12,
667 78, 16, 11, 77,
668 79, 17, 77, 13,
669
670 8, 82, 12, 80,
671 9, 83, 80, 14,
672 82, 18, 13, 81,
673 83, 19, 81, 15,
674
675 36, 86, 20, 84,
676 37, 87, 84, 22,
677 86, 0, 21, 85,
678 87, 1, 85, 23,
679
680 38, 90, 20, 88,
681 39, 91, 88, 26,
682 90, 2, 21, 89,
683 91, 3, 89, 27,
684
685 40, 94, 22, 92,
686 41, 95, 92, 28,
687 94, 4, 23, 93,
688 95, 5, 93, 29,
689
690 42, 98, 24, 96,
691 43, 99, 96, 26,
692 98, 6, 25, 97,
693 99, 7, 97, 27,
694
695 44, 102, 26, 100,
696 45, 103, 100, 28,
697 102, 8, 27, 101,
698 103, 9, 101, 29,
699
700 46, 106, 24, 104,
701 47, 107, 104, 30,
702 106, 10, 25, 105,
703 107, 11, 105, 31,
704
705 48, 110, 26, 108,
706 49, 111, 108, 32,
707 110, 12, 27, 109,
708 111, 13, 109, 33,
709
710 50, 114, 28, 112,
711 51, 115, 112, 34,
712 114, 14, 29, 113,
713 115, 15, 113, 35,
714
715 52, 118, 30, 116,
716 53, 119, 116, 32,
717 118, 16, 31, 117,
718 119, 17, 117, 33,
719
720 54, 122, 32, 120,
721 55, 123, 120, 34,
722 122, 18, 33, 121,
723 123, 19, 121, 35,
724
725 36, 126, 38, 124,
726 37, 127, 124, 40,
727 126, 44, 39, 125,
728 127, 45, 125, 41,
729
730 42, 130, 46, 128,
731 43, 131, 128, 48,
732 130, 52, 47, 129,
733 131, 53, 129, 49,
734
735 44, 134, 48, 132,
736 45, 135, 132, 50,
737 134, 54, 49, 133,
738 135, 55, 133, 51,
739
740 64, 138, 56, 136,
741 65, 139, 136, 58,
742 138, 36, 57, 137,
743 139, 37, 137, 59,
744
745 66, 142, 56, 140,
746 67, 143, 140, 60,
747 142, 38, 57, 141,
748 143, 39, 141, 61,
749
750 68, 146, 58, 144,
751 69, 147, 144, 62,
752 146, 40, 59, 145,
753 147, 41, 145, 63,
754
755 70, 150, 60, 148,
756 71, 151, 148, 62,
757 150, 44, 61, 149,
758 151, 45, 149, 63,
759
760 64, 154, 66, 152,
761 65, 155, 152, 68,
762 154, 70, 67, 153,
763 155, 71, 153, 69,
764
765 124, 158, 84, 156,
766 125, 159, 156, 100,
767 158, 72, 85, 157,
768 159, 73, 157, 101,
769
770 126, 160, 88, 156,
771 127, 161, 156, 92,
772 160, 74, 89, 157,
773 161, 75, 157, 93,
774
775 86, 160, 90, 158,
776 87, 161, 158, 94,
777 160, 102, 91, 159,
778 161, 103, 159, 95,
779
780 128, 164, 96, 162,
781 129, 165, 162, 116,
782 164, 76, 97, 163,
783 165, 77, 163, 117,
784
785 130, 166, 104, 162,
786 131, 167, 162, 108,
787 166, 78, 105, 163,
788 167, 79, 163, 109,
789
790 98, 166, 106, 164,
791 99, 167, 164, 110,
792 166, 118, 107, 165,
793 167, 119, 165, 111,
794
795 132, 170, 100, 168,
796 133, 171, 168, 120,
797 170, 80, 101, 169,
798 171, 81, 169, 121,
799
800 134, 172, 108, 168,
801 135, 173, 168, 112,
802 172, 82, 109, 169,
803 173, 83, 169, 113,
804
805 102, 172, 110, 170,
806 103, 173, 170, 114,
807 172, 122, 111, 171,
808 173, 123, 171, 115,
809
810 152, 176, 136, 174,
811 153, 177, 174, 148,
812 176, 124, 137, 175,
813 177, 125, 175, 149,
814
815 154, 178, 140, 174,
816 155, 179, 174, 144,
817 178, 126, 141, 175,
818 179, 127, 175, 145,
819
820 138, 178, 142, 176,
821 139, 179, 176, 146,
822 178, 150, 143, 177,
823 179, 151, 177, 147
824 };
825
826 // edges-at-cube
827 static const Index e_c[] =
828 {
829 36, 126, 86, 160, 38, 124, 90, 158, 20, 84, 88, 156,
830 37, 127, 87, 161, 124, 40, 158, 94, 84, 22, 156, 92,
831 126, 44, 160, 102, 39, 125, 91, 159, 88, 156, 26, 100,
832 127, 45, 161, 103, 125, 41, 159, 95, 156, 92, 100, 28,
833 86, 160, 0, 74, 90, 158, 2, 72, 21, 85, 89, 157,
834 87, 161, 1, 75, 158, 94, 72, 4, 85, 23, 157, 93,
835 160, 102, 74, 8,91, 159, 3, 73, 89, 157, 27, 101,
836 161, 103, 75, 9, 159, 95, 73, 5, 157, 93, 101, 29,
837
838 42, 130, 98, 166, 46, 128, 106, 164, 24, 96, 104, 162,
839 43, 131, 99, 167, 128, 48, 164, 110, 96, 26, 162, 108,
840 130, 52, 166, 118, 47, 129, 107, 165, 104, 162, 30, 116,
841 131, 53, 167, 119, 129, 49, 165, 111, 162, 108, 116, 32,
842 98, 166, 6, 78, 106, 164, 10, 76, 25, 97, 105, 163,
843 99, 167, 7, 79, 164, 110, 76, 12, 97, 27, 163, 109,
844 166, 118, 78, 16, 107, 165, 11, 77, 105, 163, 31, 117,
845 167, 119, 79, 17, 165, 111, 77, 13, 163, 109, 117, 33,
846
847 44, 134, 102, 172, 48, 132, 110, 170, 26, 100, 108, 168,
848 45, 135, 103, 173, 132, 50, 170, 114, 100, 28, 168, 112,
849 134, 54, 172, 122, 49, 133, 111, 171, 108, 168, 32, 120,
850 135, 55, 173, 123, 133, 51, 171, 115, 168, 112, 120, 34,
851 102, 172, 8, 82, 110, 170, 12, 80, 27, 101, 109, 169,
852 103, 173, 9, 83, 170, 114, 80, 14, 101, 29, 169, 113,
853 172, 122, 82, 18, 111, 171, 13, 81, 109, 169, 33, 121,
854 173, 123, 83, 19, 171, 115, 81, 15, 169, 113, 121, 35,
855
856 64, 154, 138, 178, 66, 152, 142, 176, 56, 136, 140, 174,
857 65, 155, 139, 179, 152, 68, 176, 146, 136, 58, 174, 144,
858 154, 70, 178, 150, 67, 153, 143, 177, 140, 174, 60, 148,
859 155, 71, 179, 151, 153, 69, 177, 147, 174, 144, 148, 62,
860 138, 178, 36, 126, 142, 176, 38, 124, 57, 137, 141, 175,
861 139, 179, 37, 127, 176, 146, 124, 40, 137, 59, 175, 145,
862 178, 150, 126, 44, 143, 177, 39, 125, 141, 175, 61, 149,
863 179, 151, 127, 45, 177, 147, 125, 41, 175, 145, 149, 63
864 };
865
866 // quad-at-cube
867 static const Index q_c[] =
868 {
869 52, 92, 12, 88, 16, 84,
870 53, 93, 13, 89, 84, 20,
871 54, 94, 88, 28, 17, 85,
872 55, 95, 89, 29, 85, 21,
873 92, 0, 14, 90, 18, 86,
874 93, 1, 15, 91, 86, 22,
875 94, 2, 90, 30, 19, 87,
876 95, 3, 91, 31, 87, 23,
877
878 56, 104, 24, 100, 32, 96,
879 57, 105, 25, 101, 96, 36,
880 58, 106, 100, 44, 33, 97,
881 59, 107, 101, 45, 97, 37,
882 104, 4, 26, 102, 34, 98,
883 105, 5, 27, 103, 98, 38,
884 106, 6, 102, 46, 35, 99,
885 107, 7, 103, 47, 99, 39,
886
887 60, 116, 28, 112, 36, 108,
888 61, 117, 29, 113, 108, 40,
889 62, 118, 112, 48, 37, 109,
890 63, 119, 113, 49, 109, 41,
891 116, 8, 30, 114, 38, 110,
892 117, 9, 31, 115, 110, 42,
893 118, 10, 114, 50, 39, 111,
894 119, 11, 115, 51, 111, 43,
895
896 80, 128, 64, 124, 68, 120,
897 81, 129, 65, 125, 120, 72,
898 82, 130, 124, 76, 69, 121,
899 83, 131, 125, 77, 121, 73,
900 128, 52, 66, 126, 70, 122,
901 129, 53, 67, 127, 122, 74,
902 130, 54, 126, 78, 71, 123,
903 131, 55, 127, 79, 123, 75
904 };
905
906 // check vertex coordinates array
907 if(!comp_vtx(mesh.get_vertex_set(), vtx))
908 throw String("Vertex coordinate refinement failure");
909
910 // check vertices-at-edge array
911 if(!comp_idx(mesh.get_index_set<1,0>(), v_e))
912 throw String("Vertex-At-Edge index set refinement failure");
913
914 // check vertices-at-quad
915 if(!comp_idx(mesh.get_index_set<2,0>(), v_q))
916 throw String("Vertex-At-Quad index set refinement failure");
917
918 // check vertices-at-cube
919 if(!comp_idx(mesh.get_index_set<3,0>(), v_c))
920 throw String("Vertex-At-Cube index set refinement failure");
921
922 // check edges-at-quad
923 if(!comp_idx(mesh.get_index_set<2,1>(), e_q))
924 throw String("Edge-At-Quad index set refinement failure");
925
926 // check edges-at-cube
927 if(!comp_idx(mesh.get_index_set<3,1>(), e_c))
928 throw String("Edge-At-Cube index set refinement failure");
929
930 // check quad-at-cube
931 if(!comp_idx(mesh.get_index_set<3,2>(), q_c))
932 throw String("Quad-At-Cube index set refinement failure");
933
934 } // validate_refined_tetris_mesh_3d
935
936 HexaMesh* create_big_tetris_mesh_3d()
937 {
938 Index num_entities[] =
939 {
940 81, // vertices
941 180, // edges
942 132, // quads
943 32 // hexas
944 };
945
946 // create mesh
947 HexaMesh* mesh = new HexaMesh(num_entities);
948
949 // set up vertex coordinates array
950 Real vtx[81*3] =
951 {
952 0.0, -1.0, 1.0,
953 1.0, -1.0, 1.0,
954 -1.0, 0.0, 1.0,
955 0.0, 0.0, 1.0,
956 1.0, 0.0, 1.0,
957 -1.0, 1.0, 1.0,
958 0.0, 1.0, 1.0,
959 1.0, 1.0, 1.0,
960 0.0, -1.0, 0.0,
961 1.0, -1.0, 0.0,
962 -1.0, 0.0, 0.0, //10
963 0.0, 0.0, 0.0,
964 1.0, 0.0, 0.0,
965 -1.0, 1.0, 0.0,
966 0.0, 1.0, 0.0,
967 1.0, 1.0, 0.0,
968 0.0, -1.0, -1.0,
969 1.0, -1.0, -1.0,
970 0.0, 0.0, -1.0,
971 1.0, 0.0, -1.0,
972
973 // edges
974 0.5, -1.0, 1.0, //20
975 0.0, -0.5, 1.0,
976 1.0, -0.5, 1.0,
977 -0.5, 0.0, 1.0,
978 0.5, 0.0, 1.0,
979 -1.0, 0.5, 1.0,
980 0.0, 0.5, 1.0,
981 1.0, 0.5, 1.0,
982 -0.5, 1.0, 1.0,
983 0.5, 1.0, 1.0,
984 0.0, -1.0, 0.5, //30
985 1.0, -1.0, 0.5,
986 -1.0, 0.0, 0.5,
987 0.0, 0.0, 0.5,
988 1.0, 0.0, 0.5,
989 -1.0, 1.0, 0.5,
990 0.0, 1.0, 0.5,
991 1.0, 1.0, 0.5,
992 0.5, -1.0, 0.0,
993 0.0, -0.5, 0.0,
994 1.0, -0.5, 0.0, //40
995 -0.5, 0.0, 0.0,
996 0.5, 0.0, 0.0,
997 -1.0, 0.5, 0.0,
998 0.0, 0.5, 0.0,
999 1.0, 0.5, 0.0,
1000 -0.5, 1.0, 0.0,
1001 0.5, 1.0, 0.0,
1002 0.0, -1.0, -0.5,
1003 1.0, -1.0, -0.5,
1004 0.0, 0.0, -0.5, //50
1005 1.0, 0.0, -0.5,
1006 0.5, -1.0, -1.0,
1007 0.0, -0.5, -1.0,
1008 1.0, -0.5, -1.0,
1009 0.5, 0.0, -1.0,
1010
1011 //quads
1012 0.5, -0.5, 1.0,
1013 -0.5, 0.5, 1.0,
1014 0.5, 0.5, 1.0,
1015 0.5, -1.0, 0.5,
1016 0.0, -0.5, 0.5, //60
1017 1.0, -0.5, 0.5,
1018 -0.5, 0.0, 0.5,
1019 0.5, 0.0, 0.5,
1020 -1.0, 0.5, 0.5,
1021 0.0, 0.5, 0.5,
1022 1.0, 0.5, 0.5,
1023 -0.5, 1.0, 0.5,
1024 0.5, 1.0, 0.5,
1025 0.5, -0.5, 0.0,
1026 -0.5, 0.5, 0.0, //70
1027 0.5, 0.5, 0.0,
1028 0.5, -1.0, -0.5,
1029 0.0, -0.5, -0.5,
1030 1.0, -0.5, -0.5,
1031 0.5, 0.0, -0.5,
1032 0.5, -0.5, -1.0,
1033
1034 //cells
1035 0.5, -0.5, 0.5,
1036 -0.5, 0.5, 0.5,
1037 0.5, 0.5, 0.5,
1038 0.5, -0.5, -0.5
1039 };
1040 copy_vtx(mesh->get_vertex_set(), vtx);
1041
1042 // set up vertices-at-edge
1043 Index v_e[180*2] =
1044 {
1045 //edges
1046 0, 20,
1047 20, 1,
1048 0, 21,
1049 21, 3,
1050 1, 22,
1051 22, 4,
1052 2, 23,
1053 23, 3,
1054 3, 24,
1055 24, 4,
1056 2, 25, //10
1057 25, 5,
1058 3, 26,
1059 26, 6,
1060 4, 27,
1061 27, 7,
1062 5, 28,
1063 28, 6,
1064 6, 29,
1065 29, 7,
1066 8, 30, //20
1067 30, 0,
1068 9, 31,
1069 31, 1,
1070 10, 32,
1071 32, 2,
1072 11, 33,
1073 33, 3,
1074 12, 34,
1075 34, 4,
1076 13, 35, //30
1077 35, 5,
1078 14, 36,
1079 36, 6,
1080 15, 37,
1081 37, 7,
1082 8, 38,
1083 38, 9,
1084 8, 39,
1085 39, 11,
1086 9, 40, //40
1087 40, 12,
1088 10, 41,
1089 41, 11,
1090 11, 42,
1091 42, 12,
1092 10, 43,
1093 43, 13,
1094 11, 44,
1095 44, 14,
1096 12, 45, //50
1097 45, 15,
1098 13, 46,
1099 46, 14,
1100 14, 47,
1101 47, 15,
1102 16, 48,
1103 48, 8,
1104 17, 49,
1105 49, 9,
1106 18, 50, //60
1107 50, 11,
1108 19, 51,
1109 51, 12,
1110 16, 52,
1111 52, 17,
1112 16, 53,
1113 53, 18,
1114 17, 54,
1115 54, 19,
1116 18, 55, //70
1117 55, 19,
1118
1119 //quads
1120 20, 56,
1121 56, 24,
1122 21, 56,
1123 56, 22,
1124 23, 57,
1125 57, 28,
1126 25, 57,
1127 57, 26,
1128 24, 58, //80
1129 58, 29,
1130 26, 58,
1131 58, 27,
1132 38, 59,
1133 59, 20,
1134 30, 59,
1135 59, 31,
1136 39, 60,
1137 60, 21,
1138 30, 60, //90
1139 60, 33,
1140 40, 61,
1141 61, 22,
1142 31, 61,
1143 61, 34,
1144 41, 62,
1145 62, 23,
1146 32, 62,
1147 62, 33,
1148 42, 63, //100
1149 63, 24,
1150 33, 63,
1151 63, 34,
1152 43, 64,
1153 64, 25,
1154 32, 64,
1155 64, 35,
1156 44, 65,
1157 65, 26,
1158 33, 65, //110
1159 65, 36,
1160 45, 66,
1161 66, 27,
1162 34, 66,
1163 66, 37,
1164 46, 67,
1165 67, 28,
1166 35, 67,
1167 67, 36,
1168 47, 68, //120
1169 68, 29,
1170 36, 68,
1171 68, 37,
1172 38, 69,
1173 69, 42,
1174 39, 69,
1175 69, 40,
1176 41, 70,
1177 70, 46,
1178 43, 70, //130
1179 70, 44,
1180 42, 71,
1181 71, 47,
1182 44, 71,
1183 71, 45,
1184 52, 72,
1185 72, 38,
1186 48, 72,
1187 72, 49,
1188 53, 73, //140
1189 73, 39,
1190 48, 73,
1191 73, 50,
1192 54, 74,
1193 74, 40,
1194 49, 74,
1195 74, 51,
1196 55, 75,
1197 75, 42,
1198 50, 75, //150
1199 75, 51,
1200 52, 76,
1201 76, 55,
1202 53, 76,
1203 76, 54,
1204
1205 //cubes
1206 69, 77,
1207 77, 56,
1208 59, 77,
1209 77, 63,
1210 60, 77, //160
1211 77, 61,
1212 70, 78,
1213 78, 57,
1214 62, 78,
1215 78, 67,
1216 64, 78,
1217 78, 65,
1218 71, 79,
1219 79, 58,
1220 63, 79, //170
1221 79, 68,
1222 65, 79,
1223 79, 66,
1224 76, 80,
1225 80, 69,
1226 72, 80,
1227 80, 75,
1228 73, 80,
1229 80, 74
1230 };
1231 copy_idx(mesh->get_index_set<1,0>(), v_e);
1232
1233 // set up vertices-at-quad
1234 Index v_q[132*4] =
1235 {
1236 0, 20, 21, 56,
1237 20, 1, 56, 22,
1238 21, 56, 3, 24,
1239 56, 22, 24, 4,
1240 2, 23, 25, 57,
1241 23, 3, 57, 26,
1242 25, 57, 5, 28,
1243 57, 26, 28, 6,
1244 3, 24, 26, 58,
1245 24, 4, 58, 27,
1246 26, 58, 6, 29, //10
1247 58, 27, 29, 7,
1248 8, 38, 30, 59,
1249 38, 9, 59, 31,
1250 30, 59, 0, 20,
1251 59, 31, 20, 1,
1252 8, 39, 30, 60,
1253 39, 11, 60, 33,
1254 30, 60, 0, 21,
1255 60, 33, 21, 3,
1256 9, 40, 31, 61, //20
1257 40, 12, 61, 34,
1258 31, 61, 1, 22,
1259 61, 34, 22, 4,
1260 10, 41, 32, 62,
1261 41, 11, 62, 33,
1262 32, 62, 2, 23,
1263 62, 33, 23, 3,
1264 11, 42, 33, 63,
1265 42, 12, 63, 34,
1266 33, 63, 3, 24, //30
1267 63, 34, 24, 4,
1268 10, 43, 32, 64,
1269 43, 13, 64, 35,
1270 32, 64, 2, 25,
1271 64, 35, 25, 5,
1272 11, 44, 33, 65,
1273 44, 14, 65, 36,
1274 33, 65, 3, 26,
1275 65, 36, 26, 6,
1276 12, 45, 34, 66, //40
1277 45, 15, 66, 37,
1278 34, 66, 4, 27,
1279 66, 37, 27, 7,
1280 13, 46, 35, 67,
1281 46, 14, 67, 36,
1282 35, 67, 5, 28,
1283 67, 36, 28, 6,
1284 14, 47, 36, 68,
1285 47, 15, 68, 37,
1286 36, 68, 6, 29, //50
1287 68, 37, 29, 7,
1288 8, 38, 39, 69,
1289 38, 9, 69, 40,
1290 39, 69, 11, 42,
1291 69, 40, 42, 12,
1292 10, 41, 43, 70,
1293 41, 11, 70, 44,
1294 43, 70, 13, 46,
1295 70, 44, 46, 14,
1296 11, 42, 44, 71, //60
1297 42, 12, 71, 45,
1298 44, 71, 14, 47,
1299 71, 45, 47, 15,
1300 16, 52, 48, 72,
1301 52, 17, 72, 49,
1302 48, 72, 8, 38,
1303 72, 49, 38, 9,
1304 16, 53, 48, 73,
1305 53, 18, 73, 50,
1306 48, 73, 8, 39, //70
1307 73, 50, 39, 11,
1308 17, 54, 49, 74,
1309 54, 19, 74, 51,
1310 49, 74, 9, 40,
1311 74, 51, 40, 12,
1312 18, 55, 50, 75,
1313 55, 19, 75, 51,
1314 50, 75, 11, 42,
1315 75, 51, 42, 12,
1316 16, 52, 53, 76, //80
1317 52, 17, 76, 54,
1318 53, 76, 18, 55,
1319 76, 54, 55, 19,
1320
1321 //cubes
1322 38, 69, 59, 77,
1323 69, 42, 77, 63,
1324 59, 77, 20, 56,
1325 77, 63, 56, 24,
1326 39, 69, 60, 77,
1327 69, 40, 77, 61,
1328 60, 77, 21, 56, //90
1329 77, 61, 56, 22,
1330 30, 59, 60, 77,
1331 59, 31, 77, 61,
1332 60, 77, 33, 63,
1333 77, 61, 63, 34,
1334 41, 70, 62, 78,
1335 70, 46, 78, 67,
1336 62, 78, 23, 57,
1337 78, 67, 57, 28,
1338 43, 70, 64, 78, //100
1339 70, 44, 78, 65,
1340 64, 78, 25, 57,
1341 78, 65, 57, 26,
1342 32, 62, 64, 78,
1343 62, 33, 78, 65,
1344 64, 78, 35, 67,
1345 78, 65, 67, 36,
1346 42, 71, 63, 79,
1347 71, 47, 79, 68,
1348 63, 79, 24, 58, //110
1349 79, 68, 58, 29,
1350 44, 71, 65, 79,
1351 71, 45, 79, 66,
1352 65, 79, 26, 58,
1353 79, 66, 58, 27,
1354 33, 63, 65, 79,
1355 63, 34, 79, 66,
1356 65, 79, 36, 68,
1357 79, 66, 68, 37,
1358 52, 76, 72, 80, //120
1359 76, 55, 80, 75,
1360 72, 80, 38, 69,
1361 80, 75, 69, 42,
1362 53, 76, 73, 80,
1363 76, 54, 80, 74,
1364 73, 80, 39, 69,
1365 80, 74, 69, 40,
1366 48, 72, 73, 80,
1367 72, 49, 80, 74,
1368 73, 80, 50, 75, //130
1369 80, 74, 75, 51
1370 };
1371 copy_idx(mesh->get_index_set<2,0>(), v_q);
1372
1373 // set up vertices-at-cell
1374 Index v_c[32*8] =
1375 {
1376 8, 38, 39, 69, 30, 59, 60, 77, //0
1377 38, 9, 69, 40, 59, 31, 77, 61,
1378 39, 69, 11, 42, 60, 77, 33, 63,
1379 69, 40, 42, 12, 77, 61, 63, 34,
1380 30, 59, 60, 77, 0, 20, 21, 56,
1381 59, 31, 77, 61, 20, 1, 56, 22,
1382 60, 77, 33, 63, 21, 56, 3, 24,
1383 77, 61, 63, 34, 56, 22, 24, 4,
1384 10, 41, 43, 70, 32, 62, 64, 78,
1385 41, 11, 70, 44, 62, 33, 78, 65,
1386 43, 70, 13, 46, 64, 78, 35, 67, //10
1387 70, 44, 46, 14, 78, 65, 67, 36,
1388 32, 62, 64, 78, 2, 23, 25, 57,
1389 62, 33, 78, 65, 23, 3, 57, 26,
1390 64, 78, 35, 67, 25, 57, 5, 28,
1391 78, 65, 67, 36, 57, 26, 28, 6,
1392 11, 42, 44, 71, 33, 63, 65, 79,
1393 42, 12, 71, 45, 63, 34, 79, 66,
1394 44, 71, 14, 47, 65, 79, 36, 68,
1395 71, 45, 47, 15, 79, 66, 68, 37,
1396 33, 63, 65, 79,3, 24, 26, 58, //20
1397 63, 34, 79, 66, 24, 4, 58, 27,
1398 65, 79, 36, 68, 26, 58, 6, 29,
1399 79, 66, 68, 37, 58, 27, 29, 7,
1400 16, 52, 53, 76, 48, 72, 73, 80,
1401 52, 17, 76, 54, 72, 49, 80, 74,
1402 53, 76, 18, 55, 73, 80, 50, 75,
1403 76, 54, 55, 19, 80, 74, 75, 51,
1404 48, 72, 73, 80, 8, 38, 39, 69,
1405 72, 49, 80, 74,38, 9, 69, 40,
1406 73, 80, 50, 75, 39, 69, 11, 42, //30
1407 80, 74, 75, 51, 69, 40, 42, 12
1408 };
1409 copy_idx(mesh->get_index_set<3, 0>(), v_c);
1410
1411 // okay
1412 return mesh;
1413 }
1414
1415 HexaSubMesh* create_tetris_quad_submesh_3d()
1416 {
1417
1418 /* Creates the 3D tetris quad submesh.
1419
1420 14
1421 /|
1422 / |
1423 P |
1424 / X
1425 / |
1426 6 |
1427 | |
1428 |----11---------V--------12
1429 | /| /|
1430 F / | / |
1431 | M | N |
1432 | / S / T
1433 |/ | / |
1434 3---------D---------4 |
1435 | |
1436 8---------R---------9
1437 y
1438 ^
1439 |
1440 |
1441 11---->x
1442 /
1443 z/
1444 v
1445 */
1446
1447 Index num_entities[] =
1448 {
1449 8, // vertices
1450 10, // edges
1451 3, // quads
1452 0 // hexas
1453 };
1454
1455 // create mesh
1456 HexaSubMesh* mesh = new HexaSubMesh(num_entities, true);
1457 // create a AttributeSet that holds one value for each vertex
1458 std::unique_ptr<HexaSubMesh::AttributeSetType> my_attrib_set(new HexaSubMesh::AttributeSetType(num_entities[0],2));
1459 // Add the attribute to mesh
1460 mesh->add_attribute(std::move(my_attrib_set), "HexaSubAttributeSet");
1461
1462 // set up vertex coordinates array
1463 Real attr[] =
1464 {
1465 0.0, 0.0,
1466 1.0, 1.0,
1467 2.0, 2.0,
1468 1.0, 2.0,
1469 2.0, 1.0,
1470 2.0, 0.0,
1471 1.0, 0.0,
1472 0.0, 1.0
1473 };
1474 copy_attr(*(mesh->find_attribute("HexaSubAttributeSet")), attr);
1475
1476 // set up vertices-at-edge array
1477 Index v_e[] =
1478 {
1479 6, 0,
1480 5, 6,
1481 7, 1,
1482 1, 4,
1483 0, 7,
1484 6, 1,
1485 4, 5,
1486 3, 1,
1487 2, 4,
1488 3, 2
1489 };
1490 copy_idx(mesh->get_index_set<1,0>(), v_e);
1491
1492 // set up vertices-at-quad array
1493 Index v_q[] =
1494 {
1495 0, 6, 7, 1,
1496 5, 4, 6, 1,
1497 3, 2, 1, 4
1498 };
1499 copy_idx(mesh->get_index_set<2,0>(), v_q);
1500
1501 // set up edges-at-quad array
1502 Index e_q[] =
1503 {
1504 0, 2, 4, 5,
1505 6, 5, 1, 3,
1506 9, 3, 7, 8
1507 };
1508 copy_idx(mesh->get_index_set<2,1>(), e_q);
1509
1510 // set up vertex-target indices
1511 Index vti[] =
1512 {
1513 6, 11, 9, 8, 12, 4, 3, 14
1514 };
1515 copy_trg(mesh->get_target_set<0>(), vti);
1516
1517 // set up edge-target indices
1518 Index eqi[] =
1519 {
1520 6, 4, 24, 22, 16, 13, 14, 19, 20, 18
1521 };
1522 copy_trg(mesh->get_target_set<1>(), eqi);
1523
1524 // set up quad-target indices
1525 Index qti[] =
1526 {
1527 9, 7, 13
1528 };
1529 copy_trg(mesh->get_target_set<2>(), qti);
1530 // okay
1531 return mesh;
1532 } // create_tetris_quad_submesh_3d()
1533
1534 void validate_refined_tetris_quad_submesh_3d(const HexaSubMesh& mesh)
1535 {
1536 // validate sizes
1537 if(mesh.get_num_entities(0) != 21)
1538 throw String("Vertex count mismatch");
1539 if(mesh.get_num_entities(1) != 32)
1540 throw String("Edge count mismatch");
1541 if(mesh.get_num_entities(2) != 12)
1542 throw String("Quad count mismatch");
1543
1544 // check vertex coordinates array
1545 Real attr[] =
1546 {
1547 0.0, 0.0,
1548 1.0, 1.0,
1549 2.0, 2.0,
1550 1.0, 2.0,
1551 2.0, 1.0,
1552 2.0, 0.0,
1553 1.0, 0.0,
1554 0.0, 1.0,
1555
1556 0.5, 0.0,
1557 1.5, 0.0,
1558 0.5, 1.0,
1559 1.5, 1.0,
1560 0.0, 0.5,
1561 1.0, 0.5,
1562 2.0, 0.5,
1563 1.0, 1.5,
1564 2.0, 1.5,
1565 1.5, 2.0,
1566 0.5, 0.5,
1567 1.5, 0.5,
1568 1.5, 1.5
1569 };
1570 if(!comp_attr(*(mesh.find_attribute("HexaSubAttributeSet")), attr))
1571 throw String("Attribute refinement failure");
1572
1573 // check vertices-at-edge array
1574 Index v_e[] =
1575 {
1576 6, 8,
1577 8, 0,
1578 5, 9,
1579 9, 6,
1580 7, 10,
1581 10, 1,
1582 1, 11,
1583 11, 4,
1584 0, 12,
1585 12, 7,
1586 6, 13,
1587 13, 1,
1588 4, 14,
1589 14, 5,
1590 3, 15,
1591 15, 1,
1592 2, 16,
1593 16, 4,
1594 3, 17,
1595 17, 2,
1596 8, 18,
1597 18, 10,
1598 12, 18,
1599 18, 13,
1600 14, 19,
1601 19, 13,
1602 9, 19,
1603 19, 11,
1604 17, 20,
1605 20, 11,
1606 15, 20,
1607 20, 16
1608 };
1609 if(!comp_idx(mesh.get_index_set<1,0>(), v_e))
1610 throw String("Vertex-At-Edge index set refinement failure");
1611
1612 // check vertices-at-quad
1613 Index v_q[] =
1614 {
1615 0, 8, 12, 18,
1616 8, 6, 18, 13,
1617 12, 18, 7, 10,
1618 18, 13, 10, 1,
1619 5, 14, 9, 19,
1620 14, 4, 19, 11,
1621 9, 19, 6, 13,
1622 19, 11, 13, 1,
1623 3, 17, 15, 20,
1624 17, 2, 20, 16,
1625 15, 20, 1, 11,
1626 20, 16, 11, 4
1627 };
1628 if(!comp_idx(mesh.get_index_set<2,0>(), v_q))
1629 throw String("Vertex-At-Quad index set refinement failure");
1630
1631 // check edges-at-quad
1632 Index e_q[] =
1633 {
1634 1, 22, 8, 20,
1635 0, 23, 20, 10,
1636 22, 4, 9, 21,
1637 23, 5, 21, 11,
1638 13, 26, 2, 24,
1639 12, 27, 24, 7,
1640 26, 10, 3, 25,
1641 27, 11, 25, 6,
1642 18, 30, 14, 28,
1643 19, 31, 28, 16,
1644 30, 6, 15, 29,
1645 31, 7, 29, 17
1646 };
1647 if(!comp_idx(mesh.get_index_set<2,1>(), e_q))
1648 throw String("Edges-At-Quad refinement failure");
1649
1650 // check vertex-target indices
1651 Index vti[] =
1652 {
1653 6, 11, 9, 8, 12, 4, 3, 14,
1654 26, 24, 44, 42, 36, 33, 34,
1655 39, 40, 38, 65, 63, 69
1656 };
1657 if(!comp_trg(mesh.get_target_set<0>(), vti))
1658 throw String("Vertex-Target-Indices refinement failure");
1659
1660 // check edge-target indices
1661 Index eti[] =
1662 {
1663 12, 13, 9, 8, 49, 48, 44, 45,
1664 33, 32, 27, 26, 28, 29, 38, 39,
1665 40, 41, 36, 37, 109, 108, 111, 110,
1666 103, 102, 101, 100, 124, 125, 126, 127
1667 };
1668 if(!comp_trg(mesh.get_target_set<1>(), eti))
1669 throw String("Edge-Target-Indices refinement failure");
1670
1671 // check quad-target indices
1672 Index qti[] =
1673 {
1674 39, 38, 37, 36,
1675 31, 29, 30, 28,
1676 52, 53, 54, 55
1677 };
1678 if(!comp_trg(mesh.get_target_set<2>(), qti))
1679 throw String("Quad-Target-Indices refinement failure");
1680 } //validate_refined_tetris_quad_submesh_3d
1681
1682 } // namespace TestAux
1683 } // namespace Geometry
1684} // namespace FEAT
FEAT namespace.
Definition: adjactor.hpp:12
double Real
Real data type.
std::uint64_t Index
Index data type.