xref: /petsc/src/sys/mpiuni/mpi.c (revision 1a589b0569e18bcacf65d8953fd5d5d89ebc1684)
1e5c89e4eSSatish Balay /*
2e5c89e4eSSatish Balay       This provides a few of the MPI-uni functions that cannot be implemented
3e5c89e4eSSatish Balay     with C macros
4e5c89e4eSSatish Balay */
5891da655SBarry Smith #include <petscsys.h>
64423d37eSSatish Balay #if !defined(__MPIUNI_H)
74423d37eSSatish Balay #error "Wrong mpi.h included! require mpi.h from MPIUNI"
84423d37eSSatish Balay #endif
94423d37eSSatish Balay #if !defined(PETSC_STDCALL)
104423d37eSSatish Balay #define PETSC_STDCALL
114423d37eSSatish Balay #endif
12e5c89e4eSSatish Balay 
13e5c89e4eSSatish Balay #define MPI_SUCCESS 0
14e5c89e4eSSatish Balay #define MPI_FAILURE 1
15a297a907SKarl Rupp 
16e5c89e4eSSatish Balay void *MPIUNI_TMP         = 0;
17e5c89e4eSSatish Balay /*
18100f28aeSBarry Smith        With MPI Uni there are exactly four distinct communicators:
19100f28aeSBarry Smith     MPI_COMM_SELF, MPI_COMM_WORLD, and a MPI_Comm_dup() of each of these (duplicates of duplicates return the same communictor)
20100f28aeSBarry Smith 
21100f28aeSBarry Smith     MPI_COMM_SELF and MPI_COMM_WORLD are MPI_Comm_free() in MPI_Finalize() but in general with PETSc,
22100f28aeSBarry Smith      the other communicators are freed once the last PETSc object is freed (before MPI_Finalize()).
23100f28aeSBarry Smith 
24e5c89e4eSSatish Balay */
25e5c89e4eSSatish Balay #define MAX_ATTR 128
26fb53af6bSBarry Smith #define MAX_COMM 128
27fb53af6bSBarry Smith 
28fb53af6bSBarry Smith static int MaxComm = 2;
29e5c89e4eSSatish Balay 
30e5c89e4eSSatish Balay typedef struct {
31e5c89e4eSSatish Balay   void *attribute_val;
32e5c89e4eSSatish Balay   int  active;
33e5c89e4eSSatish Balay } MPI_Attr;
34e5c89e4eSSatish Balay 
3546651e72SBarry Smith typedef struct {
3646651e72SBarry Smith   void                *extra_state;
3746651e72SBarry Smith   MPI_Delete_function *del;
3846651e72SBarry Smith } MPI_Attr_keyval;
3946651e72SBarry Smith 
4046651e72SBarry Smith static MPI_Attr_keyval attr_keyval[MAX_ATTR];
41fb53af6bSBarry Smith static MPI_Attr        attr[MAX_COMM][MAX_ATTR];
42f60917d2SBarry Smith static int             comm_active[MAX_COMM];
43e5c89e4eSSatish Balay static int             num_attr = 1,mpi_tag_ub = 100000000;
4452ecd5ffSSatish Balay static void*           MPIUNIF_mpi_in_place = 0;
45e5c89e4eSSatish Balay 
46e5c89e4eSSatish Balay #if defined(__cplusplus)
47e5c89e4eSSatish Balay extern "C" {
48e5c89e4eSSatish Balay #endif
49e5c89e4eSSatish Balay 
50e5c89e4eSSatish Balay /*
51e5c89e4eSSatish Balay    To avoid problems with prototypes to the system memcpy() it is duplicated here
52e5c89e4eSSatish Balay */
53a6dfd86eSKarl Rupp int MPIUNI_Memcpy(void *a,const void *b,int n)
54a6dfd86eSKarl Rupp {
55e5c89e4eSSatish Balay   int  i;
56e5c89e4eSSatish Balay   char *aa= (char*)a;
57e5c89e4eSSatish Balay   char *bb= (char*)b;
58e5c89e4eSSatish Balay 
5952ecd5ffSSatish Balay   if (a == MPI_IN_PLACE || a == MPIUNIF_mpi_in_place) return 0;
6052ecd5ffSSatish Balay   if (b == MPI_IN_PLACE || b == MPIUNIF_mpi_in_place) return 0;
61e5c89e4eSSatish Balay   for (i=0; i<n; i++) aa[i] = bb[i];
62e5c89e4eSSatish Balay   return 0;
63e5c89e4eSSatish Balay }
64e5c89e4eSSatish Balay 
65*1a589b05SJed Brown int MPI_Type_get_envelope(MPI_Datatype datatype,int *num_integers,int *num_addresses,int *num_datatypes,int *combiner)
66*1a589b05SJed Brown {
67*1a589b05SJed Brown   int comb = datatype >> 28;
68*1a589b05SJed Brown   switch (comb) {
69*1a589b05SJed Brown   case MPI_COMBINER_NAMED:
70*1a589b05SJed Brown     *num_integers = 0;
71*1a589b05SJed Brown     *num_addresses = 0;
72*1a589b05SJed Brown     *num_datatypes = 0;
73*1a589b05SJed Brown     *combiner = comb;
74*1a589b05SJed Brown     break;
75*1a589b05SJed Brown   case MPI_COMBINER_DUP:
76*1a589b05SJed Brown     *num_integers = 0;
77*1a589b05SJed Brown     *num_addresses = 0;
78*1a589b05SJed Brown     *num_datatypes = 1;
79*1a589b05SJed Brown     *combiner = comb;
80*1a589b05SJed Brown     break;
81*1a589b05SJed Brown   case MPI_COMBINER_CONTIGUOUS:
82*1a589b05SJed Brown     *num_integers = 1;
83*1a589b05SJed Brown     *num_addresses = 0;
84*1a589b05SJed Brown     *num_datatypes = 1;
85*1a589b05SJed Brown     *combiner = comb;
86*1a589b05SJed Brown     break;
87*1a589b05SJed Brown   default:
88*1a589b05SJed Brown     return MPIUni_Abort(MPI_COMM_SELF,1);
89*1a589b05SJed Brown   }
90*1a589b05SJed Brown   return 0;
91*1a589b05SJed Brown }
92*1a589b05SJed Brown 
93*1a589b05SJed Brown int MPI_Type_get_contents(MPI_Datatype datatype,int max_integers,int max_addresses,int max_datatypes,int *array_of_integers,MPI_Aint *array_of_addresses,MPI_Datatype *array_of_datatypes)
94*1a589b05SJed Brown {
95*1a589b05SJed Brown   int comb = datatype >> 28;
96*1a589b05SJed Brown   switch (comb) {
97*1a589b05SJed Brown   case MPI_COMBINER_NAMED:
98*1a589b05SJed Brown     return MPIUni_Abort(MPI_COMM_SELF,1);
99*1a589b05SJed Brown     break;
100*1a589b05SJed Brown   case MPI_COMBINER_DUP:
101*1a589b05SJed Brown     if (max_datatypes < 1) return MPIUni_Abort(MPI_COMM_SELF,1);
102*1a589b05SJed Brown     array_of_datatypes[0] = datatype & 0x0fffffff;
103*1a589b05SJed Brown     break;
104*1a589b05SJed Brown   case MPI_COMBINER_CONTIGUOUS:
105*1a589b05SJed Brown     if (max_integers < 1 || max_datatypes < 1) return MPIUni_Abort(MPI_COMM_SELF,1);
106*1a589b05SJed Brown     array_of_integers[0] = (datatype >> 8) & 0xfff; /* count */
107*1a589b05SJed Brown     array_of_datatypes[0] = (datatype & 0x0ff000ff) | 0x100;  /* basic named type (count=1) from which the contiguous type is derived */
108*1a589b05SJed Brown     break;
109*1a589b05SJed Brown   default:
110*1a589b05SJed Brown     return MPIUni_Abort(MPI_COMM_SELF,1);
111*1a589b05SJed Brown   }
112*1a589b05SJed Brown   return 0;
113*1a589b05SJed Brown }
114*1a589b05SJed Brown 
115e5c89e4eSSatish Balay /*
116e5c89e4eSSatish Balay    Used to set the built-in MPI_TAG_UB attribute
117e5c89e4eSSatish Balay */
118e5c89e4eSSatish Balay static int Keyval_setup(void)
119e5c89e4eSSatish Balay {
120100f28aeSBarry Smith   attr[MPI_COMM_WORLD-1][0].active        = 1;
121100f28aeSBarry Smith   attr[MPI_COMM_WORLD-1][0].attribute_val = &mpi_tag_ub;
122100f28aeSBarry Smith   attr[MPI_COMM_SELF-1][0].active         = 1;
123100f28aeSBarry Smith   attr[MPI_COMM_SELF-1][0].attribute_val  = &mpi_tag_ub;
124e5c89e4eSSatish Balay   return 0;
125e5c89e4eSSatish Balay }
126e5c89e4eSSatish Balay 
127c8217ed5SSatish Balay int MPI_Keyval_create(MPI_Copy_function *copy_fn,MPI_Delete_function *delete_fn,int *keyval,void *extra_state)
128e5c89e4eSSatish Balay {
1299cf9c1dbSJed Brown   if (num_attr >= MAX_ATTR) return MPIUni_Abort(MPI_COMM_WORLD,1);
130e5c89e4eSSatish Balay 
13146651e72SBarry Smith   attr_keyval[num_attr].extra_state = extra_state;
13246651e72SBarry Smith   attr_keyval[num_attr].del         = delete_fn;
133e5c89e4eSSatish Balay   *keyval                           = num_attr++;
134e5c89e4eSSatish Balay   return 0;
135e5c89e4eSSatish Balay }
136e5c89e4eSSatish Balay 
137c8217ed5SSatish Balay int MPI_Keyval_free(int *keyval)
138e5c89e4eSSatish Balay {
139a246e310SBarry Smith   attr_keyval[*keyval].extra_state = 0;
140a246e310SBarry Smith   attr_keyval[*keyval].del         = 0;
141a297a907SKarl Rupp 
142a246e310SBarry Smith   *keyval = 0;
143e5c89e4eSSatish Balay   return MPI_SUCCESS;
144e5c89e4eSSatish Balay }
145e5c89e4eSSatish Balay 
146c8217ed5SSatish Balay int MPI_Attr_put(MPI_Comm comm,int keyval,void *attribute_val)
147e5c89e4eSSatish Balay {
148fb53af6bSBarry Smith   if (comm-1 < 0 || comm-1 > MaxComm) return 1;
149100f28aeSBarry Smith   attr[comm-1][keyval].active        = 1;
150100f28aeSBarry Smith   attr[comm-1][keyval].attribute_val = attribute_val;
151e5c89e4eSSatish Balay   return MPI_SUCCESS;
152e5c89e4eSSatish Balay }
153e5c89e4eSSatish Balay 
154c8217ed5SSatish Balay int MPI_Attr_delete(MPI_Comm comm,int keyval)
155e5c89e4eSSatish Balay {
156fb53af6bSBarry Smith   if (comm-1 < 0 || comm-1 > MaxComm) return 1;
157100f28aeSBarry Smith   if (attr[comm-1][keyval].active && attr_keyval[keyval].del) {
158100f28aeSBarry Smith     void *save_attribute_val = attr[comm-1][keyval].attribute_val;
159100f28aeSBarry Smith     attr[comm-1][keyval].active        = 0;
160100f28aeSBarry Smith     attr[comm-1][keyval].attribute_val = 0;
16146651e72SBarry Smith     (*(attr_keyval[keyval].del))(comm,keyval,save_attribute_val,attr_keyval[keyval].extra_state);
16240776e1bSpetsc   }
163e5c89e4eSSatish Balay   return MPI_SUCCESS;
164e5c89e4eSSatish Balay }
165e5c89e4eSSatish Balay 
166c8217ed5SSatish Balay int MPI_Attr_get(MPI_Comm comm,int keyval,void *attribute_val,int *flag)
167e5c89e4eSSatish Balay {
168fb53af6bSBarry Smith   if (comm-1 < 0 || comm-1 > MaxComm) return 1;
169e5c89e4eSSatish Balay   if (!keyval) Keyval_setup();
170100f28aeSBarry Smith   *flag                  = attr[comm-1][keyval].active;
171100f28aeSBarry Smith   *(void**)attribute_val = attr[comm-1][keyval].attribute_val;
172e5c89e4eSSatish Balay   return MPI_SUCCESS;
173e5c89e4eSSatish Balay }
174e5c89e4eSSatish Balay 
175c8217ed5SSatish Balay int MPI_Comm_create(MPI_Comm comm,MPI_Group group,MPI_Comm *newcomm)
176c8217ed5SSatish Balay {
177f60917d2SBarry Smith   int j;
178fb53af6bSBarry Smith   if (comm-1 < 0 || comm-1 > MaxComm) return 1;
179f60917d2SBarry Smith   for (j=3; j<MaxComm; j++) {
180f60917d2SBarry Smith     if (!comm_active[j-1]) {
181f60917d2SBarry Smith       comm_active[j-1] = 1;
182f60917d2SBarry Smith       *newcomm = j;
183f60917d2SBarry Smith       return MPI_SUCCESS;
184f60917d2SBarry Smith     }
185f60917d2SBarry Smith   }
186fb53af6bSBarry Smith   if (MaxComm > MAX_COMM) return MPI_FAILURE;
187fb53af6bSBarry Smith   *newcomm =  MaxComm++;
188f7f9ee71SBarry Smith   comm_active[*newcomm-1] = 1;
189c8217ed5SSatish Balay   return MPI_SUCCESS;
190c8217ed5SSatish Balay }
191c8217ed5SSatish Balay 
192c8217ed5SSatish Balay int MPI_Comm_dup(MPI_Comm comm,MPI_Comm *out)
193e5c89e4eSSatish Balay {
194f60917d2SBarry Smith   int j;
195fb53af6bSBarry Smith   if (comm-1 < 0 || comm-1 > MaxComm) return 1;
196f60917d2SBarry Smith   for (j=3; j<MaxComm; j++) {
197f60917d2SBarry Smith     if (!comm_active[j-1]) {
198f60917d2SBarry Smith       comm_active[j-1] = 1;
199f60917d2SBarry Smith       *out = j;
200f60917d2SBarry Smith       return MPI_SUCCESS;
201f60917d2SBarry Smith     }
202f60917d2SBarry Smith   }
203fb53af6bSBarry Smith   if (MaxComm > MAX_COMM) return MPI_FAILURE;
204fb53af6bSBarry Smith   *out = MaxComm++;
205f7f9ee71SBarry Smith   comm_active[*out-1] = 1;
206e5c89e4eSSatish Balay   return 0;
207e5c89e4eSSatish Balay }
208e5c89e4eSSatish Balay 
209c8217ed5SSatish Balay int MPI_Comm_free(MPI_Comm *comm)
210e5c89e4eSSatish Balay {
211e5c89e4eSSatish Balay   int i;
212e5c89e4eSSatish Balay 
213fb53af6bSBarry Smith   if (*comm-1 < 0 || *comm-1 > MaxComm) return 1;
214e5c89e4eSSatish Balay   for (i=0; i<num_attr; i++) {
215a297a907SKarl Rupp     if (attr[*comm-1][i].active && attr_keyval[i].del) (*attr_keyval[i].del)(*comm,i,attr[*comm-1][i].attribute_val,attr_keyval[i].extra_state);
216100f28aeSBarry Smith     attr[*comm-1][i].active        = 0;
217a246e310SBarry Smith     attr[*comm-1][i].attribute_val = 0;
218e5c89e4eSSatish Balay   }
219f60917d2SBarry Smith   if (*comm >= 3) comm_active[*comm-1] = 0;
220100f28aeSBarry Smith   *comm = 0;
221e5c89e4eSSatish Balay   return MPI_SUCCESS;
222e5c89e4eSSatish Balay }
223e5c89e4eSSatish Balay 
224d393f697SSatish Balay int MPI_Comm_size(MPI_Comm comm, int *size)
225d393f697SSatish Balay {
226fb53af6bSBarry Smith   if (comm-1 < 0 || comm-1 > MaxComm) return 1;
227d393f697SSatish Balay   *size=1;
228d393f697SSatish Balay   return MPI_SUCCESS;
229d393f697SSatish Balay }
230d393f697SSatish Balay 
231d393f697SSatish Balay int MPI_Comm_rank(MPI_Comm comm, int *rank)
232d393f697SSatish Balay {
233fb53af6bSBarry Smith   if (comm-1 < 0 || comm-1 > MaxComm) return 1;
234d393f697SSatish Balay   *rank=0;
235d393f697SSatish Balay   return MPI_SUCCESS;
236d393f697SSatish Balay }
237d393f697SSatish Balay 
23806df1fb1SBarry Smith int MPIUni_Abort(MPI_Comm comm,int errorcode)
23906df1fb1SBarry Smith {
24006df1fb1SBarry Smith   printf("MPI operation not supported by PETSc's sequential MPI wrappers\n");
24106df1fb1SBarry Smith   return MPI_FAILURE;
24206df1fb1SBarry Smith }
24306df1fb1SBarry Smith 
244c8217ed5SSatish Balay int MPI_Abort(MPI_Comm comm,int errorcode)
245e5c89e4eSSatish Balay {
246e5c89e4eSSatish Balay   abort();
247e5c89e4eSSatish Balay   return MPI_SUCCESS;
248e5c89e4eSSatish Balay }
249e5c89e4eSSatish Balay 
25058cd72c3SLisandro Dalcin /* --------------------------------------------------------------------------*/
25158cd72c3SLisandro Dalcin 
252e5c89e4eSSatish Balay static int MPI_was_initialized = 0;
25358cd72c3SLisandro Dalcin static int MPI_was_finalized   = 0;
25458cd72c3SLisandro Dalcin 
255c8217ed5SSatish Balay int MPI_Init(int *argc, char ***argv)
25658cd72c3SLisandro Dalcin {
2578f059c70SLisandro Dalcin   if (MPI_was_initialized) return 1;
2588f059c70SLisandro Dalcin   if (MPI_was_finalized) return 1;
25958cd72c3SLisandro Dalcin   MPI_was_initialized = 1;
26058cd72c3SLisandro Dalcin   return 0;
26158cd72c3SLisandro Dalcin }
26258cd72c3SLisandro Dalcin 
263c8217ed5SSatish Balay int MPI_Finalize(void)
26458cd72c3SLisandro Dalcin {
265100f28aeSBarry Smith   MPI_Comm comm;
2668f059c70SLisandro Dalcin   if (MPI_was_finalized) return 1;
2678f059c70SLisandro Dalcin   if (!MPI_was_initialized) return 1;
268100f28aeSBarry Smith   comm = MPI_COMM_WORLD;
269100f28aeSBarry Smith   MPI_Comm_free(&comm);
270100f28aeSBarry Smith   comm = MPI_COMM_SELF;
271100f28aeSBarry Smith   MPI_Comm_free(&comm);
27258cd72c3SLisandro Dalcin   MPI_was_finalized = 1;
27358cd72c3SLisandro Dalcin   return 0;
27458cd72c3SLisandro Dalcin }
275e5c89e4eSSatish Balay 
276c8217ed5SSatish Balay int MPI_Initialized(int *flag)
277e5c89e4eSSatish Balay {
278e5c89e4eSSatish Balay   *flag = MPI_was_initialized;
279e5c89e4eSSatish Balay   return 0;
280e5c89e4eSSatish Balay }
281e5c89e4eSSatish Balay 
282c8217ed5SSatish Balay int MPI_Finalized(int *flag)
283e5c89e4eSSatish Balay {
28458cd72c3SLisandro Dalcin   *flag = MPI_was_finalized;
285e5c89e4eSSatish Balay   return 0;
286e5c89e4eSSatish Balay }
287e5c89e4eSSatish Balay 
288e5c89e4eSSatish Balay /* -------------------     Fortran versions of several routines ------------------ */
289e5c89e4eSSatish Balay 
290f7c6e6aaSSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
29152ecd5ffSSatish Balay #define mpiunisetcommonblock_          MPIUNISETCOMMONBLOCK
29252ecd5ffSSatish Balay #define mpiunisetfortranbasepointers_  MPIUNISETFORTRANBASEPOINTERS
293a7b85bbcSSatish Balay #define petsc_mpi_init_                PETSC_MPI_INIT
294a7b85bbcSSatish Balay #define petsc_mpi_finalize_            PETSC_MPI_FINALIZE
295a7b85bbcSSatish Balay #define petsc_mpi_comm_size_           PETSC_MPI_COMM_SIZE
296a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_           PETSC_MPI_COMM_RANK
297a7b85bbcSSatish Balay #define petsc_mpi_abort_               PETSC_MPI_ABORT
298a7b85bbcSSatish Balay #define petsc_mpi_reduce_              PETSC_MPI_REDUCE
299a7b85bbcSSatish Balay #define petsc_mpi_allreduce_           PETSC_MPI_ALLREDUCE
300a7b85bbcSSatish Balay #define petsc_mpi_barrier_             PETSC_MPI_BARRIER
301a7b85bbcSSatish Balay #define petsc_mpi_bcast_               PETSC_MPI_BCAST
302a7b85bbcSSatish Balay #define petsc_mpi_gather_              PETSC_MPI_GATHER
303a7b85bbcSSatish Balay #define petsc_mpi_allgather_           PETSC_MPI_ALLGATHER
304a7b85bbcSSatish Balay #define petsc_mpi_comm_split_          PETSC_MPI_COMM_SPLIT
305a7b85bbcSSatish Balay #define petsc_mpi_scan_                PETSC_MPI_SCAN
306a7b85bbcSSatish Balay #define petsc_mpi_send_                PETSC_MPI_SEND
307a7b85bbcSSatish Balay #define petsc_mpi_recv_                PETSC_MPI_RECV
308a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_      PETSC_MPI_REDUCE_SCATTER
309a7b85bbcSSatish Balay #define petsc_mpi_irecv_               PETSC_MPI_IRECV
310a7b85bbcSSatish Balay #define petsc_mpi_isend_               PETSC_MPI_ISEND
311a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_            PETSC_MPI_SENDRECV
312a7b85bbcSSatish Balay #define petsc_mpi_test_                PETSC_MPI_TEST
313a7b85bbcSSatish Balay #define petsc_mpi_waitall_             PETSC_MPI_WAITALL
314a7b85bbcSSatish Balay #define petsc_mpi_waitany_             PETSC_MPI_WAITANY
315a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_          PETSC_MPI_ALLGATHERV
316a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_           PETSC_MPI_ALLTOALLV
317a7b85bbcSSatish Balay #define petsc_mpi_comm_create_         PETSC_MPI_COMM_CREATE
318a7b85bbcSSatish Balay #define petsc_mpi_address_             PETSC_MPI_ADDRESS
319a7b85bbcSSatish Balay #define petsc_mpi_pack_                PETSC_MPI_PACK
320a7b85bbcSSatish Balay #define petsc_mpi_unpack_              PETSC_MPI_UNPACK
321a7b85bbcSSatish Balay #define petsc_mpi_pack_size_           PETSC_MPI_PACK_SIZE
322a7b85bbcSSatish Balay #define petsc_mpi_type_struct_         PETSC_MPI_TYPE_STRUCT
323a7b85bbcSSatish Balay #define petsc_mpi_type_commit_         PETSC_MPI_TYPE_COMMIT
324a7b85bbcSSatish Balay #define petsc_mpi_wtime_               PETSC_MPI_WTIME
325a7b85bbcSSatish Balay #define petsc_mpi_cancel_              PETSC_MPI_CANCEL
326a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_            PETSC_MPI_COMM_DUP
327a7b85bbcSSatish Balay #define petsc_mpi_comm_free_           PETSC_MPI_COMM_FREE
328a7b85bbcSSatish Balay #define petsc_mpi_get_count_           PETSC_MPI_GET_COUNT
329a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_  PETSC_MPI_GET_PROCESSOR_NAME
330a7b85bbcSSatish Balay #define petsc_mpi_initialized_         PETSC_MPI_INITIALIZED
331a7b85bbcSSatish Balay #define petsc_mpi_iprobe_              PETSC_MPI_IPROBE
332a7b85bbcSSatish Balay #define petsc_mpi_probe_               PETSC_MPI_PROBE
333a7b85bbcSSatish Balay #define petsc_mpi_request_free_        PETSC_MPI_REQUEST_FREE
334a7b85bbcSSatish Balay #define petsc_mpi_ssend_               PETSC_MPI_SSEND
335a7b85bbcSSatish Balay #define petsc_mpi_wait_                PETSC_MPI_WAIT
336a7b85bbcSSatish Balay #define petsc_mpi_comm_group_          PETSC_MPI_COMM_GROUP
337a7b85bbcSSatish Balay #define petsc_mpi_exscan_              PETSC_MPI_EXSCAN
338f7c6e6aaSSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
33952ecd5ffSSatish Balay #define mpiunisetcommonblock_          mpiunisetcommonblock
34052ecd5ffSSatish Balay #define mpiunisetfortranbasepointers_  mpiunisetfortranbasepointers
341a7b85bbcSSatish Balay #define petsc_mpi_init_                petsc_mpi_init
342a7b85bbcSSatish Balay #define petsc_mpi_finalize_            petsc_mpi_finalize
343a7b85bbcSSatish Balay #define petsc_mpi_comm_size_           petsc_mpi_comm_size
344a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_           petsc_mpi_comm_rank
345a7b85bbcSSatish Balay #define petsc_mpi_abort_               petsc_mpi_abort
346a7b85bbcSSatish Balay #define petsc_mpi_reduce_              petsc_mpi_reduce
347a7b85bbcSSatish Balay #define petsc_mpi_allreduce_           petsc_mpi_allreduce
348a7b85bbcSSatish Balay #define petsc_mpi_barrier_             petsc_mpi_barrier
349a7b85bbcSSatish Balay #define petsc_mpi_bcast_               petsc_mpi_bcast
350a7b85bbcSSatish Balay #define petsc_mpi_gather_              petsc_mpi_gather
351a7b85bbcSSatish Balay #define petsc_mpi_allgather_           petsc_mpi_allgather
352a7b85bbcSSatish Balay #define petsc_mpi_comm_split_          petsc_mpi_comm_split
353a7b85bbcSSatish Balay #define petsc_mpi_scan_                petsc_mpi_scan
354a7b85bbcSSatish Balay #define petsc_mpi_send_                petsc_mpi_send
355a7b85bbcSSatish Balay #define petsc_mpi_recv_                petsc_mpi_recv
356a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_      petsc_mpi_reduce_scatter
357a7b85bbcSSatish Balay #define petsc_mpi_irecv_               petsc_mpi_irecv
358a7b85bbcSSatish Balay #define petsc_mpi_isend_               petsc_mpi_isend
359a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_            petsc_mpi_sendrecv
360a7b85bbcSSatish Balay #define petsc_mpi_test_                petsc_mpi_test
361a7b85bbcSSatish Balay #define petsc_mpi_waitall_             petsc_mpi_waitall
362a7b85bbcSSatish Balay #define petsc_mpi_waitany_             petsc_mpi_waitany
363a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_          petsc_mpi_allgatherv
364a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_           petsc_mpi_alltoallv
365a7b85bbcSSatish Balay #define petsc_mpi_comm_create_         petsc_mpi_comm_create
366a7b85bbcSSatish Balay #define petsc_mpi_address_             petsc_mpi_address
367a7b85bbcSSatish Balay #define petsc_mpi_pack_                petsc_mpi_pack
368a7b85bbcSSatish Balay #define petsc_mpi_unpack_              petsc_mpi_unpack
369a7b85bbcSSatish Balay #define petsc_mpi_pack_size_           petsc_mpi_pack_size
370a7b85bbcSSatish Balay #define petsc_mpi_type_struct_         petsc_mpi_type_struct
371a7b85bbcSSatish Balay #define petsc_mpi_type_commit_         petsc_mpi_type_commit
372a7b85bbcSSatish Balay #define petsc_mpi_wtime_               petsc_mpi_wtime
373a7b85bbcSSatish Balay #define petsc_mpi_cancel_              petsc_mpi_cancel
374a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_            petsc_mpi_comm_dup
375a7b85bbcSSatish Balay #define petsc_mpi_comm_free_           petsc_mpi_comm_free
376a7b85bbcSSatish Balay #define petsc_mpi_get_count_           petsc_mpi_get_count
377a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_  petsc_mpi_get_processor_name
378a7b85bbcSSatish Balay #define petsc_mpi_initialized_         petsc_mpi_initialized
379a7b85bbcSSatish Balay #define petsc_mpi_iprobe_              petsc_mpi_iprobe
380a7b85bbcSSatish Balay #define petsc_mpi_probe_               petsc_mpi_probe
381a7b85bbcSSatish Balay #define petsc_mpi_request_free_        petsc_mpi_request_free
382a7b85bbcSSatish Balay #define petsc_mpi_ssend_               petsc_mpi_ssend
383a7b85bbcSSatish Balay #define petsc_mpi_wait_                petsc_mpi_wait
384a7b85bbcSSatish Balay #define petsc_mpi_comm_group_          petsc_mpi_comm_group
385a7b85bbcSSatish Balay #define petsc_mpi_exscan_              petsc_mpi_exscan
386f7c6e6aaSSatish Balay #endif
387e5c89e4eSSatish Balay 
388f7c6e6aaSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE_UNDERSCORE)
389a7b85bbcSSatish Balay #define petsc_mpi_init_                petsc_mpi_init__
390a7b85bbcSSatish Balay #define petsc_mpi_finalize_            petsc_mpi_finalize__
391a7b85bbcSSatish Balay #define petsc_mpi_comm_size_           petsc_mpi_comm_size__
392a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_           petsc_mpi_comm_rank__
393a7b85bbcSSatish Balay #define petsc_mpi_abort_               petsc_mpi_abort__
394a7b85bbcSSatish Balay #define petsc_mpi_reduce_              petsc_mpi_reduce__
395a7b85bbcSSatish Balay #define petsc_mpi_allreduce_           petsc_mpi_allreduce__
396a7b85bbcSSatish Balay #define petsc_mpi_barrier_             petsc_mpi_barrier__
397a7b85bbcSSatish Balay #define petsc_mpi_bcast_               petsc_mpi_bcast__
398a7b85bbcSSatish Balay #define petsc_mpi_gather_              petsc_mpi_gather__
399a7b85bbcSSatish Balay #define petsc_mpi_allgather_           petsc_mpi_allgather__
400a7b85bbcSSatish Balay #define petsc_mpi_comm_split_          petsc_mpi_comm_split__
401a7b85bbcSSatish Balay #define petsc_mpi_scan_                petsc_mpi_scan__
402a7b85bbcSSatish Balay #define petsc_mpi_send_                petsc_mpi_send__
403a7b85bbcSSatish Balay #define petsc_mpi_recv_                petsc_mpi_recv__
404a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_      petsc_mpi_reduce_scatter__
405a7b85bbcSSatish Balay #define petsc_mpi_irecv_               petsc_mpi_irecv__
406a7b85bbcSSatish Balay #define petsc_mpi_isend_               petsc_mpi_isend__
407a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_            petsc_mpi_sendrecv__
408a7b85bbcSSatish Balay #define petsc_mpi_test_                petsc_mpi_test__
409a7b85bbcSSatish Balay #define petsc_mpi_waitall_             petsc_mpi_waitall__
410a7b85bbcSSatish Balay #define petsc_mpi_waitany_             petsc_mpi_waitany__
411a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_          petsc_mpi_allgatherv__
412a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_           petsc_mpi_alltoallv__
413a7b85bbcSSatish Balay #define petsc_mpi_comm_create_         petsc_mpi_comm_create__
414a7b85bbcSSatish Balay #define petsc_mpi_address_             petsc_mpi_address__
415a7b85bbcSSatish Balay #define petsc_mpi_pack_                petsc_mpi_pack__
416a7b85bbcSSatish Balay #define petsc_mpi_unpack_              petsc_mpi_unpack__
417a7b85bbcSSatish Balay #define petsc_mpi_pack_size_           petsc_mpi_pack_size__
418a7b85bbcSSatish Balay #define petsc_mpi_type_struct_         petsc_mpi_type_struct__
419a7b85bbcSSatish Balay #define petsc_mpi_type_commit_         petsc_mpi_type_commit__
420a7b85bbcSSatish Balay #define petsc_mpi_wtime_               petsc_mpi_wtime__
421a7b85bbcSSatish Balay #define petsc_mpi_cancel_              petsc_mpi_cancel__
422a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_            petsc_mpi_comm_dup__
423a7b85bbcSSatish Balay #define petsc_mpi_comm_free_           petsc_mpi_comm_free__
424a7b85bbcSSatish Balay #define petsc_mpi_get_count_           petsc_mpi_get_count__
425a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_  petsc_mpi_get_processor_name__
426a7b85bbcSSatish Balay #define petsc_mpi_initialized_         petsc_mpi_initialized__
427a7b85bbcSSatish Balay #define petsc_mpi_iprobe_              petsc_mpi_iprobe__
428a7b85bbcSSatish Balay #define petsc_mpi_probe_               petsc_mpi_probe__
429a7b85bbcSSatish Balay #define petsc_mpi_request_free_        petsc_mpi_request_free__
430a7b85bbcSSatish Balay #define petsc_mpi_ssend_               petsc_mpi_ssend__
431a7b85bbcSSatish Balay #define petsc_mpi_wait_                petsc_mpi_wait__
432a7b85bbcSSatish Balay #define petsc_mpi_comm_group_          petsc_mpi_comm_group__
433a7b85bbcSSatish Balay #define petsc_mpi_exscan_              petsc_mpi_exscan__
434f7c6e6aaSSatish Balay #endif
435e5c89e4eSSatish Balay 
436c8217ed5SSatish Balay /* Do not build fortran interface if MPI namespace colision is to be avoided */
437a7b85bbcSSatish Balay #if defined(PETSC_HAVE_FORTRAN)
438c8217ed5SSatish Balay 
43952ecd5ffSSatish Balay PETSC_EXTERN void PETSC_STDCALL mpiunisetcommonblock_(void);
44052ecd5ffSSatish Balay 
44152ecd5ffSSatish Balay PETSC_EXTERN void PETSC_STDCALL mpiunisetfortranbasepointers_(void *f_mpi_in_place)
44252ecd5ffSSatish Balay {
44352ecd5ffSSatish Balay   MPIUNIF_mpi_in_place   = f_mpi_in_place;
44452ecd5ffSSatish Balay }
44552ecd5ffSSatish Balay 
446a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_init_(int *ierr)
447e5c89e4eSSatish Balay {
44852ecd5ffSSatish Balay   mpiunisetcommonblock_();
449c8217ed5SSatish Balay   *ierr = MPI_Init((int*)0, (char***)0);
450e5c89e4eSSatish Balay }
451e5c89e4eSSatish Balay 
452a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_finalize_(int *ierr)
453e5c89e4eSSatish Balay {
454c8217ed5SSatish Balay   *ierr = MPI_Finalize();
455e5c89e4eSSatish Balay }
456e5c89e4eSSatish Balay 
457a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_size_(MPI_Comm *comm,int *size,int *ierr)
458e5c89e4eSSatish Balay {
459e5c89e4eSSatish Balay   *size = 1;
460e5c89e4eSSatish Balay   *ierr = 0;
461e5c89e4eSSatish Balay }
462e5c89e4eSSatish Balay 
463a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_rank_(MPI_Comm *comm,int *rank,int *ierr)
464e5c89e4eSSatish Balay {
465e5c89e4eSSatish Balay   *rank = 0;
466e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
467e5c89e4eSSatish Balay }
468e5c89e4eSSatish Balay 
469a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_split_(MPI_Comm *comm,int *color,int *key, MPI_Comm *newcomm, int *ierr)
4701f6cc5b2SSatish Balay {
4711f6cc5b2SSatish Balay   *newcomm = *comm;
4721f6cc5b2SSatish Balay   *ierr    = MPI_SUCCESS;
4731f6cc5b2SSatish Balay }
4741f6cc5b2SSatish Balay 
475a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_abort_(MPI_Comm *comm,int *errorcode,int *ierr)
476e5c89e4eSSatish Balay {
477e5c89e4eSSatish Balay   abort();
478e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
479e5c89e4eSSatish Balay }
480e5c89e4eSSatish Balay 
481a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_reduce_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *root,int *comm,int *ierr)
4823b644628SSatish Balay {
483f30578ecSBarry Smith   *ierr = MPI_Reduce(sendbuf,recvbuf,*count,*datatype,*op,*root,*comm);
4843b644628SSatish Balay }
4853b644628SSatish Balay 
486a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_allreduce_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr)
487e5c89e4eSSatish Balay {
488f30578ecSBarry Smith   *ierr = MPI_Allreduce(sendbuf,recvbuf,*count,*datatype,*op,*comm);
489e5c89e4eSSatish Balay }
490e5c89e4eSSatish Balay 
491a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_barrier_(MPI_Comm *comm,int *ierr)
492e5c89e4eSSatish Balay {
493e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
494e5c89e4eSSatish Balay }
495f7c6e6aaSSatish Balay 
496a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_bcast_(void *buf,int *count,int *datatype,int *root,int *comm,int *ierr)
497e5c89e4eSSatish Balay {
498e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
499e5c89e4eSSatish Balay }
500f7c6e6aaSSatish Balay 
501a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_gather_(void *sendbuf,int *scount,int *sdatatype, void *recvbuf, int *rcount, int *rdatatype, int *root,int *comm,int *ierr)
502e5c89e4eSSatish Balay {
503f30578ecSBarry Smith   *ierr = MPI_Gather(sendbuf,*scount,*sdatatype,recvbuf,rcount,rdatatype,*root,*comm);
504f7c6e6aaSSatish Balay }
505f7c6e6aaSSatish Balay 
506a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_allgather_(void *sendbuf,int *scount,int *sdatatype, void *recvbuf, int *rcount, int *rdatatype,int *comm,int *ierr)
507f7c6e6aaSSatish Balay {
508f30578ecSBarry Smith   *ierr = MPI_Allgather(sendbuf,*scount,*sdatatype,recvbuf,rcount,rdatatype,*comm);
509e5c89e4eSSatish Balay }
510e5c89e4eSSatish Balay 
511a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_scan_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr)
5123b644628SSatish Balay {
513*1a589b05SJed Brown   *ierr = MPIUNI_Memcpy(recvbuf,sendbuf,(*count)*MPI_sizeof(*datatype));
5143b644628SSatish Balay }
5153b644628SSatish Balay 
516a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_send_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *ierr)
5171086b069SSatish Balay {
51806df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
5191086b069SSatish Balay }
5201086b069SSatish Balay 
521a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_recv_(void *buf,int *count,int *datatype,int *source,int *tag,int *comm,int status,int *ierr)
5221086b069SSatish Balay {
52306df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
5241086b069SSatish Balay }
5251086b069SSatish Balay 
526a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_reduce_scatter_(void *sendbuf,void *recvbuf,int *recvcounts,int *datatype,int *op,int *comm,int *ierr)
527156bc490SSatish Balay {
52806df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
529156bc490SSatish Balay }
530156bc490SSatish Balay 
531a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_irecv_(void *buf,int *count, int *datatype, int *source, int *tag, int *comm, int *request, int *ierr)
532156bc490SSatish Balay {
53306df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
534156bc490SSatish Balay }
535156bc490SSatish Balay 
536a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_isend_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *request, int *ierr)
537156bc490SSatish Balay {
53806df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
539156bc490SSatish Balay }
540156bc490SSatish Balay 
541a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_sendrecv_(void *sendbuf,int *sendcount,int *sendtype,int *dest,int *sendtag,void *recvbuf,int *recvcount,int *recvtype,int *source,int *recvtag,int *comm,int *status,int *ierr)
542156bc490SSatish Balay {
543*1a589b05SJed Brown   *ierr = MPIUNI_Memcpy(recvbuf,sendbuf,(*sendcount)*MPI_sizeof(*sendtype));
544156bc490SSatish Balay }
545156bc490SSatish Balay 
546a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_test_(int *request,int *flag,int *status,int *ierr)
547156bc490SSatish Balay {
54806df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
549156bc490SSatish Balay }
550156bc490SSatish Balay 
551a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_waitall_(int *count,int *array_of_requests,int *array_of_statuses,int *ierr)
552156bc490SSatish Balay {
553156bc490SSatish Balay   *ierr = MPI_SUCCESS;
554156bc490SSatish Balay }
555156bc490SSatish Balay 
556a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_waitany_(int *count,int *array_of_requests,int * index, int *status,int *ierr)
557156bc490SSatish Balay {
558156bc490SSatish Balay   *ierr = MPI_SUCCESS;
559156bc490SSatish Balay }
560156bc490SSatish Balay 
561a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_allgatherv_(void *sendbuf,int *sendcount,int *sendtype,void *recvbuf,int *recvcounts,int *displs,int *recvtype,int *comm,int *ierr)
562156bc490SSatish Balay {
563f30578ecSBarry Smith   *ierr = MPI_Allgatherv(sendbuf,*sendcount,*sendtype,recvbuf,recvcounts,displs,*recvtype,*comm);
564156bc490SSatish Balay }
565156bc490SSatish Balay 
566a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_alltoallv_(void *sendbuf,int *sendcounts,int *sdispls,int *sendtype,void *recvbuf,int *recvcounts,int *rdispls,int *recvtype,int *comm,int *ierr)
567156bc490SSatish Balay {
568f30578ecSBarry Smith   *ierr = MPI_Alltoallv(sendbuf,sendcounts,sdispls,*sendtype,recvbuf,recvcounts,rdispls,*recvtype,*comm);
569156bc490SSatish Balay }
570156bc490SSatish Balay 
571a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_create_(int *comm,int *group,int *newcomm,int *ierr)
572156bc490SSatish Balay {
573156bc490SSatish Balay   *newcomm =  *comm;
574156bc490SSatish Balay   *ierr    = MPI_SUCCESS;
575156bc490SSatish Balay }
576156bc490SSatish Balay 
577a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_address_(void *location,MPIUNI_INTPTR *address,int *ierr)
578156bc490SSatish Balay {
579e87984cdSSatish Balay   *address =  (MPIUNI_INTPTR) location;
580156bc490SSatish Balay   *ierr    = MPI_SUCCESS;
581156bc490SSatish Balay }
582156bc490SSatish Balay 
583a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_pack_(void *inbuf,int *incount,int *datatype,void *outbuf,int *outsize,int *position,int *comm,int *ierr)
584156bc490SSatish Balay {
58506df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
586156bc490SSatish Balay }
587156bc490SSatish Balay 
588a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_unpack_(void *inbuf,int *insize,int *position,void *outbuf,int *outcount,int *datatype,int *comm,int *ierr)
589156bc490SSatish Balay {
59006df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
591156bc490SSatish Balay }
592156bc490SSatish Balay 
593a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_pack_size_(int *incount,int *datatype,int *comm,int *size,int *ierr)
594156bc490SSatish Balay {
59506df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
596156bc490SSatish Balay }
597156bc490SSatish Balay 
598a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_type_struct_(int *count,int *array_of_blocklengths,int * array_of_displaments,int *array_of_types,int *newtype,int *ierr)
599156bc490SSatish Balay {
60006df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
601156bc490SSatish Balay }
602156bc490SSatish Balay 
603a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_type_commit_(int *datatype,int *ierr)
604156bc490SSatish Balay {
605156bc490SSatish Balay   *ierr = MPI_SUCCESS;
606156bc490SSatish Balay }
607156bc490SSatish Balay 
608a7b85bbcSSatish Balay double PETSC_STDCALL petsc_mpi_wtime_(void)
609156bc490SSatish Balay {
610156bc490SSatish Balay   return 0.0;
611f8f52c7dSSatish Balay }
612156bc490SSatish Balay 
613a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_cancel_(int *request,int *ierr)
614f8f52c7dSSatish Balay {
615f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
616f8f52c7dSSatish Balay }
617f8f52c7dSSatish Balay 
618a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_dup_(int *comm,int *out,int *ierr)
619f8f52c7dSSatish Balay {
620f8f52c7dSSatish Balay   *out  = *comm;
621f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
622f8f52c7dSSatish Balay }
623f8f52c7dSSatish Balay 
624a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_free_(int *comm,int *ierr)
625f8f52c7dSSatish Balay {
626f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
627f8f52c7dSSatish Balay }
628f8f52c7dSSatish Balay 
629a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_get_count_(int *status,int *datatype,int *count,int *ierr)
630f8f52c7dSSatish Balay {
63106df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
632f8f52c7dSSatish Balay }
633f8f52c7dSSatish Balay 
634ce0a2cd1SBarry Smith /* duplicate from fortranimpl.h */
635f8f52c7dSSatish Balay #if defined(PETSC_HAVE_FORTRAN_MIXED_STR_ARG)
636f8f52c7dSSatish Balay #define PETSC_MIXED_LEN(len) ,int len
637f8f52c7dSSatish Balay #define PETSC_END_LEN(len)
638f8f52c7dSSatish Balay #else
639f8f52c7dSSatish Balay #define PETSC_MIXED_LEN(len)
640f8f52c7dSSatish Balay #define PETSC_END_LEN(len)   ,int len
641f8f52c7dSSatish Balay #endif
642f8f52c7dSSatish Balay 
643a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_get_processor_name_(char *name PETSC_MIXED_LEN(len),int *result_len,int *ierr PETSC_END_LEN(len))
644f8f52c7dSSatish Balay {
645f8f52c7dSSatish Balay   MPIUNI_Memcpy(name,"localhost",9*sizeof(char));
646f8f52c7dSSatish Balay   *result_len = 9;
647f8f52c7dSSatish Balay   *ierr       = MPI_SUCCESS;
648f8f52c7dSSatish Balay }
649f8f52c7dSSatish Balay 
650a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_initialized_(int *flag,int *ierr)
651f8f52c7dSSatish Balay {
652f8f52c7dSSatish Balay   *flag = MPI_was_initialized;
653f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
654f8f52c7dSSatish Balay }
655f8f52c7dSSatish Balay 
656a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_iprobe_(int *source,int *tag,int *comm,int *glag,int *status,int *ierr)
657f8f52c7dSSatish Balay {
658f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
659f8f52c7dSSatish Balay }
660f8f52c7dSSatish Balay 
661a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_probe_(int *source,int *tag,int *comm,int *flag,int *status,int *ierr)
662f8f52c7dSSatish Balay {
663f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
664f8f52c7dSSatish Balay }
665f8f52c7dSSatish Balay 
666a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_request_free_(int *request,int *ierr)
667f8f52c7dSSatish Balay {
668f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
669f8f52c7dSSatish Balay }
670f8f52c7dSSatish Balay 
671a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_ssend_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *ierr)
672f8f52c7dSSatish Balay {
67306df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
674f8f52c7dSSatish Balay }
675f8f52c7dSSatish Balay 
676a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_wait_(int *request,int *status,int *ierr)
677f8f52c7dSSatish Balay {
678f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
679156bc490SSatish Balay }
680156bc490SSatish Balay 
681a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_group_(int *comm,int *group,int *ierr)
682d4816372SSatish Balay {
683d4816372SSatish Balay   *ierr = MPI_SUCCESS;
684d4816372SSatish Balay }
685d4816372SSatish Balay 
686a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_exscan_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr)
687d4816372SSatish Balay {
688d4816372SSatish Balay   *ierr = MPI_SUCCESS;
689d4816372SSatish Balay }
690d4816372SSatish Balay 
691a7b85bbcSSatish Balay #endif /* PETSC_HAVE_FORTRAN */
692c8217ed5SSatish Balay 
693e5c89e4eSSatish Balay #if defined(__cplusplus)
694e5c89e4eSSatish Balay }
695e5c89e4eSSatish Balay #endif
696