Sierra Toolkit  Version of the Day
Parallel.hpp
1 /*------------------------------------------------------------------------*/
2 /* Copyright 2010 Sandia Corporation. */
3 /* Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive */
4 /* license for use of this work by or on behalf of the U.S. Government. */
5 /* Export of this program may require a license from the */
6 /* United States Government. */
7 /*------------------------------------------------------------------------*/
8 
9 #ifndef stk_util_parallel_Parallel_hpp
10 #define stk_util_parallel_Parallel_hpp
11 
12 // stk_config.h resides in the build directory and contains the
13 // complete set of #define macros for build-dependent features.
14 
15 #include <stk_util/stk_config.h>
16 
17 //----------------------------------------------------------------------
18 // Parallel machine
19 
20 #if defined( STK_HAS_MPI )
21 
22 #include <mpi.h>
23 
24 namespace stk_classic {
25 
30 
32 typedef MPI_Comm ParallelMachine ;
33 
35 
36 typedef MPI_Datatype ParallelDatatype ;
37 
43 inline ParallelMachine parallel_machine_null() { return MPI_COMM_NULL ; }
44 
54 inline ParallelMachine parallel_machine_init( int * argc , char *** argv )
55 {
56  MPI_Init( argc , argv );
57  return MPI_COMM_WORLD ;
58 }
59 
65 {
66  MPI_Finalize();
67 }
68 
71 }
72 
73 //----------------------------------------
74 // Other parallel communication machines go here
75 // as '#elif defined( STK_HAS_<name> )'
76 
77 //----------------------------------------
78 // Stub for non-parallel
79 
80 #else
81 
82 // Some needed stubs
83 #define MPI_Comm int
84 #define MPI_COMM_WORLD 0
85 #define MPI_COMM_SELF 0
86 #define MPI_Barrier( a ) (void)a
87 
88 namespace stk_classic {
89 
90 typedef int ParallelMachine ;
91 typedef int ParallelDatatype ;
92 
93 inline ParallelMachine parallel_machine_null() { return 0 ; }
94 
95 inline ParallelMachine parallel_machine_init( int * , char *** )
96 { return 0 ; }
97 
98 inline void parallel_machine_finalize()
99 {}
100 
101 }
102 
103 #endif
104 
105 //----------------------------------------------------------------------
106 // Common parallel machine needs.
107 
108 namespace stk_classic {
109 
117 unsigned parallel_machine_size( ParallelMachine parallel_machine );
118 
126 unsigned parallel_machine_rank( ParallelMachine parallel_machine );
127 
132 void parallel_machine_barrier( ParallelMachine parallel_machine);
133 }
134 
135 //----------------------------------------------------------------------
136 
137 #endif
138 
unsigned parallel_machine_rank(ParallelMachine parallel_machine)
Member function parallel_machine_rank ...
Definition: Parallel.cpp:29
ParallelMachine parallel_machine_null()
parallel_machine_null returns MPI_COMM_NULL if MPI is enabled.
Definition: Parallel.hpp:43
unsigned parallel_machine_size(ParallelMachine parallel_machine)
Member function parallel_machine_size ...
Definition: Parallel.cpp:18
void parallel_machine_finalize()
parallel_machine_finalize calls MPI_Finalize.
Definition: Parallel.hpp:64
Sierra Toolkit.
MPI_Comm ParallelMachine
Definition: Parallel.hpp:32
MPI_Datatype ParallelDatatype
Definition: Parallel.hpp:36
ParallelMachine parallel_machine_init(int *argc, char ***argv)
parallel_machine_init calls MPI_Init.
Definition: Parallel.hpp:54
void parallel_machine_barrier(ParallelMachine parallel_machine)
Member function parallel_machine_barrier ...
Definition: Parallel.cpp:40