MOAB: Mesh Oriented datABase  (version 5.4.1)
ucdtrvpart.cpp File Reference
+ Include dependency graph for ucdtrvpart.cpp:

Go to the source code of this file.

Functions

void test_read_parallel_ucd_trivial ()
void test_read_parallel_ucd_trivial_spectral ()
void test_read_parallel (int num_verts, bool test_nb_nodes)
void test_multiple_loads_of_same_file ()
int main (int argc, char *argv[])

Variables

std::string example = "unittest/io/homme3x3458.t.3.nc"
std::string partition_method
const int levels = 3

Function Documentation

int main ( int  argc,
char *  argv[] 
)

Definition at line 21 of file ucdtrvpart.cpp.

References RUN_TEST, test_multiple_loads_of_same_file(), test_read_parallel_ucd_trivial(), and test_read_parallel_ucd_trivial_spectral().

{
    MPI_Init( &argc, &argv );
    int result = 0;

    result += RUN_TEST( test_read_parallel_ucd_trivial );
    result += RUN_TEST( test_read_parallel_ucd_trivial_spectral );
    result += RUN_TEST( test_multiple_loads_of_same_file );

    MPI_Finalize();
    return result;
}
void test_read_parallel ( int  num_verts,
bool  test_nb_nodes 
)

Definition at line 46 of file ucdtrvpart.cpp.

References moab::ParallelComm::check_all_shared_handles(), CHECK_EQUAL, CHECK_ERR, moab::Interface::create_meshset(), ErrorCode, example, moab::ParallelComm::filter_pstatus(), moab::Interface::get_entities_by_handle(), moab::Interface::get_entities_by_type(), moab::ReadUtilIface::get_gather_set(), moab::ParallelComm::get_pcomm(), moab::Interface::load_file(), mb, MBVERTEX, MESHSET_SET, partition_method, moab::ProcConfig::proc_comm(), moab::ParallelComm::proc_config(), moab::ProcConfig::proc_rank(), moab::ProcConfig::proc_size(), PSTATUS_NOT, PSTATUS_NOT_OWNED, moab::Interface::query_interface(), rank, moab::Range::size(), moab::subtract(), and moab::Interface::write_file().

{
    Core moab;
    Interface& mb = moab;
    EntityHandle file_set;
    ErrorCode rval;
    rval = mb.create_meshset( MESHSET_SET, file_set );CHECK_ERR( rval );

    std::string opt = std::string( "PARALLEL=READ_PART" ) + partition_method;
    // Create gather set in processor 0
    opt += std::string( ";GATHER_SET=0" );
    rval = mb.load_file( example.c_str(), &file_set, opt.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 the total # owned verts
    Range verts;
    rval = mb.get_entities_by_type( 0, MBVERTEX, verts );CHECK_ERR( rval );

    int my_num = verts.size();
    if( test_nb_nodes && 2 == procs )
    {
        if( 0 == rank )
            CHECK_EQUAL( 5283, my_num );  // Gather set vertices included
        else if( 1 == rank )
            CHECK_EQUAL( 1825, my_num );  // Not owned vertices included
    }

    rval = pcomm->filter_pstatus( verts, PSTATUS_NOT_OWNED, PSTATUS_NOT );CHECK_ERR( rval );

    my_num = verts.size();
    if( test_nb_nodes && 2 == procs )
    {
        if( 0 == rank )
            CHECK_EQUAL( 5283, my_num );  // Gather set vertices included
        else if( 1 == rank )
            CHECK_EQUAL( 1633, my_num );  // Not owned vertices excluded
    }

    if( 0 == rank )
    {
        // Get gather set
        EntityHandle gather_set;
        ReadUtilIface* readUtilIface;
        rval = mb.query_interface( readUtilIface );CHECK_ERR( rval );
        rval = readUtilIface->get_gather_set( gather_set );CHECK_ERR( rval );

        // Get gather set entities
        Range gather_ents;
        rval = mb.get_entities_by_handle( gather_set, gather_ents );CHECK_ERR( rval );

        // Remove gather set vertices in processor 0
        verts = subtract( verts, gather_ents );
    }

    my_num = verts.size();
    if( test_nb_nodes && 2 == procs )
    {
        if( 0 == rank )
            CHECK_EQUAL( 1825, my_num );  // Gather set vertices excluded
        else if( 1 == rank )
            CHECK_EQUAL( 1633, my_num );  // Not owned vertices excluded
    }

    std::cout << "proc: " << rank << " verts:" << my_num << "\n";

    int total_verts;
    MPI_Reduce( &my_num, &total_verts, 1, MPI_INT, MPI_SUM, 0, pcomm->proc_config().proc_comm() );

    if( 0 == rank )
    {
        std::cout << "total vertices: " << total_verts << "\n";
        if( test_nb_nodes ) CHECK_EQUAL( total_verts, num_verts );
    }

#ifdef MOAB_HAVE_HDF5_PARALLEL
    std::string write_options( "PARALLEL=WRITE_PART;" );
    mb.write_file( "test.h5m", NULL, write_options.c_str() );
#endif
}

Definition at line 34 of file ucdtrvpart.cpp.

References partition_method, and test_read_parallel().

Referenced by main().

{
    partition_method = std::string( ";PARTITION_METHOD=TRIVIAL;PARALLEL_RESOLVE_SHARED_ENTS" );
    test_read_parallel( 3458, true );
}

Definition at line 40 of file ucdtrvpart.cpp.

References partition_method, and test_read_parallel().

Referenced by main().

{
    partition_method = std::string( ";PARTITION_METHOD=TRIVIAL;SPECTRAL_MESH;PARALLEL_RESOLVE_SHARED_ENTS" );
    test_read_parallel( 3458, false );
}

Variable Documentation

std::string example = "unittest/io/homme3x3458.t.3.nc"

Definition at line 10 of file ucdtrvpart.cpp.

const int levels = 3

Definition at line 19 of file ucdtrvpart.cpp.

std::string partition_method

Definition at line 18 of file ucdtrvpart.cpp.

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines