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_on_its_own.cpp
Go to the documentation of this file.
1
8
//
9
// This example shows how to wrap the MPI_Comm (MPI communicator) that
10
// you are using, so that Epetra can use it as well. it includes MPI
11
// initialization, wrapping your MPI_Comm in an Epetra communicator
12
// wrapper, and printing out Epetra version information.
13
//
14
15
// This defines useful macros like HAVE_MPI, which is defined if and
16
// only if Epetra was built with MPI enabled.
17
#include <Epetra_config.h>
18
19
#ifdef HAVE_MPI
20
// Your code is an existing MPI code, so it presumably includes mpi.h directly.
21
# include <mpi.h>
22
// Epetra's wrapper for MPI_Comm. This header file only exists if
23
// Epetra was built with MPI enabled.
24
# include <
Epetra_MpiComm.h
>
25
#else
26
# error "This example requires MPI in order to build."
27
#endif // HAVE_MPI
28
29
#include <
Epetra_Version.h
>
30
31
//
32
// ... Your other include files go here ...
33
//
34
35
36
// Do something with the given communicator. In this case, we just
37
// print Epetra's version to the given output stream, on Process 0.
38
void
39
exampleRoutine
(
const
Epetra_Comm
& comm,
40
std::ostream& out)
41
{
42
if
(comm.
MyPID
() == 0) {
43
// On (MPI) Process 0, print out the Epetra software version.
44
out <<
Epetra_Version
() << std::endl << std::endl;
45
}
46
}
47
48
int
49
main
(
int
argc,
char
*argv[])
50
{
51
// These "using" declarations make the code more concise, in that
52
// you don't have to write the namespace along with the class or
53
// object name. This is especially helpful with commonly used
54
// things like std::endl.
55
using
std::cout;
56
using
std::endl;
57
58
// We assume that your code calls MPI_Init. It's bad form
59
// to ignore the error codes returned by MPI functions, but
60
// we do so here for brevity.
61
(void) MPI_Init (&argc, &argv);
62
63
// This code takes the place of whatever you do to get an MPI_Comm.
64
MPI_Comm yourComm = MPI_COMM_WORLD;
65
66
// If your code plans to use MPI on its own, as well as through
67
// Trilinos, you should strongly consider giving Trilinos a copy
68
// of your MPI_Comm (created via MPI_Comm_dup). Trilinos may in
69
// the future duplicate the MPI_Comm automatically, but it does
70
// not currently do this.
71
72
// Wrap the MPI_Comm. You are responsible for calling MPI_Comm_free
73
// on your MPI_Comm after use, if necessary. (It's not necessary or
74
// legal to do this for built-in communicators like MPI_COMM_WORLD
75
// or MPI_COMM_SELF.)
76
Epetra_MpiComm
comm (yourComm);
77
78
// Epetra_Comm has methods that wrap basic MPI functionality.
79
// MyPID() is equivalent to MPI_Comm_rank; it returns my process'
80
// rank. NumProc() is equivalent to MPI_Comm_size; it returns the
81
// total number of processes in the communicator.
82
const
int
myRank = comm.
MyPID
();
83
const
int
numProcs = comm.
NumProc
();
84
85
if
(myRank == 0) {
86
cout <<
"Total number of processes: "
<< numProcs << endl;
87
}
88
89
// Do something with the new Epetra communicator.
90
exampleRoutine
(comm, cout);
91
92
// This tells the Trilinos test framework that the test passed.
93
if
(myRank == 0) {
94
cout <<
"End Result: TEST PASSED"
<< endl;
95
}
96
97
// If you need to call MPI_Comm_free on your MPI_Comm, now would be
98
// the time to do so, before calling MPI_Finalize.
99
100
// Since you called MPI_Init, you are responsible for calling
101
// MPI_Finalize after you are done using MPI.
102
(void) MPI_Finalize ();
103
return
0;
104
}
Epetra_MpiComm::NumProc
int NumProc() const
Returns total number of processes.
Definition:
Epetra_MpiComm.h:469
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_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_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
Epetra_MpiComm::MyPID
int MyPID() const
Return my process ID.
Definition:
Epetra_MpiComm.h:463
Generated by
1.8.5