MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include "moab/Core.hpp"
#include "moab/Range.hpp"
#include "TestUtil.hpp"
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <cmath>
Go to the source code of this file.
Functions | |
void | read_write_file (Interface &output, Interface &input, EntityHandle *input_set=0) |
void | test_ranged_set_with_stale_handles () |
void | test_list_set_with_stale_handles () |
void | test_file_set () |
void | test_sets_fileids () |
int | coords_by_idx (int idx, double coords[][3]) |
void | recursive_build_tree (int max_depth, Interface &mb, Tag tag, EntityHandle p, int depth, int &idx) |
void | recursive_check_tree (int max_depth, Interface &mb, Tag tag, EntityHandle p, int depth, int &idx) |
void | test_tree (int max_depth) |
void | test_small_tree () |
void | test_big_tree () |
void | regression_mmiller_8_2010 () |
void | test_set_flags () |
int | main (int argc, char *argv[]) |
Variables | |
const char | filename [] = "sets.h5m" |
bool | keep_file = false |
int coords_by_idx | ( | int | idx, |
double | coords[][3] | ||
) |
Definition at line 189 of file h5sets_test.cpp.
Referenced by recursive_build_tree(), and recursive_check_tree().
{
coords[0][0] = idx;
coords[0][1] = 0;
coords[0][2] = 0;
coords[1][0] = 0;
coords[1][1] = idx;
coords[1][2] = 0;
coords[2][0] = 0;
coords[2][1] = 0;
coords[2][2] = idx;
coords[3][0] = 3.14 * idx;
coords[3][1] = 1;
coords[3][2] = 1;
coords[4][0] = 1;
coords[4][1] = 3.14 * idx;
coords[4][2] = 1;
coords[5][0] = 1;
coords[5][1] = 1;
coords[5][2] = 3.14 * idx;
return idx % 5 + 1;
}
int main | ( | int | argc, |
char * | argv[] | ||
) |
Definition at line 366 of file h5sets_test.cpp.
References moab::fail(), keep_file, regression_mmiller_8_2010(), RUN_TEST, test_big_tree(), test_file_set(), test_list_set_with_stale_handles(), test_ranged_set_with_stale_handles(), test_set_flags(), test_sets_fileids(), and test_small_tree().
{ #ifdef MOAB_HAVE_MPI int fail = MPI_Init( &argc, &argv ); if( fail ) return fail; #endif bool do_big_tree_test = false; for( int i = 1; i < argc; ++i ) { if( std::string( argv[i] ) == "-k" ) keep_file = true; else if( std::string( argv[i] ) == "-b" ) do_big_tree_test = true; else { std::cerr << "Usage: " << argv[0] << " [-k] [-b]" << std::endl; return 1; } } int exitval = 0; exitval += RUN_TEST( test_ranged_set_with_stale_handles ); exitval += RUN_TEST( test_list_set_with_stale_handles ); exitval += RUN_TEST( test_file_set ); exitval += RUN_TEST( test_small_tree ); exitval += RUN_TEST( test_set_flags ); exitval += RUN_TEST( regression_mmiller_8_2010 ); exitval += RUN_TEST( test_sets_fileids ); if( do_big_tree_test ) { exitval += RUN_TEST( test_big_tree ); } #ifdef MOAB_HAVE_MPI fail = MPI_Finalize(); if( fail ) return fail; #endif return exitval; }
void read_write_file | ( | Interface & | output, |
Interface & | input, | ||
EntityHandle * | input_set = 0 |
||
) |
Definition at line 20 of file h5sets_test.cpp.
References CHECK_ERR, moab::Interface::create_meshset(), ErrorCode, filename, keep_file, moab::Interface::load_file(), MESHSET_SET, and moab::Interface::write_file().
Referenced by test_file_set(), test_list_set_with_stale_handles(), and test_ranged_set_with_stale_handles().
{ ErrorCode rval; rval = output.write_file( filename, 0, "DEBUG_BINIO" );CHECK_ERR( rval ); if( input_set ) { rval = input.create_meshset( MESHSET_SET, *input_set );CHECK_ERR( rval ); } rval = input.load_file( filename, input_set ); if( !keep_file ) remove( filename );CHECK_ERR( rval ); }
void recursive_build_tree | ( | int | max_depth, |
Interface & | mb, | ||
Tag | tag, | ||
EntityHandle | p, | ||
int | depth, | ||
int & | idx | ||
) |
Definition at line 212 of file h5sets_test.cpp.
References moab::Interface::add_entities(), moab::Interface::add_parent_child(), CHECK_ERR, coords_by_idx(), moab::Interface::create_meshset(), moab::Interface::create_vertices(), ErrorCode, MESHSET_SET, and moab::Interface::tag_set_data().
Referenced by test_tree().
{ ErrorCode rval = mb.tag_set_data( tag, &p, 1, &idx );CHECK_ERR( rval ); Range verts; double coords[6][3]; int num_vtx = coords_by_idx( idx, coords ); rval = mb.create_vertices( &coords[0][0], num_vtx, verts ); rval = mb.add_entities( p, verts ); ++idx; if( depth == max_depth ) return; EntityHandle l, r; rval = mb.create_meshset( MESHSET_SET, l );CHECK_ERR( rval ); rval = mb.create_meshset( MESHSET_SET, r );CHECK_ERR( rval ); rval = mb.add_parent_child( p, l );CHECK_ERR( rval ); rval = mb.add_parent_child( p, r );CHECK_ERR( rval ); recursive_build_tree( max_depth, mb, tag, l, depth + 1, idx ); recursive_build_tree( max_depth, mb, tag, r, depth + 1, idx ); }
void recursive_check_tree | ( | int | max_depth, |
Interface & | mb, | ||
Tag | tag, | ||
EntityHandle | p, | ||
int | depth, | ||
int & | idx | ||
) |
Definition at line 234 of file h5sets_test.cpp.
References moab::Range::all_of_type(), CHECK, CHECK_EQUAL, CHECK_ERR, children, coords_by_idx(), ErrorCode, moab::Interface::get_child_meshsets(), moab::Interface::get_coords(), moab::Interface::get_entities_by_handle(), moab::Interface::get_parent_meshsets(), MBVERTEX, moab::Range::size(), and moab::Interface::tag_get_data().
Referenced by test_tree().
{ int id; ErrorCode rval = mb.tag_get_data( tag, &p, 1, &id );CHECK_ERR( rval ); CHECK_EQUAL( idx, id ); Range verts; double coords[6][3]; int num_vtx = coords_by_idx( idx, coords ); rval = mb.get_entities_by_handle( p, verts ); CHECK( verts.all_of_type( MBVERTEX ) ); CHECK_EQUAL( num_vtx, (int)verts.size() ); double coords2[6][3]; rval = mb.get_coords( verts, &coords2[0][0] ); std::vector< bool > match( 6, true ); for( int i = 0; i < num_vtx; ++i ) { match[i] = false; for( int j = 0; j < num_vtx; ++j ) { if( !match[j] ) { double d[3] = { coords[i][0] - coords2[j][0], coords[i][1] - coords2[j][1], coords[i][2] - coords2[j][2] }; double ds = d[0] * d[0] + d[1] * d[1] + d[2] * d[2]; if( ds < 1e-12 ) { match[j] = true; break; } } } } CHECK( match[0] ); CHECK( match[1] ); CHECK( match[2] ); CHECK( match[3] ); CHECK( match[4] ); CHECK( match[5] ); ++idx; std::vector< EntityHandle > children, parents; rval = mb.get_child_meshsets( p, children );CHECK_ERR( rval ); if( depth == max_depth ) { CHECK_EQUAL( (size_t)0, children.size() ); return; } CHECK_EQUAL( (size_t)2, children.size() ); EntityHandle l = children.front(); EntityHandle r = children.back(); parents.clear(); rval = mb.get_parent_meshsets( l, parents );CHECK_ERR( rval ); CHECK_EQUAL( (size_t)1, parents.size() ); CHECK_EQUAL( p, parents.front() ); parents.clear(); rval = mb.get_parent_meshsets( r, parents );CHECK_ERR( rval ); CHECK_EQUAL( (size_t)1, parents.size() ); CHECK_EQUAL( p, parents.front() ); recursive_check_tree( max_depth, mb, tag, l, depth + 1, idx ); recursive_check_tree( max_depth, mb, tag, r, depth + 1, idx ); }
void regression_mmiller_8_2010 | ( | ) |
Definition at line 412 of file h5sets_test.cpp.
References CHECK_EQUAL, moab::Range::clear(), moab::CREATE_HANDLE(), moab::Interface::get_entities_by_handle(), moab::Interface::get_entities_by_type(), moab::Range::insert(), moab::Interface::load_file(), mb, MBENTITYSET, MBHEX, MBPRISM, MBPYRAMID, MBVERTEX, and moab::Range::size().
Referenced by main().
{ Core moab; Interface& mb = moab; const size_t num_vtx = 171; const size_t num_pri = 12; const size_t num_pyr = 8; const size_t num_hex = 100; const size_t num_set = 25; mb.load_file( std::string( TestDir + "unittest/h5file/rocket_ents_in_assm.h5m" ).c_str() ); /* Dump of set contents from input file: 1r: 172, 4, 2r: 192, 4, 204, 4, 216, 4, 228, 4, 240, 4, 252, 4, 264, 4, 276, 4, 3r: 288, 4, 4 : 181, 183, 185, 187, 5r: 176, 5, 182, 1, 184, 1, 186, 1, 188, 4, 196, 8, 208, 8, 220, 8, 232, 8, 244, 8, 256, 8, 268, 8, 280, 8, 6r: 172, 4, 192, 4, 204, 4, 216, 4, 228, 4, 240, 4, 252, 4, 264, 4, 276, 4, 288, 4, 7r: 176, 4, 188, 4, 196, 8, 208, 8, 220, 8, 232, 8, 244, 8, 8r: 180, 8, 256, 8, 268, 8, 280, 8, 9r: 172, 120, 301, 1, 309, 1, 10r: 176, 4, 188, 100, 302, 1, 308, 1, 11r: 176, 4, 188, 52, 303, 1, 12r: 176, 4, 188, 4, 304, 4, 13 : 177, 189, 14 : 178, 190, 15 : 179, 191, 16 : 17r: 240, 48, 18r: 172, 4, 180, 8, 288, 4, 310, 1, 312, 1, 19r: 180, 8, 288, 4, 311, 1, 20r: 180, 8, 21r: 172, 4, 313, 4, 22 : 173, 23 : 174, 24 : 175, 25 : 176, 188 */ // check expected handles const EntityHandle VTX1 = CREATE_HANDLE( MBVERTEX, 1 ); Range range, expected; mb.get_entities_by_type( 0, MBVERTEX, range ); CHECK_EQUAL( num_vtx, range.size() ); expected.insert( VTX1, VTX1 + num_vtx - 1 ); CHECK_EQUAL( expected, range ); const EntityHandle PRI1 = CREATE_HANDLE( MBPRISM, 1 ); range.clear(); expected.clear(); mb.get_entities_by_type( 0, MBPRISM, range ); CHECK_EQUAL( num_pri, range.size() ); expected.insert( PRI1, PRI1 + num_pri - 1 ); CHECK_EQUAL( expected, range ); const EntityHandle PYR1 = CREATE_HANDLE( MBPYRAMID, 1 ); range.clear(); expected.clear(); mb.get_entities_by_type( 0, MBPYRAMID, range ); CHECK_EQUAL( num_pyr, range.size() ); expected.insert( PYR1, PYR1 + num_pyr - 1 ); CHECK_EQUAL( expected, range ); const EntityHandle HEX1 = CREATE_HANDLE( MBHEX, 1 ); range.clear(); expected.clear(); mb.get_entities_by_type( 0, MBHEX, range ); CHECK_EQUAL( num_hex, range.size() ); expected.insert( HEX1, HEX1 + num_hex - 1 ); CHECK_EQUAL( expected, range ); const EntityHandle SET1 = CREATE_HANDLE( MBENTITYSET, 1 ); range.clear(); expected.clear(); mb.get_entities_by_type( 0, MBENTITYSET, range ); CHECK_EQUAL( num_set, range.size() ); expected.insert( SET1, SET1 + num_set - 1 ); CHECK_EQUAL( expected, range ); // Check set contents // Set 1: Pyramids 1 to 4 range.clear(); mb.get_entities_by_handle( SET1, range ); expected.clear(); expected.insert( PYR1 + 0, PYR1 + 3 ); CHECK_EQUAL( expected, range ); // Skip sets 2 through 8 because they're long and complicated and // I doubt I could code up the content lists explicitly from the // dump of the HDF5 file w/out many mistakes // Set 9: Pyramids 1 to 8, Prism 1 to 12, Hex 1 to 100, and Sets 10 and 18 range.clear(); mb.get_entities_by_handle( SET1 + 8, range ); expected.clear(); expected.insert( PYR1 + 0, PYR1 + 7 ); expected.insert( PRI1 + 0, PRI1 + 11 ); expected.insert( HEX1 + 0, HEX1 + 99 ); expected.insert( SET1 + 9 ); expected.insert( SET1 + 17 ); CHECK_EQUAL( expected, range ); // Set 10: Pyramids 5 to 8, Prism 9 to 12, Hex 1 to 96, and Sets 11 and 17 range.clear(); mb.get_entities_by_handle( SET1 + 9, range ); expected.clear(); expected.insert( PYR1 + 4, PYR1 + 7 ); expected.insert( PRI1 + 8, PRI1 + 11 ); expected.insert( HEX1 + 0, HEX1 + 95 ); expected.insert( SET1 + 10 ); expected.insert( SET1 + 16 ); CHECK_EQUAL( expected, range ); // Set 11: Pyramids 5 to 8, Prism 9 to 12, Hex 1 to 48, and Set 12 range.clear(); mb.get_entities_by_handle( SET1 + 10, range ); expected.clear(); expected.insert( PYR1 + 4, PYR1 + 7 ); expected.insert( PRI1 + 8, PRI1 + 11 ); expected.insert( HEX1 + 0, HEX1 + 47 ); expected.insert( SET1 + 11 ); CHECK_EQUAL( expected, range ); // Set 12: Pyramids 5 to 8, Prism 9 to 12, and Sets 13 to 16 range.clear(); mb.get_entities_by_handle( SET1 + 11, range ); expected.clear(); expected.insert( PYR1 + 4, PYR1 + 7 ); expected.insert( PRI1 + 8, PRI1 + 11 ); expected.insert( SET1 + 12, SET1 + 15 ); CHECK_EQUAL( expected, range ); // Set 13: Pyramids 6 and Prism 10 range.clear(); mb.get_entities_by_handle( SET1 + 12, range ); expected.clear(); expected.insert( PYR1 + 5 ); expected.insert( PRI1 + 9 ); CHECK_EQUAL( expected, range ); // Set 14: Pyramids 7 and Prism 11 range.clear(); mb.get_entities_by_handle( SET1 + 13, range ); expected.clear(); expected.insert( PYR1 + 6 ); expected.insert( PRI1 + 10 ); CHECK_EQUAL( expected, range ); // Set 15: Pyramids 8 and Prism 12 range.clear(); mb.get_entities_by_handle( SET1 + 14, range ); expected.clear(); expected.insert( PYR1 + 7 ); expected.insert( PRI1 + 11 ); CHECK_EQUAL( expected, range ); // Set 16: Empty range.clear(); mb.get_entities_by_handle( SET1 + 15, range ); expected.clear(); CHECK_EQUAL( expected, range ); // Set 17: Hex 49 to 96 range.clear(); mb.get_entities_by_handle( SET1 + 16, range ); expected.clear(); expected.insert( HEX1 + 48, HEX1 + 95 ); CHECK_EQUAL( expected, range ); // Set 18: Pyramids 1 to 4, Prism 1 to 8, Hex 97 to 100, and Sets 19 and 21 range.clear(); mb.get_entities_by_handle( SET1 + 17, range ); expected.clear(); expected.insert( PYR1 + 0, PYR1 + 3 ); expected.insert( PRI1 + 0, PRI1 + 7 ); expected.insert( HEX1 + 96, HEX1 + 99 ); expected.insert( SET1 + 18 ); expected.insert( SET1 + 20 ); CHECK_EQUAL( expected, range ); // Set 19: Prism 1 to 8, Hex 97 to 100, and Set 20 range.clear(); mb.get_entities_by_handle( SET1 + 18, range ); expected.clear(); expected.insert( PRI1 + 0, PRI1 + 7 ); expected.insert( HEX1 + 96, HEX1 + 99 ); expected.insert( SET1 + 19 ); CHECK_EQUAL( expected, range ); // Set 20: Prism 1 to 8 range.clear(); mb.get_entities_by_handle( SET1 + 19, range ); expected.clear(); expected.insert( PRI1 + 0, PRI1 + 7 ); CHECK_EQUAL( expected, range ); // Set 21: Pyramids 1 to 4, and Sets 22 to 25 range.clear(); mb.get_entities_by_handle( SET1 + 20, range ); expected.clear(); expected.insert( PYR1 + 0, PYR1 + 3 ); expected.insert( SET1 + 21, SET1 + 24 ); CHECK_EQUAL( expected, range ); // Set 22: Pyramid 2 range.clear(); mb.get_entities_by_handle( SET1 + 21, range ); expected.clear(); expected.insert( PYR1 + 1 ); CHECK_EQUAL( expected, range ); // Set 23: Pyramid 3 range.clear(); mb.get_entities_by_handle( SET1 + 22, range ); expected.clear(); expected.insert( PYR1 + 2 ); CHECK_EQUAL( expected, range ); // Set 24: Pyramid 4 range.clear(); mb.get_entities_by_handle( SET1 + 23, range ); expected.clear(); expected.insert( PYR1 + 3 ); CHECK_EQUAL( expected, range ); // Set 25: Pyramid 5 and Prism 9 range.clear(); mb.get_entities_by_handle( SET1 + 24, range ); expected.clear(); expected.insert( PYR1 + 4 ); expected.insert( PRI1 + 8 ); CHECK_EQUAL( expected, range ); }
void test_big_tree | ( | ) |
Definition at line 357 of file h5sets_test.cpp.
References test_tree().
Referenced by main().
{ test_tree( 20 ); }
void test_file_set | ( | ) |
Definition at line 110 of file h5sets_test.cpp.
References moab::Core::add_entities(), moab::Range::begin(), CHECK_EQUAL, CHECK_ERR, moab::Core::create_element(), moab::Core::create_meshset(), moab::Core::create_vertices(), moab::Range::end(), ErrorCode, moab::Core::get_number_entities_by_type(), MBENTITYSET, MBTRI, MBVERTEX, read_write_file(), and moab::Range::size().
Referenced by main().
{ ErrorCode rval; Core moab; double vtxcoords[] = { 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0 }; Range verts; rval = moab.create_vertices( vtxcoords, 3, verts );CHECK_ERR( rval ); CHECK_EQUAL( 3, (int)verts.size() ); EntityHandle tri; EntityHandle conn[3]; std::copy( verts.begin(), verts.end(), conn ); rval = moab.create_element( MBTRI, conn, 3, tri );CHECK_ERR( rval ); EntityHandle set; rval = moab.create_meshset( MESHSET_ORDERED, set );CHECK_ERR( rval ); rval = moab.add_entities( set, &tri, 1 );CHECK_ERR( rval ); EntityHandle file; read_write_file( moab, moab, &file ); int count; rval = moab.get_number_entities_by_type( 0, MBVERTEX, count );CHECK_ERR( rval ); CHECK_EQUAL( 6, count ); rval = moab.get_number_entities_by_type( file, MBVERTEX, count );CHECK_ERR( rval ); CHECK_EQUAL( 3, count ); rval = moab.get_number_entities_by_type( 0, MBTRI, count );CHECK_ERR( rval ); CHECK_EQUAL( 2, count ); rval = moab.get_number_entities_by_type( file, MBTRI, count );CHECK_ERR( rval ); CHECK_EQUAL( 1, count ); rval = moab.get_number_entities_by_type( 0, MBENTITYSET, count );CHECK_ERR( rval ); CHECK_EQUAL( 3, count ); rval = moab.get_number_entities_by_type( file, MBENTITYSET, count );CHECK_ERR( rval ); CHECK_EQUAL( 1, count ); }
void test_list_set_with_stale_handles | ( | ) |
Definition at line 71 of file h5sets_test.cpp.
References moab::Interface::add_entities(), moab::Range::back(), moab::Range::begin(), CHECK_EQUAL, CHECK_ERR, moab::Interface::create_meshset(), moab::Interface::create_vertices(), moab::Interface::delete_entities(), ErrorCode, moab::Range::front(), moab::Interface::get_entities_by_handle(), moab::Interface::get_entities_by_type(), mb, MBENTITYSET, read_write_file(), and moab::Range::size().
Referenced by main().
{ Core moab; Interface& mb = moab; ErrorCode rval; Range verts; const int num_vtx = 40; std::vector< double > coords( 3 * num_vtx, 0.0 ); rval = mb.create_vertices( &coords[0], num_vtx, verts );CHECK_ERR( rval ); CHECK_EQUAL( num_vtx, (int)verts.size() ); EntityHandle set; rval = mb.create_meshset( MESHSET_ORDERED, set );CHECK_ERR( rval ); rval = mb.add_entities( set, verts );CHECK_ERR( rval ); std::vector< EntityHandle > dead_verts; for( int i = num_vtx / 4; i < num_vtx; i += num_vtx / 4 ) { Range::iterator j = verts.begin(); j += i; dead_verts.push_back( *j ); } rval = mb.delete_entities( &dead_verts[0], dead_verts.size() );CHECK_ERR( rval ); Core moab2; Interface& mb2 = moab2; EntityHandle file_set; read_write_file( mb, mb2, &file_set ); Range sets; rval = mb2.get_entities_by_type( 0, MBENTITYSET, sets );CHECK_ERR( rval ); CHECK_EQUAL( 2, (int)sets.size() ); EntityHandle other_set = sets.front() == file_set ? sets.back() : sets.front(); std::vector< EntityHandle > list; rval = mb2.get_entities_by_handle( other_set, list );CHECK_ERR( rval ); CHECK_EQUAL( verts.size() - dead_verts.size(), list.size() ); }
void test_ranged_set_with_stale_handles | ( | ) |
Definition at line 32 of file h5sets_test.cpp.
References moab::Interface::add_entities(), moab::Range::back(), moab::Range::begin(), CHECK_EQUAL, CHECK_ERR, moab::Interface::create_meshset(), moab::Interface::create_vertices(), moab::Interface::delete_entities(), ErrorCode, moab::Range::front(), moab::Interface::get_entities_by_type(), moab::Interface::get_number_entities_by_type(), mb, MBENTITYSET, MBVERTEX, MESHSET_SET, read_write_file(), and moab::Range::size().
Referenced by main().
{ Core moab; Interface& mb = moab; ErrorCode rval; Range verts; const int num_vtx = 40; std::vector< double > coords( 3 * num_vtx, 0.0 ); rval = mb.create_vertices( &coords[0], num_vtx, verts );CHECK_ERR( rval ); CHECK_EQUAL( num_vtx, (int)verts.size() ); EntityHandle set; rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval ); rval = mb.add_entities( set, verts );CHECK_ERR( rval ); std::vector< EntityHandle > dead_verts; for( int i = num_vtx / 4; i < num_vtx; i += num_vtx / 4 ) { Range::iterator j = verts.begin(); j += i; dead_verts.push_back( *j ); } rval = mb.delete_entities( &dead_verts[0], dead_verts.size() );CHECK_ERR( rval ); Core moab2; Interface& mb2 = moab2; EntityHandle file_set; read_write_file( mb, mb2, &file_set ); Range sets; rval = mb2.get_entities_by_type( 0, MBENTITYSET, sets );CHECK_ERR( rval ); CHECK_EQUAL( 2, (int)sets.size() ); EntityHandle other_set = sets.front() == file_set ? sets.back() : sets.front(); int num_vtx2 = -5; rval = mb2.get_number_entities_by_type( other_set, MBVERTEX, num_vtx2 );CHECK_ERR( rval ); CHECK_EQUAL( (int)( num_vtx - dead_verts.size() ), num_vtx2 ); }
void test_set_flags | ( | ) |
Definition at line 639 of file h5sets_test.cpp.
References moab::Interface::add_entities(), moab::Range::begin(), CHECK_ARRAYS_EQUAL, CHECK_EQUAL, CHECK_ERR, moab::Range::clear(), moab::Interface::create_meshset(), moab::Interface::create_vertices(), moab::Interface::delete_mesh(), ErrorCode, filename2, moab::Range::front(), moab::Interface::get_entities_by_handle(), moab::Interface::get_entities_by_type_and_tag(), moab::Interface::get_meshset_options(), keep_file, moab::Interface::load_file(), mb, MB_TYPE_INTEGER, MBENTITYSET, MESHSET_SET, MESHSET_TRACK_OWNER, moab::Range::size(), moab::Interface::tag_get_data(), moab::Interface::tag_get_handle(), moab::Interface::tag_set_data(), and moab::Interface::write_file().
Referenced by main().
{ const char filename2[] = "test_set_flags.h5m"; ErrorCode rval; Core core; Interface& mb = core; // create a bunch of vertices so we have something to put in sets const int nverts = 20; double coords[3 * nverts] = { 0.0 }; Range verts; rval = mb.create_vertices( coords, nverts, verts );CHECK_ERR( rval ); // Assign IDs to things so that we can identify them in the // data we read back in. Tag tag; rval = mb.tag_get_handle( "GLOBAL_ID", 1, MB_TYPE_INTEGER, tag );CHECK_ERR( rval ); int ids[nverts]; for( int i = 0; i < nverts; ++i ) ids[i] = i + 1; rval = mb.tag_set_data( tag, verts, ids );CHECK_ERR( rval ); // define two lists of vertex ids corresponding to the // vertices that we are going to put into different sets const int set_verts1[] = { 1, 2, 3, 4, 8, 13, 14, 15 }; const int set_verts2[] = { 3, 9, 10, 11, 12, 13, 14, 15, 16, 17 }; const int num_verts1 = sizeof( set_verts1 ) / sizeof( set_verts1[0] ); const int num_verts2 = sizeof( set_verts1 ) / sizeof( set_verts1[0] ); // convert to handle lists EntityHandle set_handles1[num_verts1], set_handles2[num_verts2]; for( int i = 0; i < num_verts1; ++i ) set_handles1[i] = *( verts.begin() + set_verts1[i] - 1 ); for( int i = 0; i < num_verts2; ++i ) set_handles2[i] = *( verts.begin() + set_verts2[i] - 1 ); // now create some sets with different flag combinations EntityHandle sets[6]; rval = mb.create_meshset( 0, sets[0] ); rval = mb.create_meshset( MESHSET_TRACK_OWNER, sets[1] ); rval = mb.create_meshset( MESHSET_SET, sets[2] ); rval = mb.create_meshset( MESHSET_SET | MESHSET_TRACK_OWNER, sets[3] ); rval = mb.create_meshset( MESHSET_ORDERED, sets[4] ); rval = mb.create_meshset( MESHSET_ORDERED | MESHSET_TRACK_OWNER, sets[5] ); // assign IDs to sets so that we can identify them later rval = mb.tag_set_data( tag, sets, 6, ids );CHECK_ERR( rval ); // add entities to sets rval = mb.add_entities( sets[0], set_handles1, num_verts1 );CHECK_ERR( rval ); rval = mb.add_entities( sets[1], set_handles2, num_verts2 );CHECK_ERR( rval ); rval = mb.add_entities( sets[2], set_handles1, num_verts1 );CHECK_ERR( rval ); rval = mb.add_entities( sets[3], set_handles2, num_verts2 );CHECK_ERR( rval ); rval = mb.add_entities( sets[4], set_handles1, num_verts1 );CHECK_ERR( rval ); rval = mb.add_entities( sets[5], set_handles2, num_verts2 );CHECK_ERR( rval ); // now write the file and read it back in rval = mb.write_file( filename2, 0, "BUFFER_SIZE=1024;DEBUG_BINIO" );CHECK_ERR( rval ); mb.delete_mesh(); rval = mb.load_file( filename2 ); if( !keep_file ) remove( filename2 );CHECK_ERR( rval ); rval = mb.tag_get_handle( "GLOBAL_ID", 1, MB_TYPE_INTEGER, tag );CHECK_ERR( rval ); // find our sets Range tmp; for( int i = 0; i < 6; ++i ) { int id = i + 1; tmp.clear(); const void* vals[] = { &id }; rval = mb.get_entities_by_type_and_tag( 0, MBENTITYSET, &tag, vals, 1, tmp );CHECK_ERR( rval ); CHECK_EQUAL( 1u, (unsigned)tmp.size() ); sets[i] = tmp.front(); } // check that sets have correct flags unsigned opts; rval = mb.get_meshset_options( sets[0], opts );CHECK_ERR( rval ); CHECK_EQUAL( 0u, opts ); rval = mb.get_meshset_options( sets[1], opts );CHECK_ERR( rval ); CHECK_EQUAL( (unsigned)MESHSET_TRACK_OWNER, opts ); rval = mb.get_meshset_options( sets[2], opts );CHECK_ERR( rval ); CHECK_EQUAL( (unsigned)MESHSET_SET, opts ); rval = mb.get_meshset_options( sets[3], opts );CHECK_ERR( rval ); CHECK_EQUAL( (unsigned)( MESHSET_SET | MESHSET_TRACK_OWNER ), opts ); rval = mb.get_meshset_options( sets[4], opts );CHECK_ERR( rval ); CHECK_EQUAL( (unsigned)MESHSET_ORDERED, opts ); rval = mb.get_meshset_options( sets[5], opts );CHECK_ERR( rval ); CHECK_EQUAL( (unsigned)( MESHSET_ORDERED | MESHSET_TRACK_OWNER ), opts ); // check that sets have correct contents int set_ids1[num_verts1], set_ids2[num_verts2]; tmp.clear(); rval = mb.get_entities_by_handle( sets[0], tmp );CHECK_ERR( rval ); CHECK_EQUAL( num_verts1, (int)tmp.size() ); rval = mb.tag_get_data( tag, tmp, set_ids1 );CHECK_ERR( rval ); std::sort( set_ids1, set_ids1 + num_verts1 ); CHECK_ARRAYS_EQUAL( set_verts1, num_verts1, set_ids1, num_verts1 ); tmp.clear(); rval = mb.get_entities_by_handle( sets[1], tmp );CHECK_ERR( rval ); CHECK_EQUAL( num_verts2, (int)tmp.size() ); rval = mb.tag_get_data( tag, tmp, set_ids2 );CHECK_ERR( rval ); std::sort( set_ids2, set_ids2 + num_verts2 ); CHECK_ARRAYS_EQUAL( set_verts2, num_verts2, set_ids2, num_verts2 ); tmp.clear(); rval = mb.get_entities_by_handle( sets[2], tmp );CHECK_ERR( rval ); CHECK_EQUAL( num_verts1, (int)tmp.size() ); rval = mb.tag_get_data( tag, tmp, set_ids1 );CHECK_ERR( rval ); std::sort( set_ids1, set_ids1 + num_verts1 ); CHECK_ARRAYS_EQUAL( set_verts1, num_verts1, set_ids1, num_verts1 ); tmp.clear(); rval = mb.get_entities_by_handle( sets[3], tmp );CHECK_ERR( rval ); CHECK_EQUAL( num_verts2, (int)tmp.size() ); rval = mb.tag_get_data( tag, tmp, set_ids2 );CHECK_ERR( rval ); std::sort( set_ids2, set_ids2 + num_verts2 ); CHECK_ARRAYS_EQUAL( set_verts2, num_verts2, set_ids2, num_verts2 ); tmp.clear(); rval = mb.get_entities_by_handle( sets[4], tmp );CHECK_ERR( rval ); CHECK_EQUAL( num_verts1, (int)tmp.size() ); rval = mb.tag_get_data( tag, tmp, set_ids1 );CHECK_ERR( rval ); std::sort( set_ids1, set_ids1 + num_verts1 ); CHECK_ARRAYS_EQUAL( set_verts1, num_verts1, set_ids1, num_verts1 ); tmp.clear(); rval = mb.get_entities_by_handle( sets[5], tmp );CHECK_ERR( rval ); CHECK_EQUAL( num_verts2, (int)tmp.size() ); rval = mb.tag_get_data( tag, tmp, set_ids2 );CHECK_ERR( rval ); std::sort( set_ids2, set_ids2 + num_verts2 ); CHECK_ARRAYS_EQUAL( set_verts2, num_verts2, set_ids2, num_verts2 ); }
void test_sets_fileids | ( | ) |
Definition at line 148 of file h5sets_test.cpp.
References moab::Core::add_entities(), moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, moab::Core::create_element(), moab::Core::create_meshset(), moab::Core::create_vertices(), moab::Core::delete_mesh(), moab::Range::end(), ErrorCode, filename, moab::Core::get_entities_by_type(), keep_file, moab::Core::load_file(), MBENTITYSET, MBTRI, moab::Range::size(), moab::Core::tag_get_data(), moab::Core::tag_get_handle(), and moab::Core::write_file().
Referenced by main().
{ ErrorCode rval; Core moab; double vtxcoords[] = { 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0 }; Range verts; rval = moab.create_vertices( vtxcoords, 3, verts );CHECK_ERR( rval ); CHECK_EQUAL( 3, (int)verts.size() ); EntityHandle tri; EntityHandle conn[3]; std::copy( verts.begin(), verts.end(), conn ); rval = moab.create_element( MBTRI, conn, 3, tri );CHECK_ERR( rval ); EntityHandle set; rval = moab.create_meshset( MESHSET_ORDERED, set );CHECK_ERR( rval ); rval = moab.add_entities( set, &tri, 1 );CHECK_ERR( rval ); rval = moab.write_file( filename );CHECK_ERR( rval ); moab.delete_mesh(); rval = moab.load_file( filename, 0, "STORE_SETS_FILEIDS;" );CHECK_ERR( rval ); Tag setFileIdTag; rval = moab.tag_get_handle( "__FILE_ID_FOR_SETS", setFileIdTag );CHECK_ERR( rval ); CHECK( setFileIdTag ); Range sets; rval = moab.get_entities_by_type( 0, MBENTITYSET, sets );CHECK_ERR( rval ); std::vector< long > vals( sets.size() ); rval = moab.tag_get_data( setFileIdTag, sets, &vals[0] );CHECK_ERR( rval ); CHECK_EQUAL( 5, (int)vals[0] ); if( !keep_file ) remove( filename ); return; }
void test_small_tree | ( | ) |
Definition at line 345 of file h5sets_test.cpp.
References CHECK, max_depth, and test_tree().
Referenced by main().
void test_tree | ( | int | max_depth | ) |
Definition at line 302 of file h5sets_test.cpp.
References CHECK_EQUAL, CHECK_ERR, moab::Interface::create_meshset(), moab::Interface::delete_mesh(), ErrorCode, moab::Range::front(), moab::Interface::get_entities_by_type_and_tag(), keep_file, moab::Interface::load_file(), mb, MB_TYPE_INTEGER, MBENTITYSET, MESHSET_SET, recursive_build_tree(), recursive_check_tree(), moab::Range::size(), moab::Interface::tag_get_handle(), and moab::Interface::write_file().
Referenced by test_big_tree(), and test_small_tree().
{ ErrorCode rval; Core moab; Interface& mb = moab; EntityHandle root; // create tag in which to store number for each tree node, // in depth-first in-order search order. Tag tag; rval = mb.tag_get_handle( "GLOBAL_ID", 1, MB_TYPE_INTEGER, tag );CHECK_ERR( rval ); // create a binary tree to a depth of 20 (about 1 million nodes) rval = mb.create_meshset( MESHSET_SET, root );CHECK_ERR( rval ); int idx = 1; recursive_build_tree( max_depth, mb, tag, root, 1, idx ); const int last_idx = idx; std::cerr << "Created binary tree containing " << last_idx << " nodes." << std::endl; std::ostringstream str; str << "tree-" << max_depth << ".h5m"; // write file and read back in rval = mb.write_file( str.str().c_str(), 0, "BUFFER_SIZE=1024;DEBUG_BINIO" );CHECK_ERR( rval ); mb.delete_mesh(); rval = mb.load_file( str.str().c_str() ); if( !keep_file ) remove( str.str().c_str() );CHECK_ERR( rval ); // get tree root rval = mb.tag_get_handle( "GLOBAL_ID", 1, MB_TYPE_INTEGER, tag );CHECK_ERR( rval ); Range roots; idx = 1; const void* vals[] = { &idx }; rval = mb.get_entities_by_type_and_tag( 0, MBENTITYSET, &tag, vals, 1, roots ); CHECK_EQUAL( (size_t)1, roots.size() ); root = roots.front(); // check that tree is as we expect it idx = 1; recursive_check_tree( max_depth, mb, tag, root, 1, idx ); CHECK_EQUAL( last_idx, idx ); }
const char filename[] = "sets.h5m" |
Definition at line 17 of file h5sets_test.cpp.
bool keep_file = false |
Definition at line 18 of file h5sets_test.cpp.
Referenced by main(), read_write_file(), test_set_flags(), test_sets_fileids(), and test_tree().