|
MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include "TestUtil.hpp"#include "moab/Core.hpp"#include "moab/ParallelComm.hpp"#include "moab/ProgOptions.hpp"#include "MBParallelConventions.h"#include "moab/ReadUtilIface.hpp"#include "MBTagConventions.hpp"#include <sstream>
Include dependency graph for mpastrvpart.cpp:Go to the source code of this file.
Functions | |
| void | test_read_onevar_trivial () |
| void | test_read_onevar_trivial_no_mixed_elements () |
| void | test_read_mesh_parallel_trivial () |
| void | test_read_mesh_parallel_trivial_no_mixed_elements () |
| void | test_gather_onevar_on_rank0 () |
| void | test_gather_onevar_on_rank1 () |
| void | test_multiple_loads_of_same_file () |
| void | test_multiple_loads_of_same_file_no_mixed_elements () |
| void | read_one_cell_var (bool rcbzoltan, bool no_mixed_elements) |
| void | read_mesh_parallel (bool rcbzoltan, bool no_mixed_elements) |
| void | gather_one_cell_var (int gather_set_rank) |
| void | multiple_loads_of_same_file (bool no_mixed_elements) |
| int | main (int argc, char *argv[]) |
| void | test_read_onevar_rcbzoltan () |
| void | test_read_onevar_rcbzoltan_no_mixed_elements () |
| void | test_read_mesh_parallel_rcbzoltan () |
| void | test_read_mesh_parallel_rcbzoltan_no_mixed_elements () |
Variables | |
| std::string | example = "unittest/io/mpasx1.642.t.2.nc" |
| std::string | read_options |
| const double | eps = 1e-20 |
| void gather_one_cell_var | ( | int | gather_set_rank | ) |
| int main | ( | int | argc, |
| char * | argv[] | ||
| ) |
Definition at line 44 of file mpastrvpart.cpp.
References RUN_TEST, test_gather_onevar_on_rank0(), test_gather_onevar_on_rank1(), test_multiple_loads_of_same_file(), test_multiple_loads_of_same_file_no_mixed_elements(), test_read_mesh_parallel_rcbzoltan(), test_read_mesh_parallel_rcbzoltan_no_mixed_elements(), test_read_mesh_parallel_trivial(), test_read_mesh_parallel_trivial_no_mixed_elements(), test_read_onevar_rcbzoltan(), test_read_onevar_rcbzoltan_no_mixed_elements(), test_read_onevar_trivial(), and test_read_onevar_trivial_no_mixed_elements().
{
MPI_Init( &argc, &argv );
int result = 0;
result += RUN_TEST( test_read_onevar_trivial );
result += RUN_TEST( test_read_onevar_trivial_no_mixed_elements );
#if defined( MOAB_HAVE_MPI ) && defined( MOAB_HAVE_ZOLTAN )
result += RUN_TEST( test_read_onevar_rcbzoltan );
result += RUN_TEST( test_read_onevar_rcbzoltan_no_mixed_elements );
#endif
result += RUN_TEST( test_read_mesh_parallel_trivial );
result += RUN_TEST( test_read_mesh_parallel_trivial_no_mixed_elements );
#if defined( MOAB_HAVE_MPI ) && defined( MOAB_HAVE_ZOLTAN )
result += RUN_TEST( test_read_mesh_parallel_rcbzoltan );
result += RUN_TEST( test_read_mesh_parallel_rcbzoltan_no_mixed_elements );
#endif
result += RUN_TEST( test_gather_onevar_on_rank0 );
result += RUN_TEST( test_gather_onevar_on_rank1 );
result += RUN_TEST( test_multiple_loads_of_same_file );
result += RUN_TEST( test_multiple_loads_of_same_file_no_mixed_elements );
MPI_Finalize();
return result;
}
| void multiple_loads_of_same_file | ( | bool | no_mixed_elements | ) |
Definition at line 492 of file mpastrvpart.cpp.
References CHECK_EQUAL, CHECK_ERR, CHECK_REAL_EQUAL, moab::Interface::create_meshset(), eps, ErrorCode, example, moab::Interface::get_entities_by_type(), moab::ParallelComm::get_pcomm(), moab::Interface::load_file(), MB_TYPE_DOUBLE, MBEDGE, MBPOLYGON, MBVERTEX, MESHSET_SET, moab::ParallelComm::proc_config(), moab::ProcConfig::proc_rank(), moab::ProcConfig::proc_size(), moab::Range::psize(), read_options, moab::Range::size(), moab::Interface::tag_get_data(), and moab::Interface::tag_get_handle().
{
Core moab;
Interface& mb = moab;
// Need a file set for nomesh to work right
EntityHandle file_set;
ErrorCode rval;
rval = mb.create_meshset( MESHSET_SET, file_set );CHECK_ERR( rval );
// Read first only header information, no mesh, no variable
read_options = "PARALLEL=READ_PART;PARTITION;NOMESH;VARIABLE=;PARTITION_METHOD=TRIVIAL";
if( no_mixed_elements ) read_options += ";NO_MIXED_ELEMENTS";
rval = mb.load_file( example.c_str(), &file_set, read_options.c_str() );CHECK_ERR( rval );
// Create mesh, no variable
read_options = "PARALLEL=READ_PART;PARTITION;PARALLEL_RESOLVE_SHARED_ENTS;PARTITION_METHOD="
"TRIVIAL;VARIABLE=";
if( no_mixed_elements ) read_options += ";NO_MIXED_ELEMENTS";
rval = mb.load_file( example.c_str(), &file_set, read_options.c_str() );CHECK_ERR( rval );
// Read variable ke at timestep 0, no mesh
read_options = "PARALLEL=READ_PART;PARTITION;PARTITION_METHOD=TRIVIAL;NOMESH;VARIABLE=ke;TIMESTEP=0";
if( no_mixed_elements ) read_options += ";NO_MIXED_ELEMENTS";
rval = mb.load_file( example.c_str(), &file_set, read_options.c_str() );CHECK_ERR( rval );
Range local_verts;
rval = mb.get_entities_by_type( file_set, MBVERTEX, local_verts );CHECK_ERR( rval );
Range local_edges;
rval = mb.get_entities_by_type( file_set, MBEDGE, local_edges );CHECK_ERR( rval );
Range local_cells;
rval = mb.get_entities_by_type( file_set, MBPOLYGON, local_cells );CHECK_ERR( rval );
ParallelComm* pcomm = ParallelComm::get_pcomm( &mb, 0 );
int procs = pcomm->proc_config().proc_size();
int rank = pcomm->proc_config().proc_rank();
// Make check runs this test on two processors
if( 2 == procs )
{
CHECK_EQUAL( (size_t)321, local_cells.size() );
// Check tag for cell variable ke at timestep 0
Tag ke_tag0;
rval = mb.tag_get_handle( "ke0", 1, MB_TYPE_DOUBLE, ke_tag0 );CHECK_ERR( rval );
// Get ke0 tag values on 3 local cells
EntityHandle cell_ents[] = { local_cells[0], local_cells[160], local_cells[320] };
double ke0_val[3];
rval = mb.tag_get_data( ke_tag0, cell_ents, 3, ke0_val );CHECK_ERR( rval );
if( 0 == rank )
{
CHECK_EQUAL( (size_t)1120, local_verts.size() );
CHECK_EQUAL( (size_t)1438, local_edges.size() );
CHECK_EQUAL( (size_t)1, local_cells.psize() );
CHECK_REAL_EQUAL( 15.001, ke0_val[0], eps );
CHECK_REAL_EQUAL( 16.161, ke0_val[1], eps );
CHECK_REAL_EQUAL( 16.321, ke0_val[2], eps );
}
else if( 1 == rank )
{
CHECK_EQUAL( (size_t)1122, local_verts.size() );
CHECK_EQUAL( (size_t)1444, local_edges.size() );
CHECK_EQUAL( (size_t)1, local_cells.psize() );
CHECK_REAL_EQUAL( 16.322, ke0_val[0], eps );
CHECK_REAL_EQUAL( 16.482, ke0_val[1], eps );
CHECK_REAL_EQUAL( 16.642, ke0_val[2], eps );
}
}
}
| void read_mesh_parallel | ( | bool | rcbzoltan, |
| bool | no_mixed_elements | ||
| ) |
Definition at line 256 of file mpastrvpart.cpp.
References moab::ParallelComm::check_all_shared_handles(), CHECK_EQUAL, CHECK_ERR, ErrorCode, example, moab::ParallelComm::filter_pstatus(), moab::Interface::get_entities_by_type(), moab::ParallelComm::get_pcomm(), moab::Interface::load_file(), mb, MBEDGE, MBPOLYGON, MBVERTEX, moab::ProcConfig::proc_comm(), moab::ParallelComm::proc_config(), moab::ProcConfig::proc_rank(), moab::ProcConfig::proc_size(), moab::Range::psize(), PSTATUS_NOT, PSTATUS_NOT_OWNED, rank, read_options, moab::Range::size(), and moab::Interface::write_file().
{
Core moab;
Interface& mb = moab;
read_options = "PARALLEL=READ_PART;PARTITION_METHOD=TRIVIAL;PARALLEL_RESOLVE_SHARED_ENTS;VARIABLE=";
if( rcbzoltan )
read_options = "PARALLEL=READ_PART;PARTITION_METHOD=RCBZOLTAN;PARALLEL_RESOLVE_SHARED_ENTS;VARIABLE=";
if( no_mixed_elements ) read_options += ";NO_MIXED_ELEMENTS";
ErrorCode rval = mb.load_file( example.c_str(), NULL, read_options.c_str() );CHECK_ERR( rval );
ParallelComm* pcomm = ParallelComm::get_pcomm( &mb, 0 );
int procs = pcomm->proc_config().proc_size();
int rank = pcomm->proc_config().proc_rank();
rval = pcomm->check_all_shared_handles();CHECK_ERR( rval );
// Get local vertices
Range local_verts;
rval = mb.get_entities_by_type( 0, MBVERTEX, local_verts );CHECK_ERR( rval );
int verts_num = local_verts.size();
if( 2 == procs )
{
if( rcbzoltan )
{
if( 0 == rank )
CHECK_EQUAL( 685, verts_num );
else if( 1 == rank )
CHECK_EQUAL( 685, verts_num ); // Not owned vertices included
}
else
{
if( 0 == rank )
CHECK_EQUAL( 1120, verts_num );
else if( 1 == rank )
CHECK_EQUAL( 1122, verts_num ); // Not owned vertices included
}
}
rval = pcomm->filter_pstatus( local_verts, PSTATUS_NOT_OWNED, PSTATUS_NOT );CHECK_ERR( rval );
verts_num = local_verts.size();
if( 2 == procs )
{
if( rcbzoltan )
{
if( 0 == rank )
CHECK_EQUAL( 685, verts_num );
else if( 1 == rank )
CHECK_EQUAL( 595, verts_num ); // Not owned vertices excluded
}
else
{
if( 0 == rank )
CHECK_EQUAL( 1120, verts_num );
else if( 1 == rank )
CHECK_EQUAL( 160, verts_num ); // Not owned vertices excluded
}
}
// Get local edges
Range local_edges;
rval = mb.get_entities_by_type( 0, MBEDGE, local_edges );CHECK_ERR( rval );
int edges_num = local_edges.size();
if( 2 == procs )
{
if( rcbzoltan )
{
if( 0 == rank )
CHECK_EQUAL( 1005, edges_num );
else if( 1 == rank )
CHECK_EQUAL( 1005, edges_num ); // Not owned edges included
}
else
{
if( 0 == rank )
CHECK_EQUAL( 1438, edges_num );
else if( 1 == rank )
CHECK_EQUAL( 1444, edges_num ); // Not owned edges included
}
}
rval = pcomm->filter_pstatus( local_edges, PSTATUS_NOT_OWNED, PSTATUS_NOT );CHECK_ERR( rval );
edges_num = local_edges.size();
if( 2 == procs )
{
if( rcbzoltan )
{
if( 0 == rank )
CHECK_EQUAL( 1005, edges_num );
else if( 1 == rank )
CHECK_EQUAL( 915, edges_num ); // Not owned edges excluded
}
else
{
if( 0 == rank )
CHECK_EQUAL( 1438, edges_num );
else if( 1 == rank )
CHECK_EQUAL( 482, edges_num ); // Not owned edges excluded
}
}
// Get local cells
Range local_cells;
rval = mb.get_entities_by_type( 0, MBPOLYGON, local_cells );CHECK_ERR( rval );
int cells_num = local_cells.size();
if( 2 == procs )
{
CHECK_EQUAL( 321, cells_num );
CHECK_EQUAL( (size_t)1, local_cells.psize() );
}
rval = pcomm->filter_pstatus( local_cells, PSTATUS_NOT_OWNED, PSTATUS_NOT );CHECK_ERR( rval );
cells_num = local_cells.size();
if( 2 == procs )
{
CHECK_EQUAL( 321, cells_num );
CHECK_EQUAL( (size_t)1, local_cells.psize() );
}
std::cout << "proc: " << rank << " verts:" << verts_num << "\n";
int total_verts_num;
MPI_Reduce( &verts_num, &total_verts_num, 1, MPI_INT, MPI_SUM, 0, pcomm->proc_config().proc_comm() );
if( 0 == rank )
{
std::cout << "total vertices: " << total_verts_num << "\n";
CHECK_EQUAL( 1280, total_verts_num );
}
std::cout << "proc: " << rank << " edges:" << edges_num << "\n";
int total_edges_num;
MPI_Reduce( &edges_num, &total_edges_num, 1, MPI_INT, MPI_SUM, 0, pcomm->proc_config().proc_comm() );
if( 0 == rank )
{
std::cout << "total edges: " << total_edges_num << "\n";
CHECK_EQUAL( 1920, total_edges_num );
}
std::cout << "proc: " << rank << " cells:" << cells_num << "\n";
int total_cells_num;
MPI_Reduce( &cells_num, &total_cells_num, 1, MPI_INT, MPI_SUM, 0, pcomm->proc_config().proc_comm() );
if( 0 == rank )
{
std::cout << "total cells: " << total_cells_num << "\n";
CHECK_EQUAL( 642, total_cells_num );
}
#ifdef MOAB_HAVE_HDF5_PARALLEL
std::string write_options( "PARALLEL=WRITE_PART;" );
std::string output_file = "test_mpas";
if( rcbzoltan ) output_file += "_rcbzoltan";
if( no_mixed_elements ) output_file += "_no_mixed_elements";
output_file += ".h5m";
mb.write_file( output_file.c_str(), NULL, write_options.c_str() );
#endif
}
| void read_one_cell_var | ( | bool | rcbzoltan, |
| bool | no_mixed_elements | ||
| ) |
Definition at line 134 of file mpastrvpart.cpp.
References CHECK_EQUAL, CHECK_ERR, CHECK_REAL_EQUAL, eps, ErrorCode, example, moab::Interface::get_entities_by_type(), moab::ParallelComm::get_pcomm(), moab::Interface::globalId_tag(), moab::Interface::load_file(), mb, MB_TYPE_DOUBLE, MBEDGE, MBPOLYGON, moab::Range::psize(), rank, read_options, moab::Range::size(), moab::Interface::tag_get_data(), and moab::Interface::tag_get_handle().
{
Core moab;
Interface& mb = moab;
read_options = "PARALLEL=READ_PART;PARTITION_METHOD=TRIVIAL;NO_EDGES;VARIABLE=ke";
if( rcbzoltan ) read_options = "PARALLEL=READ_PART;PARTITION_METHOD=RCBZOLTAN;NO_EDGES;VARIABLE=ke";
if( no_mixed_elements ) read_options += ";NO_MIXED_ELEMENTS";
ErrorCode rval = mb.load_file( example.c_str(), NULL, read_options.c_str() );CHECK_ERR( rval );
// Get local edges
Range local_edges;
rval = mb.get_entities_by_type( 0, MBEDGE, local_edges );CHECK_ERR( rval );
CHECK_EQUAL( (size_t)0, local_edges.size() );
// Get local cells
Range local_cells;
rval = mb.get_entities_by_type( 0, MBPOLYGON, local_cells );CHECK_ERR( rval );
Tag gid_tag = mb.globalId_tag();
std::vector< int > gids( local_cells.size() );
rval = mb.tag_get_data( gid_tag, local_cells, &gids[0] );
Range local_cell_gids;
std::copy( gids.rbegin(), gids.rend(), range_inserter( local_cell_gids ) );
ParallelComm* pcomm = ParallelComm::get_pcomm( &mb, 0 );
int procs = pcomm->proc_config().proc_size();
int rank = pcomm->proc_config().proc_rank();
// Make check runs this test on two processors
if( 2 == procs )
{
CHECK_EQUAL( (size_t)321, local_cells.size() );
CHECK_EQUAL( (size_t)321, local_cell_gids.size() );
// Check tag for cell variable ke at timestep 0
Tag ke_tag0;
rval = mb.tag_get_handle( "ke0", 1, MB_TYPE_DOUBLE, ke_tag0 );CHECK_ERR( rval );
// Check tag for cell variable ke at timestep 1
Tag ke_tag1;
rval = mb.tag_get_handle( "ke1", 1, MB_TYPE_DOUBLE, ke_tag1 );CHECK_ERR( rval );
// Get ke0 and ke1 tag values on 3 local cells
EntityHandle cell_ents[] = { local_cells[0], local_cells[160], local_cells[320] };
double ke0_val[3];
rval = mb.tag_get_data( ke_tag0, cell_ents, 3, ke0_val );CHECK_ERR( rval );
double ke1_val[3];
rval = mb.tag_get_data( ke_tag1, cell_ents, 3, ke1_val );CHECK_ERR( rval );
if( rcbzoltan )
{
CHECK_EQUAL( (size_t)1, local_cells.psize() );
CHECK_EQUAL( (size_t)37, local_cell_gids.psize() );
if( 0 == rank )
{
CHECK_EQUAL( 1, (int)local_cell_gids[0] );
CHECK_EQUAL( 284, (int)local_cell_gids[160] );
CHECK_EQUAL( 630, (int)local_cell_gids[320] );
CHECK_REAL_EQUAL( 15.001, ke0_val[0], eps );
CHECK_REAL_EQUAL( 16.284, ke0_val[1], eps );
CHECK_REAL_EQUAL( 16.630, ke0_val[2], eps );
CHECK_REAL_EQUAL( 25.001, ke1_val[0], eps );
CHECK_REAL_EQUAL( 26.284, ke1_val[1], eps );
CHECK_REAL_EQUAL( 26.630, ke1_val[2], eps );
}
else if( 1 == rank )
{
CHECK_EQUAL( 4, (int)local_cell_gids[0] );
CHECK_EQUAL( 341, (int)local_cell_gids[160] );
CHECK_EQUAL( 642, (int)local_cell_gids[320] );
CHECK_REAL_EQUAL( 15.004, ke0_val[0], eps );
CHECK_REAL_EQUAL( 16.341, ke0_val[1], eps );
CHECK_REAL_EQUAL( 16.642, ke0_val[2], eps );
CHECK_REAL_EQUAL( 25.004, ke1_val[0], eps );
CHECK_REAL_EQUAL( 26.341, ke1_val[1], eps );
CHECK_REAL_EQUAL( 26.642, ke1_val[2], eps );
}
}
else
{
CHECK_EQUAL( (size_t)1, local_cell_gids.psize() );
if( 0 == rank )
{
CHECK_EQUAL( (size_t)1, local_cells.psize() );
CHECK_EQUAL( 1, (int)local_cell_gids[0] );
CHECK_EQUAL( 161, (int)local_cell_gids[160] );
CHECK_EQUAL( 321, (int)local_cell_gids[320] );
CHECK_REAL_EQUAL( 15.001, ke0_val[0], eps );
CHECK_REAL_EQUAL( 16.161, ke0_val[1], eps );
CHECK_REAL_EQUAL( 16.321, ke0_val[2], eps );
CHECK_REAL_EQUAL( 25.001, ke1_val[0], eps );
CHECK_REAL_EQUAL( 26.161, ke1_val[1], eps );
CHECK_REAL_EQUAL( 26.321, ke1_val[2], eps );
}
else if( 1 == rank )
{
CHECK_EQUAL( (size_t)1, local_cells.psize() );
CHECK_EQUAL( 322, (int)local_cell_gids[0] );
CHECK_EQUAL( 482, (int)local_cell_gids[160] );
CHECK_EQUAL( 642, (int)local_cell_gids[320] );
CHECK_REAL_EQUAL( 16.322, ke0_val[0], eps );
CHECK_REAL_EQUAL( 16.482, ke0_val[1], eps );
CHECK_REAL_EQUAL( 16.642, ke0_val[2], eps );
CHECK_REAL_EQUAL( 26.322, ke1_val[0], eps );
CHECK_REAL_EQUAL( 26.482, ke1_val[1], eps );
CHECK_REAL_EQUAL( 26.642, ke1_val[2], eps );
}
}
}
}
| void test_gather_onevar_on_rank0 | ( | ) |
| void test_gather_onevar_on_rank1 | ( | ) |
| void test_multiple_loads_of_same_file | ( | ) |
Definition at line 128 of file mpastrvpart.cpp.
References multiple_loads_of_same_file().
Referenced by main().
{
multiple_loads_of_same_file( true );
}
| void test_read_mesh_parallel_rcbzoltan | ( | ) |
Definition at line 103 of file mpastrvpart.cpp.
References read_mesh_parallel().
{
read_mesh_parallel( true, false );
}
Definition at line 108 of file mpastrvpart.cpp.
References read_mesh_parallel().
Referenced by main().
{
read_mesh_parallel( true, true );
}
| void test_read_mesh_parallel_trivial | ( | ) |
Definition at line 98 of file mpastrvpart.cpp.
References read_mesh_parallel().
Referenced by main().
{
read_mesh_parallel( false, true );
}
| void test_read_onevar_rcbzoltan | ( | ) |
Definition at line 83 of file mpastrvpart.cpp.
References read_one_cell_var().
{
read_one_cell_var( true, false );
}
Definition at line 88 of file mpastrvpart.cpp.
References read_one_cell_var().
Referenced by main().
{
read_one_cell_var( true, true );
}
| void test_read_onevar_trivial | ( | ) |
Definition at line 78 of file mpastrvpart.cpp.
References read_one_cell_var().
Referenced by main().
{
read_one_cell_var( false, true );
}
| const double eps = 1e-20 |
Definition at line 42 of file mpastrvpart.cpp.
| std::string example = "unittest/io/mpasx1.642.t.2.nc" |
Definition at line 13 of file mpastrvpart.cpp.
| std::string read_options |
Definition at line 41 of file mpastrvpart.cpp.