|
MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include <iostream>#include <cassert>#include <ctime>#include <vector>#include "moab/Core.hpp"#include "moab/Range.hpp"#include "moab/MeshTopoUtil.hpp"#include "moab/HalfFacetRep.hpp"#include "moab/NestedRefine.hpp"#include "../TestUtil.hpp"#include "moab/CpuTimer.hpp"
Include dependency graph for umr_perf.cpp:Go to the source code of this file.
Classes | |
| struct | mesh_mem |
Enumerations | |
| enum | OUTTYPE { TIME = 0, MEM, BOTH } |
Functions | |
| void | handle_error_code (ErrorCode rv, int &number_failed, int &number_successful) |
| ErrorCode | umr_perf_test (Core *mb, int *level_degrees, int num_levels, OUTTYPE output) |
| ErrorCode | create_simple_mesh (Core *mb, EntityType type) |
| ErrorCode | test_mesh (EntityType type, int *level_degrees, int num_level) |
| ErrorCode | test_1D () |
| ErrorCode | test_2D () |
| ErrorCode | test_3D () |
| ErrorCode | perf_inmesh (const char *filename, int *level_degrees, int num_levels, OUTTYPE output) |
| int | main (int argc, char *argv[]) |
Variables | |
| int | number_tests_successful = 0 |
| int | number_tests_failed = 0 |
| enum OUTTYPE |
| ErrorCode create_simple_mesh | ( | Core * | mb, |
| EntityType | type | ||
| ) |
Definition at line 338 of file umr_perf.cpp.
References moab::Interface::create_element(), moab::Interface::create_vertex(), moab::error(), ErrorCode, mb, MB_SUCCESS, MBEDGE, MBHEX, MBQUAD, MBTET, and MBTRI.
Referenced by test_entities(), and test_mesh().
{
ErrorCode error;
Interface* mbImpl = mb;
if( type == MBEDGE )
{
const double coords[] = { 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0,
4, 1, 0, 3, 1, 0, 2, 1, 0, 1, 1, 0, 0, 1, 0 };
const size_t num_vtx = sizeof( coords ) / sizeof( double ) / 3;
const int conn[] = { 1, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 0 };
const size_t num_elems = sizeof( conn ) / sizeof( int ) / 2;
EntityHandle verts[num_vtx], edges[num_elems];
for( size_t i = 0; i < num_vtx; ++i )
{
error = mbImpl->create_vertex( coords + 3 * i, verts[i] );
if( error != MB_SUCCESS ) return error;
}
for( size_t i = 0; i < num_elems; ++i )
{
EntityHandle c[2];
c[0] = verts[conn[2 * i]];
c[1] = verts[conn[2 * i + 1]];
error = mbImpl->create_element( MBEDGE, c, 2, edges[i] );
if( error != MB_SUCCESS ) return error;
}
}
else if( type == MBTRI )
{
const double coords[] = { 0, 0, 0, 1, 0, 0, 2, 0, 0, 2.5, 1, 0, 1.5, 1, 0, 0.5, 1,
0, -0.5, 1, 0, -0.5, -1, 0, 0.5, -1, 0, 1.5, -1, 0, 2.5, -1, 0 };
const size_t num_vtx = sizeof( coords ) / sizeof( double ) / 3;
const int conn[] = { 0, 5, 6, 0, 1, 5, 1, 4, 5, 1, 2, 4, 2, 3, 4,
7, 8, 0, 8, 1, 0, 8, 9, 1, 9, 2, 1, 9, 10, 2 };
const size_t num_elems = sizeof( conn ) / sizeof( int ) / 3;
EntityHandle verts[num_vtx], faces[num_elems];
for( size_t i = 0; i < num_vtx; ++i )
{
error = mbImpl->create_vertex( coords + 3 * i, verts[i] );
if( error != MB_SUCCESS ) return error;
}
for( size_t i = 0; i < num_elems; ++i )
{
EntityHandle c[3];
for( int j = 0; j < 3; j++ )
c[j] = verts[conn[3 * i + j]];
error = mbImpl->create_element( MBTRI, c, 3, faces[i] );
if( error != MB_SUCCESS ) return error;
}
}
else if( type == MBQUAD )
{
const double coords[] = { 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 0, 1, 0, 1, 1, 0, 2, 1, 0,
3, 1, 0, 4, 1, 0, 5, 1, 0, 0, 2, 0, 1, 2, 0, 2, 2, 0, 3, 2, 0, 4, 2, 0, 5, 2, 0 };
const size_t num_vtx = sizeof( coords ) / sizeof( double ) / 3;
const int conn[] = { 0, 1, 7, 6, 1, 2, 8, 7, 2, 3, 9, 8, 3, 4, 10, 9, 4, 5, 11, 10,
6, 7, 13, 12, 7, 8, 14, 13, 8, 9, 15, 14, 9, 10, 16, 15, 10, 11, 17, 16 };
const size_t num_elems = sizeof( conn ) / sizeof( int ) / 4;
EntityHandle verts[num_vtx], faces[num_elems];
for( size_t i = 0; i < num_vtx; ++i )
{
error = mbImpl->create_vertex( coords + 3 * i, verts[i] );
if( error != MB_SUCCESS ) return error;
}
for( size_t i = 0; i < num_elems; ++i )
{
EntityHandle c[4];
for( int j = 0; j < 4; j++ )
c[j] = verts[conn[4 * i + j]];
error = mbImpl->create_element( MBQUAD, c, 4, faces[i] );
if( error != MB_SUCCESS ) return error;
}
}
else if( type == MBTET )
{
const double coords[] = { 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0, 0, 0, -1, 0, 0, 0, 1 };
const size_t num_vtx = sizeof( coords ) / sizeof( double ) / 3;
const int conn[] = { 0, 1, 2, 5, 3, 0, 2, 5, 4, 1, 0, 5, 4, 0, 3, 5 };
const size_t num_elems = sizeof( conn ) / sizeof( int ) / 4;
EntityHandle verts[num_vtx], cells[num_elems];
for( size_t i = 0; i < num_vtx; ++i )
{
error = mbImpl->create_vertex( coords + 3 * i, verts[i] );
if( error != MB_SUCCESS ) return error;
}
for( size_t i = 0; i < num_elems; ++i )
{
EntityHandle c[4];
for( int j = 0; j < 4; j++ )
c[j] = verts[conn[4 * i + j]];
error = mbImpl->create_element( MBTET, c, 4, cells[i] );
if( error != MB_SUCCESS ) return error;
}
}
else if( type == MBHEX )
{
const double coords[] = { 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 1, 0, 1, 1, 0, 2, 1, 0, 0, 2, 0, 1, 2, 0, 2, 2, 0,
0, 0, 1, 1, 0, 1, 2, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 0, 2, 1, 1, 2, 1, 2, 2, 1 };
const size_t num_vtx = sizeof( coords ) / sizeof( double ) / 3;
const int conn[] = { 0, 1, 4, 3, 9, 10, 13, 12, 1, 2, 5, 4, 10, 11, 14, 13,
3, 4, 7, 6, 12, 13, 16, 15, 4, 5, 8, 7, 13, 14, 17, 16 };
const size_t num_elems = sizeof( conn ) / sizeof( int ) / 8;
EntityHandle verts[num_vtx], cells[num_elems];
for( size_t i = 0; i < num_vtx; ++i )
{
error = mbImpl->create_vertex( coords + 3 * i, verts[i] );
if( error != MB_SUCCESS ) return error;
}
for( size_t i = 0; i < num_elems; ++i )
{
EntityHandle c[8];
for( int j = 0; j < 8; j++ )
c[j] = verts[conn[8 * i + j]];
error = mbImpl->create_element( MBHEX, c, 8, cells[i] );
if( error != MB_SUCCESS ) return error;
}
}
return MB_SUCCESS;
}
| void handle_error_code | ( | ErrorCode | rv, |
| int & | number_failed, | ||
| int & | number_successful | ||
| ) |
Definition at line 67 of file umr_perf.cpp.
References MB_SUCCESS, MPI_COMM_WORLD, and rank.
{
if( rv == MB_SUCCESS )
{
#ifdef MOAB_HAVE_MPI
int rank = 0;
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
if( rank == 0 ) std::cout << "Success";
#else
std::cout << "Success";
#endif
number_successful++;
}
else
{
std::cout << "Failure";
number_failed++;
}
}
| int main | ( | int | argc, |
| char * | argv[] | ||
| ) |
Definition at line 661 of file umr_perf.cpp.
References ErrorCode, filename, handle_error_code(), MEM, MPI_COMM_WORLD, number_tests_failed, number_tests_successful, output, perf_inmesh(), rank, test_1D(), test_2D(), test_3D(), and TIME.
{
#ifdef MOAB_HAVE_MPI
MPI_Init( &argc, &argv );
int nprocs, rank;
MPI_Comm_size( MPI_COMM_WORLD, &nprocs );
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
#endif
#ifdef MOAB_HAVE_MPI
if( rank == 0 ) std::cout << " para_umr_perf: ";
#else
std::cout << "umr_perf:";
#endif
if( argc == 1 )
{
ErrorCode result;
result = test_1D();
handle_error_code( result, number_tests_failed, number_tests_successful );
std::cout << "\n";
result = test_2D();
handle_error_code( result, number_tests_failed, number_tests_successful );
std::cout << "\n";
result = test_3D();
handle_error_code( result, number_tests_failed, number_tests_successful );
std::cout << "\n";
}
else if( argc == 2 )
{
const char* filename = argv[1];
ErrorCode result;
OUTTYPE output = MEM;
if( output == MEM )
{
int deg[3] = { 2, 2, 2 };
int len = sizeof( deg ) / sizeof( int );
result = perf_inmesh( filename, deg, len, output );
handle_error_code( result, number_tests_failed, number_tests_successful );
std::cout << "\n";
deg[0] = 3;
deg[1] = 3;
deg[2] = 3;
result = perf_inmesh( filename, deg, len, output );
handle_error_code( result, number_tests_failed, number_tests_successful );
std::cout << "\n";
/* deg[0] = 5; deg[1] = 5; deg[2] = 5;
result = perf_inmesh(filename, deg, len, output);
handle_error_code(result, number_tests_failed, number_tests_successful);
std::cout<<"\n";*/
}
else if( output == TIME )
{
for( int L = 0; L < 3; L++ )
{
int* level_degrees = new int[L + 1];
for( int i = 0; i < L + 1; i++ )
{
level_degrees[i] = 3;
}
result = perf_inmesh( filename, level_degrees, L + 1, output );
handle_error_code( result, number_tests_failed, number_tests_successful );
std::cout << "\n";
delete[] level_degrees;
}
}
}
else
{
std::cerr << "Usage: " << argv[0] << " [filename]" << std::endl;
return 1;
}
#ifdef MOAB_HAVE_MPI
MPI_Finalize();
#endif
return number_tests_failed;
}
| ErrorCode perf_inmesh | ( | const char * | filename, |
| int * | level_degrees, | ||
| int | num_levels, | ||
| OUTTYPE | output | ||
| ) |
Definition at line 631 of file umr_perf.cpp.
References CHECK_ERR, moab::error(), ErrorCode, moab::Interface::load_file(), mb, MB_SUCCESS, MPI_COMM_WORLD, read_options, and umr_perf_test().
Referenced by main().
{
ErrorCode error;
Core mb;
Interface* mbImpl = &mb;
#ifdef MOAB_HAVE_MPI
int procs = 1;
MPI_Comm_size( MPI_COMM_WORLD, &procs );
if( procs > 1 )
{
read_options = "PARALLEL=READ_PART;PARTITION=PARALLEL_PARTITION;PARALLEL_RESOLVE_SHARED_ENTS;";
error = mbImpl->load_file( filename, 0, read_options.c_str() );CHECK_ERR( error );
}
else if( procs == 1 )
{
#endif
error = mbImpl->load_file( filename );CHECK_ERR( error );
#ifdef MOAB_HAVE_MPI
}
#endif
// OUTTYPE output = MEM;
error = umr_perf_test( &mb, level_degrees, num_levels, output );
if( error != MB_SUCCESS ) return error;
return MB_SUCCESS;
}
Definition at line 498 of file umr_perf.cpp.
References moab::error(), ErrorCode, MB_SUCCESS, MBEDGE, and test_mesh().
Referenced by main().
{
ErrorCode error;
std::cout << std::endl;
std::cout << "EntityType = MBEDGE" << std::endl;
std::cout << "Deg = 2" << std::endl;
int deg[7] = { 5, 5, 2, 2, 2, 2, 2 };
int len = sizeof( deg ) / sizeof( int );
error = test_mesh( MBEDGE, deg, len );
if( error != MB_SUCCESS ) return error;
std::cout << std::endl;
std::cout << "Deg = 3" << std::endl;
deg[4] = 3;
deg[5] = 3;
deg[6] = 3;
error = test_mesh( MBEDGE, deg, len );
if( error != MB_SUCCESS ) return error;
std::cout << std::endl;
std::cout << "Deg = 5" << std::endl;
deg[4] = 5;
deg[5] = 5;
deg[6] = 5;
error = test_mesh( MBEDGE, deg, len );
if( error != MB_SUCCESS ) return error;
return MB_SUCCESS;
}
Definition at line 529 of file umr_perf.cpp.
References moab::error(), ErrorCode, MB_SUCCESS, MBQUAD, MBTRI, and test_mesh().
Referenced by main().
{
ErrorCode error;
EntityType type = MBTRI;
std::cout << std::endl;
std::cout << "EntityType = MBTRI" << std::endl;
std::cout << "Deg = 2" << std::endl;
int deg[5] = { 5, 2, 2, 2, 2 };
int len = sizeof( deg ) / sizeof( int );
error = test_mesh( type, deg, len );
if( error != MB_SUCCESS ) return error;
std::cout << std::endl;
std::cout << "Deg = 3" << std::endl;
deg[2] = 3;
deg[3] = 3;
deg[4] = 3;
error = test_mesh( type, deg, len );
if( error != MB_SUCCESS ) return error;
std::cout << std::endl;
std::cout << "Deg = 5" << std::endl;
deg[2] = 5;
deg[3] = 5;
deg[4] = 5;
error = test_mesh( type, deg, len );
if( error != MB_SUCCESS ) return error;
type = MBQUAD;
std::cout << std::endl;
std::cout << "EntityType = MBQUAD" << std::endl;
std::cout << "Deg = 2" << std::endl;
deg[2] = 2;
deg[3] = 2;
deg[4] = 2;
error = test_mesh( type, deg, len );
if( error != MB_SUCCESS ) return error;
std::cout << std::endl;
std::cout << "Deg = 3" << std::endl;
deg[2] = 3;
deg[3] = 3;
deg[4] = 3;
error = test_mesh( type, deg, len );
if( error != MB_SUCCESS ) return error;
std::cout << std::endl;
std::cout << "Deg = 5" << std::endl;
deg[2] = 5;
deg[3] = 5;
deg[4] = 5;
error = test_mesh( type, deg, len );
if( error != MB_SUCCESS ) return error;
return MB_SUCCESS;
}
Definition at line 588 of file umr_perf.cpp.
References moab::error(), ErrorCode, MB_SUCCESS, MBHEX, MBTET, and test_mesh().
Referenced by main().
{
ErrorCode error;
EntityType type = MBTET;
std::cout << std::endl;
std::cout << "EntityType = MBTET" << std::endl;
std::cout << "Deg = 2" << std::endl;
int deg[6] = { 2, 2, 2, 2, 2, 2 };
int len = sizeof( deg ) / sizeof( int );
error = test_mesh( type, deg, len );
if( error != MB_SUCCESS ) return error;
std::cout << std::endl;
std::cout << "Deg = 3" << std::endl;
deg[3] = 3;
deg[4] = 3;
deg[5] = 3;
error = test_mesh( type, deg, len );
if( error != MB_SUCCESS ) return error;
type = MBHEX;
std::cout << std::endl;
std::cout << "EntityType = MBHEX" << std::endl;
std::cout << "Deg = 2" << std::endl;
deg[3] = 2;
deg[4] = 2;
deg[5] = 2;
error = test_mesh( type, deg, len );
if( error != MB_SUCCESS ) return error;
std::cout << std::endl;
std::cout << "Deg = 3" << std::endl;
deg[3] = 3;
deg[4] = 3;
deg[5] = 3;
error = test_mesh( type, deg, len );
if( error != MB_SUCCESS ) return error;
return MB_SUCCESS;
}
Definition at line 483 of file umr_perf.cpp.
References BOTH, create_simple_mesh(), moab::error(), ErrorCode, mb, MB_SUCCESS, output, and umr_perf_test().
{
ErrorCode error;
Core mb;
error = create_simple_mesh( &mb, type );
if( error != MB_SUCCESS ) return error;
OUTTYPE output = BOTH;
error = umr_perf_test( &mb, level_degrees, num_level, output );
if( error != MB_SUCCESS ) return error;
return MB_SUCCESS;
}
| ErrorCode umr_perf_test | ( | Core * | mb, |
| int * | level_degrees, | ||
| int | num_levels, | ||
| OUTTYPE | output | ||
| ) |
Definition at line 87 of file umr_perf.cpp.
References moab::Range::begin(), BOTH, CHECK_ERR, dim, moab::Range::end(), mesh_mem::entity_storage, moab::error(), ErrorCode, moab::Interface::estimated_memory_use(), moab::NestedRefine::generate_mesh_hierarchy(), moab::NestedRefine::get_connectivity(), moab::Interface::get_connectivity(), moab::NestedRefine::get_coordinates(), moab::Interface::get_coords(), moab::Interface::get_entities_by_dimension(), moab::Interface::get_entities_by_type(), mb, MB_SUCCESS, MBVERTEX, MEM, moab::Range::size(), TIME, moab::CpuTimer::time_elapsed(), mesh_mem::total_storage, and mesh_mem::vertex_storage.
Referenced by perf_inmesh(), and test_mesh().
{
ErrorCode error;
Interface* mbImpl = mb;
mesh_mem* umem = new mesh_mem[num_levels + 2];
CpuTimer* mt = new CpuTimer;
double time_start, time_avg, time_total;
// Create ranges of entities in the initial mesh
Range inverts, inedges, infaces, incells;
error = mbImpl->get_entities_by_dimension( 0, 0, inverts );
error = mbImpl->get_entities_by_dimension( 0, 1, inedges );
error = mbImpl->get_entities_by_dimension( 0, 2, infaces );
error = mbImpl->get_entities_by_dimension( 0, 3, incells );
Range init_ents;
int dim = 0;
if( inedges.size() )
{
dim = 1;
init_ents = inedges;
}
else if( infaces.size() )
{
dim = 2;
init_ents = infaces;
}
else if( incells.size() )
{
dim = 3;
init_ents = incells;
}
std::cout << std::endl;
std::cout << "Initial Mesh Size: "
<< "NV = " << inverts.size() << ", NE = " << init_ents.size() << std::endl;
if( output == MEM || output == BOTH )
{
// Storage Costs before mesh hierarchy generation
/* std::cout<<std::endl;
unsigned long long sTotS, sTAS, sES, sAES, sAS, sAAS, sTS, sATS;
sTotS = sTAS = sES = sAES = sAS = sAAS = sTS = sATS = 0;
mbImpl->estimated_memory_use(NULL, 0, &sTotS, &sTAS, &sES, &sAES, &sAS, &sAAS, NULL, 0,
&sTS, &sATS);
umem[0].total_storage = sTotS;
umem[0].amortized_total_storage = sTAS;
umem[0].entity_storage = sES;
umem[0].amortized_entity_storage = sAES;
umem[0].adjacency_storage = sAS;
umem[0].amortized_adjacency_storage = sAAS;
umem[0].tag_storage = sTS;
umem[0].amortized_tag_storage = sATS;*/
unsigned long long vTotS, vTAS, vES, vAES, vAS, vAAS, vTS, vATS;
vTotS = vTAS = vES = vAES = vAS = vAAS = vTS = vATS = 0;
mbImpl->estimated_memory_use( inverts, &vTotS, &vTAS, &vES, &vAES, &vAS, &vAAS, NULL, 0, &vTS, &vATS );
unsigned long long eTotS, eTAS, eES, eAES, eAS, eAAS, eTS, eATS;
eTotS = eTAS = eES = eAES = eAS = eAAS = eTS = eATS = 0;
mbImpl->estimated_memory_use( init_ents, &eTotS, &eTAS, &eES, &eAES, &eAS, &eAAS, NULL, 0, &eTS, &eATS );
umem[0].total_storage = vTotS + eTotS;
umem[0].vertex_storage = vES;
umem[0].entity_storage = eES;
// umem[0].tag_storage = vTS+eTS;
std::cout << "MEMORY STORAGE:: Initial Mesh" << std::endl;
std::cout << std::endl;
std::cout << "Total storage = " << umem[0].total_storage << std::endl;
std::cout << "Vertex storage = " << umem[0].vertex_storage << std::endl;
std::cout << "Entity storage = " << umem[0].entity_storage << std::endl;
// std::cout<<"Tag storage = "<< umem[0].tag_storage<<std::endl;
/* std::cout<<"Total storage = "<<umem[0].total_storage<<std::endl;
std::cout<<"Total amortized storage = "<< umem[0].amortized_total_storage<<std::endl;
std::cout<<"Entity storage = "<<umem[0].entity_storage<<std::endl;
std::cout<<"Amortized entity storage = "<<umem[0].amortized_entity_storage<<std::endl;
std::cout<<"Adjacency storage = "<< umem[0].adjacency_storage <<std::endl;
std::cout<<"Amortized adjacency storage = "<<umem[0].amortized_adjacency_storage
<<std::endl; std::cout<<"Tag storage = "<< umem[0].tag_storage<<std::endl;
std::cout<<"Amortized tag storage = "<<umem[0].amortized_tag_storage <<std::endl;*/
std::cout << std::endl;
}
// Create an hm object and generate the hierarchy
std::cout << "Creating a hm object" << std::endl;
NestedRefine uref( mb );
std::vector< EntityHandle > set;
std::cout << "Starting hierarchy generation" << std::endl;
time_start = mt->time_elapsed();
error = uref.generate_mesh_hierarchy( num_levels, level_degrees, set );CHECK_ERR( error );
time_total = mt->time_elapsed() - time_start;
std::cout << "Finished hierarchy generation" << std::endl;
if( output == TIME || output == BOTH )
{
std::cout << "Total time in secs:: generate mesh hierarchy:: L = " << num_levels << " :: " << time_total
<< std::endl;
std::cout << std::endl;
}
// Loop over each mesh level and check its topological properties
for( int l = 0; l < num_levels; l++ )
{
// Get the current mesh level using its meshset
Range verts, ents;
error = mbImpl->get_entities_by_type( set[l + 1], MBVERTEX, verts );CHECK_ERR( error );
error = mbImpl->get_entities_by_dimension( set[l + 1], dim, ents );CHECK_ERR( error );
std::cout << "Mesh size for level " << l + 1 << " :: deg = " << level_degrees[l] << " :: NV = " << verts.size()
<< ", NE = " << ents.size() << std::endl;
if( output == MEM || output == BOTH )
{
// Storage Costs
std::cout << std::endl;
unsigned long long vTotS, vTAS, vES, vAES, vAS, vAAS, vTS, vATS;
vTotS = vTAS = vES = vAES = vAS = vAAS = vTS = vATS = 0;
mbImpl->estimated_memory_use( verts, &vTotS, &vTAS, &vES, &vAES, &vAS, &vAAS, NULL, 0, &vTS, &vATS );
unsigned long long eTotS, eTAS, eES, eAES, eAS, eAAS, eTS, eATS;
eTotS = eTAS = eES = eAES = eAS = eAAS = eTS = eATS = 0;
mbImpl->estimated_memory_use( ents, &eTotS, &eTAS, &eES, &eAES, &eAS, &eAAS, NULL, 0, &eTS, &eATS );
umem[l + 1].total_storage = vTotS + eTotS;
umem[l + 1].vertex_storage = vES;
umem[l + 1].entity_storage = eES;
// umem[l+1].tag_storage = vTS+eTS;
/* umem[l+1].total_storage = vTotS+eTotS;
umem[l+1].amortized_total_storage = vTAS+eTAS;
umem[l+1].entity_storage = vES+eES;
umem[l+1].amortized_entity_storage = vAES+eAES;
umem[l+1].adjacency_storage = vAS+eAS;
umem[l+1].amortized_adjacency_storage = vAAS+eAAS;
umem[l+1].tag_storage = vTS+eTS;
umem[l+1].amortized_tag_storage = vATS+eATS;*/
std::cout << "MEMORY STORAGE:: Mesh level " << l + 1 << std::endl;
std::cout << std::endl;
std::cout << "Total storage = " << umem[l + 1].total_storage << std::endl;
std::cout << "Vertex storage = " << umem[l + 1].vertex_storage << std::endl;
std::cout << "Entity storage = " << umem[l + 1].entity_storage << std::endl;
// std::cout<<"Tag storage = "<< umem[l+1].tag_storage<<std::endl;
/* std::cout<<"Total storage = "<<umem[l+1].total_storage<<std::endl;
std::cout<<"Total amortized storage = "<<
umem[l+1].amortized_total_storage<<std::endl; std::cout<<"Entity storage =
"<<umem[l+1].entity_storage<<std::endl; std::cout<<"Amortized entity storage =
"<<umem[l+1].amortized_entity_storage<<std::endl; std::cout<<"Adjacency storage = "<<
umem[l+1].adjacency_storage <<std::endl; std::cout<<"Amortized adjacency storage =
"<<umem[l+1].amortized_adjacency_storage <<std::endl; std::cout<<"Tag storage = "<<
umem[l+1].tag_storage<<std::endl; std::cout<<"Amortized tag storage =
"<<umem[l+1].amortized_tag_storage <<std::endl;*/
std::cout << std::endl;
}
if( output == BOTH )
{
// Loop over all vertices and get their coordinates
time_start = mt->time_elapsed();
for( Range::iterator i = verts.begin(); i != verts.end(); ++i )
{
double coords[3];
EntityHandle vid = *i;
error = uref.get_coordinates( &vid, 1, (int)l, &coords[0] );CHECK_ERR( error );
}
time_total = mt->time_elapsed() - time_start;
time_avg = time_total / (double)verts.size();
std::cout << "Class NR :: OPERATION:: get_coordinates"
<< " :: Time_total = " << time_total << " :: Time_avg = " << time_avg << std::endl;
time_start = mt->time_elapsed();
for( Range::iterator i = verts.begin(); i != verts.end(); ++i )
{
double coords[3];
EntityHandle vid = *i;
error = mbImpl->get_coords( &vid, 1, &coords[0] );CHECK_ERR( error );
}
time_total = mt->time_elapsed() - time_start;
time_avg = time_total / (double)verts.size();
std::cout << "Class Core :: OPERATION:: get_coordinates"
<< " :: Time_total = " << time_total << " :: Time_avg = " << time_avg << std::endl;
// Loop over all entities and get their connectivity
time_start = mt->time_elapsed();
for( Range::iterator i = ents.begin(); i != ents.end(); ++i )
{
std::vector< EntityHandle > conn;
error = uref.get_connectivity( *i, l, conn );CHECK_ERR( error );
}
time_total = mt->time_elapsed() - time_start;
time_avg = time_total / (double)ents.size();
std::cout << std::endl;
std::cout << "Class NR :: OPERATION:: get_connectivity"
<< " :: Time_total = " << time_total << " :: Time_avg = " << time_avg << std::endl;
time_start = mt->time_elapsed();
for( Range::iterator i = ents.begin(); i != ents.end(); ++i )
{
std::vector< EntityHandle > conn;
error = mbImpl->get_connectivity( &*i, 1, conn );CHECK_ERR( error );
}
time_total = mt->time_elapsed() - time_start;
time_avg = time_total / (double)ents.size();
std::cout << "Class Core :: OPERATION:: get_connectivity"
<< " :: Time_total = " << time_total << " :: Time_avg = " << time_avg << std::endl;
std::cout << std::endl;
}
}
/* if (output == MEM || output == BOTH){
unsigned long long sTotS, sTAS, sES, sAES, sAS, sAAS, sTS, sATS;
sTotS = sTAS = sES = sAES = sAS = sAAS = sTS = sATS = 0;
mbImpl->estimated_memory_use(NULL, 0, &sTotS, &sTAS, &sES, &sAES, &sAS, &sAAS, NULL, 0,
&sTS, &sATS);
umem[num_levels+1].total_storage = sTotS;
umem[num_levels+1].amortized_total_storage = sTAS;
umem[num_levels+1].entity_storage = sES;
umem[num_levels+1].amortized_entity_storage = sAES;
umem[num_levels+1].adjacency_storage = sAS;
umem[num_levels+1].amortized_adjacency_storage = sAAS;
umem[num_levels+1].tag_storage = sTS;
umem[num_levels+1].amortized_tag_storage = sATS;
std::cout<<"MEMORY STORAGE:: WHOLE MESH HIERARCHY"<<std::endl;
std::cout<<std::endl;
std::cout<<"Total storage = "<<umem[num_levels+1].total_storage<<std::endl;
std::cout<<"Total amortized storage = "<<
umem[num_levels+1].amortized_total_storage<<std::endl; std::cout<<"Entity storage =
"<<umem[num_levels+1].entity_storage<<std::endl; std::cout<<"Amortized entity storage =
"<<umem[num_levels+1].amortized_entity_storage<<std::endl; std::cout<<"Adjacency storage =
"<< umem[num_levels+1].adjacency_storage <<std::endl; std::cout<<"Amortized adjacency storage
= "<<umem[num_levels+1].amortized_adjacency_storage <<std::endl; std::cout<<"Tag storage =
"<< umem[num_levels+1].tag_storage<<std::endl; std::cout<<"Amortized tag storage =
"<<umem[num_levels+1].amortized_tag_storage <<std::endl; std::cout<<std::endl;
}*/
return MB_SUCCESS;
}
| int number_tests_failed = 0 |
Definition at line 29 of file umr_perf.cpp.
| int number_tests_successful = 0 |
Definition at line 28 of file umr_perf.cpp.