MOAB: Mesh Oriented datABase
(version 5.5.0)
ghost_thin_layers.cpp
Go to the documentation of this file.
1
#include "
moab/ParallelComm.hpp
"
2
#include "
moab/Core.hpp
"
3
#include "
moab_mpi.h
"
4
#include "
TestUtil.hpp
"
5
#include "
MBTagConventions.hpp
"
6
#include <iostream>
7
#include <sstream>
8
9
// a file with 4 quads, in line, partitioned in 4 parts
10
std::string
filename
= TestDir +
"unittest/io/ln4.h5m"
;
11
12
using namespace
moab
;
13
14
void
test_correct_ghost
()
15
{
16
int
nproc,
rank
;
17
MPI_Comm_size(
MPI_COMM_WORLD
, &nproc );
18
MPI_Comm_rank(
MPI_COMM_WORLD
, &
rank
);
19
// Get MOAB instance
20
Interface
*
mb
=
new
( std::nothrow )
Core
;
21
22
ErrorCode
rval =
MB_SUCCESS
;
23
24
// Get the ParallelComm instance
25
ParallelComm
* pcomm =
new
ParallelComm
(
mb
,
MPI_COMM_WORLD
);
26
27
char
read_opts[] =
"PARALLEL=READ_PART;PARALLEL_RESOLVE_SHARED_ENTS;PARTITION=PARALLEL_"
28
"PARTITION;PARALLEL_GHOSTS=2.0.1"
;
29
rval =
mb
->
load_file
(
filename
.c_str(), 0, read_opts );
CHECK_ERR
( rval );
30
31
if
( nproc >= 3 )
32
{
33
rval = pcomm->
correct_thin_ghost_layers
();
CHECK_ERR
( rval );
34
}
35
36
rval = pcomm->
exchange_ghost_cells
( 2, 0, 2, 0,
true
);
CHECK_ERR
( rval );
// true to store remote handles
37
38
// write in serial the database , on each rank
39
std::ostringstream
outfile
;
40
outfile
<<
"testReadThin_n"
<< nproc <<
"."
<<
rank
<<
".h5m"
;
41
42
rval =
mb
->
write_file
(
outfile
.str().c_str() );
// everything on local root
43
CHECK_ERR
( rval );
44
delete
mb
;
45
}
46
47
void
test_read_with_thin_ghost_layer
()
48
{
49
int
nproc,
rank
;
50
MPI_Comm_size(
MPI_COMM_WORLD
, &nproc );
51
MPI_Comm_rank(
MPI_COMM_WORLD
, &
rank
);
52
moab::Core
*
mb
=
new
moab::Core
();
53
54
ErrorCode
rval =
MB_SUCCESS
;
55
// Get the ParallelComm instance
56
ParallelComm
* pcomm =
new
ParallelComm
(
mb
,
MPI_COMM_WORLD
);
57
58
char
read_opts[] =
"PARALLEL=READ_PART;PARALLEL_RESOLVE_SHARED_ENTS;PARTITION=PARALLEL_"
59
"PARTITION;PARALLEL_GHOSTS=2.0.1;PARALLEL_THIN_GHOST_LAYER;"
;
60
rval =
mb
->
load_file
(
filename
.c_str(), 0, read_opts );
CHECK_ERR
( rval );
61
62
rval = pcomm->
exchange_ghost_cells
( 2, 0, 2, 0,
true
);
CHECK_ERR
( rval );
// true to store remote handles
63
64
// write in serial the database , on each rank
65
std::ostringstream
outfile
;
66
outfile
<<
"testReadGhost_n"
<< nproc <<
"."
<<
rank
<<
".h5m"
;
67
68
rval =
mb
->
write_file
(
outfile
.str().c_str() );
// everything on local root
69
CHECK_ERR
( rval );
70
delete
mb
;
71
}
72
73
int
main
(
int
argc,
char
* argv[] )
74
{
75
MPI_Init( &argc, &argv );
76
int
nproc,
rank
;
77
MPI_Comm_size(
MPI_COMM_WORLD
, &nproc );
78
MPI_Comm_rank(
MPI_COMM_WORLD
, &
rank
);
79
if
( nproc <= 3 )
80
{
81
std::cout <<
" launch it on at least 4 processes. \n"
;
82
MPI_Finalize();
83
return
0;
84
}
85
86
int
result = 0;
87
if
( argc >= 2 )
filename
= argv[1];
// to be able to test other files too
88
89
result +=
RUN_TEST
(
test_read_with_thin_ghost_layer
);
90
result +=
RUN_TEST
(
test_correct_ghost
);
91
92
MPI_Finalize();
93
return
0;
94
}
test
parallel
ghost_thin_layers.cpp
Generated on Wed Oct 4 2023 14:20:27 for MOAB: Mesh Oriented datABase by
1.9.1