xref: /petsc/src/sys/mpiuni/mpi.c (revision c9b973be4b19e816a163c7e07e9f212d7b416438)
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>
6*c9b973beSBarry Smith #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 
1699256852SLisandro Dalcin void *MPIUNI_TMP = NULL;
1799256852SLisandro 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 
6099256852SLisandro Dalcin   if (a == MPI_IN_PLACE || a == MPIUNIF_mpi_in_place) return MPI_SUCCESS;
6199256852SLisandro 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];
6399256852SLisandro Dalcin   return MPI_SUCCESS;
64e5c89e4eSSatish Balay }
65e5c89e4eSSatish Balay 
6612801b39SBarry Smith static int classcnt = 0;
6712801b39SBarry Smith static int codecnt = 0;
6812801b39SBarry Smith 
6912801b39SBarry Smith int MPI_Add_error_class(int *cl)
7012801b39SBarry Smith {
7112801b39SBarry Smith   *cl = classcnt++;
7212801b39SBarry Smith   return MPI_SUCCESS;
7312801b39SBarry Smith }
7412801b39SBarry Smith 
7512801b39SBarry Smith int MPI_Add_error_code(int cl,int *co)
7612801b39SBarry Smith {
7712801b39SBarry Smith   if (cl >= classcnt) return MPI_FAILURE;
7812801b39SBarry Smith   *co = codecnt++;
7912801b39SBarry Smith   return MPI_SUCCESS;
8012801b39SBarry Smith }
8112801b39SBarry Smith 
821a589b05SJed Brown int MPI_Type_get_envelope(MPI_Datatype datatype,int *num_integers,int *num_addresses,int *num_datatypes,int *combiner)
831a589b05SJed Brown {
841a589b05SJed Brown   int comb = datatype >> 28;
851a589b05SJed Brown   switch (comb) {
861a589b05SJed Brown   case MPI_COMBINER_NAMED:
871a589b05SJed Brown     *num_integers = 0;
881a589b05SJed Brown     *num_addresses = 0;
891a589b05SJed Brown     *num_datatypes = 0;
901a589b05SJed Brown     *combiner = comb;
911a589b05SJed Brown     break;
921a589b05SJed Brown   case MPI_COMBINER_DUP:
931a589b05SJed Brown     *num_integers = 0;
941a589b05SJed Brown     *num_addresses = 0;
951a589b05SJed Brown     *num_datatypes = 1;
961a589b05SJed Brown     *combiner = comb;
971a589b05SJed Brown     break;
981a589b05SJed Brown   case MPI_COMBINER_CONTIGUOUS:
991a589b05SJed Brown     *num_integers = 1;
1001a589b05SJed Brown     *num_addresses = 0;
1011a589b05SJed Brown     *num_datatypes = 1;
1021a589b05SJed Brown     *combiner = comb;
1031a589b05SJed Brown     break;
1041a589b05SJed Brown   default:
1051a589b05SJed Brown     return MPIUni_Abort(MPI_COMM_SELF,1);
1061a589b05SJed Brown   }
10799256852SLisandro Dalcin   return MPI_SUCCESS;
1081a589b05SJed Brown }
1091a589b05SJed Brown 
1101a589b05SJed 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)
1111a589b05SJed Brown {
1121a589b05SJed Brown   int comb = datatype >> 28;
1131a589b05SJed Brown   switch (comb) {
1141a589b05SJed Brown   case MPI_COMBINER_NAMED:
1151a589b05SJed Brown     return MPIUni_Abort(MPI_COMM_SELF,1);
1161a589b05SJed Brown     break;
1171a589b05SJed Brown   case MPI_COMBINER_DUP:
1181a589b05SJed Brown     if (max_datatypes < 1) return MPIUni_Abort(MPI_COMM_SELF,1);
1191a589b05SJed Brown     array_of_datatypes[0] = datatype & 0x0fffffff;
1201a589b05SJed Brown     break;
1211a589b05SJed Brown   case MPI_COMBINER_CONTIGUOUS:
1221a589b05SJed Brown     if (max_integers < 1 || max_datatypes < 1) return MPIUni_Abort(MPI_COMM_SELF,1);
1231a589b05SJed Brown     array_of_integers[0] = (datatype >> 8) & 0xfff; /* count */
1241a589b05SJed Brown     array_of_datatypes[0] = (datatype & 0x0ff000ff) | 0x100;  /* basic named type (count=1) from which the contiguous type is derived */
1251a589b05SJed Brown     break;
1261a589b05SJed Brown   default:
1271a589b05SJed Brown     return MPIUni_Abort(MPI_COMM_SELF,1);
1281a589b05SJed Brown   }
12999256852SLisandro Dalcin   return MPI_SUCCESS;
1301a589b05SJed Brown }
1311a589b05SJed Brown 
132e5c89e4eSSatish Balay /*
133e5c89e4eSSatish Balay    Used to set the built-in MPI_TAG_UB attribute
134e5c89e4eSSatish Balay */
135e5c89e4eSSatish Balay static int Keyval_setup(void)
136e5c89e4eSSatish Balay {
137100f28aeSBarry Smith   attr[MPI_COMM_WORLD-1][0].active        = 1;
138100f28aeSBarry Smith   attr[MPI_COMM_WORLD-1][0].attribute_val = &mpi_tag_ub;
139100f28aeSBarry Smith   attr[MPI_COMM_SELF-1][0].active         = 1;
140100f28aeSBarry Smith   attr[MPI_COMM_SELF-1][0].attribute_val  = &mpi_tag_ub;
14199256852SLisandro Dalcin   return MPI_SUCCESS;
142e5c89e4eSSatish Balay }
143e5c89e4eSSatish Balay 
14412801b39SBarry Smith int MPI_Comm_create_keyval(MPI_Copy_function *copy_fn,MPI_Delete_function *delete_fn,int *keyval,void *extra_state)
145e5c89e4eSSatish Balay {
1469cf9c1dbSJed Brown   if (num_attr >= MAX_ATTR) return MPIUni_Abort(MPI_COMM_WORLD,1);
147e5c89e4eSSatish Balay 
14846651e72SBarry Smith   attr_keyval[num_attr].extra_state = extra_state;
14946651e72SBarry Smith   attr_keyval[num_attr].del         = delete_fn;
150e5c89e4eSSatish Balay   *keyval                           = num_attr++;
15199256852SLisandro Dalcin   return MPI_SUCCESS;
152e5c89e4eSSatish Balay }
153e5c89e4eSSatish Balay 
15447435625SJed Brown int MPI_Comm_free_keyval(int *keyval)
155e5c89e4eSSatish Balay {
156a246e310SBarry Smith   attr_keyval[*keyval].extra_state = 0;
157a246e310SBarry Smith   attr_keyval[*keyval].del         = 0;
158a297a907SKarl Rupp 
159a246e310SBarry Smith   *keyval = 0;
160e5c89e4eSSatish Balay   return MPI_SUCCESS;
161e5c89e4eSSatish Balay }
162e5c89e4eSSatish Balay 
16347435625SJed Brown int MPI_Comm_set_attr(MPI_Comm comm,int keyval,void *attribute_val)
164e5c89e4eSSatish Balay {
16599256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
166100f28aeSBarry Smith   attr[comm-1][keyval].active        = 1;
167100f28aeSBarry Smith   attr[comm-1][keyval].attribute_val = attribute_val;
168e5c89e4eSSatish Balay   return MPI_SUCCESS;
169e5c89e4eSSatish Balay }
170e5c89e4eSSatish Balay 
17147435625SJed Brown int MPI_Comm_delete_attr(MPI_Comm comm,int keyval)
172e5c89e4eSSatish Balay {
17399256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
174100f28aeSBarry Smith   if (attr[comm-1][keyval].active && attr_keyval[keyval].del) {
175100f28aeSBarry Smith     void *save_attribute_val = attr[comm-1][keyval].attribute_val;
176100f28aeSBarry Smith     attr[comm-1][keyval].active        = 0;
177100f28aeSBarry Smith     attr[comm-1][keyval].attribute_val = 0;
17846651e72SBarry Smith     (*(attr_keyval[keyval].del))(comm,keyval,save_attribute_val,attr_keyval[keyval].extra_state);
17940776e1bSpetsc   }
180e5c89e4eSSatish Balay   return MPI_SUCCESS;
181e5c89e4eSSatish Balay }
182e5c89e4eSSatish Balay 
18347435625SJed Brown int MPI_Comm_get_attr(MPI_Comm comm,int keyval,void *attribute_val,int *flag)
184e5c89e4eSSatish Balay {
18599256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
186e5c89e4eSSatish Balay   if (!keyval) Keyval_setup();
187100f28aeSBarry Smith   *flag                  = attr[comm-1][keyval].active;
188100f28aeSBarry Smith   *(void**)attribute_val = attr[comm-1][keyval].attribute_val;
189e5c89e4eSSatish Balay   return MPI_SUCCESS;
190e5c89e4eSSatish Balay }
191e5c89e4eSSatish Balay 
192c8217ed5SSatish Balay int MPI_Comm_create(MPI_Comm comm,MPI_Group group,MPI_Comm *newcomm)
193c8217ed5SSatish Balay {
194f60917d2SBarry Smith   int j;
19599256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
196f60917d2SBarry Smith   for (j=3; j<MaxComm; j++) {
197f60917d2SBarry Smith     if (!comm_active[j-1]) {
198f60917d2SBarry Smith       comm_active[j-1] = 1;
199f60917d2SBarry Smith       *newcomm = j;
200f60917d2SBarry Smith       return MPI_SUCCESS;
201f60917d2SBarry Smith     }
202f60917d2SBarry Smith   }
203fb53af6bSBarry Smith   if (MaxComm > MAX_COMM) return MPI_FAILURE;
204fb53af6bSBarry Smith   *newcomm =  MaxComm++;
205f7f9ee71SBarry Smith   comm_active[*newcomm-1] = 1;
206c8217ed5SSatish Balay   return MPI_SUCCESS;
207c8217ed5SSatish Balay }
208c8217ed5SSatish Balay 
209c8217ed5SSatish Balay int MPI_Comm_dup(MPI_Comm comm,MPI_Comm *out)
210e5c89e4eSSatish Balay {
211f60917d2SBarry Smith   int j;
21299256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
213f60917d2SBarry Smith   for (j=3; j<MaxComm; j++) {
214f60917d2SBarry Smith     if (!comm_active[j-1]) {
215f60917d2SBarry Smith       comm_active[j-1] = 1;
216f60917d2SBarry Smith       *out = j;
217f60917d2SBarry Smith       return MPI_SUCCESS;
218f60917d2SBarry Smith     }
219f60917d2SBarry Smith   }
220fb53af6bSBarry Smith   if (MaxComm > MAX_COMM) return MPI_FAILURE;
221fb53af6bSBarry Smith   *out = MaxComm++;
222f7f9ee71SBarry Smith   comm_active[*out-1] = 1;
22399256852SLisandro Dalcin   return MPI_SUCCESS;
224e5c89e4eSSatish Balay }
225e5c89e4eSSatish Balay 
226c8217ed5SSatish Balay int MPI_Comm_free(MPI_Comm *comm)
227e5c89e4eSSatish Balay {
228e5c89e4eSSatish Balay   int i;
229e5c89e4eSSatish Balay 
23099256852SLisandro Dalcin   if (*comm-1 < 0 || *comm-1 > MaxComm) return MPI_FAILURE;
231e5c89e4eSSatish Balay   for (i=0; i<num_attr; i++) {
232a297a907SKarl 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);
233100f28aeSBarry Smith     attr[*comm-1][i].active        = 0;
234a246e310SBarry Smith     attr[*comm-1][i].attribute_val = 0;
235e5c89e4eSSatish Balay   }
236f60917d2SBarry Smith   if (*comm >= 3) comm_active[*comm-1] = 0;
237100f28aeSBarry Smith   *comm = 0;
238e5c89e4eSSatish Balay   return MPI_SUCCESS;
239e5c89e4eSSatish Balay }
240e5c89e4eSSatish Balay 
241d393f697SSatish Balay int MPI_Comm_size(MPI_Comm comm, int *size)
242d393f697SSatish Balay {
24399256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
244d393f697SSatish Balay   *size=1;
245d393f697SSatish Balay   return MPI_SUCCESS;
246d393f697SSatish Balay }
247d393f697SSatish Balay 
248d393f697SSatish Balay int MPI_Comm_rank(MPI_Comm comm, int *rank)
249d393f697SSatish Balay {
25099256852SLisandro Dalcin   if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE;
251d393f697SSatish Balay   *rank=0;
252d393f697SSatish Balay   return MPI_SUCCESS;
253d393f697SSatish Balay }
254d393f697SSatish Balay 
25506df1fb1SBarry Smith int MPIUni_Abort(MPI_Comm comm,int errorcode)
25606df1fb1SBarry Smith {
25706df1fb1SBarry Smith   printf("MPI operation not supported by PETSc's sequential MPI wrappers\n");
25806df1fb1SBarry Smith   return MPI_FAILURE;
25906df1fb1SBarry Smith }
26006df1fb1SBarry Smith 
261c8217ed5SSatish Balay int MPI_Abort(MPI_Comm comm,int errorcode)
262e5c89e4eSSatish Balay {
263e5c89e4eSSatish Balay   abort();
264e5c89e4eSSatish Balay   return MPI_SUCCESS;
265e5c89e4eSSatish Balay }
266e5c89e4eSSatish Balay 
26758cd72c3SLisandro Dalcin /* --------------------------------------------------------------------------*/
26858cd72c3SLisandro Dalcin 
269e5c89e4eSSatish Balay static int MPI_was_initialized = 0;
27058cd72c3SLisandro Dalcin static int MPI_was_finalized   = 0;
27158cd72c3SLisandro Dalcin 
272c8217ed5SSatish Balay int MPI_Init(int *argc, char ***argv)
27358cd72c3SLisandro Dalcin {
27499256852SLisandro Dalcin   if (MPI_was_initialized) return MPI_FAILURE;
27599256852SLisandro Dalcin   if (MPI_was_finalized) return MPI_FAILURE;
27658cd72c3SLisandro Dalcin   MPI_was_initialized = 1;
27799256852SLisandro Dalcin   return MPI_SUCCESS;
27858cd72c3SLisandro Dalcin }
27958cd72c3SLisandro Dalcin 
280c8217ed5SSatish Balay int MPI_Finalize(void)
28158cd72c3SLisandro Dalcin {
282100f28aeSBarry Smith   MPI_Comm comm;
28399256852SLisandro Dalcin   if (MPI_was_finalized) return MPI_FAILURE;
28499256852SLisandro Dalcin   if (!MPI_was_initialized) return MPI_FAILURE;
285100f28aeSBarry Smith   comm = MPI_COMM_WORLD;
286100f28aeSBarry Smith   MPI_Comm_free(&comm);
287100f28aeSBarry Smith   comm = MPI_COMM_SELF;
288100f28aeSBarry Smith   MPI_Comm_free(&comm);
28958cd72c3SLisandro Dalcin   MPI_was_finalized = 1;
29099256852SLisandro Dalcin   return MPI_SUCCESS;
29158cd72c3SLisandro Dalcin }
292e5c89e4eSSatish Balay 
293c8217ed5SSatish Balay int MPI_Initialized(int *flag)
294e5c89e4eSSatish Balay {
295e5c89e4eSSatish Balay   *flag = MPI_was_initialized;
29699256852SLisandro Dalcin   return MPI_SUCCESS;
297e5c89e4eSSatish Balay }
298e5c89e4eSSatish Balay 
299c8217ed5SSatish Balay int MPI_Finalized(int *flag)
300e5c89e4eSSatish Balay {
30158cd72c3SLisandro Dalcin   *flag = MPI_was_finalized;
30299256852SLisandro Dalcin   return MPI_SUCCESS;
303e5c89e4eSSatish Balay }
304e5c89e4eSSatish Balay 
305e5c89e4eSSatish Balay /* -------------------     Fortran versions of several routines ------------------ */
306e5c89e4eSSatish Balay 
307f7c6e6aaSSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
3080134af2dSBarry Smith #define mpiunisetmoduleblock_          MPIUNISETMODULEBLOCK
30952ecd5ffSSatish Balay #define mpiunisetfortranbasepointers_  MPIUNISETFORTRANBASEPOINTERS
310a7b85bbcSSatish Balay #define petsc_mpi_init_                PETSC_MPI_INIT
311a7b85bbcSSatish Balay #define petsc_mpi_finalize_            PETSC_MPI_FINALIZE
312a7b85bbcSSatish Balay #define petsc_mpi_comm_size_           PETSC_MPI_COMM_SIZE
313a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_           PETSC_MPI_COMM_RANK
314a7b85bbcSSatish Balay #define petsc_mpi_abort_               PETSC_MPI_ABORT
315a7b85bbcSSatish Balay #define petsc_mpi_reduce_              PETSC_MPI_REDUCE
316a7b85bbcSSatish Balay #define petsc_mpi_allreduce_           PETSC_MPI_ALLREDUCE
317a7b85bbcSSatish Balay #define petsc_mpi_barrier_             PETSC_MPI_BARRIER
318a7b85bbcSSatish Balay #define petsc_mpi_bcast_               PETSC_MPI_BCAST
319a7b85bbcSSatish Balay #define petsc_mpi_gather_              PETSC_MPI_GATHER
320a7b85bbcSSatish Balay #define petsc_mpi_allgather_           PETSC_MPI_ALLGATHER
321a7b85bbcSSatish Balay #define petsc_mpi_comm_split_          PETSC_MPI_COMM_SPLIT
322a7b85bbcSSatish Balay #define petsc_mpi_scan_                PETSC_MPI_SCAN
323a7b85bbcSSatish Balay #define petsc_mpi_send_                PETSC_MPI_SEND
324a7b85bbcSSatish Balay #define petsc_mpi_recv_                PETSC_MPI_RECV
325a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_      PETSC_MPI_REDUCE_SCATTER
326a7b85bbcSSatish Balay #define petsc_mpi_irecv_               PETSC_MPI_IRECV
327a7b85bbcSSatish Balay #define petsc_mpi_isend_               PETSC_MPI_ISEND
328a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_            PETSC_MPI_SENDRECV
329a7b85bbcSSatish Balay #define petsc_mpi_test_                PETSC_MPI_TEST
330a7b85bbcSSatish Balay #define petsc_mpi_waitall_             PETSC_MPI_WAITALL
331a7b85bbcSSatish Balay #define petsc_mpi_waitany_             PETSC_MPI_WAITANY
332a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_          PETSC_MPI_ALLGATHERV
333a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_           PETSC_MPI_ALLTOALLV
334a7b85bbcSSatish Balay #define petsc_mpi_comm_create_         PETSC_MPI_COMM_CREATE
335a7b85bbcSSatish Balay #define petsc_mpi_address_             PETSC_MPI_ADDRESS
336a7b85bbcSSatish Balay #define petsc_mpi_pack_                PETSC_MPI_PACK
337a7b85bbcSSatish Balay #define petsc_mpi_unpack_              PETSC_MPI_UNPACK
338a7b85bbcSSatish Balay #define petsc_mpi_pack_size_           PETSC_MPI_PACK_SIZE
339a7b85bbcSSatish Balay #define petsc_mpi_type_struct_         PETSC_MPI_TYPE_STRUCT
340a7b85bbcSSatish Balay #define petsc_mpi_type_commit_         PETSC_MPI_TYPE_COMMIT
341a7b85bbcSSatish Balay #define petsc_mpi_wtime_               PETSC_MPI_WTIME
342a7b85bbcSSatish Balay #define petsc_mpi_cancel_              PETSC_MPI_CANCEL
343a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_            PETSC_MPI_COMM_DUP
344a7b85bbcSSatish Balay #define petsc_mpi_comm_free_           PETSC_MPI_COMM_FREE
345a7b85bbcSSatish Balay #define petsc_mpi_get_count_           PETSC_MPI_GET_COUNT
346a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_  PETSC_MPI_GET_PROCESSOR_NAME
347a7b85bbcSSatish Balay #define petsc_mpi_initialized_         PETSC_MPI_INITIALIZED
348a7b85bbcSSatish Balay #define petsc_mpi_iprobe_              PETSC_MPI_IPROBE
349a7b85bbcSSatish Balay #define petsc_mpi_probe_               PETSC_MPI_PROBE
350a7b85bbcSSatish Balay #define petsc_mpi_request_free_        PETSC_MPI_REQUEST_FREE
351a7b85bbcSSatish Balay #define petsc_mpi_ssend_               PETSC_MPI_SSEND
352a7b85bbcSSatish Balay #define petsc_mpi_wait_                PETSC_MPI_WAIT
353a7b85bbcSSatish Balay #define petsc_mpi_comm_group_          PETSC_MPI_COMM_GROUP
354a7b85bbcSSatish Balay #define petsc_mpi_exscan_              PETSC_MPI_EXSCAN
355f7c6e6aaSSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
3560134af2dSBarry Smith #define mpiunisetmoduleblock_          mpiunisetmoduleblock
35752ecd5ffSSatish Balay #define mpiunisetfortranbasepointers_  mpiunisetfortranbasepointers
358a7b85bbcSSatish Balay #define petsc_mpi_init_                petsc_mpi_init
359a7b85bbcSSatish Balay #define petsc_mpi_finalize_            petsc_mpi_finalize
360a7b85bbcSSatish Balay #define petsc_mpi_comm_size_           petsc_mpi_comm_size
361a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_           petsc_mpi_comm_rank
362a7b85bbcSSatish Balay #define petsc_mpi_abort_               petsc_mpi_abort
363a7b85bbcSSatish Balay #define petsc_mpi_reduce_              petsc_mpi_reduce
364a7b85bbcSSatish Balay #define petsc_mpi_allreduce_           petsc_mpi_allreduce
365a7b85bbcSSatish Balay #define petsc_mpi_barrier_             petsc_mpi_barrier
366a7b85bbcSSatish Balay #define petsc_mpi_bcast_               petsc_mpi_bcast
367a7b85bbcSSatish Balay #define petsc_mpi_gather_              petsc_mpi_gather
368a7b85bbcSSatish Balay #define petsc_mpi_allgather_           petsc_mpi_allgather
369a7b85bbcSSatish Balay #define petsc_mpi_comm_split_          petsc_mpi_comm_split
370a7b85bbcSSatish Balay #define petsc_mpi_scan_                petsc_mpi_scan
371a7b85bbcSSatish Balay #define petsc_mpi_send_                petsc_mpi_send
372a7b85bbcSSatish Balay #define petsc_mpi_recv_                petsc_mpi_recv
373a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_      petsc_mpi_reduce_scatter
374a7b85bbcSSatish Balay #define petsc_mpi_irecv_               petsc_mpi_irecv
375a7b85bbcSSatish Balay #define petsc_mpi_isend_               petsc_mpi_isend
376a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_            petsc_mpi_sendrecv
377a7b85bbcSSatish Balay #define petsc_mpi_test_                petsc_mpi_test
378a7b85bbcSSatish Balay #define petsc_mpi_waitall_             petsc_mpi_waitall
379a7b85bbcSSatish Balay #define petsc_mpi_waitany_             petsc_mpi_waitany
380a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_          petsc_mpi_allgatherv
381a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_           petsc_mpi_alltoallv
382a7b85bbcSSatish Balay #define petsc_mpi_comm_create_         petsc_mpi_comm_create
383a7b85bbcSSatish Balay #define petsc_mpi_address_             petsc_mpi_address
384a7b85bbcSSatish Balay #define petsc_mpi_pack_                petsc_mpi_pack
385a7b85bbcSSatish Balay #define petsc_mpi_unpack_              petsc_mpi_unpack
386a7b85bbcSSatish Balay #define petsc_mpi_pack_size_           petsc_mpi_pack_size
387a7b85bbcSSatish Balay #define petsc_mpi_type_struct_         petsc_mpi_type_struct
388a7b85bbcSSatish Balay #define petsc_mpi_type_commit_         petsc_mpi_type_commit
389a7b85bbcSSatish Balay #define petsc_mpi_wtime_               petsc_mpi_wtime
390a7b85bbcSSatish Balay #define petsc_mpi_cancel_              petsc_mpi_cancel
391a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_            petsc_mpi_comm_dup
392a7b85bbcSSatish Balay #define petsc_mpi_comm_free_           petsc_mpi_comm_free
393a7b85bbcSSatish Balay #define petsc_mpi_get_count_           petsc_mpi_get_count
394a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_  petsc_mpi_get_processor_name
395a7b85bbcSSatish Balay #define petsc_mpi_initialized_         petsc_mpi_initialized
396a7b85bbcSSatish Balay #define petsc_mpi_iprobe_              petsc_mpi_iprobe
397a7b85bbcSSatish Balay #define petsc_mpi_probe_               petsc_mpi_probe
398a7b85bbcSSatish Balay #define petsc_mpi_request_free_        petsc_mpi_request_free
399a7b85bbcSSatish Balay #define petsc_mpi_ssend_               petsc_mpi_ssend
400a7b85bbcSSatish Balay #define petsc_mpi_wait_                petsc_mpi_wait
401a7b85bbcSSatish Balay #define petsc_mpi_comm_group_          petsc_mpi_comm_group
402a7b85bbcSSatish Balay #define petsc_mpi_exscan_              petsc_mpi_exscan
403f7c6e6aaSSatish Balay #endif
404e5c89e4eSSatish Balay 
405f7c6e6aaSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE_UNDERSCORE)
406a7b85bbcSSatish Balay #define petsc_mpi_init_                petsc_mpi_init__
407a7b85bbcSSatish Balay #define petsc_mpi_finalize_            petsc_mpi_finalize__
408a7b85bbcSSatish Balay #define petsc_mpi_comm_size_           petsc_mpi_comm_size__
409a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_           petsc_mpi_comm_rank__
410a7b85bbcSSatish Balay #define petsc_mpi_abort_               petsc_mpi_abort__
411a7b85bbcSSatish Balay #define petsc_mpi_reduce_              petsc_mpi_reduce__
412a7b85bbcSSatish Balay #define petsc_mpi_allreduce_           petsc_mpi_allreduce__
413a7b85bbcSSatish Balay #define petsc_mpi_barrier_             petsc_mpi_barrier__
414a7b85bbcSSatish Balay #define petsc_mpi_bcast_               petsc_mpi_bcast__
415a7b85bbcSSatish Balay #define petsc_mpi_gather_              petsc_mpi_gather__
416a7b85bbcSSatish Balay #define petsc_mpi_allgather_           petsc_mpi_allgather__
417a7b85bbcSSatish Balay #define petsc_mpi_comm_split_          petsc_mpi_comm_split__
418a7b85bbcSSatish Balay #define petsc_mpi_scan_                petsc_mpi_scan__
419a7b85bbcSSatish Balay #define petsc_mpi_send_                petsc_mpi_send__
420a7b85bbcSSatish Balay #define petsc_mpi_recv_                petsc_mpi_recv__
421a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_      petsc_mpi_reduce_scatter__
422a7b85bbcSSatish Balay #define petsc_mpi_irecv_               petsc_mpi_irecv__
423a7b85bbcSSatish Balay #define petsc_mpi_isend_               petsc_mpi_isend__
424a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_            petsc_mpi_sendrecv__
425a7b85bbcSSatish Balay #define petsc_mpi_test_                petsc_mpi_test__
426a7b85bbcSSatish Balay #define petsc_mpi_waitall_             petsc_mpi_waitall__
427a7b85bbcSSatish Balay #define petsc_mpi_waitany_             petsc_mpi_waitany__
428a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_          petsc_mpi_allgatherv__
429a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_           petsc_mpi_alltoallv__
430a7b85bbcSSatish Balay #define petsc_mpi_comm_create_         petsc_mpi_comm_create__
431a7b85bbcSSatish Balay #define petsc_mpi_address_             petsc_mpi_address__
432a7b85bbcSSatish Balay #define petsc_mpi_pack_                petsc_mpi_pack__
433a7b85bbcSSatish Balay #define petsc_mpi_unpack_              petsc_mpi_unpack__
434a7b85bbcSSatish Balay #define petsc_mpi_pack_size_           petsc_mpi_pack_size__
435a7b85bbcSSatish Balay #define petsc_mpi_type_struct_         petsc_mpi_type_struct__
436a7b85bbcSSatish Balay #define petsc_mpi_type_commit_         petsc_mpi_type_commit__
437a7b85bbcSSatish Balay #define petsc_mpi_wtime_               petsc_mpi_wtime__
438a7b85bbcSSatish Balay #define petsc_mpi_cancel_              petsc_mpi_cancel__
439a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_            petsc_mpi_comm_dup__
440a7b85bbcSSatish Balay #define petsc_mpi_comm_free_           petsc_mpi_comm_free__
441a7b85bbcSSatish Balay #define petsc_mpi_get_count_           petsc_mpi_get_count__
442a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_  petsc_mpi_get_processor_name__
443a7b85bbcSSatish Balay #define petsc_mpi_initialized_         petsc_mpi_initialized__
444a7b85bbcSSatish Balay #define petsc_mpi_iprobe_              petsc_mpi_iprobe__
445a7b85bbcSSatish Balay #define petsc_mpi_probe_               petsc_mpi_probe__
446a7b85bbcSSatish Balay #define petsc_mpi_request_free_        petsc_mpi_request_free__
447a7b85bbcSSatish Balay #define petsc_mpi_ssend_               petsc_mpi_ssend__
448a7b85bbcSSatish Balay #define petsc_mpi_wait_                petsc_mpi_wait__
449a7b85bbcSSatish Balay #define petsc_mpi_comm_group_          petsc_mpi_comm_group__
450a7b85bbcSSatish Balay #define petsc_mpi_exscan_              petsc_mpi_exscan__
451f7c6e6aaSSatish Balay #endif
452e5c89e4eSSatish Balay 
453c8217ed5SSatish Balay /* Do not build fortran interface if MPI namespace colision is to be avoided */
454a7b85bbcSSatish Balay #if defined(PETSC_HAVE_FORTRAN)
455c8217ed5SSatish Balay 
4560134af2dSBarry Smith PETSC_EXTERN void PETSC_STDCALL mpiunisetmoduleblock_(void);
45752ecd5ffSSatish Balay 
45852ecd5ffSSatish Balay PETSC_EXTERN void PETSC_STDCALL mpiunisetfortranbasepointers_(void *f_mpi_in_place)
45952ecd5ffSSatish Balay {
46052ecd5ffSSatish Balay   MPIUNIF_mpi_in_place   = f_mpi_in_place;
46152ecd5ffSSatish Balay }
46252ecd5ffSSatish Balay 
463a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_init_(int *ierr)
464e5c89e4eSSatish Balay {
4650134af2dSBarry Smith   mpiunisetmoduleblock_();
466c8217ed5SSatish Balay   *ierr = MPI_Init((int*)0, (char***)0);
467e5c89e4eSSatish Balay }
468e5c89e4eSSatish Balay 
469a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_finalize_(int *ierr)
470e5c89e4eSSatish Balay {
471c8217ed5SSatish Balay   *ierr = MPI_Finalize();
472e5c89e4eSSatish Balay }
473e5c89e4eSSatish Balay 
474a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_size_(MPI_Comm *comm,int *size,int *ierr)
475e5c89e4eSSatish Balay {
476e5c89e4eSSatish Balay   *size = 1;
477e5c89e4eSSatish Balay   *ierr = 0;
478e5c89e4eSSatish Balay }
479e5c89e4eSSatish Balay 
480a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_rank_(MPI_Comm *comm,int *rank,int *ierr)
481e5c89e4eSSatish Balay {
482e5c89e4eSSatish Balay   *rank = 0;
483e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
484e5c89e4eSSatish Balay }
485e5c89e4eSSatish Balay 
486a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_split_(MPI_Comm *comm,int *color,int *key, MPI_Comm *newcomm, int *ierr)
4871f6cc5b2SSatish Balay {
4881f6cc5b2SSatish Balay   *newcomm = *comm;
4891f6cc5b2SSatish Balay   *ierr    = MPI_SUCCESS;
4901f6cc5b2SSatish Balay }
4911f6cc5b2SSatish Balay 
492a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_abort_(MPI_Comm *comm,int *errorcode,int *ierr)
493e5c89e4eSSatish Balay {
494e5c89e4eSSatish Balay   abort();
495e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
496e5c89e4eSSatish Balay }
497e5c89e4eSSatish Balay 
498a7b85bbcSSatish 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)
4993b644628SSatish Balay {
500f30578ecSBarry Smith   *ierr = MPI_Reduce(sendbuf,recvbuf,*count,*datatype,*op,*root,*comm);
5013b644628SSatish Balay }
5023b644628SSatish Balay 
503a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_allreduce_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr)
504e5c89e4eSSatish Balay {
505f30578ecSBarry Smith   *ierr = MPI_Allreduce(sendbuf,recvbuf,*count,*datatype,*op,*comm);
506e5c89e4eSSatish Balay }
507e5c89e4eSSatish Balay 
508a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_barrier_(MPI_Comm *comm,int *ierr)
509e5c89e4eSSatish Balay {
510e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
511e5c89e4eSSatish Balay }
512f7c6e6aaSSatish Balay 
513a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_bcast_(void *buf,int *count,int *datatype,int *root,int *comm,int *ierr)
514e5c89e4eSSatish Balay {
515e5c89e4eSSatish Balay   *ierr = MPI_SUCCESS;
516e5c89e4eSSatish Balay }
517f7c6e6aaSSatish Balay 
518a7b85bbcSSatish 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)
519e5c89e4eSSatish Balay {
520f30578ecSBarry Smith   *ierr = MPI_Gather(sendbuf,*scount,*sdatatype,recvbuf,rcount,rdatatype,*root,*comm);
521f7c6e6aaSSatish Balay }
522f7c6e6aaSSatish Balay 
523a7b85bbcSSatish 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)
524f7c6e6aaSSatish Balay {
525f30578ecSBarry Smith   *ierr = MPI_Allgather(sendbuf,*scount,*sdatatype,recvbuf,rcount,rdatatype,*comm);
526e5c89e4eSSatish Balay }
527e5c89e4eSSatish Balay 
528a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_scan_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr)
5293b644628SSatish Balay {
5301a589b05SJed Brown   *ierr = MPIUNI_Memcpy(recvbuf,sendbuf,(*count)*MPI_sizeof(*datatype));
5313b644628SSatish Balay }
5323b644628SSatish Balay 
533a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_send_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *ierr)
5341086b069SSatish Balay {
53506df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
5361086b069SSatish Balay }
5371086b069SSatish Balay 
538a7b85bbcSSatish 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)
5391086b069SSatish Balay {
54006df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
5411086b069SSatish Balay }
5421086b069SSatish Balay 
543a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_reduce_scatter_(void *sendbuf,void *recvbuf,int *recvcounts,int *datatype,int *op,int *comm,int *ierr)
544156bc490SSatish Balay {
54506df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
546156bc490SSatish Balay }
547156bc490SSatish Balay 
548a7b85bbcSSatish 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)
549156bc490SSatish Balay {
55006df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
551156bc490SSatish Balay }
552156bc490SSatish Balay 
553a7b85bbcSSatish 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)
554156bc490SSatish Balay {
55506df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
556156bc490SSatish Balay }
557156bc490SSatish Balay 
558a7b85bbcSSatish 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)
559156bc490SSatish Balay {
5601a589b05SJed Brown   *ierr = MPIUNI_Memcpy(recvbuf,sendbuf,(*sendcount)*MPI_sizeof(*sendtype));
561156bc490SSatish Balay }
562156bc490SSatish Balay 
563a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_test_(int *request,int *flag,int *status,int *ierr)
564156bc490SSatish Balay {
56506df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
566156bc490SSatish Balay }
567156bc490SSatish Balay 
568a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_waitall_(int *count,int *array_of_requests,int *array_of_statuses,int *ierr)
569156bc490SSatish Balay {
570156bc490SSatish Balay   *ierr = MPI_SUCCESS;
571156bc490SSatish Balay }
572156bc490SSatish Balay 
573a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_waitany_(int *count,int *array_of_requests,int * index, int *status,int *ierr)
574156bc490SSatish Balay {
575156bc490SSatish Balay   *ierr = MPI_SUCCESS;
576156bc490SSatish Balay }
577156bc490SSatish Balay 
578a7b85bbcSSatish 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)
579156bc490SSatish Balay {
580f30578ecSBarry Smith   *ierr = MPI_Allgatherv(sendbuf,*sendcount,*sendtype,recvbuf,recvcounts,displs,*recvtype,*comm);
581156bc490SSatish Balay }
582156bc490SSatish Balay 
583a7b85bbcSSatish 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)
584156bc490SSatish Balay {
585f30578ecSBarry Smith   *ierr = MPI_Alltoallv(sendbuf,sendcounts,sdispls,*sendtype,recvbuf,recvcounts,rdispls,*recvtype,*comm);
586156bc490SSatish Balay }
587156bc490SSatish Balay 
588a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_create_(int *comm,int *group,int *newcomm,int *ierr)
589156bc490SSatish Balay {
590156bc490SSatish Balay   *newcomm =  *comm;
591156bc490SSatish Balay   *ierr    = MPI_SUCCESS;
592156bc490SSatish Balay }
593156bc490SSatish Balay 
59499256852SLisandro Dalcin PETSC_EXTERN void PETSC_STDCALL petsc_mpi_address_(void *location,MPI_Aint *address,int *ierr)
595156bc490SSatish Balay {
59699256852SLisandro Dalcin   *address =  (MPI_Aint) ((char *)location);
597156bc490SSatish Balay   *ierr    = MPI_SUCCESS;
598156bc490SSatish Balay }
599156bc490SSatish Balay 
600a7b85bbcSSatish 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)
601156bc490SSatish Balay {
60206df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
603156bc490SSatish Balay }
604156bc490SSatish Balay 
605a7b85bbcSSatish 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)
606156bc490SSatish Balay {
60706df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
608156bc490SSatish Balay }
609156bc490SSatish Balay 
610a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_pack_size_(int *incount,int *datatype,int *comm,int *size,int *ierr)
611156bc490SSatish Balay {
61206df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
613156bc490SSatish Balay }
614156bc490SSatish Balay 
615a7b85bbcSSatish 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)
616156bc490SSatish Balay {
61706df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
618156bc490SSatish Balay }
619156bc490SSatish Balay 
620a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_type_commit_(int *datatype,int *ierr)
621156bc490SSatish Balay {
622156bc490SSatish Balay   *ierr = MPI_SUCCESS;
623156bc490SSatish Balay }
624156bc490SSatish Balay 
625a7b85bbcSSatish Balay double PETSC_STDCALL petsc_mpi_wtime_(void)
626156bc490SSatish Balay {
627156bc490SSatish Balay   return 0.0;
628f8f52c7dSSatish Balay }
629156bc490SSatish Balay 
630a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_cancel_(int *request,int *ierr)
631f8f52c7dSSatish Balay {
632f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
633f8f52c7dSSatish Balay }
634f8f52c7dSSatish Balay 
635a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_dup_(int *comm,int *out,int *ierr)
636f8f52c7dSSatish Balay {
637f8f52c7dSSatish Balay   *out  = *comm;
638f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
639f8f52c7dSSatish Balay }
640f8f52c7dSSatish Balay 
641a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_free_(int *comm,int *ierr)
642f8f52c7dSSatish Balay {
643f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
644f8f52c7dSSatish Balay }
645f8f52c7dSSatish Balay 
646a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_get_count_(int *status,int *datatype,int *count,int *ierr)
647f8f52c7dSSatish Balay {
64806df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
649f8f52c7dSSatish Balay }
650f8f52c7dSSatish Balay 
651ce0a2cd1SBarry Smith /* duplicate from fortranimpl.h */
6527eda36fdSJed Brown #ifndef PETSC_FORTRAN_CHARLEN_T
6537eda36fdSJed Brown #  define PETSC_FORTRAN_CHARLEN_T int
6547eda36fdSJed Brown #endif
655f8f52c7dSSatish Balay #if defined(PETSC_HAVE_FORTRAN_MIXED_STR_ARG)
6567bdf51c9SJed Brown #define PETSC_MIXED_LEN(len) ,PETSC_FORTRAN_CHARLEN_T len
657f8f52c7dSSatish Balay #define PETSC_END_LEN(len)
658f8f52c7dSSatish Balay #else
659f8f52c7dSSatish Balay #define PETSC_MIXED_LEN(len)
6607bdf51c9SJed Brown #define PETSC_END_LEN(len)   ,PETSC_FORTRAN_CHARLEN_T len
661f8f52c7dSSatish Balay #endif
662f8f52c7dSSatish Balay 
663a7b85bbcSSatish 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))
664f8f52c7dSSatish Balay {
665f8f52c7dSSatish Balay   MPIUNI_Memcpy(name,"localhost",9*sizeof(char));
666f8f52c7dSSatish Balay   *result_len = 9;
667f8f52c7dSSatish Balay   *ierr       = MPI_SUCCESS;
668f8f52c7dSSatish Balay }
669f8f52c7dSSatish Balay 
670a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_initialized_(int *flag,int *ierr)
671f8f52c7dSSatish Balay {
672f8f52c7dSSatish Balay   *flag = MPI_was_initialized;
673f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
674f8f52c7dSSatish Balay }
675f8f52c7dSSatish Balay 
676a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_iprobe_(int *source,int *tag,int *comm,int *glag,int *status,int *ierr)
677f8f52c7dSSatish Balay {
678f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
679f8f52c7dSSatish Balay }
680f8f52c7dSSatish Balay 
681a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_probe_(int *source,int *tag,int *comm,int *flag,int *status,int *ierr)
682f8f52c7dSSatish Balay {
683f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
684f8f52c7dSSatish Balay }
685f8f52c7dSSatish Balay 
686a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_request_free_(int *request,int *ierr)
687f8f52c7dSSatish Balay {
688f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
689f8f52c7dSSatish Balay }
690f8f52c7dSSatish Balay 
691a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_ssend_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *ierr)
692f8f52c7dSSatish Balay {
69306df1fb1SBarry Smith   *ierr = MPIUni_Abort(MPI_COMM_WORLD,0);
694f8f52c7dSSatish Balay }
695f8f52c7dSSatish Balay 
696a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_wait_(int *request,int *status,int *ierr)
697f8f52c7dSSatish Balay {
698f8f52c7dSSatish Balay   *ierr = MPI_SUCCESS;
699156bc490SSatish Balay }
700156bc490SSatish Balay 
701a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_comm_group_(int *comm,int *group,int *ierr)
702d4816372SSatish Balay {
703d4816372SSatish Balay   *ierr = MPI_SUCCESS;
704d4816372SSatish Balay }
705d4816372SSatish Balay 
706a7b85bbcSSatish Balay PETSC_EXTERN void PETSC_STDCALL petsc_mpi_exscan_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr)
707d4816372SSatish Balay {
708d4816372SSatish Balay   *ierr = MPI_SUCCESS;
709d4816372SSatish Balay }
710d4816372SSatish Balay 
711a7b85bbcSSatish Balay #endif /* PETSC_HAVE_FORTRAN */
712c8217ed5SSatish Balay 
713e5c89e4eSSatish Balay #if defined(__cplusplus)
714e5c89e4eSSatish Balay }
715e5c89e4eSSatish Balay #endif
716