1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "moab/ParallelComm.hpp"
#include "moab/Core.hpp"
#include "moab_mpi.h"
#include "TestUtil.hpp"
#include "MBTagConventions.hpp"
#include <iostream>
#include <sstream>

// a file with 4 quads, in line, partitioned in 4 parts
std::string filename = TestDir + "unittest/io/ln4.h5m";

using namespace moab;

void test_correct_ghost()
{
    int nproc, rank;
    MPI_Comm_size( MPI_COMM_WORLD, &nproc );
    MPI_Comm_rank( MPI_COMM_WORLD, &rank );
    // Get MOAB instance
    Interface* mb = new( std::nothrow ) Core;

    ErrorCode rval = MB_SUCCESS;

    // Get the ParallelComm instance
    ParallelComm* pcomm = new ParallelComm( mb, MPI_COMM_WORLD );

    char read_opts[] = "PARALLEL=READ_PART;PARALLEL_RESOLVE_SHARED_ENTS;PARTITION=PARALLEL_"
                       "PARTITION;PARALLEL_GHOSTS=2.0.1";
    rval             = mb->load_file( filename.c_str(), 0, read_opts );CHECK_ERR( rval );

    if( nproc >= 3 )
    {
        rval = pcomm->correct_thin_ghost_layers();CHECK_ERR( rval );
    }

    rval = pcomm->exchange_ghost_cells( 2, 0, 2, 0, true );CHECK_ERR( rval );  // true to store remote handles

    // write in serial the database , on each rank
    std::ostringstream outfile;
    outfile << "testReadThin_n" << nproc << "." << rank << ".h5m";

    rval = mb->write_file( outfile.str().c_str() );  // everything on local root
    CHECK_ERR( rval );
    delete mb;
}

void test_read_with_thin_ghost_layer()
{
    int nproc, rank;
    MPI_Comm_size( MPI_COMM_WORLD, &nproc );
    MPI_Comm_rank( MPI_COMM_WORLD, &rank );
    moab::Core* mb = new moab::Core();

    ErrorCode rval = MB_SUCCESS;
    // Get the ParallelComm instance
    ParallelComm* pcomm = new ParallelComm( mb, MPI_COMM_WORLD );

    char read_opts[] = "PARALLEL=READ_PART;PARALLEL_RESOLVE_SHARED_ENTS;PARTITION=PARALLEL_"
                       "PARTITION;PARALLEL_GHOSTS=2.0.1;PARALLEL_THIN_GHOST_LAYER;";
    rval             = mb->load_file( filename.c_str(), 0, read_opts );CHECK_ERR( rval );

    rval = pcomm->exchange_ghost_cells( 2, 0, 2, 0, true );CHECK_ERR( rval );  // true to store remote handles

    // write in serial the database , on each rank
    std::ostringstream outfile;
    outfile << "testReadGhost_n" << nproc << "." << rank << ".h5m";

    rval = mb->write_file( outfile.str().c_str() );  // everything on local root
    CHECK_ERR( rval );
    delete mb;
}

int main( int argc, char* argv[] )
{
    MPI_Init( &argc, &argv );
    int nproc, rank;
    MPI_Comm_size( MPI_COMM_WORLD, &nproc );
    MPI_Comm_rank( MPI_COMM_WORLD, &rank );
    if( nproc <= 3 )
    {
        std::cout << " launch it on at least 4 processes. \n";
        MPI_Finalize();
        return 0;
    }

    int result = 0;<--- Variable 'result' is assigned a value that is never used.
    if( argc >= 2 ) filename = argv[1];  // to be able to test other files too

    result += RUN_TEST( test_read_with_thin_ghost_layer );<--- Variable 'result' is assigned a value that is never used.
    result += RUN_TEST( test_correct_ghost );<--- Variable 'result' is assigned a value that is never used.

    MPI_Finalize();
    return 0;
}