xref: /petsc/src/sys/mpiuni/mpi.c (revision 992568525dc78450d29be7cf7c589d143c34945b)
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 
16*99256852SLisandro Dalcin void *MPIUNI_TMP = NULL;
17*99256852SLisandro Dalcin 
18e5c89e4eSSatish Balay /*
19100f28aeSBarry Smith        With MPI Uni there are exactly four distinct communicators:
20100f28aeSBarry Smith     MPI_COMM_SELF, MPI_COMM_WORLD, and a MPI_Comm_dup() of each of these (duplicates of duplicates return the same communictor)
21100f28aeSBarry Smith 
22100f28aeSBarry Smith     MPI_COMM_SELF and MPI_COMM_WORLD are MPI_Comm_free() in MPI_Finalize() but in general with PETSc,
23100f28aeSBarry Smith      the other communicators are freed once the last PETSc object is freed (before MPI_Finalize()).
24100f28aeSBarry Smith 
25e5c89e4eSSatish Balay */
26e5c89e4eSSatish Balay #define MAX_ATTR 128
27fb53af6bSBarry Smith #define MAX_COMM 128
28fb53af6bSBarry Smith 
29fb53af6bSBarry Smith static int MaxComm = 2;
30e5c89e4eSSatish Balay 
31e5c89e4eSSatish Balay typedef struct {
32e5c89e4eSSatish Balay   void *attribute_val;
33e5c89e4eSSatish Balay   int  active;
34e5c89e4eSSatish Balay } MPI_Attr;
35e5c89e4eSSatish Balay 
3646651e72SBarry Smith typedef struct {
3746651e72SBarry Smith   void                *extra_state;
3846651e72SBarry Smith   MPI_Delete_function *del;
3946651e72SBarry Smith } MPI_Attr_keyval;
4046651e72SBarry Smith 
4146651e72SBarry Smith static MPI_Attr_keyval attr_keyval[MAX_ATTR];
42fb53af6bSBarry Smith static MPI_Attr        attr[MAX_COMM][MAX_ATTR];
43f60917d2SBarry Smith static int             comm_active[MAX_COMM];
44e5c89e4eSSatish Balay static int             num_attr = 1,mpi_tag_ub = 100000000;
4552ecd5ffSSatish Balay static void*           MPIUNIF_mpi_in_place = 0;
46e5c89e4eSSatish Balay 
47e5c89e4eSSatish Balay #if defined(__cplusplus)
48e5c89e4eSSatish Balay extern "C" {
49e5c89e4eSSatish Balay #endif
50e5c89e4eSSatish Balay 
51e5c89e4eSSatish Balay /*
52e5c89e4eSSatish Balay    To avoid problems with prototypes to the system memcpy() it is duplicated here
53e5c89e4eSSatish Balay */
54a6dfd86eSKarl Rupp int MPIUNI_Memcpy(void *a,const void *b,int n)
55a6dfd86eSKarl Rupp {
56e5c89e4eSSatish Balay   int  i;
57e5c89e4eSSatish Balay   char *aa= (char*)a;
58e5c89e4eSSatish Balay   char *bb= (char*)b;
59e5c89e4eSSatish Balay 
60*99256852SLisandro Dalcin   if (a == MPI_IN_PLACE || a == MPIUNIF_mpi_in_place) return MPI_SUCCESS;
61*99256852SLisandro Dalcin   if (b == MPI_IN_PLACE || b == MPIUNIF_mpi_in_place) return MPI_SUCCESS;
62e5c89e4eSSatish Balay   for (i=0; i<n; i++) aa[i] = bb[i];
63*99256852SLisandro Dalcin   return MPI_SUCCESS;
64e5c89e4eSSatish Balay }
65e5c89e4eSSatish Balay 
661a589b05SJed Brown int MPI_Type_get_envelope(MPI_Datatype datatype,int *num_integers,int *num_addresses,int *num_datatypes,int *combiner)
671a589b05SJed Brown {
681a589b05SJed Brown   int comb = datatype >> 28;
691a589b05SJed Brown   switch (comb) {
701a589b05SJed Brown   case MPI_COMBINER_NAMED:
711a589b05SJed Brown     *num_integers = 0;
721a589b05SJed Brown     *num_addresses = 0;
731a589b05SJed Brown     *num_datatypes = 0;
741a589b05SJed Brown     *combiner = comb;
751a589b05SJed Brown     break;
761a589b05SJed Brown   case MPI_COMBINER_DUP:
771a589b05SJed Brown     *num_integers = 0;
781a589b05SJed Brown     *num_addresses = 0;
791a589b05SJed Brown     *num_datatypes = 1;
801a589b05SJed Brown     *combiner = comb;
811a589b05SJed Brown     break;
821a589b05SJed Brown   case MPI_COMBINER_CONTIGUOUS:
831a589b05SJed Brown     *num_integers = 1;
841a589b05SJed Brown     *num_addresses = 0;
851a589b05SJed Brown     *num_datatypes = 1;
861a589b05SJed Brown     *combiner = comb;
871a589b05SJed Brown     break;
881a589b05SJed Brown   default:
891a589b05SJed Brown     return MPIUni_Abort(MPI_COMM_SELF,1);
901a589b05SJed Brown   }
91*99256852SLisandro Dalcin   return MPI_SUCCESS;
921a589b05SJed Brown }
931a589b05SJed Brown 
941a589b05SJed 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)
951a589b05SJed Brown {
961a589b05SJed Brown   int comb = datatype >> 28;
971a589b05SJed Brown   switch (comb) {
981a589b05SJed Brown   case MPI_COMBINER_NAMED:
991a589b05SJed Brown     return MPIUni_Abort(MPI_COMM_SELF,1);
1001a589b05SJed Brown     break;
1011a589b05SJed Brown   case MPI_COMBINER_DUP:
1021a589b05SJed Brown     if (max_datatypes < 1) return MPIUni_Abort(MPI_COMM_SELF,1);
1031a589b05SJed Brown     array_of_datatypes[0] = datatype & 0x0fffffff;
1041a589b05SJed Brown     break;
1051a589b05SJed Brown   case MPI_COMBINER_CONTIGUOUS:
1061a589b05SJed Brown     if (max_integers < 1 || max_datatypes < 1) return MPIUni_Abort(MPI_COMM_SELF,1);
1071a589b05SJed Brown     array_of_integers[0] = (datatype >> 8) & 0xfff; /* count */
1081a589b05SJed Brown     array_of_datatypes[0] = (datatype & 0x0ff000ff) | 0x100;  /* basic named type (count=1) from which the contiguous type is derived */
1091a589b05SJed Brown     break;
1101a589b05SJed Brown   default:
1111a589b05SJed Brown     return MPIUni_Abort(MPI_COMM_SELF,1);
1121a589b05SJed Brown   }
113*99256852SLisandro Dalcin   return MPI_SUCCESS;
1141a589b05SJed Brown }
1151a589b05SJed Brown 
116e5c89e4eSSatish Balay /*
117e5c89e4eSSatish Balay    Used to set the built-in MPI_TAG_UB attribute
118e5c89e4eSSatish Balay */
119e5c89e4eSSatish Balay static int Keyval_setup(void)
120e5c89e4eSSatish Balay {
121100f28aeSBarry Smith   attr[MPI_COMM_WORLD-1][0].active        = 1;
122100f28aeSBarry Smith   attr[MPI_COMM_WORLD-1][0].attribute_val = &mpi_tag_ub;
123100f28aeSBarry Smith   attr[MPI_COMM_SELF-1][0].active         = 1;
124100f28aeSBarry Smith   attr[MPI_COMM_SELF-1][0].attribute_val  = &mpi_tag_ub;
125*99256852SLisandro Dalcin   return MPI_SUCCESS;
126e5c89e4eSSatish Balay }
127e5c89e4eSSatish Balay 
128c8217ed5SSatish Balay int MPI_Keyval_create(MPI_Copy_function *copy_fn,MPI_Delete_function *delete_fn,int *keyval,void *extra_state)
129e5c89e4eSSatish Balay {
1309cf9c1dbSJed Brown   if (num_attr >= MAX_ATTR) return MPIUni_Abort(MPI_COMM_WORLD,1);
131e5c89e4eSSatish Balay 
13246651e72SBarry Smith   attr_keyval[num_attr].extra_state = extra_state;
13346651e72SBarry Smith   attr_keyval[num_attr].del         = delete_fn;
134e5c89e4eSSatish Balay   *keyval                           = num_attr++;
135*99256852SLisandro Dalcin   return MPI_SUCCESS;
136e5c89e4eSSatish Balay }
137e5c89e4eSSatish Balay 
138c8217ed5SSatish Balay int MPI_Keyval_free(int *keyval)
139e5c89e4eSSatish Balay {
140a246e310SBarry Smith   attr_keyval[*keyval].extra_state = 0;
141a246e310SBarry Smith   attr_keyval[*keyval].del         = 0;
142a297a907SKarl Rupp 
143a246e310SBarry Smith   *keyval = 0;
144e5c89e4eSSatish Balay   return MPI_SUCCESS;
145e5c89e4eSSatish Balay }
146e5c89e4eSSatish Balay 
147c8217ed5SSatish Balay int MPI_Attr_put(MPI_Comm comm,int keyval,void *attribute_val)
148e5c89e4eSSatish Balay {
149*99256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
150100f28aeSBarry Smith   attr[comm-1][keyval].active        = 1;
151100f28aeSBarry Smith   attr[comm-1][keyval].attribute_val = attribute_val;
152e5c89e4eSSatish Balay   return MPI_SUCCESS;
153e5c89e4eSSatish Balay }
154e5c89e4eSSatish Balay 
155c8217ed5SSatish Balay int MPI_Attr_delete(MPI_Comm comm,int keyval)
156e5c89e4eSSatish Balay {
157*99256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
158100f28aeSBarry Smith   if (attr[comm-1][keyval].active && attr_keyval[keyval].del) {
159100f28aeSBarry Smith     void *save_attribute_val = attr[comm-1][keyval].attribute_val;
160100f28aeSBarry Smith     attr[comm-1][keyval].active        = 0;
161100f28aeSBarry Smith     attr[comm-1][keyval].attribute_val = 0;
16246651e72SBarry Smith     (*(attr_keyval[keyval].del))(comm,keyval,save_attribute_val,attr_keyval[keyval].extra_state);
16340776e1bSpetsc   }
164e5c89e4eSSatish Balay   return MPI_SUCCESS;
165e5c89e4eSSatish Balay }
166e5c89e4eSSatish Balay 
167c8217ed5SSatish Balay int MPI_Attr_get(MPI_Comm comm,int keyval,void *attribute_val,int *flag)
168e5c89e4eSSatish Balay {
169*99256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
170e5c89e4eSSatish Balay   if (!keyval) Keyval_setup();
171100f28aeSBarry Smith   *flag                  = attr[comm-1][keyval].active;
172100f28aeSBarry Smith   *(void**)attribute_val = attr[comm-1][keyval].attribute_val;
173e5c89e4eSSatish Balay   return MPI_SUCCESS;
174e5c89e4eSSatish Balay }
175e5c89e4eSSatish Balay 
176c8217ed5SSatish Balay int MPI_Comm_create(MPI_Comm comm,MPI_Group group,MPI_Comm *newcomm)
177c8217ed5SSatish Balay {
178f60917d2SBarry Smith   int j;
179*99256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
180f60917d2SBarry Smith   for (j=3; j<MaxComm; j++) {
181f60917d2SBarry Smith     if (!comm_active[j-1]) {
182f60917d2SBarry Smith       comm_active[j-1] = 1;
183f60917d2SBarry Smith       *newcomm = j;
184f60917d2SBarry Smith       return MPI_SUCCESS;
185f60917d2SBarry Smith     }
186f60917d2SBarry Smith   }
187fb53af6bSBarry Smith   if (MaxComm > MAX_COMM) return MPI_FAILURE;
188fb53af6bSBarry Smith   *newcomm =  MaxComm++;
189f7f9ee71SBarry Smith   comm_active[*newcomm-1] = 1;
190c8217ed5SSatish Balay   return MPI_SUCCESS;
191c8217ed5SSatish Balay }
192c8217ed5SSatish Balay 
193c8217ed5SSatish Balay int MPI_Comm_dup(MPI_Comm comm,MPI_Comm *out)
194e5c89e4eSSatish Balay {
195f60917d2SBarry Smith   int j;
196*99256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
197f60917d2SBarry Smith   for (j=3; j<MaxComm; j++) {
198f60917d2SBarry Smith     if (!comm_active[j-1]) {
199f60917d2SBarry Smith       comm_active[j-1] = 1;
200f60917d2SBarry Smith       *out = j;
201f60917d2SBarry Smith       return MPI_SUCCESS;
202f60917d2SBarry Smith     }
203f60917d2SBarry Smith   }
204fb53af6bSBarry Smith   if (MaxComm > MAX_COMM) return MPI_FAILURE;
205fb53af6bSBarry Smith   *out = MaxComm++;
206f7f9ee71SBarry Smith   comm_active[*out-1] = 1;
207*99256852SLisandro Dalcin   return MPI_SUCCESS;
208e5c89e4eSSatish Balay }
209e5c89e4eSSatish Balay 
210c8217ed5SSatish Balay int MPI_Comm_free(MPI_Comm *comm)
211e5c89e4eSSatish Balay {
212e5c89e4eSSatish Balay   int i;
213e5c89e4eSSatish Balay 
214*99256852SLisandro Dalcin   if (*comm-1 < 0 || *comm-1 > MaxComm) return MPI_FAILURE;
215e5c89e4eSSatish Balay   for (i=0; i<num_attr; i++) {
216a297a907SKarl 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);
217100f28aeSBarry Smith     attr[*comm-1][i].active        = 0;
218a246e310SBarry Smith     attr[*comm-1][i].attribute_val = 0;
219e5c89e4eSSatish Balay   }
220f60917d2SBarry Smith   if (*comm >= 3) comm_active[*comm-1] = 0;
221100f28aeSBarry Smith   *comm = 0;
222e5c89e4eSSatish Balay   return MPI_SUCCESS;
223e5c89e4eSSatish Balay }
224e5c89e4eSSatish Balay 
225d393f697SSatish Balay int MPI_Comm_size(MPI_Comm comm, int *size)
226d393f697SSatish Balay {
227*99256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
228d393f697SSatish Balay   *size=1;
229d393f697SSatish Balay   return MPI_SUCCESS;
230d393f697SSatish Balay }
231d393f697SSatish Balay 
232d393f697SSatish Balay int MPI_Comm_rank(MPI_Comm comm, int *rank)
233d393f697SSatish Balay {
234*99256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
235d393f697SSatish Balay   *rank=0;
236d393f697SSatish Balay   return MPI_SUCCESS;
237d393f697SSatish Balay }
238d393f697SSatish Balay 
23906df1fb1SBarry Smith int MPIUni_Abort(MPI_Comm comm,int errorcode)
24006df1fb1SBarry Smith {
24106df1fb1SBarry Smith   printf("MPI operation not supported by PETSc's sequential MPI wrappers\n");
24206df1fb1SBarry Smith   return MPI_FAILURE;
24306df1fb1SBarry Smith }
24406df1fb1SBarry Smith 
245c8217ed5SSatish Balay int MPI_Abort(MPI_Comm comm,int errorcode)
246e5c89e4eSSatish Balay {
247e5c89e4eSSatish Balay   abort();
248e5c89e4eSSatish Balay   return MPI_SUCCESS;
249e5c89e4eSSatish Balay }
250e5c89e4eSSatish Balay 
25158cd72c3SLisandro Dalcin /* --------------------------------------------------------------------------*/
25258cd72c3SLisandro Dalcin 
253e5c89e4eSSatish Balay static int MPI_was_initialized = 0;
25458cd72c3SLisandro Dalcin static int MPI_was_finalized   = 0;
25558cd72c3SLisandro Dalcin 
256c8217ed5SSatish Balay int MPI_Init(int *argc, char ***argv)
25758cd72c3SLisandro Dalcin {
258*99256852SLisandro Dalcin   if (MPI_was_initialized) return MPI_FAILURE;
259*99256852SLisandro Dalcin   if (MPI_was_finalized) return MPI_FAILURE;
26058cd72c3SLisandro Dalcin   MPI_was_initialized = 1;
261*99256852SLisandro Dalcin   return MPI_SUCCESS;
26258cd72c3SLisandro Dalcin }
26358cd72c3SLisandro Dalcin 
264c8217ed5SSatish Balay int MPI_Finalize(void)
26558cd72c3SLisandro Dalcin {
266100f28aeSBarry Smith   MPI_Comm comm;
267*99256852SLisandro Dalcin   if (MPI_was_finalized) return MPI_FAILURE;
268*99256852SLisandro Dalcin   if (!MPI_was_initialized) return MPI_FAILURE;
269100f28aeSBarry Smith   comm = MPI_COMM_WORLD;
270100f28aeSBarry Smith   MPI_Comm_free(&comm);
271100f28aeSBarry Smith   comm = MPI_COMM_SELF;
272100f28aeSBarry Smith   MPI_Comm_free(&comm);
27358cd72c3SLisandro Dalcin   MPI_was_finalized = 1;
274*99256852SLisandro Dalcin   return MPI_SUCCESS;
27558cd72c3SLisandro Dalcin }
276e5c89e4eSSatish Balay 
277c8217ed5SSatish Balay int MPI_Initialized(int *flag)
278e5c89e4eSSatish Balay {
279e5c89e4eSSatish Balay   *flag = MPI_was_initialized;
280*99256852SLisandro Dalcin   return MPI_SUCCESS;
281e5c89e4eSSatish Balay }
282e5c89e4eSSatish Balay 
283c8217ed5SSatish Balay int MPI_Finalized(int *flag)
284e5c89e4eSSatish Balay {
28558cd72c3SLisandro Dalcin   *flag = MPI_was_finalized;
286*99256852SLisandro Dalcin   return MPI_SUCCESS;
287e5c89e4eSSatish Balay }
288e5c89e4eSSatish Balay 
289e5c89e4eSSatish Balay /* -------------------     Fortran versions of several routines ------------------ */
290e5c89e4eSSatish Balay 
291f7c6e6aaSSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
29252ecd5ffSSatish Balay #define mpiunisetcommonblock_          MPIUNISETCOMMONBLOCK
29352ecd5ffSSatish Balay #define mpiunisetfortranbasepointers_  MPIUNISETFORTRANBASEPOINTERS
294a7b85bbcSSatish Balay #define petsc_mpi_init_                PETSC_MPI_INIT
295a7b85bbcSSatish Balay #define petsc_mpi_finalize_            PETSC_MPI_FINALIZE
296a7b85bbcSSatish Balay #define petsc_mpi_comm_size_           PETSC_MPI_COMM_SIZE
297a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_           PETSC_MPI_COMM_RANK
298a7b85bbcSSatish Balay #define petsc_mpi_abort_               PETSC_MPI_ABORT
299a7b85bbcSSatish Balay #define petsc_mpi_reduce_              PETSC_MPI_REDUCE
300a7b85bbcSSatish Balay #define petsc_mpi_allreduce_           PETSC_MPI_ALLREDUCE
301a7b85bbcSSatish Balay #define petsc_mpi_barrier_             PETSC_MPI_BARRIER
302a7b85bbcSSatish Balay #define petsc_mpi_bcast_               PETSC_MPI_BCAST
303a7b85bbcSSatish Balay #define petsc_mpi_gather_              PETSC_MPI_GATHER
304a7b85bbcSSatish Balay #define petsc_mpi_allgather_           PETSC_MPI_ALLGATHER
305a7b85bbcSSatish Balay #define petsc_mpi_comm_split_          PETSC_MPI_COMM_SPLIT
306a7b85bbcSSatish Balay #define petsc_mpi_scan_                PETSC_MPI_SCAN
307a7b85bbcSSatish Balay #define petsc_mpi_send_                PETSC_MPI_SEND
308a7b85bbcSSatish Balay #define petsc_mpi_recv_                PETSC_MPI_RECV
309a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_      PETSC_MPI_REDUCE_SCATTER
310a7b85bbcSSatish Balay #define petsc_mpi_irecv_               PETSC_MPI_IRECV
311a7b85bbcSSatish Balay #define petsc_mpi_isend_               PETSC_MPI_ISEND
312a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_            PETSC_MPI_SENDRECV
313a7b85bbcSSatish Balay #define petsc_mpi_test_                PETSC_MPI_TEST
314a7b85bbcSSatish Balay #define petsc_mpi_waitall_             PETSC_MPI_WAITALL
315a7b85bbcSSatish Balay #define petsc_mpi_waitany_             PETSC_MPI_WAITANY
316a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_          PETSC_MPI_ALLGATHERV
317a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_           PETSC_MPI_ALLTOALLV
318a7b85bbcSSatish Balay #define petsc_mpi_comm_create_         PETSC_MPI_COMM_CREATE
319a7b85bbcSSatish Balay #define petsc_mpi_address_             PETSC_MPI_ADDRESS
320a7b85bbcSSatish Balay #define petsc_mpi_pack_                PETSC_MPI_PACK
321a7b85bbcSSatish Balay #define petsc_mpi_unpack_              PETSC_MPI_UNPACK
322a7b85bbcSSatish Balay #define petsc_mpi_pack_size_           PETSC_MPI_PACK_SIZE
323a7b85bbcSSatish Balay #define petsc_mpi_type_struct_         PETSC_MPI_TYPE_STRUCT
324a7b85bbcSSatish Balay #define petsc_mpi_type_commit_         PETSC_MPI_TYPE_COMMIT
325a7b85bbcSSatish Balay #define petsc_mpi_wtime_               PETSC_MPI_WTIME
326a7b85bbcSSatish Balay #define petsc_mpi_cancel_              PETSC_MPI_CANCEL
327a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_            PETSC_MPI_COMM_DUP
328a7b85bbcSSatish Balay #define petsc_mpi_comm_free_           PETSC_MPI_COMM_FREE
329a7b85bbcSSatish Balay #define petsc_mpi_get_count_           PETSC_MPI_GET_COUNT
330a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_  PETSC_MPI_GET_PROCESSOR_NAME
331a7b85bbcSSatish Balay #define petsc_mpi_initialized_         PETSC_MPI_INITIALIZED
332a7b85bbcSSatish Balay #define petsc_mpi_iprobe_              PETSC_MPI_IPROBE
333a7b85bbcSSatish Balay #define petsc_mpi_probe_               PETSC_MPI_PROBE
334a7b85bbcSSatish Balay #define petsc_mpi_request_free_        PETSC_MPI_REQUEST_FREE
335a7b85bbcSSatish Balay #define petsc_mpi_ssend_               PETSC_MPI_SSEND
336a7b85bbcSSatish Balay #define petsc_mpi_wait_                PETSC_MPI_WAIT
337a7b85bbcSSatish Balay #define petsc_mpi_comm_group_          PETSC_MPI_COMM_GROUP
338a7b85bbcSSatish Balay #define petsc_mpi_exscan_              PETSC_MPI_EXSCAN
339f7c6e6aaSSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
34052ecd5ffSSatish Balay #define mpiunisetcommonblock_          mpiunisetcommonblock
34152ecd5ffSSatish Balay #define mpiunisetfortranbasepointers_  mpiunisetfortranbasepointers
342a7b85bbcSSatish Balay #define petsc_mpi_init_                petsc_mpi_init
343a7b85bbcSSatish Balay #define petsc_mpi_finalize_            petsc_mpi_finalize
344a7b85bbcSSatish Balay #define petsc_mpi_comm_size_           petsc_mpi_comm_size
345a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_           petsc_mpi_comm_rank
346a7b85bbcSSatish Balay #define petsc_mpi_abort_               petsc_mpi_abort
347a7b85bbcSSatish Balay #define petsc_mpi_reduce_              petsc_mpi_reduce
348a7b85bbcSSatish Balay #define petsc_mpi_allreduce_           petsc_mpi_allreduce
349a7b85bbcSSatish Balay #define petsc_mpi_barrier_             petsc_mpi_barrier
350a7b85bbcSSatish Balay #define petsc_mpi_bcast_               petsc_mpi_bcast
351a7b85bbcSSatish Balay #define petsc_mpi_gather_              petsc_mpi_gather
352a7b85bbcSSatish Balay #define petsc_mpi_allgather_           petsc_mpi_allgather
353a7b85bbcSSatish Balay #define petsc_mpi_comm_split_          petsc_mpi_comm_split
354a7b85bbcSSatish Balay #define petsc_mpi_scan_                petsc_mpi_scan
355a7b85bbcSSatish Balay #define petsc_mpi_send_                petsc_mpi_send
356a7b85bbcSSatish Balay #define petsc_mpi_recv_                petsc_mpi_recv
357a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_      petsc_mpi_reduce_scatter
358a7b85bbcSSatish Balay #define petsc_mpi_irecv_               petsc_mpi_irecv
359a7b85bbcSSatish Balay #define petsc_mpi_isend_               petsc_mpi_isend
360a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_            petsc_mpi_sendrecv
361a7b85bbcSSatish Balay #define petsc_mpi_test_                petsc_mpi_test
362a7b85bbcSSatish Balay #define petsc_mpi_waitall_             petsc_mpi_waitall
363a7b85bbcSSatish Balay #define petsc_mpi_waitany_             petsc_mpi_waitany
364a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_          petsc_mpi_allgatherv
365a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_           petsc_mpi_alltoallv
366a7b85bbcSSatish Balay #define petsc_mpi_comm_create_         petsc_mpi_comm_create
367a7b85bbcSSatish Balay #define petsc_mpi_address_             petsc_mpi_address
368a7b85bbcSSatish Balay #define petsc_mpi_pack_                petsc_mpi_pack
369a7b85bbcSSatish Balay #define petsc_mpi_unpack_              petsc_mpi_unpack
370a7b85bbcSSatish Balay #define petsc_mpi_pack_size_           petsc_mpi_pack_size
371a7b85bbcSSatish Balay #define petsc_mpi_type_struct_         petsc_mpi_type_struct
372a7b85bbcSSatish Balay #define petsc_mpi_type_commit_         petsc_mpi_type_commit
373a7b85bbcSSatish Balay #define petsc_mpi_wtime_               petsc_mpi_wtime
374a7b85bbcSSatish Balay #define petsc_mpi_cancel_              petsc_mpi_cancel
375a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_            petsc_mpi_comm_dup
376a7b85bbcSSatish Balay #define petsc_mpi_comm_free_           petsc_mpi_comm_free
377a7b85bbcSSatish Balay #define petsc_mpi_get_count_           petsc_mpi_get_count
378a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_  petsc_mpi_get_processor_name
379a7b85bbcSSatish Balay #define petsc_mpi_initialized_         petsc_mpi_initialized
380a7b85bbcSSatish Balay #define petsc_mpi_iprobe_              petsc_mpi_iprobe
381a7b85bbcSSatish Balay #define petsc_mpi_probe_               petsc_mpi_probe
382a7b85bbcSSatish Balay #define petsc_mpi_request_free_        petsc_mpi_request_free
383a7b85bbcSSatish Balay #define petsc_mpi_ssend_               petsc_mpi_ssend
384a7b85bbcSSatish Balay #define petsc_mpi_wait_                petsc_mpi_wait
385a7b85bbcSSatish Balay #define petsc_mpi_comm_group_          petsc_mpi_comm_group
386a7b85bbcSSatish Balay #define petsc_mpi_exscan_              petsc_mpi_exscan
387f7c6e6aaSSatish Balay #endif
388e5c89e4eSSatish Balay 
389f7c6e6aaSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE_UNDERSCORE)
390a7b85bbcSSatish Balay #define petsc_mpi_init_                petsc_mpi_init__
391a7b85bbcSSatish Balay #define petsc_mpi_finalize_            petsc_mpi_finalize__
392a7b85bbcSSatish Balay #define petsc_mpi_comm_size_           petsc_mpi_comm_size__
393a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_           petsc_mpi_comm_rank__
394a7b85bbcSSatish Balay #define petsc_mpi_abort_               petsc_mpi_abort__
395a7b85bbcSSatish Balay #define petsc_mpi_reduce_              petsc_mpi_reduce__
396a7b85bbcSSatish Balay #define petsc_mpi_allreduce_           petsc_mpi_allreduce__
397a7b85bbcSSatish Balay #define petsc_mpi_barrier_             petsc_mpi_barrier__
398a7b85bbcSSatish Balay #define petsc_mpi_bcast_               petsc_mpi_bcast__
399a7b85bbcSSatish Balay #define petsc_mpi_gather_              petsc_mpi_gather__
400a7b85bbcSSatish Balay #define petsc_mpi_allgather_           petsc_mpi_allgather__
401a7b85bbcSSatish Balay #define petsc_mpi_comm_split_          petsc_mpi_comm_split__
402a7b85bbcSSatish Balay #define petsc_mpi_scan_                petsc_mpi_scan__
403a7b85bbcSSatish Balay #define petsc_mpi_send_                petsc_mpi_send__
404a7b85bbcSSatish Balay #define petsc_mpi_recv_                petsc_mpi_recv__
405a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_      petsc_mpi_reduce_scatter__
406a7b85bbcSSatish Balay #define petsc_mpi_irecv_               petsc_mpi_irecv__
407a7b85bbcSSatish Balay #define petsc_mpi_isend_               petsc_mpi_isend__
408a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_            petsc_mpi_sendrecv__
409a7b85bbcSSatish Balay #define petsc_mpi_test_                petsc_mpi_test__
410a7b85bbcSSatish Balay #define petsc_mpi_waitall_             petsc_mpi_waitall__
411a7b85bbcSSatish Balay #define petsc_mpi_waitany_             petsc_mpi_waitany__
412a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_          petsc_mpi_allgatherv__
413a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_           petsc_mpi_alltoallv__
414a7b85bbcSSatish Balay #define petsc_mpi_comm_create_         petsc_mpi_comm_create__
415a7b85bbcSSatish Balay #define petsc_mpi_address_             petsc_mpi_address__
416a7b85bbcSSatish Balay #define petsc_mpi_pack_                petsc_mpi_pack__
417a7b85bbcSSatish Balay #define petsc_mpi_unpack_              petsc_mpi_unpack__
418a7b85bbcSSatish Balay #define petsc_mpi_pack_size_           petsc_mpi_pack_size__
419a7b85bbcSSatish Balay #define petsc_mpi_type_struct_         petsc_mpi_type_struct__
420a7b85bbcSSatish Balay #define petsc_mpi_type_commit_         petsc_mpi_type_commit__
421a7b85bbcSSatish Balay #define petsc_mpi_wtime_               petsc_mpi_wtime__
422a7b85bbcSSatish Balay #define petsc_mpi_cancel_              petsc_mpi_cancel__
423a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_            petsc_mpi_comm_dup__
424a7b85bbcSSatish Balay #define petsc_mpi_comm_free_           petsc_mpi_comm_free__
425a7b85bbcSSatish Balay #define petsc_mpi_get_count_           petsc_mpi_get_count__
426a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_  petsc_mpi_get_processor_name__
427a7b85bbcSSatish Balay #define petsc_mpi_initialized_         petsc_mpi_initialized__
428a7b85bbcSSatish Balay #define petsc_mpi_iprobe_              petsc_mpi_iprobe__
429a7b85bbcSSatish Balay #define petsc_mpi_probe_               petsc_mpi_probe__
430a7b85bbcSSatish Balay #define petsc_mpi_request_free_        petsc_mpi_request_free__
431a7b85bbcSSatish Balay #define petsc_mpi_ssend_               petsc_mpi_ssend__
432a7b85bbcSSatish Balay #define petsc_mpi_wait_                petsc_mpi_wait__
433a7b85bbcSSatish Balay #define petsc_mpi_comm_group_          petsc_mpi_comm_group__
434a7b85bbcSSatish Balay #define petsc_mpi_exscan_              petsc_mpi_exscan__
435f7c6e6aaSSatish Balay #endif
436e5c89e4eSSatish Balay 
437c8217ed5SSatish Balay /* Do not build fortran interface if MPI namespace colision is to be avoided */
438a7b85bbcSSatish Balay #if defined(PETSC_HAVE_FORTRAN)
439c8217ed5SSatish Balay 
44052ecd5ffSSatish Balay PETSC_EXTERN void PETSC_STDCALL mpiunisetcommonblock_(void);
44152ecd5ffSSatish Balay 
44252ecd5ffSSatish Balay PETSC_EXTERN void PETSC_STDCALL mpiunisetfortranbasepointers_(void *f_mpi_in_place)
44352ecd5ffSSatish Balay {
44452ecd5ffSSatish Balay   MPIUNIF_mpi_in_place   = f_mpi_in_place;
44552ecd5ffSSatish Balay }
44652ecd5ffSSatish Balay 
447a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_init_(int *ierr)
448e5c89e4eSSatish Balay {
44952ecd5ffSSatish Balay   mpiunisetcommonblock_();
450c8217ed5SSatish Balay   *ierr = MPI_Init((int*)0, (char***)0);
451e5c89e4eSSatish Balay }
452e5c89e4eSSatish Balay 
453a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_finalize_(int *ierr)
454e5c89e4eSSatish Balay {
455c8217ed5SSatish Balay   *ierr = MPI_Finalize();
456e5c89e4eSSatish Balay }
457e5c89e4eSSatish Balay 
458a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_size_(MPI_Comm *comm,int *size,int *ierr)
459e5c89e4eSSatish Balay {
460e5c89e4eSSatish Balay   *size = 1;
461e5c89e4eSSatish Balay   *ierr = 0;
462e5c89e4eSSatish Balay }
463e5c89e4eSSatish Balay 
464a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_rank_(MPI_Comm *comm,int *rank,int *ierr)
465e5c89e4eSSatish Balay {
466e5c89e4eSSatish Balay   *rank = 0;
467e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
468e5c89e4eSSatish Balay }
469e5c89e4eSSatish Balay 
470a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_split_(MPI_Comm *comm,int *color,int *key, MPI_Comm *newcomm, int *ierr)
4711f6cc5b2SSatish Balay {
4721f6cc5b2SSatish Balay   *newcomm = *comm;
4731f6cc5b2SSatish Balay   *ierr    = MPI_SUCCESS;
4741f6cc5b2SSatish Balay }
4751f6cc5b2SSatish Balay 
476a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_abort_(MPI_Comm *comm,int *errorcode,int *ierr)
477e5c89e4eSSatish Balay {
478e5c89e4eSSatish Balay   abort();
479e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
480e5c89e4eSSatish Balay }
481e5c89e4eSSatish Balay 
482a7b85bbcSSatish 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)
4833b644628SSatish Balay {
484f30578ecSBarry Smith   *ierr = MPI_Reduce(sendbuf,recvbuf,*count,*datatype,*op,*root,*comm);
4853b644628SSatish Balay }
4863b644628SSatish Balay 
487a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_allreduce_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr)
488e5c89e4eSSatish Balay {
489f30578ecSBarry Smith   *ierr = MPI_Allreduce(sendbuf,recvbuf,*count,*datatype,*op,*comm);
490e5c89e4eSSatish Balay }
491e5c89e4eSSatish Balay 
492a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_barrier_(MPI_Comm *comm,int *ierr)
493e5c89e4eSSatish Balay {
494e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
495e5c89e4eSSatish Balay }
496f7c6e6aaSSatish Balay 
497a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_bcast_(void *buf,int *count,int *datatype,int *root,int *comm,int *ierr)
498e5c89e4eSSatish Balay {
499e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
500e5c89e4eSSatish Balay }
501f7c6e6aaSSatish Balay 
502a7b85bbcSSatish 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)
503e5c89e4eSSatish Balay {
504f30578ecSBarry Smith   *ierr = MPI_Gather(sendbuf,*scount,*sdatatype,recvbuf,rcount,rdatatype,*root,*comm);
505f7c6e6aaSSatish Balay }
506f7c6e6aaSSatish Balay 
507a7b85bbcSSatish 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)
508f7c6e6aaSSatish Balay {
509f30578ecSBarry Smith   *ierr = MPI_Allgather(sendbuf,*scount,*sdatatype,recvbuf,rcount,rdatatype,*comm);
510e5c89e4eSSatish Balay }
511e5c89e4eSSatish Balay 
512a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_scan_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr)
5133b644628SSatish Balay {
5141a589b05SJed Brown   *ierr = MPIUNI_Memcpy(recvbuf,sendbuf,(*count)*MPI_sizeof(*datatype));
5153b644628SSatish Balay }
5163b644628SSatish Balay 
517a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_send_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *ierr)
5181086b069SSatish Balay {
51906df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
5201086b069SSatish Balay }
5211086b069SSatish Balay 
522a7b85bbcSSatish 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)
5231086b069SSatish Balay {
52406df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
5251086b069SSatish Balay }
5261086b069SSatish Balay 
527a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_reduce_scatter_(void *sendbuf,void *recvbuf,int *recvcounts,int *datatype,int *op,int *comm,int *ierr)
528156bc490SSatish Balay {
52906df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
530156bc490SSatish Balay }
531156bc490SSatish Balay 
532a7b85bbcSSatish 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)
533156bc490SSatish Balay {
53406df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
535156bc490SSatish Balay }
536156bc490SSatish Balay 
537a7b85bbcSSatish 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)
538156bc490SSatish Balay {
53906df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
540156bc490SSatish Balay }
541156bc490SSatish Balay 
542a7b85bbcSSatish 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)
543156bc490SSatish Balay {
5441a589b05SJed Brown   *ierr = MPIUNI_Memcpy(recvbuf,sendbuf,(*sendcount)*MPI_sizeof(*sendtype));
545156bc490SSatish Balay }
546156bc490SSatish Balay 
547a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_test_(int *request,int *flag,int *status,int *ierr)
548156bc490SSatish Balay {
54906df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
550156bc490SSatish Balay }
551156bc490SSatish Balay 
552a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_waitall_(int *count,int *array_of_requests,int *array_of_statuses,int *ierr)
553156bc490SSatish Balay {
554156bc490SSatish Balay   *ierr = MPI_SUCCESS;
555156bc490SSatish Balay }
556156bc490SSatish Balay 
557a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_waitany_(int *count,int *array_of_requests,int * index, int *status,int *ierr)
558156bc490SSatish Balay {
559156bc490SSatish Balay   *ierr = MPI_SUCCESS;
560156bc490SSatish Balay }
561156bc490SSatish Balay 
562a7b85bbcSSatish 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)
563156bc490SSatish Balay {
564f30578ecSBarry Smith   *ierr = MPI_Allgatherv(sendbuf,*sendcount,*sendtype,recvbuf,recvcounts,displs,*recvtype,*comm);
565156bc490SSatish Balay }
566156bc490SSatish Balay 
567a7b85bbcSSatish 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)
568156bc490SSatish Balay {
569f30578ecSBarry Smith   *ierr = MPI_Alltoallv(sendbuf,sendcounts,sdispls,*sendtype,recvbuf,recvcounts,rdispls,*recvtype,*comm);
570156bc490SSatish Balay }
571156bc490SSatish Balay 
572a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_create_(int *comm,int *group,int *newcomm,int *ierr)
573156bc490SSatish Balay {
574156bc490SSatish Balay   *newcomm =  *comm;
575156bc490SSatish Balay   *ierr    = MPI_SUCCESS;
576156bc490SSatish Balay }
577156bc490SSatish Balay 
578*99256852SLisandro Dalcin PETSC_EXTERN void PETSC_STDCALL petsc_mpi_address_(void *location,MPI_Aint *address,int *ierr)
579156bc490SSatish Balay {
580*99256852SLisandro Dalcin   *address =  (MPI_Aint) ((char *)location);
581156bc490SSatish Balay   *ierr    = MPI_SUCCESS;
582156bc490SSatish Balay }
583156bc490SSatish Balay 
584a7b85bbcSSatish 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)
585156bc490SSatish Balay {
58606df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
587156bc490SSatish Balay }
588156bc490SSatish Balay 
589a7b85bbcSSatish 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)
590156bc490SSatish Balay {
59106df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
592156bc490SSatish Balay }
593156bc490SSatish Balay 
594a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_pack_size_(int *incount,int *datatype,int *comm,int *size,int *ierr)
595156bc490SSatish Balay {
59606df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
597156bc490SSatish Balay }
598156bc490SSatish Balay 
599a7b85bbcSSatish 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)
600156bc490SSatish Balay {
60106df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
602156bc490SSatish Balay }
603156bc490SSatish Balay 
604a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_type_commit_(int *datatype,int *ierr)
605156bc490SSatish Balay {
606156bc490SSatish Balay   *ierr = MPI_SUCCESS;
607156bc490SSatish Balay }
608156bc490SSatish Balay 
609a7b85bbcSSatish Balay double PETSC_STDCALL petsc_mpi_wtime_(void)
610156bc490SSatish Balay {
611156bc490SSatish Balay   return 0.0;
612f8f52c7dSSatish Balay }
613156bc490SSatish Balay 
614a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_cancel_(int *request,int *ierr)
615f8f52c7dSSatish Balay {
616f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
617f8f52c7dSSatish Balay }
618f8f52c7dSSatish Balay 
619a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_dup_(int *comm,int *out,int *ierr)
620f8f52c7dSSatish Balay {
621f8f52c7dSSatish Balay   *out  = *comm;
622f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
623f8f52c7dSSatish Balay }
624f8f52c7dSSatish Balay 
625a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_free_(int *comm,int *ierr)
626f8f52c7dSSatish Balay {
627f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
628f8f52c7dSSatish Balay }
629f8f52c7dSSatish Balay 
630a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_get_count_(int *status,int *datatype,int *count,int *ierr)
631f8f52c7dSSatish Balay {
63206df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
633f8f52c7dSSatish Balay }
634f8f52c7dSSatish Balay 
635ce0a2cd1SBarry Smith /* duplicate from fortranimpl.h */
636f8f52c7dSSatish Balay #if defined(PETSC_HAVE_FORTRAN_MIXED_STR_ARG)
637f8f52c7dSSatish Balay #define PETSC_MIXED_LEN(len) ,int len
638f8f52c7dSSatish Balay #define PETSC_END_LEN(len)
639f8f52c7dSSatish Balay #else
640f8f52c7dSSatish Balay #define PETSC_MIXED_LEN(len)
641f8f52c7dSSatish Balay #define PETSC_END_LEN(len)   ,int len
642f8f52c7dSSatish Balay #endif
643f8f52c7dSSatish Balay 
644a7b85bbcSSatish 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))
645f8f52c7dSSatish Balay {
646f8f52c7dSSatish Balay   MPIUNI_Memcpy(name,"localhost",9*sizeof(char));
647f8f52c7dSSatish Balay   *result_len = 9;
648f8f52c7dSSatish Balay   *ierr       = MPI_SUCCESS;
649f8f52c7dSSatish Balay }
650f8f52c7dSSatish Balay 
651a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_initialized_(int *flag,int *ierr)
652f8f52c7dSSatish Balay {
653f8f52c7dSSatish Balay   *flag = MPI_was_initialized;
654f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
655f8f52c7dSSatish Balay }
656f8f52c7dSSatish Balay 
657a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_iprobe_(int *source,int *tag,int *comm,int *glag,int *status,int *ierr)
658f8f52c7dSSatish Balay {
659f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
660f8f52c7dSSatish Balay }
661f8f52c7dSSatish Balay 
662a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_probe_(int *source,int *tag,int *comm,int *flag,int *status,int *ierr)
663f8f52c7dSSatish Balay {
664f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
665f8f52c7dSSatish Balay }
666f8f52c7dSSatish Balay 
667a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_request_free_(int *request,int *ierr)
668f8f52c7dSSatish Balay {
669f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
670f8f52c7dSSatish Balay }
671f8f52c7dSSatish Balay 
672a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_ssend_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *ierr)
673f8f52c7dSSatish Balay {
67406df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
675f8f52c7dSSatish Balay }
676f8f52c7dSSatish Balay 
677a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_wait_(int *request,int *status,int *ierr)
678f8f52c7dSSatish Balay {
679f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
680156bc490SSatish Balay }
681156bc490SSatish Balay 
682a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_group_(int *comm,int *group,int *ierr)
683d4816372SSatish Balay {
684d4816372SSatish Balay   *ierr = MPI_SUCCESS;
685d4816372SSatish Balay }
686d4816372SSatish Balay 
687a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_exscan_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr)
688d4816372SSatish Balay {
689d4816372SSatish Balay   *ierr = MPI_SUCCESS;
690d4816372SSatish Balay }
691d4816372SSatish Balay 
692a7b85bbcSSatish Balay #endif /* PETSC_HAVE_FORTRAN */
693c8217ed5SSatish Balay 
694e5c89e4eSSatish Balay #if defined(__cplusplus)
695e5c89e4eSSatish Balay }
696e5c89e4eSSatish Balay #endif
697