MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include "moab/ParallelComm.hpp"
#include "moab/Core.hpp"
#include "moab_mpi.h"
#include "moab/iMOAB.h"
#include "TestUtil.hpp"
#include "moab/ProgOptions.hpp"
Go to the source code of this file.
Defines | |
#define | RUN_TEST_ARG2(A, B) run_test( &( A ), #A, B ) |
#define | CHECKRC(rc, message) |
Functions | |
int | is_any_proc_error (int is_my_error) |
int | run_test (ErrorCode(*func)(const char *), const char *func_name, const char *file_name) |
ErrorCode | migrate_graph (const char *filename) |
ErrorCode | migrate_geom (const char *filename) |
ErrorCode | migrate_trivial (const char *filename) |
ErrorCode | migrate_smart (const char *filename, const char *outfile, int partMethod) |
int | main (int argc, char *argv[]) |
Variables | |
int | rank |
int | size |
int | ierr |
int | compid1 |
int | compid2 |
int | nghlay |
std::vector< int > | groupTasks |
int | startG1 |
int | startG2 |
int | endG1 |
int | endG2 |
MPI_Comm | jcomm |
MPI_Group | jgroup |
#define CHECKRC | ( | rc, | |
message | |||
) |
if( 0 != ( rc ) ) \ { \ printf( "Error: %s\n", message ); \ return MB_FAILURE; \ }
Definition at line 30 of file migrate_nontrivial.cpp.
Referenced by migrate_smart().
#define RUN_TEST_ARG2 | ( | A, | |
B | |||
) | run_test( &( A ), #A, B ) |
Definition at line 24 of file migrate_nontrivial.cpp.
Referenced by main().
int is_any_proc_error | ( | int | is_my_error | ) |
Definition at line 37 of file migrate_nontrivial.cpp.
References MPI_COMM_WORLD.
{ int result = 0; int err = MPI_Allreduce( &is_my_error, &result, 1, MPI_INT, MPI_MAX, MPI_COMM_WORLD ); return err || result; }
int main | ( | int | argc, |
char * | argv[] | ||
) |
Definition at line 207 of file migrate_nontrivial.cpp.
References ProgOptions::addOpt(), endG1, endG2, filename, jcomm, jgroup, migrate_geom(), migrate_graph(), migrate_trivial(), MPI_COMM_WORLD, ProgOptions::parseCommandLine(), rank, RUN_TEST_ARG2, size, startG1, and startG2.
{ MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); MPI_Comm_dup( MPI_COMM_WORLD, &jcomm ); MPI_Comm_group( jcomm, &jgroup ); ProgOptions opts; int typeTest = 3; // std::string inputfile, outfile("out.h5m"), netcdfFile, variable_name, sefile_name; std::string filename; filename = TestDir + "unittest/field1.h5m"; startG1 = 0; startG2 = 0; endG1 = 0; endG2 = 1; opts.addOpt< std::string >( "file,f", "source file", &filename ); opts.addOpt< int >( "startSender,a", "start task for source layout", &startG1 ); opts.addOpt< int >( "endSender,b", "end task for source layout", &endG1 ); opts.addOpt< int >( "startRecv,c", "start task for receiver layout", &startG2 ); opts.addOpt< int >( "endRecv,d", "end task for receiver layout", &endG2 ); opts.addOpt< int >( "typeTest,t", "test types (0 - trivial, 1 graph, 2 geom, 3 both graph and geometry", &typeTest ); opts.parseCommandLine( argc, argv ); if( rank == 0 ) { std::cout << " input file : " << filename << "\n"; std::cout << " sender on tasks: " << startG1 << ":" << endG1 << "\n"; std::cout << " receiver on tasks: " << startG2 << ":" << endG2 << "\n"; std::cout << " type migrate: " << typeTest << " (0 - trivial, 1 graph , 2 geom, 3 both graph and geom ) \n"; } int num_errors = 0; if( 0 == typeTest ) num_errors += RUN_TEST_ARG2( migrate_trivial, filename.c_str() ); if( 3 == typeTest || 1 == typeTest ) num_errors += RUN_TEST_ARG2( migrate_graph, filename.c_str() ); if( 3 == typeTest || 2 == typeTest ) num_errors += RUN_TEST_ARG2( migrate_geom, filename.c_str() ); if( rank == 0 ) { if( !num_errors ) std::cout << "All tests passed" << std::endl; else std::cout << num_errors << " TESTS FAILED!" << std::endl; } MPI_Group_free( &jgroup ); MPI_Comm_free( &jcomm ); MPI_Finalize(); return num_errors; }
ErrorCode migrate_geom | ( | const char * | filename | ) |
Definition at line 197 of file migrate_nontrivial.cpp.
References migrate_smart().
Referenced by main().
{ return migrate_smart( filename, "migrate_geom.h5m", 2 ); }
ErrorCode migrate_graph | ( | const char * | filename | ) |
Definition at line 192 of file migrate_nontrivial.cpp.
References migrate_smart().
Referenced by main().
{ return migrate_smart( filename, "migrate_graph.h5m", 1 ); }
ErrorCode migrate_smart | ( | const char * | filename, |
const char * | outfile, | ||
int | partMethod | ||
) |
Definition at line 76 of file migrate_nontrivial.cpp.
References CHECKRC, compid1, compid2, context, endG1, endG2, groupTasks, ierr, iMOAB_AppID, iMOAB_DeregisterApplication(), iMOAB_Finalize(), iMOAB_Initialize(), iMOAB_LoadMesh(), iMOAB_RegisterApplication(), iMOAB_WriteMesh(), jcomm, jgroup, MB_SUCCESS, nghlay, readopts(), startG1, and startG2.
Referenced by migrate_geom(), migrate_graph(), and migrate_trivial().
{ // first create MPI groups std::string filen( filename ); MPI_Group group1, group2; groupTasks.resize( endG1 - startG1 + 1 ); for( int i = startG1; i <= endG1; i++ ) groupTasks[i - startG1] = i; ierr = MPI_Group_incl( jgroup, endG1 - startG1 + 1, &groupTasks[0], &group1 ); CHECKRC( ierr, "can't create group1" ) groupTasks.resize( endG2 - startG2 + 1 ); for( int i = startG2; i <= endG2; i++ ) groupTasks[i - startG2] = i; ierr = MPI_Group_incl( jgroup, endG2 - startG2 + 1, &groupTasks[0], &group2 ); CHECKRC( ierr, "can't create group2" ) // create 2 communicators, one for each group int tagcomm1 = 1, tagcomm2 = 2; int context_id = -1; // plain migrate, default context MPI_Comm comm1, comm2; ierr = MPI_Comm_create_group( jcomm, group1, tagcomm1, &comm1 ); CHECKRC( ierr, "can't create comm1" ) ierr = MPI_Comm_create_group( jcomm, group2, tagcomm2, &comm2 ); CHECKRC( ierr, "can't create comm2" ) ierr = iMOAB_Initialize( 0, 0 ); // not really needed anything from argc, argv, yet; maybe we should CHECKRC( ierr, "can't initialize iMOAB" ) // give some dummy values to component ids, just to differentiate between them // the par comm graph is unique between components compid1 = 4; compid2 = 7; int appID1; iMOAB_AppID pid1 = &appID1; int appID2; iMOAB_AppID pid2 = &appID2; if( comm1 != MPI_COMM_NULL ) { ierr = iMOAB_RegisterApplication( "APP1", &comm1, &compid1, pid1 ); CHECKRC( ierr, "can't register app1 " ) } if( comm2 != MPI_COMM_NULL ) { ierr = iMOAB_RegisterApplication( "APP2", &comm2, &compid2, pid2 ); CHECKRC( ierr, "can't register app2 " ) } if( comm1 != MPI_COMM_NULL ) { std::string readopts( "PARALLEL=READ_PART;PARTITION=PARALLEL_PARTITION;PARALLEL_RESOLVE_SHARED_ENTS" ); nghlay = 0; ierr = iMOAB_LoadMesh( pid1, filen.c_str(), readopts.c_str(), &nghlay ); CHECKRC( ierr, "can't load mesh " ) ierr = iMOAB_SendMesh( pid1, &jcomm, &group2, &compid2, &partMethod ); // send to component 2 CHECKRC( ierr, "cannot send elements" ) #ifdef GRAPH_INFO int is_sender = 1; int context = compid2; iMOAB_DumpCommGraph( pid1, &context, &is_sender, "MigrateS" ); #endif } if( comm2 != MPI_COMM_NULL ) { ierr = iMOAB_ReceiveMesh( pid2, &jcomm, &group1, &compid1 ); // receive from component 1 CHECKRC( ierr, "cannot receive elements" ) std::string wopts; wopts = "PARALLEL=WRITE_PART;"; ierr = iMOAB_WriteMesh( pid2, outfile, wopts.c_str() ); CHECKRC( ierr, "cannot write received mesh" ) #ifdef GRAPH_INFO int is_sender = 0; int context = compid1; iMOAB_DumpCommGraph( pid2, &context, &is_sender, "MigrateR" ); #endif } MPI_Barrier( jcomm ); // we can now free the sender buffers context_id = compid2; // even for default migrate, be more explicit if( comm1 != MPI_COMM_NULL ) ierr = iMOAB_FreeSenderBuffers( pid1, &context_id ); if( comm2 != MPI_COMM_NULL ) { ierr = iMOAB_DeregisterApplication( pid2 ); CHECKRC( ierr, "cannot deregister app 2 receiver" ) } if( comm1 != MPI_COMM_NULL ) { ierr = iMOAB_DeregisterApplication( pid1 ); CHECKRC( ierr, "cannot deregister app 1 sender" ) } ierr = iMOAB_Finalize(); CHECKRC( ierr, "did not finalize iMOAB" ) if( MPI_COMM_NULL != comm1 ) MPI_Comm_free( &comm1 ); if( MPI_COMM_NULL != comm2 ) MPI_Comm_free( &comm2 ); MPI_Group_free( &group1 ); MPI_Group_free( &group2 ); return MB_SUCCESS; }
ErrorCode migrate_trivial | ( | const char * | filename | ) |
Definition at line 202 of file migrate_nontrivial.cpp.
References migrate_smart().
Referenced by main().
{ return migrate_smart( filename, "migrate_trivial.h5m", 0 ); }
Definition at line 44 of file migrate_nontrivial.cpp.
References ErrorCode, is_any_proc_error(), MB_SUCCESS, MPI_COMM_WORLD, and rank.
{ ErrorCode result = ( *func )( file_name ); int is_err = is_any_proc_error( ( MB_SUCCESS != result ) ); int rank; MPI_Comm_rank( MPI_COMM_WORLD, &rank ); if( rank == 0 ) { if( is_err ) std::cout << func_name << " : FAILED!!" << std::endl; else std::cout << func_name << " : success" << std::endl; } return is_err; }
int compid1 |
Definition at line 68 of file migrate_nontrivial.cpp.
Referenced by migrate(), and migrate_smart().
int compid2 |
Definition at line 68 of file migrate_nontrivial.cpp.
Referenced by migrate(), and migrate_smart().
int endG1 |
Definition at line 71 of file migrate_nontrivial.cpp.
int endG2 |
Definition at line 71 of file migrate_nontrivial.cpp.
std::vector< int > groupTasks |
Definition at line 70 of file migrate_nontrivial.cpp.
int ierr |
Definition at line 66 of file migrate_nontrivial.cpp.
Definition at line 73 of file migrate_nontrivial.cpp.
Referenced by main(), migrate(), and migrate_smart().
MPI_Group jgroup |
Definition at line 74 of file migrate_nontrivial.cpp.
int nghlay |
Definition at line 69 of file migrate_nontrivial.cpp.
int rank |
Definition at line 66 of file migrate_nontrivial.cpp.
Referenced by moab::MeshOutputFunctor::assign_global_ids(), moab::MeshGeneration::BrickInstance(), PartMap::build_map(), check_consistent_ids(), closedsurface_uref_hirec_convergence_study(), moab::NCWriteGCRM::collect_mesh_info(), moab::NCWriteMPAS::collect_mesh_info(), moab::NCWriteHOMME::collect_mesh_info(), moab::WriteHDF5Parallel::communicate_shared_set_data(), PartMap::count_from_rank(), create_coarse_mesh(), moab::WriteHDF5Parallel::create_dataset(), moab::NCHelperScrip::create_mesh(), moab::NCHelperMPAS::create_mesh(), moab::NCHelperGCRM::create_mesh(), moab::NCHelperHOMME::create_mesh(), moab::WriteHDF5Parallel::create_meshset_tables(), create_shared_grid_3d(), moab::WriteHDF5Parallel::create_tag_tables(), moab::Coupler::do_normalization(), do_rank_subst(), moab::HiReconstruction::eval_vander_bivar_cmf(), moab::HiReconstruction::eval_vander_univar_cmf(), moab::ReadHDF5::find_sets_containing(), gather_one_cell_var(), generate_mesh(), moab::TempestOnlineMap::GenerateRemappingWeights(), GenerateTestMatrixAndVectors(), get_attrib_array_length_handle(), moab::Coupler::get_matching_entities(), get_max_id(), moab::SharedSetData::get_owner_handle(), MBMesquite::get_parallel_rank(), get_tag(), handle_error_code(), iMOAB_LoadMesh(), iMOAB_WriteLocalMesh(), moab::NCHelperDomain::init_mesh_vals(), moab::NCHelperFV::init_mesh_vals(), moab::NCHelperEuler::init_mesh_vals(), initialize_tree(), interface_verts(), moab::TempestOnlineMap::IsConservative(), moab::TempestOnlineMap::LinearRemapFVtoFV_Tempest_MOAB(), moab::ReadParallel::load_file(), load_meshset_hirec(), main(), moab::MBTraceBackErrorHandler(), mhdf_getTagInfo(), mhdf_open_table(), MPI_swap(), multiple_loads_of_same_file(), moab::my_Gatherv(), parallel_create_mesh(), moab::ReadNC::parse_options(), moab::WriteNC::parse_options(), PartMap::part_from_coords(), ZoltanPartitioner::partition_owned_cells(), print_partitioned_entities(), moab::ProcConfig::ProcConfig(), moab::ReadHDF5::read_all_set_meta(), read_buffered_map(), read_mesh_parallel(), read_one_cell_var(), moab::TempestOnlineMap::ReadParallelMap(), ZoltanPartitioner::repartition(), report_iface_ents(), report_nsets(), resolve_and_exchange(), ParShapeImprover::run(), run_test(), ParShapeImprover::ParShapeImprovementWrapper::run_wrapper(), runner_run_tests(), set_local_domain_bounds(), moab::ErrorOutput::set_rank(), moab::DebugOutput::set_rank(), moab::ReadHDF5::set_up_read(), moab::TempestOnlineMap::SetDOFmapAssociation(), moab::SharedSetData::SharedSetData(), test(), test_assign_global_ids(), test_correct_ghost(), test_entity_copies(), test_entity_copy_parts(), test_entity_owner(), test_entity_status(), test_eul_check_across_files(), test_eul_check_append(), test_eul_check_T(), test_eul_check_timestep(), test_exchange_ents(), test_fv_check_T(), test_gather_onevar(), test_gcrm_check_vars(), test_get_neighbors(), test_get_part_boundary(), test_get_parts(), test_ghost_tag_exchange(), test_ghosted_entity_shared_data(), test_homme_check_T(), test_interface_owners_common(), test_intx_in_parallel_elem_based(), test_mpas_check_vars(), test_part_boundary_iter(), test_part_id_handle(), test_part_rank(), test_push_tag_data_common(), test_read_and_ghost_after(), test_read_bc_sets(), test_read_elements_common(), test_read_eul_onevar(), test_read_fv_onevar(), test_read_global_tags(), test_read_non_adjs_side(), test_read_parallel(), test_read_sets_common(), test_read_tags(), test_read_time(), test_read_with_ghost(), test_read_with_ghost_no_augment(), test_read_with_thin_ghost_layer(), test_reduce_tag_explicit_dest(), test_reduce_tag_failures(), test_reduce_tags(), test_shared_sets(), test_string_rank_subst(), test_tempest_map_bcast(), test_trivial_partition(), test_var_length_parallel(), test_write_dense_tags(), test_write_different_element_types(), test_write_different_tags(), test_write_elements(), test_write_shared_sets(), test_write_unbalanced(), TestMeshRefiner(), tprint(), MBMesquite::MsqIMeshP::vertices_get_global_id(), moab::NCWriteHelper::write_set_variables(), moab::TempestOnlineMap::WriteHDF5MapFile(), and moab::TempestOnlineMap::WriteSCRIPMapFile().
int size |
Definition at line 66 of file migrate_nontrivial.cpp.
int startG1 |
Definition at line 71 of file migrate_nontrivial.cpp.
int startG2 |
Definition at line 71 of file migrate_nontrivial.cpp.