321 for(
int j = 0; j < num_faces; ++j )
384 for(
int i = 0; i < num_vtx; ++i )
387 int indices[2] = { 0, -100 };
398 for(
int i = 0; i < num_edges; ++i )
401 int indices[3] = { 0, 0, -99 };
404 if( edge_indices[i][0] == indices[0] )
420 for(
int i = 0; i < num_faces; ++i )
423 int indices[5] = { 0, 0, 0, -99, -99 };
426 const int num_vtx = face_indices[i][0];
428 const int* exp_index = face_indices[i] + 1;
429 int off = std::find( indices, indices + num_vtx, exp_index[0] ) - indices;
430 CHECK( off < num_vtx );
442 CHECK_EQUAL( exp_index[1], indices[( off + 1 ) % num_vtx] );
443 CHECK_EQUAL( exp_index[2], indices[( off + 2 ) % num_vtx] );
444 if( num_vtx == 4 )
CHECK_EQUAL( exp_index[3], indices[( off + 3 ) % num_vtx] );
457 int indices[9] = { -2, -2, -2, -2, -2, -2, -2, -2, -2 };
459 for(
int i = 0; i < num_vertices; ++i )
478 const int edges[3][2] = { { 0, 1 }, { 1, 2 }, { 2, 0 } };
486 const int edges[4][2] = { { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 0 } };
494 const EntityType type =
MBTET;
495 const int num_vtx = 4;
496 const int edges[][2] = { { 0, 1 }, { 1, 2 }, { 2, 0 }, { 0, 3 }, { 1, 3 }, { 2, 3 } };
497 const int faces[][5] = { { 3, 0, 1, 3, 0 }, { 3, 1, 2, 3, 0 }, { 3, 2, 0, 3, 0 }, { 3, 2, 1, 0, 0 } };
507 const int num_vtx = 5;
508 const int edges[][2] = { { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 0 }, { 0, 4 }, { 1, 4 }, { 2, 4 }, { 3, 4 } };
509 const int faces[][5] = {
510 { 3, 0, 1, 4, 0 }, { 3, 1, 2, 4, 0 }, { 3, 2, 3, 4, 0 }, { 3, 3, 0, 4, 0 }, { 4, 3, 2, 1, 0 } };
519 const EntityType type =
MBPRISM;
520 const int num_vtx = 6;
521 const int edges[][2] = { { 0, 1 }, { 1, 2 }, { 2, 0 }, { 0, 3 }, { 1, 4 }, { 2, 5 }, { 3, 4 }, { 4, 5 }, { 5, 3 } };
522 const int faces[][5] = {
523 { 4, 0, 1, 4, 3 }, { 4, 1, 2, 5, 4 }, { 4, 2, 0, 3, 5 }, { 3, 2, 1, 0, 0 }, { 3, 3, 4, 5, 0 } };
532 const EntityType type =
MBHEX;
533 const int num_vtx = 8;
534 const int edges[][2] = { { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 0 }, { 0, 4 }, { 1, 5 },
535 { 2, 6 }, { 3, 7 }, { 4, 5 }, { 5, 6 }, { 6, 7 }, { 7, 4 } };
536 const int faces[][5] = { { 4, 0, 1, 5, 4 }, { 4, 1, 2, 6, 5 }, { 4, 2, 3, 7, 6 },
537 { 4, 3, 0, 4, 7 }, { 4, 3, 2, 1, 0 }, { 4, 4, 5, 6, 7 } };
547 const int elem_verts[] = { 7400, 6233, 3027, 0454, 6839, 5391, 7735, 3603 };
549 int side_idx[4] = { 0, 0 };
553 int side_conn[2] = { elem_verts[side_idx[0]], elem_verts[side_idx[1]] };
554 int rev_conn[2] = { elem_verts[side_idx[1]], elem_verts[side_idx[0]] };
555 int result_side = -100, result_sense = -100, result_offset = -100;
556 int err =
CN::SideNumber( type, elem_verts, side_conn, 2, 1, result_side, result_sense, result_offset );
561 err =
CN::SideNumber( type, elem_verts, rev_conn, 2, 1, result_side, result_sense, result_offset );
564 CHECK( result_offset == 1 || result_sense == -1 );
570 const int elem_verts[] = { 7400, 6233, 3027, 0454, 6839, 5391, 7735, 3603 };
573 int side_idx[4] = { 0, 0, 0, 0 };
577 for(
int rev = -1; rev < 2; rev += 2 )
579 for(
int off = 0; off < side_size; ++off )
583 for(
int i = 0; i < side_size; ++i )
584 side_conn[( side_size + rev * i ) % side_size] = elem_verts[side_idx[( i + off ) % side_size]];
586 int result_side = -100, result_sense = -100, result_offset = -100;
588 CN::SideNumber( type, elem_verts, side_conn, side_size, 2, result_side, result_sense, result_offset );
599 for(
int side = 0; side < 3; ++side )
605 for(
int side = 0; side < 4; ++side )
886 const int combinations[][4] = { { 0, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 1, 0 }, { 0, 1, 1, 0 },
887 { 0, 0, 0, 1 }, { 0, 1, 0, 1 }, { 0, 0, 1, 1 }, { 0, 1, 1, 1 } };
892 for(
int i = 0; i <
dim; ++i )
895 for(
int c = 0; c < num_comb; ++c )
898 const int* ho_nodes = combinations[c];
908 if( ho_nodes[
dim] ) ++num_vtx;
914 int results[4] = { 0, -1, -1, -1 };
925 const int combinations[][4] = { { 0, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 1, 0 }, { 0, 1, 1, 0 },
926 { 0, 0, 0, 1 }, { 0, 1, 0, 1 }, { 0, 0, 1, 1 }, { 0, 1, 1, 1 } };
930 const EntityType type = *
t;
934 for(
int i = 0; i <
dim; ++i )
937 for(
int c = 0; c < num_comb; ++c )
940 const int* ho_nodes = combinations[c];
950 if( ho_nodes[
dim] ) ++num_vtx;
956 if(
dim > 1 && ho_nodes[1] )
960 int pdim = -1, pidx = -1;
968 if(
dim > 2 && ho_nodes[2] )
972 int pdim = -1, pidx = -1;
982 int pdim = -1, pidx = -1;
993 const int combinations[][4] = { { 0, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 1, 0 }, { 0, 1, 1, 0 },
994 { 0, 0, 0, 1 }, { 0, 1, 0, 1 }, { 0, 0, 1, 1 }, { 0, 1, 1, 1 } };
998 const EntityType type = *
t;
1002 for(
int i = 0; i <
dim; ++i )
1005 for(
int c = 0; c < num_comb; ++c )
1008 const int* ho_nodes = combinations[c];
1018 if( ho_nodes[
dim] ) ++num_vtx;
1024 if(
dim > 1 && ho_nodes[1] )
1034 if(
dim > 2 && ho_nodes[2] )
1090 for(
int d = 1; d <= sub_dimension; ++d )
1091 child_ho |= ( parent_ho & ( 1 << d ) );
1094 for(
int i = 0; i < num_sub; ++i )
1103 for(
int i = 0; i < num_sub; ++i )
1113 for(
int i = 0; i < num_sub; ++i )
1121 CHECK( num >= num_corner );
1123 for(
int j = 0; j < num_corner; ++j )
1127 int idx = num_corner;
1132 for(
int j = 0; j < num_edge; ++j )
1138 CHECK( edge_ends[0] < num_corner );
1139 edge_ends[0] = corners[edge_ends[0]];
1140 CHECK( edge_ends[1] < num_corner );
1141 edge_ends[1] = corners[edge_ends[1]];
1143 int side, sense, off;
1144 int result =
CN::SideNumber( parent, edge_ends, 2, 1, side, sense, off );
1170 std::vector< moab::EntityHandle > conn;
1172 for(
int i = 0; i < 15; ++i )
1176 conn.push_back( h );
1184 std::vector< moab::EntityHandle > adj;
1187 std::vector< moab::EntityHandle > edges;
1188 std::vector< moab::EntityHandle > faces;
1190 for(
const auto& e : edges )
1192 std::vector< moab::EntityHandle > conn;
1193 std::cout <<
"edge " << e <<
" connectivity: ";
1196 for(
const auto& n : conn )
1197 std::cout << n <<
" ";
1201 for(
const auto& f : faces )
1203 std::vector< moab::EntityHandle > conn;
1204 std::cout <<
"face " << f <<
" connectivity: ";
1207 for(
const auto& n : conn )
1208 std::cout << n <<
" ";
1211 std::vector< moab::EntityHandle > nodes;
1213 for(
const auto& n : nodes )
1215 std::vector< moab::EntityHandle > adj;
1216 std::cout <<
"node " << n <<
" connection: ";
1219 std::cout << adj.size() <<
" edges,";
1221 CHECK( 1 == adj.size() || 3 == adj.size() );
1224 std::cout << adj.size() <<
" faces,";
1226 CHECK( 2 == adj.size() || 3 == adj.size() );
1229 std::cout << adj.size() <<
" volumes\n";
1238 std::vector< moab::EntityHandle > conn;
1240 for(
int i = 0; i < 22; ++i )
1245 moab::EntityHandle conn1[15] = { 10, 20, 14, 1, 8, 5, 21, 19, 15, 16, 22, 18, 9, 7, 6 };
1246 moab::EntityHandle conn2[15] = { 10, 14, 12, 1, 5, 3, 15, 13, 11, 16, 18, 17, 6, 4, 2 };
1252 std::vector< moab::EntityHandle > wedges;
1256 for(
const auto& w : wedges )
1258 std::vector< moab::EntityHandle > adj;
1260 CHECK( 5 == adj.size() );
1264 for(
const auto& w : wedges )
1266 std::vector< moab::EntityHandle > conn;
1268 CHECK( 15 == conn.size() );
1269 for(
const auto& n : conn )
1271 std::vector< moab::EntityHandle > edges;
1273 if( edges.size() == 0 )
1275 std::cout <<
" node " << n <<
" not connected to edges \n";
1276 std::vector< moab::EntityHandle > faces;
1278 for(
const auto& f : faces )
1280 std::vector< moab::EntityHandle > connf;
1283 for(
const auto& n1 : connf )
1284 std::cout <<
" " << n1;
1287 std::vector< moab::EntityHandle > prisms;
1289 for(
const auto& p : prisms )
1291 std::vector< moab::EntityHandle > connf;
1294 for(
const auto& n1 : connf )
1295 std::cout <<
" " << n1;
1298 CHECK( edges.size() != 0 );