MOAB: Mesh Oriented datABase
(version 5.4.1)
|
00001 #include "TestUtil.hpp" 00002 #include "moab/Core.hpp" 00003 #include "moab/ParallelComm.hpp" 00004 #include "moab/ScdInterface.hpp" 00005 #include "moab/ProgOptions.hpp" 00006 #include "MBParallelConventions.h" 00007 00008 using namespace moab; 00009 00010 std::string example = TestDir + "unittest/io/eul3x48x96.t.3.nc"; 00011 00012 void test_read_parallel( int nverts ); 00013 void test_read_parallel_alljorkori(); 00014 void test_read_parallel_alljkbal(); 00015 void test_read_parallel_sqij(); 00016 void test_read_parallel_sqjk(); 00017 00018 std::string partition_method; 00019 00020 int main( int argc, char** argv ) 00021 { 00022 MPI_Init( &argc, &argv ); 00023 int result = 0; 00024 00025 result += RUN_TEST( test_read_parallel_alljorkori ); 00026 result += RUN_TEST( test_read_parallel_alljkbal ); 00027 result += RUN_TEST( test_read_parallel_sqij ); 00028 result += RUN_TEST( test_read_parallel_sqjk ); 00029 00030 MPI_Finalize(); 00031 return result; 00032 } 00033 00034 void test_read_parallel_alljorkori() 00035 { 00036 partition_method = std::string( ";PARTITION_METHOD=alljorkori" ); 00037 test_read_parallel( 4704 ); 00038 } 00039 00040 void test_read_parallel_alljkbal() 00041 { 00042 partition_method = std::string( ";PARTITION_METHOD=alljkbal" ); 00043 test_read_parallel( 4704 ); 00044 } 00045 00046 void test_read_parallel_sqij() 00047 { 00048 partition_method = std::string( ";PARTITION_METHOD=sqij" ); 00049 test_read_parallel( 4704 ); 00050 } 00051 00052 void test_read_parallel_sqjk() 00053 { 00054 partition_method = std::string( ";PARTITION_METHOD=sqjk" ); 00055 test_read_parallel( 4704 ); 00056 } 00057 00058 void test_read_parallel( int num_verts ) 00059 { 00060 Core moab; 00061 Interface& mb = moab; 00062 EntityHandle file_set; 00063 ErrorCode rval; 00064 rval = mb.create_meshset( MESHSET_SET, file_set );CHECK_ERR( rval ); 00065 00066 std::string opt = std::string( "PARALLEL=READ_PART;PARTITION=;PARTITION_DISTRIBUTE;PARALLEL_RESOLVE_SHARED_ENTS" ) + 00067 partition_method; 00068 rval = mb.load_file( example.c_str(), &file_set, opt.c_str() );CHECK_ERR( rval ); 00069 00070 ParallelComm* pcomm = ParallelComm::get_pcomm( &mb, 0 ); 00071 00072 rval = pcomm->check_all_shared_handles();CHECK_ERR( rval ); 00073 00074 // get the total # owned verts 00075 Range verts; 00076 rval = mb.get_entities_by_type( 0, MBVERTEX, verts );CHECK_ERR( rval ); 00077 rval = pcomm->filter_pstatus( verts, PSTATUS_NOT_OWNED, PSTATUS_NOT );CHECK_ERR( rval ); 00078 int my_num = verts.size(), total_verts; 00079 MPI_Reduce( &my_num, &total_verts, 1, MPI_INT, MPI_SUM, 0, pcomm->proc_config().proc_comm() ); 00080 00081 if( 0 == pcomm->proc_config().proc_rank() ) CHECK_EQUAL( total_verts, num_verts ); 00082 }