FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
tetris_quad.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_quad.hpp>
7#include <kernel/geometry/test_aux/copy_comp_set.hpp>
8
9namespace FEAT
10{
11 namespace Geometry
12 {
13 namespace TestAux
14 {
15 QuadMesh* create_tetris_mesh_2d()
16 {
17 Index num_entities[] =
18 {
19 10, // vertices (0, ..., 9)
20 13, // edges (A, ..., M)
21 4 // quads (Q_0,..., Q_3)
22 };
23
24 // create mesh
25 QuadMesh* mesh = new QuadMesh(num_entities);
26
27 // set up vertex coordinates array
28 static const Real vtx[10*2] =
29 {
30 1.0, 0.0,
31 2.0, 0.0,
32 3.0, 0.0,
33 0.0, 1.0,
34 1.0, 1.0,
35 2.0, 1.0,
36 3.0, 1.0,
37 0.0, 2.0,
38 1.0, 2.0,
39 2.0, 2.0
40 };
41 copy_vtx(mesh->get_vertex_set(), vtx);
42
43 // set up vertices-at-edge array
44 static const Index v_e[13*2] =
45 {
46 0, 1,
47 1, 2,
48 0, 4,
49 1, 5,
50 2, 6,
51 3, 4,
52 4, 5,
53 5, 6,
54 3, 7,
55 4, 8,
56 5, 9,
57 7, 8,
58 8, 9
59 };
60 copy_idx(mesh->get_index_set<1,0>(), v_e);
61
62 // set up vertices-at-quad array
63 static const Index v_q[4*4] =
64 {
65 0, 1, 4, 5,
66 1, 2, 5, 6,
67 3, 4, 7, 8,
68 4, 5, 8, 9
69 };
70 copy_idx(mesh->get_index_set<2,0>(), v_q);
71
72 // set up edges-at-quad array
73 static const Index e_q[4*4] =
74 {
75 0, 6, 2, 3,
76 1, 7, 3, 4,
77 5, 11, 8, 9,
78 6, 12, 9, 10
79 };
80 copy_idx(mesh->get_index_set<2,1>(), e_q);
81
82 // okay
83 return mesh;
84 }
85
86 void validate_refined_tetris_mesh_2d(const QuadMesh& mesh)
87 {
88 // validate sizes
89 if(mesh.get_num_entities(0) != 27)
90 throw String("Vertex count mismatch");
91 if(mesh.get_num_entities(1) != 42)
92 throw String("Edge count mismatch");
93 if(mesh.get_num_entities(2) != 16)
94 throw String("Quad count mismatch");
95
96 // check vertex coordinates array
97 static const Real vtx[] =
98 {
99 1.0, 0.0, // coarse mesh vertices (0,...,9)
100 2.0, 0.0,
101 3.0, 0.0,
102 0.0, 1.0,
103 1.0, 1.0,
104 2.0, 1.0,
105 3.0, 1.0,
106 0.0, 2.0,
107 1.0, 2.0,
108 2.0, 2.0,
109 1.5, 0.0, // edge midpoints (10,...,22)
110 2.5, 0.0,
111 1.0, 0.5,
112 2.0, 0.5,
113 3.0, 0.5,
114 0.5, 1.0,
115 1.5, 1.0,
116 2.5, 1.0,
117 0.0, 1.5,
118 1.0, 1.5,
119 2.0, 1.5,
120 0.5, 2.0,
121 1.5, 2.0,
122 1.5, 0.5, // quad midpoints (23,...,26)
123 2.5, 0.5,
124 0.5, 1.5,
125 1.5, 1.5
126 };
127 if(!comp_vtx(mesh.get_vertex_set(), vtx))
128 throw String("Vertex coordinate refinement failure");
129
130 // check vertices-at-edge array
131 static const Index v_e[] =
132 {
133 0, 10,
134 10, 1,
135 1, 11,
136 11, 2,
137 0, 12,
138 12, 4,
139 1, 13,
140 13, 5,
141 2, 14,
142 14, 6,
143 3, 15,
144 15, 4,
145 4, 16,
146 16, 5,
147 5, 17,
148 17, 6,
149 3, 18,
150 18, 7,
151 4, 19,
152 19, 8,
153 5, 20,
154 20, 9,
155 7, 21,
156 21, 8,
157 8, 22,
158 22, 9,
159 10, 23,
160 23, 16,
161 12, 23,
162 23, 13,
163 11, 24,
164 24, 17,
165 13, 24,
166 24, 14,
167 15, 25,
168 25, 21,
169 18, 25,
170 25, 19,
171 16, 26,
172 26, 22,
173 19, 26,
174 26, 20
175 };
176 if(!comp_idx(mesh.get_index_set<1,0>(), v_e))
177 throw String("Vertex-At-Edge index set refinement failure");
178
179 // check vertices-at-quad
180 static const Index v_q[] =
181 {
182 0, 10, 12, 23,
183 10, 1, 23, 13,
184 12, 23, 4, 16,
185 23, 13, 16, 5,
186 1, 11, 13, 24,
187 11, 2, 24, 14,
188 13, 24, 5, 17,
189 24, 14, 17, 6,
190 3, 15, 18, 25,
191 15, 4, 25, 19,
192 18, 25, 7, 21,
193 25, 19, 21, 8,
194 4, 16, 19, 26,
195 16, 5, 26, 20,
196 19, 26, 8, 22,
197 26, 20, 22, 9
198 };
199 if(!comp_idx(mesh.get_index_set<2,0>(), v_q))
200 throw String("Vertex-At-Quad index set refinement failure");
201
202 // check edges-at-quad
203 static const Index e_q[] =
204 {
205 0, 28, 4, 26,
206 1, 29, 26, 6,
207 28, 12, 5, 27,
208 29, 13, 27, 7,
209 2, 32, 6, 30,
210 3, 33, 30, 8,
211 32, 14, 7, 31,
212 33, 15, 31, 9,
213 10, 36, 16, 34,
214 11, 37, 34, 18,
215 36, 22, 17, 35,
216 37, 23, 35, 19,
217 12, 40, 18, 38,
218 13, 41, 38, 20,
219 40, 24, 19, 39,
220 41, 25, 39, 21
221 };
222 if(!comp_idx(mesh.get_index_set<2,1>(), e_q))
223 throw String("Edge-At-Quad index set refinement failure");
224 }
225
226 QuadSubMesh* create_tetris_edge_submesh_2d()
227 {
228 Index num_entities[] =
229 {
230 4, // vertices
231 3, // edges
232 0 // quads
233 };
234
235 // create mesh part
236 QuadSubMesh* mesh = new QuadSubMesh(num_entities, true);
237 // create a AttributeSet that holds one value for each vertex
238 std::unique_ptr<QuadSubMesh::AttributeSetType> my_attrib_set(new QuadSubMesh::AttributeSetType(num_entities[0],1));
239 // Add the attribute to mesh
240 mesh->add_attribute(std::move(my_attrib_set), "EdgeSubAttributeSet");
241
242 // set up vertex coordinates array
243 Real attr[] =
244 {
245 0.0,
246 1.0,
247 2.0,
248 3.0
249 };
250 copy_attr(*(mesh->find_attribute("EdgeSubAttributeSet")), attr);
251
252 // set up vertices-at-edge array
253 Index v_e[] =
254 {
255 0, 1,
256 1, 2,
257 2, 3
258 };
259 copy_idx(mesh->get_index_set<1,0>(), v_e);
260
261 // set up vertex-target-indices
262 Index vti[] =
263 {
264 1, 5, 4, 8
265 };
266 copy_trg(mesh->get_target_set<0>(), vti);
267
268 // set up edge-target-indices
269 Index eti[] =
270 {
271 3, 6, 9
272 };
273 copy_trg(mesh->get_target_set<1>(), eti);
274
275 // okay
276 return mesh;
277 }
278
279 void validate_refined_tetris_edge_submesh_2d(const QuadSubMesh& mesh)
280 {
281 // validate sizes
282 if(mesh.get_num_entities(0) != 7)
283 throw String("Vertex count mismatch");
284 if(mesh.get_num_entities(1) != 6)
285 throw String("Edge count mismatch");
286 if(mesh.get_num_entities(2) != 0)
287 throw String("Quad count mismatch");
288
289 // check vertex coordinates array
290 Real attr[] =
291 {
292 0.0,
293 1.0,
294 2.0,
295 3.0,
296 0.5,
297 1.5,
298 2.5
299 };
300 if(!comp_attr(*(mesh.find_attribute("EdgeSubAttributeSet")), attr))
301 throw String("Attribute refinement failure");
302
303 // check vertices-at-edge array
304 Index v_e[] =
305 {
306 0, 4,
307 4, 1,
308 1, 5,
309 5, 2,
310 2, 6,
311 6, 3
312 };
313 if(!comp_idx(mesh.get_index_set<1,0>(), v_e))
314 throw String("Vertex-At-Edge index set refinement failure");
315
316 // check vertex-target incides
317 Index vti[] =
318 {
319 1, 5, 4, 8, 13, 16, 19
320 };
321 if(!comp_trg(mesh.get_target_set<0>(), vti))
322 throw String("Vertex target set refinement failure");
323
324 // check edge indices
325 Index eti[] =
326 {
327 6, 7, 13, 12, 18, 19
328 };
329 if(!comp_trg(mesh.get_target_set<1>(), eti))
330 throw String("Edge target set refinement failure");
331 }
332
333 QuadSubMesh* create_tetris_quad_submesh_2d()
334 {
335 // 2<---C----4
336 // ^ ||
337 // B Q_0 F
338 // | v
339 // 3<---G----1
340 // || |
341 // E Q_1 D
342 // v v
343 // 0----A--->5
344 //
345 // Note:
346 // <, >, v and ^ describe the edge orientation
347
348 Index num_entities[] =
349 {
350 6, // vertices
351 7, // edges
352 2 // quads
353 };
354
355 // create mesh
356 QuadSubMesh* mesh = new QuadSubMesh(num_entities, true);
357 // create a AttributeSet that holds one value for each vertex
358 std::unique_ptr<QuadSubMesh::AttributeSetType> my_attrib_set(new QuadSubMesh::AttributeSetType(num_entities[0],2));
359 // Add the attribute to mesh
360 mesh->add_attribute(std::move(my_attrib_set), "QuadSubAttributeSet");
361
362 // set up vertex coordinates array
363 Real attr[] =
364 {
365 0.0, 0.0,
366 1.0, 1.0,
367 0.0, 2.0,
368 0.0, 1.0,
369 1.0, 2.0,
370 1.0, 0.0
371 };
372 copy_attr(*(mesh->find_attribute("QuadSubAttributeSet")), attr);
373
374 // set up vertices-at-edge array
375 Index v_e[] =
376 {
377 0, 5,
378 3, 2,
379 4, 2,
380 1, 5,
381 3, 0,
382 4, 1,
383 1, 3
384 };
385 copy_idx(mesh->get_index_set<1,0>(), v_e);
386
387 // set up vertices-at-quad array
388 Index v_q[] =
389 {
390 4, 1, 2, 3,
391 3, 0, 1, 5
392 };
393 copy_idx(mesh->get_index_set<2,0>(), v_q);
394
395 // set up edges-at-quad array
396 Index e_q[] =
397 {
398 5, 1, 2, 6,
399 4, 3, 6, 0
400 };
401 copy_idx(mesh->get_index_set<2,1>(), e_q);
402
403 // set up vertex-target indices
404 Index vti[] =
405 {
406 0, 5, 8, 4, 9, 1
407 };
408 copy_trg(mesh->get_target_set<0>(), vti);
409
410 // set up edge-target indices
411 Index eti[] =
412 {
413 0, 9, 12, 3, 2, 10, 6,
414 };
415 copy_trg(mesh->get_target_set<1>(), eti);
416
417 // set up quad-target indices
418 Index qti[] =
419 {
420 3, 0
421 };
422 copy_trg(mesh->get_target_set<2>(), qti);
423
424 // okay
425 return mesh;
426 }
427
428 void validate_refined_tetris_quad_submesh_2d(const QuadSubMesh& mesh)
429 {
430 // 2<---F----8<---E----4
431 // ^ || ||
432 // D Q_2 Q Q_0 K
433 // | v v
434 // 7<---P---13<---O---11
435 // ^ || ||
436 // C Q_3 R Q_1 L
437 // | v v
438 // 3<---N---12<---M----1
439 // || || |
440 // I Q_4 U Q_6 G
441 // v v v
442 // 10----S-->14----T--->9
443 // || || |
444 // J Q_5 V Q_7 H
445 // v v v
446 // 0----A--->6----B--->5
447
448 // validate sizes
449 if(mesh.get_num_entities(0) != 15)
450 throw String("Vertex count mismatch");
451 if(mesh.get_num_entities(1) != 22)
452 throw String("Edge count mismatch");
453 if(mesh.get_num_entities(2) != 8)
454 throw String("Quad count mismatch");
455
456 // check vertex coordinates array
457 Real attr[] =
458 {
459 0.0, 0.0, // coarse mesh vertices
460 1.0, 1.0,
461 0.0, 2.0,
462 0.0, 1.0,
463 1.0, 2.0,
464 1.0, 0.0,
465 0.5, 0.0, // edge midpoints
466 0.0, 1.5,
467 0.5, 2.0,
468 1.0, 0.5,
469 0.0, 0.5,
470 1.0, 1.5,
471 0.5, 1.0,
472 0.5, 1.5, // quad midpoints
473 0.5, 0.5
474 };
475 if(!comp_attr(*(mesh.find_attribute("QuadSubAttributeSet")), attr))
476 throw String("Attribute refinement failure");
477
478 // check vertices-at-edge array
479 Index v_e[] =
480 {
481 0, 6,
482 6, 5,
483 3, 7,
484 7, 2,
485 4, 8,
486 8, 2,
487 1, 9,
488 9, 5,
489 3, 10,
490 10, 0,
491 4, 11,
492 11, 1,
493 1, 12,
494 12, 3,
495 11, 13,
496 13, 7,
497 8, 13,
498 13, 12,
499 10, 14,
500 14, 9,
501 12, 14,
502 14, 6,
503 };
504 if(!comp_idx(mesh.get_index_set<1,0>(), v_e))
505 throw String("Vertex-At-Edge index set refinement failure");
506
507 // check vertices-at-quad
508 Index v_q[] =
509 {
510 4, 11, 8, 13,
511 11, 1, 13, 12,
512 8, 13, 2, 7,
513 13, 12, 7, 3,
514 3, 10, 12, 14,
515 10, 0, 14, 6,
516 12, 14, 1, 9,
517 14, 6, 9, 5
518 };
519 if(!comp_idx(mesh.get_index_set<2,0>(), v_q))
520 throw String("Vertex-At-Quad index set refinement failure");
521
522 // check edges-at-quad
523 Index e_q[] =
524 {
525 10, 16, 4, 14,
526 11, 17, 14, 12,
527 16, 3, 5, 15,
528 17, 2, 15, 13,
529 8, 20, 13, 18,
530 9, 21, 18, 0,
531 20, 6, 12, 19,
532 21, 7, 19, 1
533 };
534 if(!comp_idx(mesh.get_index_set<2,1>(), e_q))
535 throw String("Edges-At-Quad refinement failure");
536
537 // check vertex-target indices
538 Index vti[] =
539 {
540 0, 5, 8, 4, 9, 1, 10, 19, 22, 13, 12, 20, 16, 26, 23
541 };
542 if(!comp_trg(mesh.get_target_set<0>(), vti))
543 throw String("Vertex-Target-Indices refinement failure");
544
545 // check edge-target indices
546 Index eti[] =
547 {
548 0, 1, 18, 19, 25, 24, 7, 6, 5, 4, 21, 20, 13, 12, 41, 40, 39, 38, 28, 29, 27, 26
549 };
550 if(!comp_trg(mesh.get_target_set<1>(), eti))
551 throw String("Edge-Target-Indices refinement failure");
552
553 // check quad-target indices
554 Index qti[] =
555 {
556 15, 13, 14, 12, 2, 0, 3, 1
557 };
558 if(!comp_trg(mesh.get_target_set<2>(), qti))
559 throw String("Quad-Target-Indices refinement failure");
560 }
561
562 QuadSubMesh* create_tetris_quad_edge_submesh_2d()
563 {
564 Index num_entities[] =
565 {
566 4, // vertices
567 3, // edges
568 0 // quads
569 };
570
571 // create mesh
572 QuadSubMesh* mesh = new QuadSubMesh(num_entities, true);
573 // create a AttributeSet that holds one value for each vertex
574 std::unique_ptr<QuadSubMesh::AttributeSetType> my_attrib_set(new QuadSubMesh::AttributeSetType(num_entities[0],1));
575 // Add the attribute to mesh
576 mesh->add_attribute(std::move(my_attrib_set), "QuadSubAttributeSet");
577
578 // set up vertex coordinates array
579 Real attr[] =
580 {
581 0.0,
582 1.0,
583 2.0,
584 3.0
585 };
586 copy_attr(*(mesh->find_attribute("QuadSubAttributeSet")), attr);
587
588 // set up vertices-at-edge array
589 Index v_e[] =
590 {
591 0, 1,
592 1, 2,
593 2, 3
594 };
595 copy_idx(mesh->get_index_set<1,0>(), v_e);
596
597 // set up vertex-target-indices
598 Index vti[] =
599 {
600 5, 1, 3, 2
601 };
602 copy_trg(mesh->get_target_set<0>(), vti);
603
604 // set up edge-target-indices
605 Index eti[] =
606 {
607 3, 6, 1
608 };
609 copy_trg(mesh->get_target_set<1>(), eti);
610
611 // okay
612 return mesh;
613 }
614
615 void validate_refined_tetris_quad_edge_submesh_2d(const QuadSubMesh& mesh)
616 {
617 // validate sizes
618 if(mesh.get_num_entities(0) != 7)
619 throw String("Vertex count mismatch");
620 if(mesh.get_num_entities(1) != 6)
621 throw String("Edge count mismatch");
622 if(mesh.get_num_entities(2) != 0)
623 throw String("Quad count mismatch");
624
625 // check vertex coordinates array
626 Real attr[] =
627 {
628 0.0,
629 1.0,
630 2.0,
631 3.0,
632 0.5,
633 1.5,
634 2.5
635 };
636 if(!comp_attr(*(mesh.find_attribute("QuadSubAttributeSet")), attr))
637 throw String("Attribute refinement failure");
638
639 // check vertices-at-edge array
640 Index v_e[] =
641 {
642 0, 4,
643 4, 1,
644 1, 5,
645 5, 2,
646 2, 6,
647 6, 3
648 };
649 if(!comp_idx(mesh.get_index_set<1,0>(), v_e))
650 throw String("Vertex-At-Edge index set refinement failure");
651
652 // check vertex-target incides
653 Index vti[] =
654 {
655 5, 1, 3, 2, 9, 12, 7
656 };
657 if(!comp_trg(mesh.get_target_set<0>(), vti))
658 throw String("Vertex target set refinement failure");
659
660 // check edge indices
661 Index eti[] =
662 {
663 // H,G, M, N, C, D
664 7, 6, 12, 13, 2, 3
665 };
666 if(!comp_trg(mesh.get_target_set<1>(), eti))
667 throw String("Edge target set refinement failure");
668 }
669
670 QuadCellSubSet* create_tetris_quad_cellsubset_2d()
671 {
672 // 3---------+
673 // | |
674 // C Q_1 |
675 // | |
676 // 2----B----1
677 // | |
678 // | Q_0 A
679 // | |
680 // +---------0
681 Index num_entities[] =
682 {
683 4, // vertices
684 3, // edges
685 2 // quads
686 };
687 QuadCellSubSet* subset = new QuadCellSubSet(num_entities);
688
689 // set vertex target indices
690 Index t_v[] =
691 {
692 1,
693 5,
694 4,
695 8
696 };
697 copy_trg(subset->get_target_set<0>(), t_v);
698
699 // set edge target indices
700 Index t_e[] =
701 {
702 3,
703 6,
704 9
705 };
706 copy_trg(subset->get_target_set<1>(), t_e);
707
708 // set quad target indices
709 Index t_q[] =
710 {
711 0,
712 3
713 };
714 copy_trg(subset->get_target_set<2>(), t_q);
715
716 // okay
717 return subset;
718 }
719
720 void validate_refined_tetris_quad_cellsubset_2d(const QuadCellSubSet& subset)
721 {
722 // validate sizes
723 if(subset.get_num_entities(0) != 9)
724 throw String("Vertex count mismatch");
725 if(subset.get_num_entities(1) != 14)
726 throw String("Edge count mismatch");
727 if(subset.get_num_entities(2) != 8)
728 throw String("Quad count mismatch");
729
730 // validate vertex target indices
731 Index vti[] =
732 {
733 1, 5, 4, 8,
734 13, 16, 19,
735 23, 26
736 };
737 if(!comp_trg(subset.get_target_set<0>(), vti))
738 throw String("Vertex-Target-Indices refinement failure");
739
740 // validate edge target indices
741 Index eti[] =
742 {
743 6, 7,
744 12, 13,
745 18, 19,
746 26, 27, 28, 29,
747 38, 39, 40, 41
748 };
749 if(!comp_trg(subset.get_target_set<1>(), eti))
750 throw String("Edge-Target-Indices refinement failure");
751
752 // validate quad target indices
753 Index qti[] =
754 {
755 0, 1, 2, 3,
756 12, 13, 14, 15
757 };
758 if(!comp_trg(subset.get_target_set<2>(), qti))
759 throw String("Quad-Target-Indices refinement failure");
760 }
761
762 QuadCellSubSet* create_tetris_quad_edge_cellsubset_2d()
763 {
764 // 2
765 // |
766 // | Q_0
767 // |
768 // 0----A----1
769 Index num_entities[] =
770 {
771 3, // vertices
772 1, // edges
773 0 // quads
774 };
775 QuadCellSubSet* subset = new QuadCellSubSet(num_entities);
776
777 // set vertex target indices
778 Index t_v[] =
779 {
780 2,
781 1,
782 3
783 };
784 copy_trg(subset->get_target_set<0>(), t_v);
785
786 // set edge target indices
787 Index t_e[] =
788 {
789 1
790 };
791 copy_trg(subset->get_target_set<1>(), t_e);
792
793 // okay
794 return subset;
795 }
796
797 void validate_refined_tetris_quad_edge_cellsubset_2d(const QuadCellSubSet& subset)
798 {
799 // validate sizes
800 if(subset.get_num_entities(0) != 4)
801 throw String("Vertex count mismatch");
802 if(subset.get_num_entities(1) != 2)
803 throw String("Edge count mismatch");
804 if(subset.get_num_entities(2) != 0)
805 throw String("Quad count mismatch");
806
807 // validate vertex target indices
808 Index vti[] =
809 {
810 2, 1, 3,
811 5
812 };
813 if(!comp_trg(subset.get_target_set<0>(), vti))
814 throw String("Vertex-Target-Indices refinement failure");
815
816 // validate edge target indices
817 Index eti[] =
818 {
819 2, 3
820 };
821 if(!comp_trg(subset.get_target_set<1>(), eti))
822 throw String("Edge-Target-Indices refinement failure");
823 }
824
825 void validate_tetris_quad_boundary_cellsubset_2d(const QuadCellSubSet& subset)
826 {
827 // validate sizes
828 if(subset.get_num_entities(0) != 10)
829 throw String("Vertex count mismatch");
830 if(subset.get_num_entities(1) != 10)
831 throw String("Edge count mismatch");
832 if(subset.get_num_entities(2) != 0)
833 throw String("Quad count mismatch");
834
835 // validate vertex target indices
836 Index vti[] =
837 {
838 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
839 };
840 if(!comp_trg(subset.get_target_set<0>(), vti))
841 throw String("Vertex-Target-Indices refinement failure");
842
843 // validate edge target indices
844 Index eti[] =
845 {
846 0, 1,
847 2, 4,
848 5, 7,
849 8, 10,
850 11, 12
851 };
852 if(!comp_trg(subset.get_target_set<1>(), eti))
853 throw String("Edge-Target-Indices refinement failure");
854 }
855
856 void validate_refined_tetris_quad_boundary_cellsubset_2d(const QuadCellSubSet& subset)
857 {
858 // validate sizes
859 if(subset.get_num_entities(0) != 20)
860 throw String("Vertex count mismatch");
861 if(subset.get_num_entities(1) != 20)
862 throw String("Edge count mismatch");
863 if(subset.get_num_entities(2) != 0)
864 throw String("Quad count mismatch");
865
866 // validate vertex target indices
867 Index vti[] =
868 {
869 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
870 10, 11, 12, 14, 15, 17, 18, 20, 21, 22
871 };
872 if(!comp_trg(subset.get_target_set<0>(), vti))
873 throw String("Vertex-Target-Indices refinement failure");
874
875 // validate edge target indices
876 Index eti[] =
877 {
878 0, 1, 2, 3,
879 4, 5, 8, 9,
880 10, 11, 14, 15,
881 16, 17, 20, 21,
882 22, 23, 24, 25
883 };
884 if(!comp_trg(subset.get_target_set<1>(), eti))
885 throw String("Edge-Target-Indices refinement failure");
886 }
887
888 } // namespace TestAux
889 } // namespace Geometry
890} // namespace FEAT
FEAT namespace.
Definition: adjactor.hpp:12
double Real
Real data type.
std::uint64_t Index
Index data type.