6#include <kernel/geometry/test_aux/tetris_quad.hpp>
7#include <kernel/geometry/test_aux/copy_comp_set.hpp>
15 QuadMesh* create_tetris_mesh_2d()
17 Index num_entities[] =
25 QuadMesh* mesh =
new QuadMesh(num_entities);
28 static const Real vtx[10*2] =
41 copy_vtx(mesh->get_vertex_set(), vtx);
44 static const Index v_e[13*2] =
60 copy_idx(mesh->get_index_set<1,0>(), v_e);
63 static const Index v_q[4*4] =
70 copy_idx(mesh->get_index_set<2,0>(), v_q);
73 static const Index e_q[4*4] =
80 copy_idx(mesh->get_index_set<2,1>(), e_q);
86 void validate_refined_tetris_mesh_2d(
const QuadMesh& mesh)
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");
97 static const Real vtx[] =
127 if(!comp_vtx(mesh.get_vertex_set(), vtx))
128 throw String(
"Vertex coordinate refinement failure");
131 static const Index v_e[] =
176 if(!comp_idx(mesh.get_index_set<1,0>(), v_e))
177 throw String(
"Vertex-At-Edge index set refinement failure");
180 static const Index v_q[] =
199 if(!comp_idx(mesh.get_index_set<2,0>(), v_q))
200 throw String(
"Vertex-At-Quad index set refinement failure");
203 static const Index e_q[] =
222 if(!comp_idx(mesh.get_index_set<2,1>(), e_q))
223 throw String(
"Edge-At-Quad index set refinement failure");
226 QuadSubMesh* create_tetris_edge_submesh_2d()
228 Index num_entities[] =
236 QuadSubMesh* mesh =
new QuadSubMesh(num_entities,
true);
238 std::unique_ptr<QuadSubMesh::AttributeSetType> my_attrib_set(
new QuadSubMesh::AttributeSetType(num_entities[0],1));
240 mesh->add_attribute(std::move(my_attrib_set),
"EdgeSubAttributeSet");
250 copy_attr(*(mesh->find_attribute(
"EdgeSubAttributeSet")), attr);
259 copy_idx(mesh->get_index_set<1,0>(), v_e);
266 copy_trg(mesh->get_target_set<0>(), vti);
273 copy_trg(mesh->get_target_set<1>(), eti);
279 void validate_refined_tetris_edge_submesh_2d(
const QuadSubMesh& mesh)
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");
300 if(!comp_attr(*(mesh.find_attribute(
"EdgeSubAttributeSet")), attr))
301 throw String(
"Attribute refinement failure");
313 if(!comp_idx(mesh.get_index_set<1,0>(), v_e))
314 throw String(
"Vertex-At-Edge index set refinement failure");
319 1, 5, 4, 8, 13, 16, 19
321 if(!comp_trg(mesh.get_target_set<0>(), vti))
322 throw String(
"Vertex target set refinement failure");
329 if(!comp_trg(mesh.get_target_set<1>(), eti))
330 throw String(
"Edge target set refinement failure");
333 QuadSubMesh* create_tetris_quad_submesh_2d()
348 Index num_entities[] =
356 QuadSubMesh* mesh =
new QuadSubMesh(num_entities,
true);
358 std::unique_ptr<QuadSubMesh::AttributeSetType> my_attrib_set(
new QuadSubMesh::AttributeSetType(num_entities[0],2));
360 mesh->add_attribute(std::move(my_attrib_set),
"QuadSubAttributeSet");
372 copy_attr(*(mesh->find_attribute(
"QuadSubAttributeSet")), attr);
385 copy_idx(mesh->get_index_set<1,0>(), v_e);
393 copy_idx(mesh->get_index_set<2,0>(), v_q);
401 copy_idx(mesh->get_index_set<2,1>(), e_q);
408 copy_trg(mesh->get_target_set<0>(), vti);
413 0, 9, 12, 3, 2, 10, 6,
415 copy_trg(mesh->get_target_set<1>(), eti);
422 copy_trg(mesh->get_target_set<2>(), qti);
428 void validate_refined_tetris_quad_submesh_2d(
const QuadSubMesh& mesh)
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");
475 if(!comp_attr(*(mesh.find_attribute(
"QuadSubAttributeSet")), attr))
476 throw String(
"Attribute refinement failure");
504 if(!comp_idx(mesh.get_index_set<1,0>(), v_e))
505 throw String(
"Vertex-At-Edge index set refinement failure");
519 if(!comp_idx(mesh.get_index_set<2,0>(), v_q))
520 throw String(
"Vertex-At-Quad index set refinement failure");
534 if(!comp_idx(mesh.get_index_set<2,1>(), e_q))
535 throw String(
"Edges-At-Quad refinement failure");
540 0, 5, 8, 4, 9, 1, 10, 19, 22, 13, 12, 20, 16, 26, 23
542 if(!comp_trg(mesh.get_target_set<0>(), vti))
543 throw String(
"Vertex-Target-Indices refinement failure");
548 0, 1, 18, 19, 25, 24, 7, 6, 5, 4, 21, 20, 13, 12, 41, 40, 39, 38, 28, 29, 27, 26
550 if(!comp_trg(mesh.get_target_set<1>(), eti))
551 throw String(
"Edge-Target-Indices refinement failure");
556 15, 13, 14, 12, 2, 0, 3, 1
558 if(!comp_trg(mesh.get_target_set<2>(), qti))
559 throw String(
"Quad-Target-Indices refinement failure");
562 QuadSubMesh* create_tetris_quad_edge_submesh_2d()
564 Index num_entities[] =
572 QuadSubMesh* mesh =
new QuadSubMesh(num_entities,
true);
574 std::unique_ptr<QuadSubMesh::AttributeSetType> my_attrib_set(
new QuadSubMesh::AttributeSetType(num_entities[0],1));
576 mesh->add_attribute(std::move(my_attrib_set),
"QuadSubAttributeSet");
586 copy_attr(*(mesh->find_attribute(
"QuadSubAttributeSet")), attr);
595 copy_idx(mesh->get_index_set<1,0>(), v_e);
602 copy_trg(mesh->get_target_set<0>(), vti);
609 copy_trg(mesh->get_target_set<1>(), eti);
615 void validate_refined_tetris_quad_edge_submesh_2d(
const QuadSubMesh& mesh)
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");
636 if(!comp_attr(*(mesh.find_attribute(
"QuadSubAttributeSet")), attr))
637 throw String(
"Attribute refinement failure");
649 if(!comp_idx(mesh.get_index_set<1,0>(), v_e))
650 throw String(
"Vertex-At-Edge index set refinement failure");
657 if(!comp_trg(mesh.get_target_set<0>(), vti))
658 throw String(
"Vertex target set refinement failure");
666 if(!comp_trg(mesh.get_target_set<1>(), eti))
667 throw String(
"Edge target set refinement failure");
670 QuadCellSubSet* create_tetris_quad_cellsubset_2d()
681 Index num_entities[] =
687 QuadCellSubSet* subset =
new QuadCellSubSet(num_entities);
697 copy_trg(subset->get_target_set<0>(), t_v);
706 copy_trg(subset->get_target_set<1>(), t_e);
714 copy_trg(subset->get_target_set<2>(), t_q);
720 void validate_refined_tetris_quad_cellsubset_2d(
const QuadCellSubSet& subset)
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");
737 if(!comp_trg(subset.get_target_set<0>(), vti))
738 throw String(
"Vertex-Target-Indices refinement failure");
749 if(!comp_trg(subset.get_target_set<1>(), eti))
750 throw String(
"Edge-Target-Indices refinement failure");
758 if(!comp_trg(subset.get_target_set<2>(), qti))
759 throw String(
"Quad-Target-Indices refinement failure");
762 QuadCellSubSet* create_tetris_quad_edge_cellsubset_2d()
769 Index num_entities[] =
775 QuadCellSubSet* subset =
new QuadCellSubSet(num_entities);
784 copy_trg(subset->get_target_set<0>(), t_v);
791 copy_trg(subset->get_target_set<1>(), t_e);
797 void validate_refined_tetris_quad_edge_cellsubset_2d(
const QuadCellSubSet& subset)
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");
813 if(!comp_trg(subset.get_target_set<0>(), vti))
814 throw String(
"Vertex-Target-Indices refinement failure");
821 if(!comp_trg(subset.get_target_set<1>(), eti))
822 throw String(
"Edge-Target-Indices refinement failure");
825 void validate_tetris_quad_boundary_cellsubset_2d(
const QuadCellSubSet& subset)
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");
838 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
840 if(!comp_trg(subset.get_target_set<0>(), vti))
841 throw String(
"Vertex-Target-Indices refinement failure");
852 if(!comp_trg(subset.get_target_set<1>(), eti))
853 throw String(
"Edge-Target-Indices refinement failure");
856 void validate_refined_tetris_quad_boundary_cellsubset_2d(
const QuadCellSubSet& subset)
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");
869 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
870 10, 11, 12, 14, 15, 17, 18, 20, 21, 22
872 if(!comp_trg(subset.get_target_set<0>(), vti))
873 throw String(
"Vertex-Target-Indices refinement failure");
884 if(!comp_trg(subset.get_target_set<1>(), eti))
885 throw String(
"Edge-Target-Indices refinement failure");
double Real
Real data type.
std::uint64_t Index
Index data type.