Epetra Package Browser (Single Doxygen Collection)
Development
Main Page
Related Pages
Namespaces
Classes
Files
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
example
Lessons
Lesson01-Init
lesson01_mpi_only_through_Epetra.cpp
Go to the documentation of this file.
1
8
//
9
// This example includes conditional MPI initialization, getting an
10
// Epetra communicator wrapper, and printing out Epetra version
11
// information.
12
//
13
14
// This defines useful macros like HAVE_MPI, which is defined if and
15
// only if Epetra was built with MPI enabled.
16
#include <Epetra_config.h>
17
18
#ifdef HAVE_MPI
19
// Your code is an existing MPI code, so it presumably includes mpi.h directly.
20
# include <mpi.h>
21
// Epetra's wrapper for MPI_Comm. This header file only exists if
22
// Epetra was built with MPI enabled.
23
# include <
Epetra_MpiComm.h
>
24
#else
25
# include <
Epetra_SerialComm.h
>
26
#endif // HAVE_MPI
27
28
#include <
Epetra_Version.h
>
29
30
31
//
32
// ... Your other include files go here ...
33
//
34
35
// Do something with the given communicator. In this case, we just
36
// print Epetra's version to the given output stream, on Process 0.
37
void
38
exampleRoutine
(
const
Epetra_Comm
& comm,
39
std::ostream& out)
40
{
41
if
(comm.
MyPID
() == 0) {
42
// On (MPI) Process 0, print out the Epetra software version.
43
out <<
Epetra_Version
() << std::endl << std::endl;
44
}
45
}
46
47
int
48
main
(
int
argc,
char
*argv[])
49
{
50
// These "using" declarations make the code more concise, in that
51
// you don't have to write the namespace along with the class or
52
// object name. This is especially helpful with commonly used
53
// things like std::endl.
54
using
std::cout;
55
using
std::endl;
56
57
#ifdef HAVE_MPI
58
// Start up MPI, if using MPI. Trilinos doesn't have to be built
59
// with MPI; it's called a "serial" build if you build without MPI.
60
//
61
// It's bad form to ignore the error codes returned by MPI
62
// functions, but we do so here for brevity.
63
(void) MPI_Init (&argc, &argv);
64
65
// Wrap MPI_COMM_WORLD in an Epetra communicator wrapper.
66
// Epetra_MpiComm is a subclass of Epetra_Comm, so you may use it
67
// wherever an Epetra_Comm is required.
68
Epetra_MpiComm
comm (MPI_COMM_WORLD);
69
#else
70
// Make a "serial" (non-MPI) communicator. It doesn't actually
71
// "communicate," because it only has one process, whose rank is
72
// always 0. Epetra_SerialComm is a subclass of Epetra_Comm, so you
73
// may use it wherever an Epetra_Comm is required.
74
Epetra_SerialComm
comm;
75
#endif
76
77
// Epetra_Comm has methods that wrap basic MPI functionality.
78
// MyPID() is equivalent to MPI_Comm_rank, and NumProc() to
79
// MPI_Comm_size.
80
//
81
// With a "serial" communicator, the rank is always 0, and the
82
// number of processes is always 1.
83
const
int
myRank = comm.
MyPID
();
84
const
int
numProcs = comm.
NumProc
();
85
86
if
(myRank == 0) {
87
cout <<
"Total number of processes: "
<< numProcs << endl;
88
}
89
90
// Do something with the new Epetra communicator.
91
exampleRoutine
(comm, cout);
92
93
// This tells the Trilinos test framework that the test passed.
94
if
(comm.
MyPID
() == 0) {
95
cout <<
"End Result: TEST PASSED"
<< endl;
96
}
97
98
#ifdef HAVE_MPI
99
// Since you called MPI_Init, you are responsible for calling
100
// MPI_Finalize after you are done using MPI.
101
(void) MPI_Finalize ();
102
#endif // HAVE_MPI
103
104
return
0;
105
}
Epetra_SerialComm::MyPID
int MyPID() const
Return my process ID.
Definition:
Epetra_SerialComm.h:432
Epetra_MpiComm
Epetra_MpiComm: The Epetra MPI Communication Class.
Definition:
Epetra_MpiComm.h:64
Epetra_Version
std::string Epetra_Version()
Definition:
Epetra_Version.h:47
Epetra_SerialComm.h
Epetra_Comm::MyPID
virtual int MyPID() const =0
Return my process ID.
Epetra_Comm
Epetra_Comm: The Epetra Communication Abstract Base Class.
Definition:
Epetra_Comm.h:73
Epetra_SerialComm::NumProc
int NumProc() const
Returns total number of processes (always returns 1 for SerialComm).
Definition:
Epetra_SerialComm.h:435
Epetra_SerialComm
Epetra_SerialComm: The Epetra Serial Communication Class.
Definition:
Epetra_SerialComm.h:61
Epetra_MpiComm.h
main
int main(int argc, char *argv[])
Definition:
example/C_wrappers/c_main.c:49
Epetra_Version.h
exampleRoutine
void exampleRoutine(const Epetra_Comm &comm, std::ostream &out)
Definition:
lesson01_mpi_on_its_own.cpp:39
Generated by
1.8.5