MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include "moab/Core.hpp"
#include "TestUtil.hpp"
#include "moab/Range.hpp"
#include <cstdlib>
#include <cstdio>
Go to the source code of this file.
#define CHECK_ERR_FILE | ( | ERRCODE, | |
FILENAME | |||
) |
do \ { \ if( MB_SUCCESS != ( ERRCODE ) && !keep_files ) remove( FILENAME ); \ CHECK_ERR( ERRCODE ); \ while( false )
Definition at line 46 of file h5varlen.cpp.
void calculate_big_value | ( | Interface & | moab, |
EntityHandle | vert, | ||
size_t | size, | ||
double * | data | ||
) |
Definition at line 195 of file h5varlen.cpp.
References CHECK, CHECK_ERR, ErrorCode, moab::Interface::get_coords(), and size.
Referenced by test_var_length_big_data().
void compare_tags | ( | const char * | name, |
Interface & | mb1, | ||
Interface & | mb2 | ||
) |
Definition at line 625 of file h5varlen.cpp.
References CHECK, CHECK_EQUAL, CHECK_ERR, ErrorCode, MB_ENTITY_NOT_FOUND, MB_SUCCESS, MB_TAG_ANY, MB_TAG_NOT_FOUND, MB_TYPE_OPAQUE, MB_VARIABLE_DATA_LENGTH, size, moab::Interface::tag_get_data_type(), moab::Interface::tag_get_default_value(), moab::Interface::tag_get_handle(), moab::Interface::tag_get_length(), moab::Interface::tag_get_type(), and TagType.
{ ErrorCode rval; Tag tag1, tag2; rval = mb1.tag_get_handle( name, 0, MB_TYPE_OPAQUE, tag1, MB_TAG_ANY );CHECK_ERR( rval ); rval = mb2.tag_get_handle( name, 0, MB_TYPE_OPAQUE, tag2, MB_TAG_ANY );CHECK_ERR( rval ); int size; CHECK_EQUAL( MB_VARIABLE_DATA_LENGTH, mb1.tag_get_length( tag1, size ) ); CHECK_EQUAL( MB_VARIABLE_DATA_LENGTH, mb2.tag_get_length( tag2, size ) ); TagType storage1, storage2; rval = mb1.tag_get_type( tag1, storage1 );CHECK_ERR( rval ); rval = mb2.tag_get_type( tag2, storage2 );CHECK_ERR( rval ); CHECK_EQUAL( storage1, storage2 ); DataType type1, type2; rval = mb1.tag_get_data_type( tag1, type1 );CHECK_ERR( rval ); rval = mb2.tag_get_data_type( tag2, type2 );CHECK_ERR( rval ); const void *defval1, *defval2; int defsize1, defsize2; ErrorCode rval1 = mb1.tag_get_default_value( tag1, defval1, defsize1 ); ErrorCode rval2 = mb2.tag_get_default_value( tag2, defval2, defsize2 ); if( MB_SUCCESS == rval1 ) { CHECK_ERR( rval2 ); CHECK_EQUAL( defsize1, defsize2 ); CHECK( !memcmp( defval1, defval2, defsize1 ) ); } else if( MB_ENTITY_NOT_FOUND == rval1 || MB_TAG_NOT_FOUND == rval1 ) CHECK_EQUAL( rval1, rval2 ); else CHECK_ERR( rval1 ); }
void create_big_mesh | ( | Interface & | mb | ) |
Definition at line 620 of file h5varlen.cpp.
References create_structured_quad_mesh().
Referenced by test_var_length_data_big().
{ create_structured_quad_mesh( mb, 300, 300 ); }
void create_mesh | ( | Interface & | mb | ) |
Definition at line 615 of file h5varlen.cpp.
References create_structured_quad_mesh().
{ create_structured_quad_mesh( mb, 2, 2 ); }
void create_structured_quad_mesh | ( | Interface & | mb, |
int | x, | ||
int | y | ||
) |
Definition at line 588 of file h5varlen.cpp.
References CHECK_ERR, moab::Interface::create_element(), moab::Interface::create_vertex(), ErrorCode, and MBQUAD.
Referenced by create_big_mesh(), and create_mesh().
{ ErrorCode rval; const double z = 2.1; std::vector< EntityHandle > verts( ( x + 1 ) * ( y + 1 ) ); for( int i = 0; i <= x; ++i ) { for( int j = 0; j <= y; ++j ) { double coords[3] = { static_cast< double >( i ), static_cast< double >( j ), static_cast< double >( z ) }; rval = mb.create_vertex( coords, verts[i + ( x + 1 ) * j] );CHECK_ERR( rval ); } } std::vector< EntityHandle > elems( x * y ); for( int i = 0; i < x; ++i ) { for( int j = 0; j < y; ++j ) { EntityHandle conn[4] = { verts[i + ( x + 1 ) * j], verts[i + 1 + ( x + 1 ) * j], verts[i + 1 + ( x + 1 ) * ( j + 1 )], verts[i + ( x + 1 ) * ( j + 1 )] }; rval = mb.create_element( MBQUAD, conn, 4, elems[i + x * j] );CHECK_ERR( rval ); } } }
int main | ( | int | argc, |
char * | argv[] | ||
) |
Definition at line 53 of file h5varlen.cpp.
References moab::fail(), keep_files, RUN_TEST, test_huge_var_length(), test_var_length_big_data(), test_var_length_data(), test_var_length_data_big(), test_var_length_default_data(), test_var_length_default_opaque(), test_var_length_handle_tag(), test_var_length_mesh_data(), test_var_length_mesh_opaque(), test_var_length_no_data(), and test_var_length_opaque().
{ #ifdef MOAB_HAVE_MPI int fail = MPI_Init( &argc, &argv ); if( fail ) return fail; #endif if( argc != 1 ) { if( argc != 2 || strcmp( argv[1], "-k" ) != 0 ) { fprintf( stderr, "Usage: %s [-k]\n", argv[0] ); abort(); } keep_files = true; } int err_count = 0; err_count += RUN_TEST( test_var_length_no_data ); err_count += RUN_TEST( test_var_length_data ); err_count += RUN_TEST( test_var_length_big_data ); err_count += RUN_TEST( test_var_length_opaque ); err_count += RUN_TEST( test_var_length_mesh_data ); err_count += RUN_TEST( test_var_length_default_data ); err_count += RUN_TEST( test_var_length_mesh_opaque ); err_count += RUN_TEST( test_var_length_default_opaque ); err_count += RUN_TEST( test_var_length_handle_tag ); err_count += RUN_TEST( test_var_length_data_big ); err_count += RUN_TEST( test_huge_var_length ); #ifdef MOAB_HAVE_MPI fail = MPI_Finalize(); if( fail ) return fail; #endif return err_count; }
void read_write | ( | const char * | filename, |
Interface & | write, | ||
Interface & | reader | ||
) |
Definition at line 662 of file h5varlen.cpp.
References CHECK_ERR, ErrorCode, filename, keep_files, moab::Interface::load_mesh(), MB_SUCCESS, and moab::Interface::write_file().
Referenced by test_global_opaque_common(), test_global_value_common(), test_var_length_big_data(), test_var_length_data_common(), test_var_length_handle_tag(), and test_var_length_no_data().
{ ErrorCode rval = writer.write_file( filename ); if( !keep_files && MB_SUCCESS != rval ) remove( filename );CHECK_ERR( rval ); rval = reader.load_mesh( filename ); if( !keep_files ) remove( filename );CHECK_ERR( rval ); }
void test_global_opaque_common | ( | bool | mesh_value | ) |
Definition at line 387 of file h5varlen.cpp.
References CHECK, CHECK_EQUAL, CHECK_ERR, compare_tags(), create_mesh(), ErrorCode, mb, MB_TAG_DENSE, MB_TAG_EXCL, MB_TAG_VARLEN, MB_TYPE_OPAQUE, read_write(), moab::Interface::tag_get_by_ptr(), moab::Interface::tag_get_default_value(), moab::Interface::tag_get_handle(), and moab::Interface::tag_set_by_ptr().
Referenced by test_var_length_default_opaque(), and test_var_length_mesh_opaque().
{ ErrorCode rval; Core moab; Interface& mb = moab; create_mesh( mb ); const char data[] = { 'J', 'A', 'S', 'O', 'N' }; const int datalen = sizeof( data ); CHECK_EQUAL( 5, datalen ); // create tag Tag tag = 0; const void* default_val = mesh_value ? 0 : data; int default_val_size = mesh_value ? 0 : datalen; rval = mb.tag_get_handle( "opaque_tag", default_val_size, MB_TYPE_OPAQUE, tag, MB_TAG_DENSE | MB_TAG_VARLEN | MB_TAG_EXCL, default_val );CHECK_ERR( rval ); // if doing mesh tag, set it if( mesh_value ) { const void* ptrarr[] = { data }; const EntityHandle root = 0; rval = mb.tag_set_by_ptr( tag, &root, 1, ptrarr, &datalen );CHECK_ERR( rval ); } // write and read file Core moab2; Interface& mb2 = moab2; read_write( mesh_value ? "test_var_length_mesh_opaque.h5m" : "test_var_length_default_opaque.h5m", mb, mb2 ); compare_tags( "opaque_tag", mb, mb2 ); // get tag handles tag = 0; rval = mb2.tag_get_handle( "opaque_tag", 0, MB_TYPE_OPAQUE, tag );CHECK_ERR( rval ); // get tag data int tag_size = 0; const void* ptrs[1]; if( mesh_value ) { const EntityHandle root = 0; rval = mb2.tag_get_by_ptr( tag, &root, 1, ptrs, &tag_size );CHECK_ERR( rval ); } else { rval = mb2.tag_get_default_value( tag, ptrs[0], tag_size );CHECK_ERR( rval ); } // check size CHECK_EQUAL( datalen, tag_size ); CHECK( ptrs[0] != NULL ); // check values const char* tag_data = reinterpret_cast< const char* >( ptrs[0] ); for( int i = 0; i < datalen; ++i ) CHECK_EQUAL( data[i], tag_data[i] ); }
void test_global_value_common | ( | bool | mesh_value | ) |
Definition at line 271 of file h5varlen.cpp.
References moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, CHECK_REAL_EQUAL, compare_tags(), coord_tag, create_mesh(), ErrorCode, moab::Interface::get_coords(), moab::Interface::get_entities_by_type(), mb, MB_TAG_DENSE, MB_TAG_EXCL, MB_TAG_SPARSE, MB_TAG_VARLEN, MB_TYPE_DOUBLE, MB_TYPE_HANDLE, MBVERTEX, read_write(), size, moab::Range::size(), moab::Interface::tag_get_by_ptr(), moab::Interface::tag_get_default_value(), moab::Interface::tag_get_handle(), moab::Interface::tag_set_by_ptr(), and moab::Interface::type_from_handle().
Referenced by test_var_length_default_data(), and test_var_length_mesh_data().
{ Core moab; Interface& mb = moab; create_mesh( mb ); // get three vertices Range vertices; ErrorCode rval = mb.get_entities_by_type( 0, MBVERTEX, vertices );CHECK_ERR( rval ); CHECK( vertices.size() >= 3 ); EntityHandle handles[3]; Range::const_iterator i = vertices.begin(); handles[0] = *i; ++i; handles[1] = *i; ++i; handles[2] = *i; ++i; // get vertex coordinates double coords[9]; rval = mb.get_coords( handles, 3, coords );CHECK_ERR( rval ); // create tag to hold vertex data Tag handle_tag = 0; void* default_val = mesh_value ? 0 : handles; int default_val_size = mesh_value ? 0 : 3; rval = mb.tag_get_handle( "handle_tag", default_val_size, MB_TYPE_HANDLE, handle_tag, MB_TAG_DENSE | MB_TAG_VARLEN | MB_TAG_EXCL, default_val );CHECK_ERR( rval ); // create tag to hold vertex coordinates Tag coord_tag = 0; default_val = mesh_value ? 0 : coords; default_val_size = mesh_value ? 0 : 9; rval = mb.tag_get_handle( "coord_tag", default_val_size, MB_TYPE_DOUBLE, coord_tag, MB_TAG_SPARSE | MB_TAG_VARLEN | MB_TAG_EXCL, default_val );CHECK_ERR( rval ); // if doing mesh tag, set it if( mesh_value ) { int size = 3; const void* ptrarr[] = { handles }; const EntityHandle root = 0; rval = mb.tag_set_by_ptr( handle_tag, &root, 1, ptrarr, &size );CHECK_ERR( rval ); size = 9; ptrarr[0] = coords; rval = mb.tag_set_by_ptr( coord_tag, &root, 1, ptrarr, &size );CHECK_ERR( rval ); } // write and read file Core moab2; Interface& mb2 = moab2; read_write( mesh_value ? "test_var_length_mesh_data.h5m" : "test_var_length_default_data.h5m", mb, mb2 ); compare_tags( "handle_tag", mb, mb2 ); compare_tags( "coord_tag", mb, mb2 ); // get tag handles handle_tag = coord_tag = 0; rval = mb2.tag_get_handle( "handle_tag", 0, MB_TYPE_HANDLE, handle_tag );CHECK_ERR( rval ); rval = mb2.tag_get_handle( "coord_tag", 0, MB_TYPE_DOUBLE, coord_tag );CHECK_ERR( rval ); // get tag data int handle_tag_size = 0, coord_tag_size = 0; const void* ptrs[2]; if( mesh_value ) { const EntityHandle root = 0; rval = mb2.tag_get_by_ptr( handle_tag, &root, 1, ptrs, &handle_tag_size );CHECK_ERR( rval ); rval = mb2.tag_get_by_ptr( coord_tag, &root, 1, ptrs + 1, &coord_tag_size );CHECK_ERR( rval ); } else { rval = mb2.tag_get_default_value( handle_tag, ptrs[0], handle_tag_size );CHECK_ERR( rval ); rval = mb2.tag_get_default_value( coord_tag, ptrs[1], coord_tag_size );CHECK_ERR( rval ); } // check expected sizes CHECK_EQUAL( 3, handle_tag_size ); CHECK_EQUAL( 9, coord_tag_size ); CHECK( ptrs[0] != NULL ); CHECK( ptrs[1] != NULL ); // check valid handles const EntityHandle* handle_vals = reinterpret_cast< const EntityHandle* >( ptrs[0] ); CHECK( handle_vals[0] != 0 ); CHECK( handle_vals[1] != 0 ); CHECK( handle_vals[2] != 0 ); CHECK_EQUAL( MBVERTEX, mb2.type_from_handle( handle_vals[0] ) ); CHECK_EQUAL( MBVERTEX, mb2.type_from_handle( handle_vals[1] ) ); CHECK_EQUAL( MBVERTEX, mb2.type_from_handle( handle_vals[2] ) ); // check correct coordinate values const double* coord_vals = reinterpret_cast< const double* >( ptrs[1] ); rval = mb2.get_coords( handle_vals, 3, coords );CHECK_ERR( rval ); CHECK_REAL_EQUAL( coords[0], coord_vals[0], 1e-12 ); CHECK_REAL_EQUAL( coords[1], coord_vals[1], 1e-12 ); CHECK_REAL_EQUAL( coords[2], coord_vals[2], 1e-12 ); CHECK_REAL_EQUAL( coords[3], coord_vals[3], 1e-12 ); CHECK_REAL_EQUAL( coords[4], coord_vals[4], 1e-12 ); CHECK_REAL_EQUAL( coords[5], coord_vals[5], 1e-12 ); CHECK_REAL_EQUAL( coords[6], coord_vals[6], 1e-12 ); CHECK_REAL_EQUAL( coords[7], coord_vals[7], 1e-12 ); CHECK_REAL_EQUAL( coords[8], coord_vals[8], 1e-12 ); }
void test_huge_var_length | ( | ) |
Definition at line 537 of file h5varlen.cpp.
References CHECK_EQUAL, CHECK_ERR, CHECK_REAL_EQUAL, compare_tags(), create_mesh(), ErrorCode, moab::Interface::get_entities_by_handle(), keep_files, MB_TAG_EXCL, MB_TAG_SPARSE, MB_TAG_VARLEN, MB_TYPE_DOUBLE, moab::Interface::tag_get_handle(), moab::Interface::tag_set_by_ptr(), and moab::Interface::write_file().
Referenced by main().
{ ErrorCode rval; Core moab1, moab2; Interface &mb1 = moab1, &mb2 = moab2; Tag tag; Range::const_iterator i; create_mesh( mb1 ); rval = mb1.tag_get_handle( "test_tag", 0, MB_TYPE_DOUBLE, tag, MB_TAG_SPARSE | MB_TAG_VARLEN | MB_TAG_EXCL );CHECK_ERR( rval ); // Get all entities Range range; rval = mb1.get_entities_by_handle( 0, range );CHECK_ERR( rval ); // For each entity, if it is a vertex store its own handle // in its tag. Otherwise store the element connectivity list // in the tag. Skip entity sets. EntityHandle v1 = range[0]; // first vertex // huge data std::vector< double > dataArr; // larger than the buffer int N = 2000; dataArr.resize( N ); // size will be 8 * N > bufferSize = 10000 set by option during writing for( int j = 0; j < N; j++ ) dataArr[j] = j; const void* ptr = &dataArr[0]; rval = mb1.tag_set_by_ptr( tag, &v1, 1, &ptr, &N );CHECK_ERR( rval ); // second vertex, do a smaller N v1 = range[1]; int M = N - 5; ptr = &dataArr[2]; // start with 2 rval = mb1.tag_set_by_ptr( tag, &v1, 1, &ptr, &M );CHECK_ERR( rval ); // write with a smaller buffer, size controlled by option to test const char* writeOptions = "BUFFER_SIZE=4000;DEBUG_IO=5"; rval = mb1.write_file( "test_huge_var_tag.h5m", NULL, writeOptions );CHECK_ERR( rval ); rval = mb2.load_file( "test_huge_var_tag.h5m" );CHECK_ERR( rval ); compare_tags( "test_tag", mb1, mb2 ); // compare some values for the 2nd vertex Tag tag2; rval = mb2.tag_get_handle( "test_tag", tag2 );CHECK_ERR( rval ); EntityHandle vertex2 = 2; int len2; const void* ptr2; rval = mb2.tag_get_by_ptr( tag2, &vertex2, 1, &ptr2, &len2 );CHECK_ERR( rval ); CHECK_EQUAL( len2, M ); CHECK_REAL_EQUAL( dataArr[2], ( (double*)ptr2 )[0], 0.000000001 ); if( !keep_files ) remove( "test_huge_var_tag.h5m" );CHECK_ERR( rval ); }
void test_var_length_big_data | ( | ) |
Definition at line 207 of file h5varlen.cpp.
References moab::Range::begin(), calculate_big_value(), CHECK_EQUAL, CHECK_ERR, moab::Range::clear(), compare_tags(), create_mesh(), moab::Range::end(), ErrorCode, moab::Range::front(), moab::Interface::get_entities_by_type(), MB_TAG_EXCL, MB_TAG_SPARSE, MB_TAG_VARLEN, MB_TYPE_DOUBLE, MBVERTEX, read_write(), size, moab::Range::size(), moab::Interface::tag_get_handle(), moab::Interface::tag_set_by_ptr(), and moab::Interface::UNION.
Referenced by main().
{ ErrorCode rval; Core moab1, moab2; Interface &mb1 = moab1, &mb2 = moab2; Tag tag; create_mesh( mb1 ); rval = mb1.tag_get_handle( "test_tag", 0, MB_TYPE_DOUBLE, tag, MB_TAG_SPARSE | MB_TAG_VARLEN | MB_TAG_EXCL );CHECK_ERR( rval ); // choose 3 vertices upon which to set data Range range; rval = mb1.get_entities_by_type( 0, MBVERTEX, range );CHECK_ERR( rval ); EntityHandle verts[3] = { range.front(), *( range.begin() += range.size() / 3 ), *( range.begin() += 2 * range.size() / 3 ) }; // set 1-millon value tag data on three vertices std::vector< double > data( 1000000 ); for( int i = 0; i < 3; ++i ) { calculate_big_value( mb1, verts[i], data.size(), &data[0] ); const void* ptr = &data[0]; const int size = data.size(); rval = mb1.tag_set_by_ptr( tag, verts + i, 1, &ptr, &size );CHECK_ERR( rval ); } read_write( "test_var_length_big_data.h5m", mb1, mb2 ); compare_tags( "test_tag", mb1, mb2 ); // check 3 tagged vertices rval = mb2.tag_get_handle( "test_tag", 0, MB_TYPE_DOUBLE, tag );CHECK_ERR( rval ); range.clear(); rval = mb2.get_entities_by_type_and_tag( 0, MBVERTEX, &tag, 0, 1, range, Interface::UNION );CHECK_ERR( rval ); CHECK_EQUAL( (size_t)3, range.size() ); // check tag values for( Range::const_iterator i = range.begin(); i != range.end(); ++i ) { // calculate expected value const EntityHandle h = *i; calculate_big_value( mb2, h, data.size(), &data[0] ); // get actual value const void* ptr; int size; rval = mb2.tag_get_by_ptr( tag, &h, 1, &ptr, &size );CHECK_ERR( rval ); CHECK_EQUAL( data.size(), (size_t)size ); // compare values const double* act_data = reinterpret_cast< const double* >( ptr ); int wrong_count = 0; for( size_t j = 0; j < data.size(); ++j ) if( act_data[j] != data[j] ) ++wrong_count; CHECK_EQUAL( 0, wrong_count ); } }
void test_var_length_data | ( | ) |
Definition at line 181 of file h5varlen.cpp.
References create_mesh(), and test_var_length_data_common().
Referenced by main().
{ Core moab; create_mesh( moab ); test_var_length_data_common( "test_var_length_data.h5m", moab ); }
void test_var_length_data_big | ( | ) |
Definition at line 188 of file h5varlen.cpp.
References create_big_mesh(), and test_var_length_data_common().
Referenced by main().
{ Core moab; create_big_mesh( moab ); test_var_length_data_common( "test_var_length_data_big.h5m", moab ); }
void test_var_length_data_common | ( | const char * | filename, |
Interface & | mb1, | ||
bool | opaque = false |
||
) |
Definition at line 106 of file h5varlen.cpp.
References moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, moab::Range::clear(), compare_tags(), moab::Range::end(), entities, ErrorCode, moab::Interface::get_entities_by_handle(), moab::Interface::get_entities_by_type(), MB_TAG_EXCL, MB_TAG_SPARSE, MB_TAG_VARLEN, MB_TYPE_INTEGER, MB_TYPE_OPAQUE, MBENTITYSET, read_write(), size, moab::subtract(), moab::Interface::tag_get_by_ptr(), moab::Interface::tag_get_handle(), moab::Interface::tag_set_by_ptr(), and moab::Interface::type_from_handle().
Referenced by test_var_length_data(), test_var_length_data_big(), and test_var_length_opaque().
{ // create tag ErrorCode rval; Tag tag; DataType type = opaque ? MB_TYPE_OPAQUE : MB_TYPE_INTEGER; rval = mb1.tag_get_handle( "test_tag", 0, type, tag, MB_TAG_EXCL | MB_TAG_VARLEN | MB_TAG_SPARSE );CHECK_ERR( rval ); // get all entities Range entities; rval = mb1.get_entities_by_handle( 0, entities );CHECK_ERR( rval ); // Set tag data. // Tag data will be list of integer data as follows: // number of values (counting this value) // step, 2*step, 3*step, ... for( Range::const_iterator i = entities.begin(); i != entities.end(); ++i ) { EntityHandle h = *i; // generate some data to write int num_values = h % 6 + 1; EntityType etype = mb1.type_from_handle( h ); int step = ( h % 2 ) ? 1 + (int)etype : -1 - (int)etype; std::vector< int > tag_data( num_values, num_values ); for( int j = 1; j < num_values; ++j ) tag_data[j] = j * step; // set tag data const void* ptrarr[] = { &tag_data[0] }; if( opaque ) num_values *= sizeof( int ); rval = mb1.tag_set_by_ptr( tag, &h, 1, ptrarr, &num_values );CHECK_ERR( rval ); } // write and read tag data Core moab; Interface& mb2 = moab; read_write( filename, mb1, mb2 ); compare_tags( "test_tag", mb1, mb2 ); // get new tag handle tag = 0; rval = mb2.tag_get_handle( "test_tag", 0, type, tag );CHECK_ERR( rval ); // check consistency of tag values entities.clear(); mb2.get_entities_by_handle( 0, entities ); // remove sets created during read/write process Range sets; mb2.get_entities_by_type( 0, MBENTITYSET, sets ); entities = subtract( entities, sets ); for( Range::const_iterator i = entities.begin(); i != entities.end(); ++i ) { // get data const void* ptrarr[] = { NULL }; int size; rval = mb2.tag_get_by_ptr( tag, &*i, 1, ptrarr, &size );CHECK_ERR( rval ); if( opaque ) { CHECK_EQUAL( (size_t)0, size % sizeof( int ) ); size /= sizeof( int ); } const int* dataptr = reinterpret_cast< const int* >( ptrarr[0] ); CHECK( NULL != dataptr ); // check size CHECK( size > 0 ); CHECK_EQUAL( size, dataptr[0] ); // check other values if( size > 2 ) { int step = dataptr[1]; for( int j = 2; j < size; ++j ) CHECK_EQUAL( j * step, dataptr[j] ); } } }
void test_var_length_default_data | ( | ) |
Definition at line 382 of file h5varlen.cpp.
References test_global_value_common().
Referenced by main().
{ test_global_value_common( false ); }
void test_var_length_default_opaque | ( | ) |
Definition at line 451 of file h5varlen.cpp.
References test_global_opaque_common().
Referenced by main().
{ test_global_opaque_common( false ); }
void test_var_length_handle_tag | ( | ) |
Definition at line 456 of file h5varlen.cpp.
References moab::Range::begin(), CHECK_EQUAL, CHECK_ERR, moab::Range::clear(), compare_tags(), create_mesh(), moab::Range::end(), ErrorCode, moab::Interface::get_connectivity(), moab::Interface::get_entities_by_handle(), MB_TAG_EXCL, MB_TAG_SPARSE, MB_TAG_VARLEN, MB_TYPE_HANDLE, MBENTITYSET, MBVERTEX, read_write(), size, moab::Range::size(), t, moab::Interface::tag_get_handle(), moab::Interface::tag_set_by_ptr(), moab::Interface::type_from_handle(), and moab::Interface::UNION.
Referenced by main().
{ ErrorCode rval; Core moab1, moab2; Interface &mb1 = moab1, &mb2 = moab2; Tag tag; Range::const_iterator i; create_mesh( mb1 ); rval = mb1.tag_get_handle( "test_tag", 0, MB_TYPE_HANDLE, tag, MB_TAG_SPARSE | MB_TAG_VARLEN | MB_TAG_EXCL );CHECK_ERR( rval ); // Get all entities Range range; rval = mb1.get_entities_by_handle( 0, range );CHECK_ERR( rval ); // For each entity, if it is a vertex store its own handle // in its tag. Otherwise store the element connectivity list // in the tag. Skip entity sets. size_t num_tagged_entities = 0; for( i = range.begin(); i != range.end(); ++i ) { EntityHandle h = *i; EntityType type = mb1.type_from_handle( h ); if( type == MBVERTEX ) { const int size = 1; const void* ptr = &h; rval = mb1.tag_set_by_ptr( tag, &h, 1, &ptr, &size );CHECK_ERR( rval ); ++num_tagged_entities; } else if( type != MBENTITYSET ) { int size = 0; const EntityHandle* conn = 0; rval = mb1.get_connectivity( h, conn, size );CHECK_ERR( rval ); const void* ptr = conn; rval = mb1.tag_set_by_ptr( tag, &h, 1, &ptr, &size );CHECK_ERR( rval ); ++num_tagged_entities; } } read_write( "test_var_length_handle_tag.h5m", mb1, mb2 ); compare_tags( "test_tag", mb1, mb2 ); // check number of tagged entities rval = mb2.tag_get_handle( "test_tag", 0, MB_TYPE_HANDLE, tag );CHECK_ERR( rval ); range.clear(); for( EntityType t = MBVERTEX; t != MBENTITYSET; ++t ) { rval = mb2.get_entities_by_type_and_tag( 0, t, &tag, 0, 1, range, Interface::UNION );CHECK_ERR( rval ); } CHECK_EQUAL( num_tagged_entities, range.size() ); // check tag values for( i = range.begin(); i != range.end(); ++i ) { EntityHandle h = *i; const void* ptr; int size; rval = mb2.tag_get_by_ptr( tag, &h, 1, &ptr, &size );CHECK_ERR( rval ); const EntityHandle* handles = reinterpret_cast< const EntityHandle* >( ptr ); if( mb2.type_from_handle( h ) == MBVERTEX ) { CHECK_EQUAL( 1, size ); CHECK_EQUAL( h, *handles ); } else { int len; const EntityHandle* conn; rval = mb2.get_connectivity( h, conn, len );CHECK_ERR( rval ); CHECK_EQUAL( len, size ); for( int j = 0; j < len; ++j ) CHECK_EQUAL( conn[j], handles[j] ); } } }
void test_var_length_mesh_data | ( | ) |
Definition at line 377 of file h5varlen.cpp.
References test_global_value_common().
Referenced by main().
{ test_global_value_common( true ); }
void test_var_length_mesh_opaque | ( | ) |
Definition at line 446 of file h5varlen.cpp.
References test_global_opaque_common().
Referenced by main().
{ test_global_opaque_common( true ); }
void test_var_length_no_data | ( | ) |
Definition at line 92 of file h5varlen.cpp.
References CHECK_ERR, compare_tags(), create_mesh(), ErrorCode, MB_TAG_DENSE, MB_TAG_EXCL, MB_TAG_VARLEN, MB_TYPE_DOUBLE, read_write(), and moab::Interface::tag_get_handle().
Referenced by main().
{ ErrorCode rval; Core moab1, moab2; Interface &mb1 = moab1, &mb2 = moab2; Tag tag; create_mesh( mb1 ); rval = mb1.tag_get_handle( "test_tag", 0, MB_TYPE_DOUBLE, tag, MB_TAG_EXCL | MB_TAG_VARLEN | MB_TAG_DENSE );CHECK_ERR( rval ); read_write( "test_var_length_no_data.h5m", mb1, mb2 ); compare_tags( "test_tag", mb1, mb2 ); }
void test_var_length_opaque | ( | ) |
Definition at line 264 of file h5varlen.cpp.
References create_mesh(), and test_var_length_data_common().
Referenced by main().
{ Core moab; create_mesh( moab ); test_var_length_data_common( "test_var_length_opaque.h5m", moab, true ); }
bool keep_files = false [static] |
Definition at line 14 of file h5varlen.cpp.
Referenced by main(), read_write(), and test_huge_var_length().