21 #define READ_OPTS "BUFFER_SIZE=256"
39 bool create_vertex_sets,
40 bool tag_elements_with_id,
41 bool tag_vertices_with_id,
42 const char* adj_elem_tag_name = 0,
43 bool var_len_adj_elems =
false );
180 int main(
int argc,
char* argv[] )
183 int fail = MPI_Init( &argc, &argv );
216 fail = MPI_Finalize();
230 std::vector< double > coords( 3000 );
247 int ids[3] = { 5, 7, 9 };
256 int id = non_existant ? 8 : 7;
281 static void vtx_coords(
int set_id,
int j,
int num_sets,
double coords[3] )
283 int i = num_sets * j + set_id;
285 coords[1] = i + 0.25;
296 const int num_sets = 2 * num_read_sets;
297 std::vector< EntityHandle > verts( 1000 );
298 std::vector< std::vector< EntityHandle > > set_verts( num_sets );
299 for(
size_t i = 0; i < verts.size(); ++i )
302 int j = i % num_sets;
305 set_verts[j].push_back( verts[i] );
CHECK_ERR( rval );
309 std::vector< EntityHandle > sets( num_sets );
310 for(
int i = 0; i < num_sets; ++i )
319 std::vector< int > values( num_sets );
320 for(
int i = 0; i < num_sets; ++i )
330 if( !opts.empty() ) opts +=
';';
332 opts +=
"BLOCKED_COORDINATE_IO=yes";
334 opts +=
"BLOCKED_COORDINATE_IO=no";
336 values.resize( num_read_sets );
337 for(
int i = 0; i < num_read_sets; ++i )
338 values[i] = 2 * ( i + 1 );
343 int count, expected = 0;
345 for(
int i = 0; i < num_sets; ++i )
346 if( i % 2 ) expected += set_verts[i].size();
357 while( !sets2.
empty() )
362 CHECK( std::find( values.begin(), values.end(),
id ) != values.end() );
364 CHECK( (
unsigned)
id <= set_verts.size() );
366 std::vector< EntityHandle > verts2;
370 for(
size_t i = 0; i < verts2.size(); ++i )
372 double exp_coords[3], coords[3];
388 bool create_vertex_sets,
389 bool tag_elements_with_id,
390 bool tag_vertices_with_id,
391 const char* adj_elem_tag_name,
392 bool var_len_adj_elems )
406 if( create_element_sets || create_vertex_sets )
421 double coords[3] = {
static_cast< double >( i ),
static_cast< double >( j ), 0 };
423 int logical[2] = { i, j };
427 if( tag_vertices_with_id )
431 if( create_vertex_sets )
446 EntityHandle conn[4] = { verts[j][i], verts[j][i + 1], verts[j + 1][i + 1], verts[j + 1][i] };
448 int logical[2] = { i, j };
450 double centroid[3] = { i + 0.5, j + 0.5, 0 };
453 if( tag_elements_with_id )
457 if( create_element_sets )
463 if( adj_elem_tag_name && !var_len_adj_elems )
470 EntityHandle val[4] = { ( i > 0 && j > 0 ) ? quads[j - 1][i - 1] : 0,
471 ( i > 0 && j <
MBQUAD_INT ) ? quads[j][i - 1] : 0,
473 ( i < MBQUAD_INT && j > 0 ) ? quads[j - 1][i] : 0 };
477 else if( adj_elem_tag_name && var_len_adj_elems )
487 if( i > 0 && j > 0 ) val[num++] = quads[j - 1][i - 1];
488 if( i > 0 && j <
MBQUAD_INT ) val[num++] = quads[j][i - 1];
490 if( i < MBQUAD_INT && j > 0 ) val[num++] = quads[j - 1][i];
491 const void* ptr = val;
507 int min_x = std::numeric_limits< int >::max();
508 int max_x = std::numeric_limits< int >::min();
514 int int_x = (int)coords[0];
515 CHECK( fabs( coords[0] - (
double)int_x ) < 1e-12 );
517 if( int_x < min_x ) min_x = int_x;
518 if( int_x > max_x ) max_x = int_x;
520 CHECK( max_x - min_x < COL );
527 memset( grid, 0,
sizeof( grid ) );
533 int x = (int)coords[0] - ( ID - 1 ) *
SET_WIDTH, y = (int)coords[1];
534 CHECK( fabs( coords[1] - (
double)y ) < 1e-12 );
535 CHECK( fabs( coords[2] ) < 1e-12 );
566 for(
int id = 1;
id <=
NUM_SETS; ++id )
585 int ids[2] = { 2, 8 };
647 int ids[2] = { 1, 4 };
656 double coords[3], data[3];
673 int ids[2] = { 1, 4 };
697 const char tag_name[] =
"VTX_ADJ";
698 create_mesh(
true,
false,
false,
false, tag_name, var_len );
699 int ids[2] = { 7, 10 };
708 std::vector< EntityHandle > adj, val;
710 CHECK( !adj.empty() );
728 for(
const EntityHandle* end = dat + num; dat != end; ++dat )
729 if( *dat ) val.push_back( *dat );
732 std::sort( adj.begin(), adj.end() );
733 std::sort( val.begin(), val.end() );
788 double coords[18][3] = { { 0, 0, 0 }, { 1, 0, 0 }, { 2, 0, 0 }, { 0, 1, 0 }, { 1, 1, 0 }, { 2, 1, 0 },
789 { 0, 0, 1 }, { 1, 0, 1 }, { 2, 0, 1 }, { 0, 1, 1 }, { 1, 1, 1 }, { 2, 1, 1 },
790 { 0, 0, 2 }, { 1, 0, 2 }, { 2, 0, 2 }, { 0, 1, 2 }, { 1, 1, 2 }, { 2, 1, 2 } };
791 int hexconn[4][8] = { { 0, 1, 4, 3, 6, 7, 10, 9 },
792 { 1, 2, 5, 4, 7, 8, 11, 10 },
793 { 6, 7, 10, 9, 12, 13, 16, 15 },
794 { 7, 8, 11, 10, 13, 14, 17, 16 } };
795 for(
int i = 0; i < 18; ++i )
799 for(
int i = 0; i < 4; ++i )
802 for(
int j = 0; j < 8; ++j )
803 conn[j] = verts[hexconn[i][j]];
810 std::vector< EntityHandle > quads;
812 for(
int i = 0; i < 4; ++i )
818 for(
int j = 0; j < 6; ++j )
827 EntityHandle tri_conn[2][3] = { { conn[0], conn[1], conn[2] }, { conn[2], conn[3], conn[0] } };
851 int ids[2] = { 2, 3 };
871 CHECK( coords2[0] > -1e-12 && coords2[0] - 2 < 1e-12 );
872 CHECK( coords2[1] > -1e-12 && coords2[1] - 1 < 1e-12 );
873 CHECK( coords2[2] > -1e-12 && coords2[2] - 1 < 1e-12 );
893 for(
int i = 0; i < 2 * len + 2; ++i )
901 int cont_ids[2][len] = { { 3, 4, 5, 9, 10 }, { 6, 7, 8, 11, 12 } };
902 for(
int i = 0; i < 2; ++i )
904 EntityHandle contents[len] = { set[cont_ids[i][0] - 1], set[cont_ids[i][1] - 1], set[cont_ids[i][2] - 1],
905 set[cont_ids[i][3] - 1], set[cont_ids[i][4] - 1] };
911 for(
int i = 0; i < 2; ++i )
924 if( it != sets.
end() ) sets.
erase( it );
930 const void* data[] = { &
id };
940 std::vector< int > expected( cont_ids[i], cont_ids[i] + len );
941 std::vector< int > actual( len );
943 std::sort( expected.begin(), expected.end() );
944 std::sort( actual.begin(), actual.end() );
945 CHECK( expected == actual );
953 const int exp_num_sets = ( mode ==
GATHER_NONE ) ? 1 + contents :
id;
968 const void* val[] = { &
id };
982 for(
int i =
id; i > 0; --i )
1006 std::vector< EntityHandle >
children;
1040 double coords[] = { 0, 0, 0 };
1042 for(
int i = 0; i <
INT; ++i )
1044 const int id = i + 1;
1066 opt +=
";CHILDREN=NONE;SETS=";
1068 opt +=
";SETS=NONE;CHILDREN=";
1071 if( no_parent_containing_sets ) opt +=
";NO_SET_CONTAINING_PARENTS";
1073 const int test_ids[] = { 2, 7,
INT / 3 - 1,
INT / 2 + 1,
INT - 3 };
1074 const int num_test_ids =
sizeof( test_ids ) /
sizeof(
int );
1075 for(
int i = 0; i < num_test_ids; ++i )
1102 const int NUM_GRP_VTX = 20;
1103 const int NUM_GRP = 4;
1105 for(
int i = 0; i < NUM_GRP; ++i )
1107 double coords[3 * NUM_GRP_VTX];
1108 for(
int j = 0; j < NUM_GRP_VTX; ++j )
1111 coords[3 * j + 1] = j;
1112 coords[3 * j + 2] = 0;
1140 opt +=
";CHILDREN=NONE;SETS=";
1142 opt +=
";SETS=NONE;CHILDREN=";
1145 if( no_parent_containing_sets ) opt +=
";NO_PARENT_CONTAINING_SETS";
1148 const int read_id = 3;
1158 int counts[NUM_GRP];
1159 memset( counts, 0,
sizeof( counts ) );
1166 int i = (int)( coords[0] + 1e-12 );
1167 CHECK( i >= 0 && i < NUM_GRP );
1195 const void* val[] = { &
id };
1222 const int ids[] = { 1, 5, 9 };
1223 const int num_sets =
sizeof( ids ) /
sizeof(
int );
1232 for(
int i = 0; i < num_sets; ++i )
1249 for(
int k = 0; k < 2; ++k )
1251 for(
int j = 0; j < 3; ++j )
1253 for(
int i = 0; i < 3; ++i )
1255 double coords[] = {
static_cast< double >( i ),
static_cast< double >( j ),
1256 static_cast< double >( k ) };
1261 for(
int j = 0; j < 2; ++j )
1263 for(
int i = 0; i < 2; ++i )
1265 EntityHandle conn[] = { verts[i][j][0], verts[i + 1][j][0], verts[i + 1][j + 1][0], verts[i][j + 1][0],
1266 verts[i][j][1], verts[i + 1][j][1], verts[i + 1][j + 1][1], verts[i][j + 1][1] };
1272 EntityHandle edge_conn[2] = { verts[1][1][0], verts[1][1][1] };
1285 EntityHandle set1[4] = { hexes[0][0], hexes[1][0], edges[0], edges[1] };
1286 EntityHandle set2[4] = { hexes[0][1], hexes[1][1], edges[0], edges[1] };
1293 int ids[2] = { 1, 2 };
1334 for(
int j = 0; j <=
INT; ++j )
1336 for(
int i = 0; i <=
INT; ++i )
1338 double coords[3] = {
static_cast< double >( i ),
static_cast< double >( j ), 0 };
1343 for(
int j = 0; j <
INT; ++j )
1345 for(
int i = 0; i <
INT; ++i )
1348 verts[
INT - j - 1][i] };
1368 int ids[2] = { 4, 5 };
1409 for(
int i = 0; i < 12; ++i )
1415 Tag id = 0, gid = 0,
dim = 0;
1424 int dims[12], ids[12];
1426 for(
int i = 0; i < 12; ++i )
1428 dims[i] = i % 3 + 1;
1453 std::vector< int > values;
1457 std::sort( values.begin(), values.end() );
1466 const int three = 3;
1474 std::vector< int > values;
1478 std::sort( values.begin(), values.end() );