MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include <ctime>
#include <cassert>
#include <iostream>
#include <sstream>
#include "moab/Core.hpp"
#include "moab/ReadUtilIface.hpp"
#include "EntitySequence.hpp"
#include "SequenceManager.hpp"
Go to the source code of this file.
Defines | |
#define | PRINT_SEQUENCE_COUNT |
#define | IS_BUILDING_MB |
#define | ARRSIZE(A) ( sizeof( A ) / sizeof( ( A )[0] ) ) |
Typedefs | |
typedef void(* | naf_t )() |
typedef void(* | iaf_t )(int) |
Functions | |
long * | permutation (long count) |
Generate random permutation of values in [0,count-1]. | |
void | init () |
Initialize global variables. | |
void | create_vertices_single () |
create vertices one at a time | |
void | create_vertices_block () |
create vertices in block using ReadUtilIface | |
void | create_elements_single () |
create elements one at a time | |
void | create_elements_block () |
create elements in block using ReadUtilIface | |
void | forward_order_query_vertices (int percent) |
calculate mean of all vertex coordinates | |
void | reverse_order_query_vertices (int percent) |
calculate mean of all vertex coordinates | |
void | random_order_query_vertices (int percent) |
calculate mean of all vertex coordinates | |
void | forward_order_query_elements (int percent) |
check all element connectivity for valid vertex handles | |
void | reverse_order_query_elements (int percent) |
check all element connectivity for valid vertex handles | |
void | random_order_query_elements (int percent) |
check all element connectivity for valid vertex handles | |
void | forward_order_query_element_verts (int percent) |
calculate centroid | |
void | reverse_order_query_element_verts (int percent) |
calculate centroid | |
void | random_order_query_element_verts (int percent) |
calculate centroid | |
void | forward_order_delete_vertices (int percent) |
delete x% of vertices | |
void | reverse_order_delete_vertices (int percent) |
delete x% of vertices | |
void | random_order_delete_vertices (int percent) |
delete x% of vertices | |
void | forward_order_delete_elements (int percent) |
delete x% of elements | |
void | reverse_order_delete_elements (int percent) |
delete x% of elements | |
void | random_order_delete_elements (int percent) |
delete x% of elements | |
void | create_missing_vertices (int percent) |
re-create deleted vertices | |
void | create_missing_elements (int percent) |
re-create deleted elements | |
unsigned | get_number_sequences (EntityType type) |
void | vertex_coords (long vert_index, double &x, double &y, double &z) |
Coordinates for ith vertex in structured hex mesh. | |
void | element_conn (long elem_index, EntityHandle conn[8]) |
Connectivity for ith hex in structured hex mesh. | |
bool | deleted_vert (long index, int percent) |
True if passed index is one of the x% to be deleted. | |
bool | deleted_elem (long index, int percent) |
True if passed index is one of the x% to be deleted. | |
void | delete_vert (long index, int percent) |
if (deleted_vert(index,percent)) delete vertex | |
void | delete_elem (long index, int percent) |
if (deleted_elem(index,percent)) delete element | |
void | usage () |
print usage and exit | |
std::string | ts (clock_t t) |
convert CPU time to string | |
void | TIME (const char *str, void(*func)()) |
run function, printing time spent | |
void | TIME_QRY (const char *str, void(*func)(int percent), int percent) |
run function query_repeat times, printing time spent | |
void | TIME_DEL (const char *str, void(*func)(int), int percent) |
run function with integer argument, printing time spent | |
void | delete_mesh () |
call MB::delete_mesh(). function so can be passed to TIME | |
void | do_test (int create_mode, int order, int percent) |
Run a single combination of test parameters. | |
void | parse_order (const char *str, std::vector< int > &list) |
void | parse_percent (const char *str, std::vector< int > &list) |
int | parse_positive_int (const char *str) |
void | check_default (std::vector< int > &list, const int *array, size_t array_len) |
int | main (int argc, char *argv[]) |
long | vert_index (long x, long y, long z) |
Variables | |
const bool | dump_mesh = false |
write mesh to vtk file | |
const int | default_intervals = 25 |
defaul interval count for cubic structured hex mesh | |
const int | default_query_count = 100 |
number of times to do each query set | |
const int | default_order [] = { 0, 1, 2 } |
const int | default_create [] = { 0, 1 } |
const int | default_delete [] = { 0, 10, 30, 50, 70, 90 } |
long | numSideInt |
long | numVert |
long | numElem |
total counts; | |
int | queryCount |
number of times to do each query set | |
Core | mb_core |
moab instance | |
Interface & | mb = mb_core |
moab instance | |
EntityHandle | vertStart |
EntityHandle | elemStart |
first handle | |
ReadUtilIface * | readTool = 0 |
long * | queryVertPermutation = 0 |
pupulated by init(): "random" order for vertices | |
long * | queryElemPermutation = 0 |
pupulated by init(): "random" order for elements | |
iaf_t | query_verts [3] = { &forward_order_query_vertices, &reverse_order_query_vertices, &random_order_query_vertices } |
iaf_t | query_elems [3] = { &forward_order_query_elements, &reverse_order_query_elements, &random_order_query_elements } |
iaf_t | query_elem_verts [3] |
iaf_t | delete_verts [3] |
iaf_t | delete_elems [3] |
const char * | order_strs [] = { "Forward", "Reverse", "Random" } |
#define ARRSIZE | ( | A | ) | ( sizeof( A ) / sizeof( ( A )[0] ) ) |
Definition at line 31 of file seqperf.cpp.
#define IS_BUILDING_MB |
Definition at line 12 of file seqperf.cpp.
#define PRINT_SEQUENCE_COUNT |
Definition at line 8 of file seqperf.cpp.
typedef void( * iaf_t)(int) |
Definition at line 120 of file seqperf.cpp.
typedef void( * naf_t)() |
Definition at line 119 of file seqperf.cpp.
void check_default | ( | std::vector< int > & | list, |
const int * | array, | ||
size_t | array_len | ||
) |
Definition at line 302 of file seqperf.cpp.
Referenced by main().
{
if( list.empty() ) std::copy( array, array + array_len, std::back_inserter( list ) );
}
void create_elements_block | ( | ) |
create elements in block using ReadUtilIface
Definition at line 486 of file seqperf.cpp.
References element_conn(), elemStart, ErrorCode, moab::ReadUtilIface::get_element_connect(), MBHEX, numElem, and readTool.
Referenced by do_test().
{ EntityHandle* conn = 0; ErrorCode rval = readTool->get_element_connect( numElem, 8, MBHEX, 0, elemStart, conn ); if( rval && !conn ) { assert( false ); abort(); } for( long i = 0; i < numElem; ++i ) element_conn( i, conn + 8 * i ); }
void create_elements_single | ( | ) |
create elements one at a time
Definition at line 465 of file seqperf.cpp.
References moab::Core::create_element(), element_conn(), elemStart, ErrorCode, mb, MBHEX, and numElem.
Referenced by do_test().
{ EntityHandle conn[8]; element_conn( 0, conn ); ErrorCode rval = mb.create_element( MBHEX, conn, 8, elemStart ); if( rval ) { assert( false ); abort(); } EntityHandle h; for( long i = 1; i < numElem; ++i ) { element_conn( i, conn ); rval = mb.create_element( MBHEX, conn, 8, h ); assert( !rval ); assert( h - elemStart == (EntityHandle)i ); } }
void create_missing_elements | ( | int | percent | ) |
re-create deleted elements
Definition at line 804 of file seqperf.cpp.
References moab::Core::create_element(), deleted_elem(), element_conn(), ErrorCode, mb, MBHEX, and numElem.
Referenced by do_test().
{ EntityHandle h; ErrorCode rval; EntityHandle conn[8]; for( long i = 0; i < numElem; ++i ) if( deleted_elem( i, percent ) ) { element_conn( i, conn ); rval = mb.create_element( MBHEX, conn, 8, h ); if( rval ) { assert( false ); abort(); } } }
void create_missing_vertices | ( | int | percent | ) |
re-create deleted vertices
Definition at line 787 of file seqperf.cpp.
References moab::Core::create_vertex(), deleted_vert(), ErrorCode, mb, MB_SUCCESS, numVert, and vertex_coords().
Referenced by do_test().
{ EntityHandle h; ErrorCode rval = MB_SUCCESS; if( rval ) { } // empty line to remove compiler warning double coords[3]; for( long i = 0; i < numVert; ++i ) if( deleted_vert( i, percent ) ) { vertex_coords( i, coords[0], coords[1], coords[2] ); rval = mb.create_vertex( coords, h ); assert( !rval ); } }
void create_vertices_block | ( | ) |
create vertices in block using ReadUtilIface
Definition at line 449 of file seqperf.cpp.
References ErrorCode, moab::ReadUtilIface::get_node_coords(), numVert, readTool, vertex_coords(), and vertStart.
Referenced by do_test().
{ std::vector< double* > arrays; ErrorCode rval = readTool->get_node_coords( 3, numVert, 0, vertStart, arrays ); if( rval || arrays.size() != 3 ) { assert( false ); abort(); } double *x = arrays[0], *y = arrays[1], *z = arrays[2]; assert( x && y && z ); for( long i = 0; i < numVert; ++i ) vertex_coords( i, *x++, *y++, *z++ ); }
void create_vertices_single | ( | ) |
create vertices one at a time
Definition at line 429 of file seqperf.cpp.
References moab::Core::create_vertex(), ErrorCode, mb, numVert, vertex_coords(), and vertStart.
Referenced by do_test().
{ double coords[3]; vertex_coords( 0, coords[0], coords[1], coords[2] ); ErrorCode rval = mb.create_vertex( coords, vertStart ); assert( !rval ); if( rval ) { } // empty line to remove compiler warning EntityHandle h; for( long i = 1; i < numVert; ++i ) { vertex_coords( i, coords[0], coords[1], coords[2] ); rval = mb.create_vertex( coords, h ); assert( !rval ); assert( h - vertStart == (EntityHandle)i ); } }
void delete_elem | ( | long | index, |
int | percent | ||
) | [inline] |
if (deleted_elem(index,percent)) delete element
Definition at line 836 of file seqperf.cpp.
References moab::Core::delete_entities(), deleted_elem(), elemStart, ErrorCode, and mb.
Referenced by forward_order_delete_elements(), random_order_delete_elements(), and reverse_order_delete_elements().
{ if( deleted_elem( index, percent ) ) { EntityHandle h = index + elemStart; ErrorCode rval = mb.delete_entities( &h, 1 ); if( rval ) { assert( false ); abort(); } } }
void delete_mesh | ( | ) |
call MB::delete_mesh(). function so can be passed to TIME
Definition at line 206 of file seqperf.cpp.
References moab::Core::delete_mesh(), and mb.
Referenced by do_test().
{ mb.delete_mesh(); }
void delete_vert | ( | long | index, |
int | percent | ||
) | [inline] |
if (deleted_vert(index,percent)) delete vertex
Definition at line 822 of file seqperf.cpp.
References moab::Core::delete_entities(), deleted_vert(), ErrorCode, mb, and vertStart.
Referenced by forward_order_delete_vertices(), random_order_delete_vertices(), and reverse_order_delete_vertices().
{ if( deleted_vert( index, percent ) ) { EntityHandle h = index + vertStart; ErrorCode rval = mb.delete_entities( &h, 1 ); if( rval ) { assert( false ); abort(); } } }
bool deleted_elem | ( | long | index, |
int | percent | ||
) | [inline] |
True if passed index is one of the x% to be deleted.
Definition at line 424 of file seqperf.cpp.
References numSideInt.
Referenced by create_missing_elements(), delete_elem(), random_order_query_element_verts(), and random_order_query_elements().
{ return index % numSideInt + 1 >= ( numSideInt + 1 ) * ( 100 - percent ) / 100; }
bool deleted_vert | ( | long | index, |
int | percent | ||
) | [inline] |
True if passed index is one of the x% to be deleted.
Definition at line 419 of file seqperf.cpp.
References numSideInt.
Referenced by create_missing_vertices(), delete_vert(), and random_order_query_vertices().
{ return index % ( numSideInt + 1 ) >= ( numSideInt + 1 ) * ( 100 - percent ) / 100; }
void do_test | ( | int | create_mode, |
int | order, | ||
int | percent | ||
) |
Run a single combination of test parameters.
create_mode | 0 == single, 1 == block |
order | 0 == forward, 1 == reverse, 2 == random |
percent | percent of entities to delete |
Definition at line 212 of file seqperf.cpp.
References create_elements_block(), create_elements_single(), create_missing_elements(), create_missing_vertices(), create_vertices_block(), create_vertices_single(), delete_elems, delete_mesh(), delete_verts, dump_mesh, moab::Core::get_number_entities_by_type(), get_number_sequences(), mb, MB_SUCCESS, MBHEX, MBVERTEX, order_strs, query_elem_verts, query_elems, query_verts, t, TIME, TIME_DEL(), TIME_QRY(), ts(), and moab::Core::write_file().
Referenced by main().
{ clock_t t = clock(); if( create_mode ) { std::cout << "Block Entity Creation (all entities in single block of memory)" << std::endl; TIME( " Creating initial vertices", create_vertices_block ); TIME( " Creating initial elements", create_elements_block ); if( dump_mesh && !percent && mb.write_file( "seqperf.vtk" ) == MB_SUCCESS ) std::cout << "Wrote mesh to file: seqperf.vtk" << std::endl; } else { std::cout << "Single Entity Creation (entities grouped in memory blocks of constant size)" << std::endl; TIME( " Creating initial vertices", create_vertices_single ); TIME( " Creating initial elements", create_elements_single ); } std::cout << order_strs[order] << " order with deletion of " << percent << "% of vertices and elements" << std::endl; TIME_DEL( " Deleting elements", delete_elems[order], percent ); TIME_DEL( " Deleting vertices", delete_verts[order], percent ); int num_vert = 0; int num_elem = 0; mb.get_number_entities_by_type( 0, MBVERTEX, num_vert ); mb.get_number_entities_by_type( 0, MBHEX, num_elem ); std::cout << " " << num_vert << " vertices and " << num_elem << " elements remaining" << std::endl; #ifdef PRINT_SEQUENCE_COUNT std::cout << " " << get_number_sequences( MBVERTEX ) << " vertex sequences and " << get_number_sequences( MBHEX ) << " element sequences." << std::endl; #endif TIME_QRY( " Querying vertex coordinates", query_verts[order], percent ); TIME_QRY( " Querying element connectivity", query_elems[order], percent ); TIME_QRY( " Querying element coordinates", query_elem_verts[order], percent ); TIME_DEL( " Re-creating vertices", create_missing_vertices, percent ); TIME_DEL( " Re-creating elements", create_missing_elements, percent ); TIME( " Clearing mesh instance", delete_mesh ); std::cout << "Total time for test: " << ts( clock() - t ) << std::endl << std::endl; }
void element_conn | ( | long | elem_index, |
EntityHandle | conn[8] | ||
) | [inline] |
Connectivity for ith hex in structured hex mesh.
Definition at line 404 of file seqperf.cpp.
References numSideInt, vert_index(), and vertStart.
Referenced by moab::HigherOrderFactory::add_center_node(), create_elements_block(), create_elements_single(), and create_missing_elements().
{ const long x = elem_index % numSideInt; const long y = ( elem_index / numSideInt ) % numSideInt; const long z = ( elem_index / numSideInt / numSideInt ); conn[0] = vertStart + vert_index( x, y, z ); conn[1] = vertStart + vert_index( x + 1, y, z ); conn[2] = vertStart + vert_index( x + 1, y + 1, z ); conn[3] = vertStart + vert_index( x, y + 1, z ); conn[4] = vertStart + vert_index( x, y, z + 1 ); conn[5] = vertStart + vert_index( x + 1, y, z + 1 ); conn[6] = vertStart + vert_index( x + 1, y + 1, z + 1 ); conn[7] = vertStart + vert_index( x, y + 1, z + 1 ); }
void forward_order_delete_elements | ( | int | percent | ) |
delete x% of elements
Definition at line 769 of file seqperf.cpp.
References delete_elem(), and numElem.
{ for( long i = 0; i < numElem; ++i ) delete_elem( i, percent ); }
void forward_order_delete_vertices | ( | int | percent | ) |
delete x% of vertices
Definition at line 751 of file seqperf.cpp.
References delete_vert(), and numVert.
{ for( long i = 0; i < numVert; ++i ) delete_vert( i, percent ); }
void forward_order_query_element_verts | ( | int | percent | ) |
calculate centroid
Definition at line 667 of file seqperf.cpp.
References elemStart, ErrorCode, moab::Core::get_connectivity(), moab::Core::get_coords(), mb, MB_SUCCESS, and numSideInt.
{ ErrorCode r = MB_SUCCESS; if( r ) { } // empty line to remove compiler warning const EntityHandle* conn; int len; long x, y, z; double coords[24]; const long elem_per_edge = numSideInt; const long deleted_x = ( numSideInt + 1 ) * ( 100 - percent ) / 100 - 1; EntityHandle h = elemStart; for( z = 0; z < elem_per_edge; ++z ) { for( y = 0; y < elem_per_edge; ++y ) { for( x = 0; x < deleted_x; ++x, ++h ) { r = mb.get_connectivity( h, conn, len ); assert( MB_SUCCESS == r ); assert( conn && 8 == len ); r = mb.get_coords( conn, len, coords ); assert( MB_SUCCESS == r ); } h += ( elem_per_edge - deleted_x ); } } }
void forward_order_query_elements | ( | int | percent | ) |
check all element connectivity for valid vertex handles
Definition at line 571 of file seqperf.cpp.
References elemStart, ErrorCode, moab::Core::get_connectivity(), mb, MB_SUCCESS, and numSideInt.
{ ErrorCode r; const EntityHandle* conn; int len; long x, y, z; const long elem_per_edge = numSideInt; const long deleted_x = ( numSideInt + 1 ) * ( 100 - percent ) / 100 - 1; EntityHandle h = elemStart; for( z = 0; z < elem_per_edge; ++z ) { for( y = 0; y < elem_per_edge; ++y ) { for( x = 0; x < deleted_x; ++x, ++h ) { r = mb.get_connectivity( h, conn, len ); assert( MB_SUCCESS == r ); if( r ) { } // empty line to remove compiler warning assert( conn && 8 == len ); } h += ( elem_per_edge - deleted_x ); } } }
void forward_order_query_vertices | ( | int | percent | ) |
calculate mean of all vertex coordinates
Definition at line 500 of file seqperf.cpp.
References ErrorCode, moab::Core::get_coords(), mb, MB_SUCCESS, numSideInt, and vertStart.
{ ErrorCode r; double coords[3]; long x, y, z; const long vert_per_edge = numSideInt + 1; const long deleted_x = ( numSideInt + 1 ) * ( 100 - percent ) / 100; EntityHandle h = vertStart; for( z = 0; z < vert_per_edge; ++z ) { for( y = 0; y < vert_per_edge; ++y ) { for( x = 0; x < deleted_x; ++x, ++h ) { r = mb.get_coords( &h, 1, coords ); if( MB_SUCCESS != r ) { assert( false ); abort(); } } h += ( vert_per_edge - deleted_x ); } } }
unsigned get_number_sequences | ( | EntityType | type | ) |
Definition at line 851 of file seqperf.cpp.
References moab::SequenceManager::entity_map(), moab::TypeSequenceManager::get_sequence_count(), mb_core, and moab::Core::sequence_manager().
Referenced by do_test().
{ #ifdef MB_ENTITY_SEQUENCE_HPP return mb_core.sequence_manager()->entity_map( type )->size(); #else return mb_core.sequence_manager()->entity_map( type ).get_sequence_count(); #endif }
void init | ( | ) |
Initialize global variables.
Definition at line 72 of file seqperf.cpp.
References ErrorCode, mb, numElem, numVert, permutation(), moab::Interface::query_interface(), queryElemPermutation, queryVertPermutation, and readTool.
{ ErrorCode rval = mb.query_interface( readTool ); if( rval || !readTool ) { assert( false ); abort(); } queryVertPermutation = permutation( numVert ); queryElemPermutation = permutation( numElem ); }
int main | ( | int | argc, |
char * | argv[] | ||
) |
Definition at line 307 of file seqperf.cpp.
References ARRSIZE, check_default(), default_create, default_delete, default_intervals, default_order, default_query_count, do_test(), init(), numElem, numSideInt, numVert, parse_order(), parse_percent(), parse_positive_int(), queryCount, queryElemPermutation, queryVertPermutation, t, ts(), and usage.
{ // Parse arguments std::vector< int > createList, orderList, deleteList; numSideInt = default_intervals; queryCount = default_query_count; for( int i = 1; i < argc; ++i ) { // check that arg is a '-' followed by a single character if( argv[i][0] != '-' || argv[i][1] == '\0' || argv[i][2] != '\0' ) usage(); const char flag = argv[i][1]; switch( flag ) { case 'b': createList.push_back( 1 ); break; case 's': createList.push_back( 0 ); break; default: if( ++i == argc ) usage(); switch( flag ) { case 'i': numSideInt = parse_positive_int( argv[i] ); break; case 'o': parse_order( argv[i], orderList ); break; case 'd': parse_percent( argv[i], deleteList ); break; case 'q': queryCount = parse_positive_int( argv[i] ); break; default: usage(); } } } check_default( createList, default_create, ARRSIZE( default_create ) ); check_default( orderList, default_order, ARRSIZE( default_order ) ); check_default( deleteList, default_delete, ARRSIZE( default_delete ) ); // Do some initialization. int numSideVert = numSideInt + 1; numVert = numSideVert * numSideVert * numSideVert; numElem = numSideInt * numSideInt * numSideInt; if( numVert / numSideVert / numSideVert != numSideVert ) // overflow usage(); init(); // Echo input args std::cout << numSideInt << "x" << numSideInt << "x" << numSideInt << " hex grid: " << numElem << " elements and " << numVert << " vertices" << std::endl; // Run tests std::vector< int >::const_iterator i, j, k; clock_t t = clock(); for( i = createList.begin(); i != createList.end(); ++i ) { for( j = deleteList.begin(); j != deleteList.end(); ++j ) { for( k = orderList.begin(); k != orderList.end(); ++k ) { do_test( *i, *k, *j ); } } } // Clean up std::cout << "TOTAL: " << ts( clock() - t ) << std::endl << std::endl; delete[] queryVertPermutation; delete[] queryElemPermutation; return 0; }
void parse_order | ( | const char * | str, |
std::vector< int > & | list | ||
) |
Definition at line 260 of file seqperf.cpp.
References usage.
Referenced by main().
{ if( str[0] == 'f' ) { if( strncmp( str, "forward", strlen( str ) ) != 0 ) usage(); list.push_back( 0 ); } else if( str[0] != 'r' ) usage(); else if( str[1] == 'e' ) { if( strncmp( str, "reverse", strlen( str ) ) != 0 ) usage(); list.push_back( 0 ); } else { if( strncmp( str, "random", strlen( str ) ) != 0 ) usage(); list.push_back( 0 ); } }
void parse_percent | ( | const char * | str, |
std::vector< int > & | list | ||
) |
Definition at line 281 of file seqperf.cpp.
References usage.
Referenced by main().
{ char* endptr; long p = strtol( str, &endptr, 0 ); if( !endptr || *endptr || p < 0 || p > 100 ) usage(); list.push_back( (int)p ); }
int parse_positive_int | ( | const char * | str | ) |
long* permutation | ( | long | count | ) |
Generate random permutation of values in [0,count-1].
Definition at line 46 of file seqperf.cpp.
Referenced by init().
{ srand( count ); long* array = new long[count]; for( long i = 0; i < count; ++i ) array[i] = i; for( long i = 0; i < count; ++i ) { long r = rand(); if( count > RAND_MAX ) { r += RAND_MAX * rand(); if( count / RAND_MAX > RAND_MAX ) { long t = (long)RAND_MAX * rand(); r += (long)RAND_MAX * t; } } std::swap( array[i], array[r % count] ); } return array; }
void random_order_delete_elements | ( | int | percent | ) |
delete x% of elements
Definition at line 781 of file seqperf.cpp.
References delete_elem(), numElem, and queryElemPermutation.
{ for( long i = 0; i < numElem; ++i ) delete_elem( queryElemPermutation[i], percent ); }
void random_order_delete_vertices | ( | int | percent | ) |
delete x% of vertices
Definition at line 763 of file seqperf.cpp.
References delete_vert(), numVert, and queryVertPermutation.
{ for( long i = 0; i < numVert; ++i ) delete_vert( queryVertPermutation[i], percent ); }
void random_order_query_element_verts | ( | int | percent | ) |
calculate centroid
Definition at line 729 of file seqperf.cpp.
References deleted_elem(), elemStart, ErrorCode, moab::Core::get_connectivity(), moab::Core::get_coords(), mb, MB_SUCCESS, numElem, and queryElemPermutation.
{ ErrorCode r = MB_SUCCESS; if( r ) { } // empty line to remove compiler warning const EntityHandle* conn; int len; double coords[24]; for( long i = 0; i < numElem; ++i ) { if( !deleted_elem( queryElemPermutation[i], percent ) ) { r = mb.get_connectivity( elemStart + queryElemPermutation[i], conn, len ); assert( MB_SUCCESS == r ); assert( conn && 8 == len ); r = mb.get_coords( conn, len, coords ); assert( MB_SUCCESS == r ); } } }
void random_order_query_elements | ( | int | percent | ) |
check all element connectivity for valid vertex handles
Definition at line 626 of file seqperf.cpp.
References deleted_elem(), elemStart, ErrorCode, moab::Core::get_connectivity(), mb, MB_SUCCESS, numElem, and queryElemPermutation.
{ ErrorCode r; const EntityHandle* conn; int len; for( long i = 0; i < numElem; ++i ) { if( !deleted_elem( queryElemPermutation[i], percent ) ) { r = mb.get_connectivity( elemStart + queryElemPermutation[i], conn, len ); assert( MB_SUCCESS == r ); if( r ) { } // empty line to remove compiler warning assert( conn && 8 == len ); } } }
void random_order_query_vertices | ( | int | percent | ) |
calculate mean of all vertex coordinates
Definition at line 552 of file seqperf.cpp.
References deleted_vert(), ErrorCode, moab::Core::get_coords(), mb, MB_SUCCESS, numVert, queryVertPermutation, and vertStart.
{ ErrorCode r; EntityHandle h; double coords[3]; for( long i = 0; i < numVert; ++i ) { if( !deleted_vert( queryVertPermutation[i], percent ) ) { h = vertStart + queryVertPermutation[i]; r = mb.get_coords( &h, 1, coords ); assert( MB_SUCCESS == r ); if( r ) { } // empty line to remove compiler warning } } }
void reverse_order_delete_elements | ( | int | percent | ) |
delete x% of elements
Definition at line 775 of file seqperf.cpp.
References delete_elem(), and numElem.
{ for( long i = numElem - 1; i >= 0; --i ) delete_elem( i, percent ); }
void reverse_order_delete_vertices | ( | int | percent | ) |
delete x% of vertices
Definition at line 757 of file seqperf.cpp.
References delete_vert(), and numVert.
{ for( long i = numVert - 1; i >= 0; --i ) delete_vert( i, percent ); }
void reverse_order_query_element_verts | ( | int | percent | ) |
calculate centroid
Definition at line 697 of file seqperf.cpp.
References elemStart, ErrorCode, moab::Core::get_connectivity(), moab::Core::get_coords(), mb, MB_SUCCESS, numElem, and numSideInt.
{ ErrorCode r = MB_SUCCESS; if( r ) { } // empty statement to remove compiler warning const EntityHandle* conn; int len; long x, y, z; double coords[24]; const long elem_per_edge = numSideInt; const long deleted_x = ( numSideInt + 1 ) * ( 100 - percent ) / 100 - 1; EntityHandle h = elemStart + numElem - 1; ; for( z = elem_per_edge - 1; z >= 0; --z ) { for( y = elem_per_edge - 1; y >= 0; --y ) { h -= ( elem_per_edge - deleted_x ); for( x = deleted_x - 1; x >= 0; --x, --h ) { r = mb.get_connectivity( h, conn, len ); assert( MB_SUCCESS == r ); assert( conn && 8 == len ); r = mb.get_coords( conn, len, coords ); assert( MB_SUCCESS == r ); } } } }
void reverse_order_query_elements | ( | int | percent | ) |
check all element connectivity for valid vertex handles
Definition at line 598 of file seqperf.cpp.
References elemStart, ErrorCode, moab::Core::get_connectivity(), mb, MB_SUCCESS, numElem, and numSideInt.
{ ErrorCode r; const EntityHandle* conn; int len; long x, y, z; const long elem_per_edge = numSideInt; const long deleted_x = ( numSideInt + 1 ) * ( 100 - percent ) / 100 - 1; EntityHandle h = elemStart + numElem - 1; ; for( z = elem_per_edge - 1; z >= 0; --z ) { for( y = elem_per_edge - 1; y >= 0; --y ) { h -= ( elem_per_edge - deleted_x ); for( x = deleted_x - 1; x >= 0; --x, --h ) { r = mb.get_connectivity( h, conn, len ); assert( MB_SUCCESS == r ); if( r ) { } // empty line to remove compiler warning assert( conn && 8 == len ); } } } }
void reverse_order_query_vertices | ( | int | percent | ) |
calculate mean of all vertex coordinates
Definition at line 526 of file seqperf.cpp.
References ErrorCode, moab::Core::get_coords(), mb, MB_SUCCESS, numSideInt, numVert, and vertStart.
{ ErrorCode r; double coords[3]; long x, y, z; const long vert_per_edge = numSideInt + 1; const long deleted_x = ( numSideInt + 1 ) * ( 100 - percent ) / 100; EntityHandle h = vertStart + numVert - 1; ; for( z = vert_per_edge - 1; z >= 0; --z ) { for( y = vert_per_edge - 1; y >= 0; --y ) { h -= ( vert_per_edge - deleted_x ); for( x = deleted_x - 1; x >= 0; --x, --h ) { r = mb.get_coords( &h, 1, coords ); assert( MB_SUCCESS == r ); if( r ) { } // empty line to remove compiler warning } } } }
void TIME | ( | const char * | str, |
void(*)() | func | ||
) |
void TIME_DEL | ( | const char * | str, |
void(*)(int) | func, | ||
int | percent | ||
) |
void TIME_QRY | ( | const char * | str, |
void(*)(int percent) | func, | ||
int | percent | ||
) |
run function query_repeat times, printing time spent
Definition at line 187 of file seqperf.cpp.
References queryCount, t, and ts().
Referenced by do_test().
{ std::cout << str << "... " << std::flush; clock_t t = clock(); for( int i = 0; i < queryCount; ++i ) ( *func )( percent ); std::cout << ts( clock() - t ) << std::endl; }
std::string ts | ( | clock_t | t | ) |
convert CPU time to string
Definition at line 170 of file seqperf.cpp.
Referenced by do_test(), moab::HiReconstruction::eval_vander_bivar_cmf(), moab::HiReconstruction::eval_vander_univar_cmf(), main(), obbstat_write(), TIME(), TIME_DEL(), and TIME_QRY().
{ std::ostringstream s; s << ( (double)t ) / CLOCKS_PER_SEC << 's'; return s.str(); }
void usage | ( | ) |
print usage and exit
Definition at line 151 of file seqperf.cpp.
References ARRSIZE, default_delete, default_intervals, and default_query_count.
{ std::cerr << "Usage: seqperf [-i <intervals>] [-o <order>] [-d <percent>] [-b|-s] [-q <count>]" << std::endl; std::cerr << " -i specify size of cubic structured hex mesh in intervals. Default: " << default_intervals << std::endl; std::cerr << " -o one of \"forward\", \"reverse\", or \"random\". May be specified multiple " "times. Default is all." << std::endl; std::cerr << " -d percent of entities to delete. May be specified multiple times. Default is {"; for( unsigned i = 0; i < ARRSIZE( default_delete ) - 1; ++i ) std::cerr << default_delete[i] << ","; std::cerr << default_delete[ARRSIZE( default_delete ) - 1] << "}" << std::endl; std::cerr << " -b block creation of mesh" << std::endl; std::cerr << " -s single entity mesh creation" << std::endl; std::cerr << " -q number of times to repeat queries. Default: " << default_query_count << std::endl; exit( 1 ); }
long vert_index | ( | long | x, |
long | y, | ||
long | z | ||
) | [inline] |
Definition at line 398 of file seqperf.cpp.
References numSideInt.
Referenced by element_conn(), and moab::ReadNASTRAN::load_file().
{ const long vs = numSideInt + 1; return x + vs * ( y + vs * z ); }
void vertex_coords | ( | long | vert_index, |
double & | x, | ||
double & | y, | ||
double & | z | ||
) | [inline] |
Coordinates for ith vertex in structured hex mesh.
Definition at line 390 of file seqperf.cpp.
References numSideInt.
Referenced by create_missing_vertices(), create_vertices_block(), create_vertices_single(), main(), moab::SimplexTemplateRefiner::refine_3_simplex(), setup_mesh(), and test_build_from_pts().
{ const long vs = numSideInt + 1; x = vert_index % vs; y = ( vert_index / vs ) % vs; z = ( vert_index / vs / vs ); }
const int default_create[] = { 0, 1 } |
Definition at line 29 of file seqperf.cpp.
Referenced by main().
const int default_delete[] = { 0, 10, 30, 50, 70, 90 } |
Definition at line 30 of file seqperf.cpp.
const int default_intervals = 25 |
defaul interval count for cubic structured hex mesh
Definition at line 26 of file seqperf.cpp.
const int default_order[] = { 0, 1, 2 } |
Definition at line 28 of file seqperf.cpp.
Referenced by main().
const int default_query_count = 100 |
number of times to do each query set
Definition at line 27 of file seqperf.cpp.
Definition at line 132 of file seqperf.cpp.
Referenced by do_test().
Definition at line 129 of file seqperf.cpp.
Referenced by do_test().
const bool dump_mesh = false |
first handle
Definition at line 40 of file seqperf.cpp.
Referenced by create_elements_block(), create_elements_single(), delete_elem(), forward_order_query_element_verts(), forward_order_query_elements(), random_order_query_element_verts(), random_order_query_elements(), reverse_order_query_element_verts(), and reverse_order_query_elements().
moab instance
Definition at line 39 of file seqperf.cpp.
moab instance
Definition at line 38 of file seqperf.cpp.
Referenced by get_number_sequences(), and main().
long numElem |
total counts;
Definition at line 34 of file seqperf.cpp.
Referenced by create_elements_block(), create_elements_single(), create_missing_elements(), forward_order_delete_elements(), init(), main(), random_order_delete_elements(), random_order_query_element_verts(), random_order_query_elements(), reverse_order_delete_elements(), reverse_order_query_element_verts(), and reverse_order_query_elements().
long numSideInt |
Definition at line 34 of file seqperf.cpp.
Referenced by deleted_elem(), deleted_vert(), element_conn(), forward_order_query_element_verts(), forward_order_query_elements(), forward_order_query_vertices(), main(), reverse_order_query_element_verts(), reverse_order_query_elements(), reverse_order_query_vertices(), vert_index(), and vertex_coords().
long numVert |
Definition at line 34 of file seqperf.cpp.
Referenced by create_missing_vertices(), create_vertices_block(), create_vertices_single(), forward_order_delete_vertices(), init(), main(), random_order_delete_vertices(), random_order_query_vertices(), reverse_order_delete_vertices(), and reverse_order_query_vertices().
const char* order_strs[] = { "Forward", "Reverse", "Random" } |
Definition at line 135 of file seqperf.cpp.
Referenced by do_test().
{ &forward_order_query_element_verts, &reverse_order_query_element_verts, &random_order_query_element_verts }
Definition at line 126 of file seqperf.cpp.
Referenced by do_test().
iaf_t query_elems[3] = { &forward_order_query_elements, &reverse_order_query_elements, &random_order_query_elements } |
Definition at line 124 of file seqperf.cpp.
Referenced by do_test().
iaf_t query_verts[3] = { &forward_order_query_vertices, &reverse_order_query_vertices, &random_order_query_vertices } |
Definition at line 122 of file seqperf.cpp.
Referenced by do_test().
int queryCount |
number of times to do each query set
Definition at line 35 of file seqperf.cpp.
Referenced by main(), and TIME_QRY().
long* queryElemPermutation = 0 |
pupulated by init(): "random" order for elements
Definition at line 43 of file seqperf.cpp.
Referenced by init(), main(), random_order_delete_elements(), random_order_query_element_verts(), and random_order_query_elements().
long* queryVertPermutation = 0 |
pupulated by init(): "random" order for vertices
Definition at line 42 of file seqperf.cpp.
Referenced by init(), main(), random_order_delete_vertices(), and random_order_query_vertices().
ReadUtilIface* readTool = 0 |
Definition at line 41 of file seqperf.cpp.
Referenced by create_elements_block(), create_vertices_block(), and init().
Definition at line 40 of file seqperf.cpp.
Referenced by create_vertices_block(), create_vertices_single(), delete_vert(), element_conn(), forward_order_query_vertices(), random_order_query_vertices(), and reverse_order_query_vertices().