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> 6c9b973beSBarry Smith #if !defined(MPIUNI_H) 74423d37eSSatish Balay #error "Wrong mpi.h included! require mpi.h from MPIUNI" 84423d37eSSatish Balay #endif 9e5c89e4eSSatish Balay 10*6e42a002SJunchao Zhang #if defined(PETSC_HAVE_CUDA) 11*6e42a002SJunchao Zhang #include <cuda.h> 12*6e42a002SJunchao Zhang #include <cuda_runtime.h> 13*6e42a002SJunchao Zhang #endif 14*6e42a002SJunchao Zhang 15e5c89e4eSSatish Balay #define MPI_SUCCESS 0 16e5c89e4eSSatish Balay #define MPI_FAILURE 1 17a297a907SKarl Rupp 1899256852SLisandro Dalcin void *MPIUNI_TMP = NULL; 1999256852SLisandro Dalcin 20e5c89e4eSSatish Balay /* 21100f28aeSBarry Smith With MPI Uni there are exactly four distinct communicators: 22100f28aeSBarry Smith MPI_COMM_SELF, MPI_COMM_WORLD, and a MPI_Comm_dup() of each of these (duplicates of duplicates return the same communictor) 23100f28aeSBarry Smith 24100f28aeSBarry Smith MPI_COMM_SELF and MPI_COMM_WORLD are MPI_Comm_free() in MPI_Finalize() but in general with PETSc, 25100f28aeSBarry Smith the other communicators are freed once the last PETSc object is freed (before MPI_Finalize()). 26100f28aeSBarry Smith 27e5c89e4eSSatish Balay */ 281ca36541SSatish Balay #define MAX_ATTR 256 29fb53af6bSBarry Smith #define MAX_COMM 128 30fb53af6bSBarry Smith 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; 39f0463fa0SJunchao Zhang int active; /* Is this keyval in use by some comm? */ 4046651e72SBarry Smith } MPI_Attr_keyval; 4146651e72SBarry Smith 4246651e72SBarry Smith static MPI_Attr_keyval attr_keyval[MAX_ATTR]; 43fb53af6bSBarry Smith static MPI_Attr attr[MAX_COMM][MAX_ATTR]; 44f0463fa0SJunchao Zhang static int comm_active[MAX_COMM]; /* Boolean array indicating which comms are in use */ 45f0463fa0SJunchao Zhang static int mpi_tag_ub = 100000000; 46f0463fa0SJunchao Zhang static int num_attr = 1; /* Maximal number of keyvals/attributes ever created, including the predefined MPI_TAG_UB attribute. */ 47f0463fa0SJunchao Zhang static int MaxComm = 2; /* Maximal number of communicators ever created, including comm_self(1), comm_world(2), but not comm_null(0) */ 4852ecd5ffSSatish Balay static void* MPIUNIF_mpi_in_place = 0; 49e5c89e4eSSatish Balay 50f0463fa0SJunchao Zhang #define CommIdx(comm) ((comm)-1) /* the communicator's internal index used in attr[idx][] and comm_active[idx]. comm_null does not occupy slots in attr[][] */ 51f0463fa0SJunchao Zhang 52e5c89e4eSSatish Balay #if defined(__cplusplus) 53e5c89e4eSSatish Balay extern "C" { 54e5c89e4eSSatish Balay #endif 55e5c89e4eSSatish Balay 56e5c89e4eSSatish Balay /* 57e5c89e4eSSatish Balay To avoid problems with prototypes to the system memcpy() it is duplicated here 58e5c89e4eSSatish Balay */ 59*6e42a002SJunchao Zhang int MPIUNI_Memcpy(void *dst,const void *src,int n) 60a6dfd86eSKarl Rupp { 61*6e42a002SJunchao Zhang if (dst == MPI_IN_PLACE || dst == MPIUNIF_mpi_in_place) return MPI_SUCCESS; 62*6e42a002SJunchao Zhang if (src == MPI_IN_PLACE || src == MPIUNIF_mpi_in_place) return MPI_SUCCESS; 63*6e42a002SJunchao Zhang if (!n) return MPI_SUCCESS; 64e5c89e4eSSatish Balay 65*6e42a002SJunchao Zhang #if defined(PETSC_HAVE_CUDA) /* CUDA-aware MPIUNI */ 66*6e42a002SJunchao Zhang { 67*6e42a002SJunchao Zhang cudaError_t cudaerr; 68*6e42a002SJunchao Zhang CUresult cuerr; 69*6e42a002SJunchao Zhang CUmemorytype mtype; 70*6e42a002SJunchao Zhang int dstType=0,srcType=0; /* 0: host memory; 1: device memory */ 71*6e42a002SJunchao Zhang enum cudaMemcpyKind kinds[2][2] = {{cudaMemcpyHostToHost,cudaMemcpyHostToDevice},{cudaMemcpyDeviceToHost,cudaMemcpyDeviceToDevice}}; 72*6e42a002SJunchao Zhang 73*6e42a002SJunchao Zhang /* CUDA driver API cuPointerGetAttribute() is faster than CUDA runtime API cudaPointerGetAttributes() */ 74*6e42a002SJunchao Zhang cuerr = cuPointerGetAttribute(&mtype,CU_POINTER_ATTRIBUTE_MEMORY_TYPE,(CUdeviceptr)dst); 75*6e42a002SJunchao Zhang if (cuerr == CUDA_SUCCESS && mtype == CU_MEMORYTYPE_DEVICE) dstType = 1; 76*6e42a002SJunchao Zhang cuerr = cuPointerGetAttribute(&mtype,CU_POINTER_ATTRIBUTE_MEMORY_TYPE,(CUdeviceptr)src); 77*6e42a002SJunchao Zhang if (cuerr == CUDA_SUCCESS && mtype == CU_MEMORYTYPE_DEVICE) srcType = 1; 78*6e42a002SJunchao Zhang 79*6e42a002SJunchao Zhang cudaerr = cudaMemcpy(dst,src,n,kinds[srcType][dstType]); /* Use synchronous copy per MPI semantics */ 80*6e42a002SJunchao Zhang if (cudaerr != cudaSuccess) return MPI_FAILURE; 81*6e42a002SJunchao Zhang } 82*6e42a002SJunchao Zhang #else 83*6e42a002SJunchao Zhang memcpy(dst,src,n); 84*6e42a002SJunchao Zhang #endif 8599256852SLisandro Dalcin return MPI_SUCCESS; 86e5c89e4eSSatish Balay } 87e5c89e4eSSatish Balay 8812801b39SBarry Smith static int classcnt = 0; 8912801b39SBarry Smith static int codecnt = 0; 9012801b39SBarry Smith 9112801b39SBarry Smith int MPI_Add_error_class(int *cl) 9212801b39SBarry Smith { 9312801b39SBarry Smith *cl = classcnt++; 9412801b39SBarry Smith return MPI_SUCCESS; 9512801b39SBarry Smith } 9612801b39SBarry Smith 9712801b39SBarry Smith int MPI_Add_error_code(int cl,int *co) 9812801b39SBarry Smith { 9912801b39SBarry Smith if (cl >= classcnt) return MPI_FAILURE; 10012801b39SBarry Smith *co = codecnt++; 10112801b39SBarry Smith return MPI_SUCCESS; 10212801b39SBarry Smith } 10312801b39SBarry Smith 1041a589b05SJed Brown int MPI_Type_get_envelope(MPI_Datatype datatype,int *num_integers,int *num_addresses,int *num_datatypes,int *combiner) 1051a589b05SJed Brown { 1061a589b05SJed Brown int comb = datatype >> 28; 1071a589b05SJed Brown switch (comb) { 1081a589b05SJed Brown case MPI_COMBINER_NAMED: 1091a589b05SJed Brown *num_integers = 0; 1101a589b05SJed Brown *num_addresses = 0; 1111a589b05SJed Brown *num_datatypes = 0; 1121a589b05SJed Brown *combiner = comb; 1131a589b05SJed Brown break; 1141a589b05SJed Brown case MPI_COMBINER_DUP: 1151a589b05SJed Brown *num_integers = 0; 1161a589b05SJed Brown *num_addresses = 0; 1171a589b05SJed Brown *num_datatypes = 1; 1181a589b05SJed Brown *combiner = comb; 1191a589b05SJed Brown break; 1201a589b05SJed Brown case MPI_COMBINER_CONTIGUOUS: 1211a589b05SJed Brown *num_integers = 1; 1221a589b05SJed Brown *num_addresses = 0; 1231a589b05SJed Brown *num_datatypes = 1; 1241a589b05SJed Brown *combiner = comb; 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 1321a589b05SJed 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) 1331a589b05SJed Brown { 1341a589b05SJed Brown int comb = datatype >> 28; 1351a589b05SJed Brown switch (comb) { 1361a589b05SJed Brown case MPI_COMBINER_NAMED: 1371a589b05SJed Brown return MPIUni_Abort(MPI_COMM_SELF,1); 1381a589b05SJed Brown break; 1391a589b05SJed Brown case MPI_COMBINER_DUP: 1401a589b05SJed Brown if (max_datatypes < 1) return MPIUni_Abort(MPI_COMM_SELF,1); 1411a589b05SJed Brown array_of_datatypes[0] = datatype & 0x0fffffff; 1421a589b05SJed Brown break; 1431a589b05SJed Brown case MPI_COMBINER_CONTIGUOUS: 1441a589b05SJed Brown if (max_integers < 1 || max_datatypes < 1) return MPIUni_Abort(MPI_COMM_SELF,1); 1451a589b05SJed Brown array_of_integers[0] = (datatype >> 8) & 0xfff; /* count */ 1461a589b05SJed Brown array_of_datatypes[0] = (datatype & 0x0ff000ff) | 0x100; /* basic named type (count=1) from which the contiguous type is derived */ 1471a589b05SJed Brown break; 1481a589b05SJed Brown default: 1491a589b05SJed Brown return MPIUni_Abort(MPI_COMM_SELF,1); 1501a589b05SJed Brown } 15199256852SLisandro Dalcin return MPI_SUCCESS; 1521a589b05SJed Brown } 1531a589b05SJed Brown 154e5c89e4eSSatish Balay /* 155e5c89e4eSSatish Balay Used to set the built-in MPI_TAG_UB attribute 156e5c89e4eSSatish Balay */ 157e5c89e4eSSatish Balay static int Keyval_setup(void) 158e5c89e4eSSatish Balay { 159f0463fa0SJunchao Zhang attr[CommIdx(MPI_COMM_WORLD)][0].active = 1; 160f0463fa0SJunchao Zhang attr[CommIdx(MPI_COMM_WORLD)][0].attribute_val = &mpi_tag_ub; 161f0463fa0SJunchao Zhang attr[CommIdx(MPI_COMM_SELF )][0].active = 1; 162f0463fa0SJunchao Zhang attr[CommIdx(MPI_COMM_SELF )][0].attribute_val = &mpi_tag_ub; 163f0463fa0SJunchao Zhang attr_keyval[0].active = 1; 16499256852SLisandro Dalcin return MPI_SUCCESS; 165e5c89e4eSSatish Balay } 166e5c89e4eSSatish Balay 16712801b39SBarry Smith int MPI_Comm_create_keyval(MPI_Copy_function *copy_fn,MPI_Delete_function *delete_fn,int *keyval,void *extra_state) 168e5c89e4eSSatish Balay { 169f0463fa0SJunchao Zhang int i,keyid; 170f0463fa0SJunchao Zhang for (i=1; i<num_attr; i++) { /* the first attribute is always in use */ 171f0463fa0SJunchao Zhang if (!attr_keyval[i].active) { 172f0463fa0SJunchao Zhang keyid = i; 173f0463fa0SJunchao Zhang goto found; 174f0463fa0SJunchao Zhang } 175f0463fa0SJunchao Zhang } 1769cf9c1dbSJed Brown if (num_attr >= MAX_ATTR) return MPIUni_Abort(MPI_COMM_WORLD,1); 177f0463fa0SJunchao Zhang keyid = num_attr++; 178e5c89e4eSSatish Balay 179f0463fa0SJunchao Zhang found: 180f0463fa0SJunchao Zhang attr_keyval[keyid].extra_state = extra_state; 181f0463fa0SJunchao Zhang attr_keyval[keyid].del = delete_fn; 182f0463fa0SJunchao Zhang attr_keyval[keyid].active = 1; 183f0463fa0SJunchao Zhang *keyval = keyid; 18499256852SLisandro Dalcin return MPI_SUCCESS; 185e5c89e4eSSatish Balay } 186e5c89e4eSSatish Balay 18747435625SJed Brown int MPI_Comm_free_keyval(int *keyval) 188e5c89e4eSSatish Balay { 189a246e310SBarry Smith attr_keyval[*keyval].extra_state = 0; 190a246e310SBarry Smith attr_keyval[*keyval].del = 0; 191f0463fa0SJunchao Zhang attr_keyval[*keyval].active = 0; 192a246e310SBarry Smith *keyval = 0; 193e5c89e4eSSatish Balay return MPI_SUCCESS; 194e5c89e4eSSatish Balay } 195e5c89e4eSSatish Balay 19647435625SJed Brown int MPI_Comm_set_attr(MPI_Comm comm,int keyval,void *attribute_val) 197e5c89e4eSSatish Balay { 198f0463fa0SJunchao Zhang int idx = CommIdx(comm); 199f0463fa0SJunchao Zhang if (comm < 1 || comm > MaxComm) return MPI_FAILURE; 200f0463fa0SJunchao Zhang attr[idx][keyval].active = 1; 201f0463fa0SJunchao Zhang attr[idx][keyval].attribute_val = attribute_val; 202e5c89e4eSSatish Balay return MPI_SUCCESS; 203e5c89e4eSSatish Balay } 204e5c89e4eSSatish Balay 20547435625SJed Brown int MPI_Comm_delete_attr(MPI_Comm comm,int keyval) 206e5c89e4eSSatish Balay { 207f0463fa0SJunchao Zhang int idx = CommIdx(comm); 208f0463fa0SJunchao Zhang if (comm < 1 || comm > MaxComm) return MPI_FAILURE; 209f0463fa0SJunchao Zhang if (attr[idx][keyval].active && attr_keyval[keyval].del) { 210f0463fa0SJunchao Zhang void *save_attribute_val = attr[idx][keyval].attribute_val; 211f0463fa0SJunchao Zhang attr[idx][keyval].active = 0; 212f0463fa0SJunchao Zhang attr[idx][keyval].attribute_val = 0; 21346651e72SBarry Smith (*(attr_keyval[keyval].del))(comm,keyval,save_attribute_val,attr_keyval[keyval].extra_state); 21440776e1bSpetsc } 215e5c89e4eSSatish Balay return MPI_SUCCESS; 216e5c89e4eSSatish Balay } 217e5c89e4eSSatish Balay 21847435625SJed Brown int MPI_Comm_get_attr(MPI_Comm comm,int keyval,void *attribute_val,int *flag) 219e5c89e4eSSatish Balay { 220f0463fa0SJunchao Zhang int idx = CommIdx(comm); 221f0463fa0SJunchao Zhang if (comm < 1 || comm > MaxComm) return MPI_FAILURE; 222e5c89e4eSSatish Balay if (!keyval) Keyval_setup(); 223f0463fa0SJunchao Zhang *flag = attr[idx][keyval].active; 224f0463fa0SJunchao Zhang *(void**)attribute_val = attr[idx][keyval].attribute_val; 225e5c89e4eSSatish Balay return MPI_SUCCESS; 226e5c89e4eSSatish Balay } 227e5c89e4eSSatish Balay 228c8217ed5SSatish Balay int MPI_Comm_create(MPI_Comm comm,MPI_Group group,MPI_Comm *newcomm) 229c8217ed5SSatish Balay { 230f60917d2SBarry Smith int j; 231f0463fa0SJunchao Zhang if (comm < 1 || comm > MaxComm) return MPI_FAILURE; 232f0463fa0SJunchao Zhang for (j=3; j<=MaxComm; j++) { 233f0463fa0SJunchao Zhang if (!comm_active[CommIdx(j)]) { 234f0463fa0SJunchao Zhang comm_active[CommIdx(j)] = 1; 235f60917d2SBarry Smith *newcomm = j; 236f60917d2SBarry Smith return MPI_SUCCESS; 237f60917d2SBarry Smith } 238f60917d2SBarry Smith } 239f0463fa0SJunchao Zhang if (MaxComm >= MAX_COMM) return MPI_FAILURE; 240f0463fa0SJunchao Zhang *newcomm = ++MaxComm; 241f0463fa0SJunchao Zhang comm_active[CommIdx(*newcomm)] = 1; 242c8217ed5SSatish Balay return MPI_SUCCESS; 243c8217ed5SSatish Balay } 244c8217ed5SSatish Balay 245c8217ed5SSatish Balay int MPI_Comm_dup(MPI_Comm comm,MPI_Comm *out) 246e5c89e4eSSatish Balay { 247f60917d2SBarry Smith int j; 248f0463fa0SJunchao Zhang if (comm < 1 || comm > MaxComm) return MPI_FAILURE; 249f0463fa0SJunchao Zhang for (j=3; j<=MaxComm; j++) { 250f0463fa0SJunchao Zhang if (!comm_active[CommIdx(j)]) { 251f0463fa0SJunchao Zhang comm_active[CommIdx(j)] = 1; 252f60917d2SBarry Smith *out = j; 253f60917d2SBarry Smith return MPI_SUCCESS; 254f60917d2SBarry Smith } 255f60917d2SBarry Smith } 256f0463fa0SJunchao Zhang if (MaxComm >= MAX_COMM) return MPI_FAILURE; 257f0463fa0SJunchao Zhang *out = ++MaxComm; 258f0463fa0SJunchao Zhang comm_active[CommIdx(*out)] = 1; 25999256852SLisandro Dalcin return MPI_SUCCESS; 260e5c89e4eSSatish Balay } 261e5c89e4eSSatish Balay 262c8217ed5SSatish Balay int MPI_Comm_free(MPI_Comm *comm) 263e5c89e4eSSatish Balay { 264e5c89e4eSSatish Balay int i; 265f0463fa0SJunchao Zhang int idx = CommIdx(*comm); 266e5c89e4eSSatish Balay 267f0463fa0SJunchao Zhang if (*comm < 1 || *comm > MaxComm) return MPI_FAILURE; 268e5c89e4eSSatish Balay for (i=0; i<num_attr; i++) { 269f0463fa0SJunchao Zhang if (attr[idx][i].active && attr_keyval[i].del) (*attr_keyval[i].del)(*comm,i,attr[idx][i].attribute_val,attr_keyval[i].extra_state); 270f0463fa0SJunchao Zhang attr[idx][i].active = 0; 271f0463fa0SJunchao Zhang attr[idx][i].attribute_val = 0; 272e5c89e4eSSatish Balay } 273f0463fa0SJunchao Zhang if (*comm >= 3) comm_active[idx] = 0; 274100f28aeSBarry Smith *comm = 0; 275e5c89e4eSSatish Balay return MPI_SUCCESS; 276e5c89e4eSSatish Balay } 277e5c89e4eSSatish Balay 278d393f697SSatish Balay int MPI_Comm_size(MPI_Comm comm, int *size) 279d393f697SSatish Balay { 280f0463fa0SJunchao Zhang if (comm < 1 || comm > MaxComm) return MPI_FAILURE; 281d393f697SSatish Balay *size=1; 282d393f697SSatish Balay return MPI_SUCCESS; 283d393f697SSatish Balay } 284d393f697SSatish Balay 285d393f697SSatish Balay int MPI_Comm_rank(MPI_Comm comm, int *rank) 286d393f697SSatish Balay { 287f0463fa0SJunchao Zhang if (comm < 1 || comm > MaxComm) return MPI_FAILURE; 288d393f697SSatish Balay *rank=0; 289d393f697SSatish Balay return MPI_SUCCESS; 290d393f697SSatish Balay } 291d393f697SSatish Balay 29206df1fb1SBarry Smith int MPIUni_Abort(MPI_Comm comm,int errorcode) 29306df1fb1SBarry Smith { 29406df1fb1SBarry Smith printf("MPI operation not supported by PETSc's sequential MPI wrappers\n"); 29506df1fb1SBarry Smith return MPI_FAILURE; 29606df1fb1SBarry Smith } 29706df1fb1SBarry Smith 298c8217ed5SSatish Balay int MPI_Abort(MPI_Comm comm,int errorcode) 299e5c89e4eSSatish Balay { 300e5c89e4eSSatish Balay abort(); 301e5c89e4eSSatish Balay return MPI_SUCCESS; 302e5c89e4eSSatish Balay } 303e5c89e4eSSatish Balay 30458cd72c3SLisandro Dalcin /* --------------------------------------------------------------------------*/ 30558cd72c3SLisandro Dalcin 306e5c89e4eSSatish Balay static int MPI_was_initialized = 0; 30758cd72c3SLisandro Dalcin static int MPI_was_finalized = 0; 30858cd72c3SLisandro Dalcin 309c8217ed5SSatish Balay int MPI_Init(int *argc, char ***argv) 31058cd72c3SLisandro Dalcin { 31199256852SLisandro Dalcin if (MPI_was_initialized) return MPI_FAILURE; 312f0463fa0SJunchao Zhang if (MPI_was_finalized) return MPI_FAILURE; /* MPI standard: once MPI_FINALIZE returns, no MPI routine (not even MPI_INIT) may be called, except ... */ 31358cd72c3SLisandro Dalcin MPI_was_initialized = 1; 31499256852SLisandro Dalcin return MPI_SUCCESS; 31558cd72c3SLisandro Dalcin } 31658cd72c3SLisandro Dalcin 317c8217ed5SSatish Balay int MPI_Finalize(void) 31858cd72c3SLisandro Dalcin { 319100f28aeSBarry Smith MPI_Comm comm; 32099256852SLisandro Dalcin if (MPI_was_finalized) return MPI_FAILURE; 32199256852SLisandro Dalcin if (!MPI_was_initialized) return MPI_FAILURE; 322100f28aeSBarry Smith comm = MPI_COMM_WORLD; 323100f28aeSBarry Smith MPI_Comm_free(&comm); 324100f28aeSBarry Smith comm = MPI_COMM_SELF; 325100f28aeSBarry Smith MPI_Comm_free(&comm); 326f0463fa0SJunchao Zhang #if defined(PETSC_USE_DEBUG) 327f0463fa0SJunchao Zhang { 328f0463fa0SJunchao Zhang int i; 329f0463fa0SJunchao Zhang for (i=3; i<=MaxComm; i++) { 330f0463fa0SJunchao Zhang if (comm_active[CommIdx(i)]) printf("MPIUni warning: MPI communicator %d is not freed before MPI_Finalize()\n", i); 331f0463fa0SJunchao Zhang } 332f0463fa0SJunchao Zhang } 333f0463fa0SJunchao Zhang #endif 334f0463fa0SJunchao Zhang /* reset counters */ 335f0463fa0SJunchao Zhang MaxComm = 2; 336f0463fa0SJunchao Zhang num_attr = 1; 33758cd72c3SLisandro Dalcin MPI_was_finalized = 1; 33899256852SLisandro Dalcin return MPI_SUCCESS; 33958cd72c3SLisandro Dalcin } 340e5c89e4eSSatish Balay 341c8217ed5SSatish Balay int MPI_Initialized(int *flag) 342e5c89e4eSSatish Balay { 343e5c89e4eSSatish Balay *flag = MPI_was_initialized; 34499256852SLisandro Dalcin return MPI_SUCCESS; 345e5c89e4eSSatish Balay } 346e5c89e4eSSatish Balay 347c8217ed5SSatish Balay int MPI_Finalized(int *flag) 348e5c89e4eSSatish Balay { 34958cd72c3SLisandro Dalcin *flag = MPI_was_finalized; 35099256852SLisandro Dalcin return MPI_SUCCESS; 351e5c89e4eSSatish Balay } 352e5c89e4eSSatish Balay 353e5c89e4eSSatish Balay /* ------------------- Fortran versions of several routines ------------------ */ 354e5c89e4eSSatish Balay 355f7c6e6aaSSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 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 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 4040134af2dSBarry Smith #define mpiunisetmoduleblock_ mpiunisetmoduleblock 40552ecd5ffSSatish Balay #define mpiunisetfortranbasepointers_ mpiunisetfortranbasepointers 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 453f7c6e6aaSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE_UNDERSCORE) 454a7b85bbcSSatish Balay #define petsc_mpi_init_ petsc_mpi_init__ 455a7b85bbcSSatish Balay #define petsc_mpi_finalize_ petsc_mpi_finalize__ 456a7b85bbcSSatish Balay #define petsc_mpi_comm_size_ petsc_mpi_comm_size__ 457a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_ petsc_mpi_comm_rank__ 458a7b85bbcSSatish Balay #define petsc_mpi_abort_ petsc_mpi_abort__ 459a7b85bbcSSatish Balay #define petsc_mpi_reduce_ petsc_mpi_reduce__ 460a7b85bbcSSatish Balay #define petsc_mpi_allreduce_ petsc_mpi_allreduce__ 461a7b85bbcSSatish Balay #define petsc_mpi_barrier_ petsc_mpi_barrier__ 462a7b85bbcSSatish Balay #define petsc_mpi_bcast_ petsc_mpi_bcast__ 463a7b85bbcSSatish Balay #define petsc_mpi_gather_ petsc_mpi_gather__ 464a7b85bbcSSatish Balay #define petsc_mpi_allgather_ petsc_mpi_allgather__ 465a7b85bbcSSatish Balay #define petsc_mpi_comm_split_ petsc_mpi_comm_split__ 466a7b85bbcSSatish Balay #define petsc_mpi_scan_ petsc_mpi_scan__ 467a7b85bbcSSatish Balay #define petsc_mpi_send_ petsc_mpi_send__ 468a7b85bbcSSatish Balay #define petsc_mpi_recv_ petsc_mpi_recv__ 469a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_ petsc_mpi_reduce_scatter__ 470a7b85bbcSSatish Balay #define petsc_mpi_irecv_ petsc_mpi_irecv__ 471a7b85bbcSSatish Balay #define petsc_mpi_isend_ petsc_mpi_isend__ 472a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_ petsc_mpi_sendrecv__ 473a7b85bbcSSatish Balay #define petsc_mpi_test_ petsc_mpi_test__ 474a7b85bbcSSatish Balay #define petsc_mpi_waitall_ petsc_mpi_waitall__ 475a7b85bbcSSatish Balay #define petsc_mpi_waitany_ petsc_mpi_waitany__ 476a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_ petsc_mpi_allgatherv__ 477a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_ petsc_mpi_alltoallv__ 478a7b85bbcSSatish Balay #define petsc_mpi_comm_create_ petsc_mpi_comm_create__ 479a7b85bbcSSatish Balay #define petsc_mpi_address_ petsc_mpi_address__ 480a7b85bbcSSatish Balay #define petsc_mpi_pack_ petsc_mpi_pack__ 481a7b85bbcSSatish Balay #define petsc_mpi_unpack_ petsc_mpi_unpack__ 482a7b85bbcSSatish Balay #define petsc_mpi_pack_size_ petsc_mpi_pack_size__ 483a7b85bbcSSatish Balay #define petsc_mpi_type_struct_ petsc_mpi_type_struct__ 484a7b85bbcSSatish Balay #define petsc_mpi_type_commit_ petsc_mpi_type_commit__ 485a7b85bbcSSatish Balay #define petsc_mpi_wtime_ petsc_mpi_wtime__ 486a7b85bbcSSatish Balay #define petsc_mpi_cancel_ petsc_mpi_cancel__ 487a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_ petsc_mpi_comm_dup__ 488a7b85bbcSSatish Balay #define petsc_mpi_comm_free_ petsc_mpi_comm_free__ 489a7b85bbcSSatish Balay #define petsc_mpi_get_count_ petsc_mpi_get_count__ 490a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_ petsc_mpi_get_processor_name__ 491a7b85bbcSSatish Balay #define petsc_mpi_initialized_ petsc_mpi_initialized__ 492a7b85bbcSSatish Balay #define petsc_mpi_iprobe_ petsc_mpi_iprobe__ 493a7b85bbcSSatish Balay #define petsc_mpi_probe_ petsc_mpi_probe__ 494a7b85bbcSSatish Balay #define petsc_mpi_request_free_ petsc_mpi_request_free__ 495a7b85bbcSSatish Balay #define petsc_mpi_ssend_ petsc_mpi_ssend__ 496a7b85bbcSSatish Balay #define petsc_mpi_wait_ petsc_mpi_wait__ 497a7b85bbcSSatish Balay #define petsc_mpi_comm_group_ petsc_mpi_comm_group__ 498a7b85bbcSSatish Balay #define petsc_mpi_exscan_ petsc_mpi_exscan__ 499f7c6e6aaSSatish Balay #endif 500e5c89e4eSSatish Balay 501c8217ed5SSatish Balay /* Do not build fortran interface if MPI namespace colision is to be avoided */ 502a7b85bbcSSatish Balay #if defined(PETSC_HAVE_FORTRAN) 503c8217ed5SSatish Balay 50419caf8f3SSatish Balay PETSC_EXTERN void mpiunisetmoduleblock_(void); 50552ecd5ffSSatish Balay 50619caf8f3SSatish Balay PETSC_EXTERN void mpiunisetfortranbasepointers_(void *f_mpi_in_place) 50752ecd5ffSSatish Balay { 50852ecd5ffSSatish Balay MPIUNIF_mpi_in_place = f_mpi_in_place; 50952ecd5ffSSatish Balay } 51052ecd5ffSSatish Balay 51119caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_init_(int *ierr) 512e5c89e4eSSatish Balay { 5130134af2dSBarry Smith mpiunisetmoduleblock_(); 514c8217ed5SSatish Balay *ierr = MPI_Init((int*)0, (char***)0); 515e5c89e4eSSatish Balay } 516e5c89e4eSSatish Balay 51719caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_finalize_(int *ierr) 518e5c89e4eSSatish Balay { 519c8217ed5SSatish Balay *ierr = MPI_Finalize(); 520e5c89e4eSSatish Balay } 521e5c89e4eSSatish Balay 52219caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_size_(MPI_Comm *comm,int *size,int *ierr) 523e5c89e4eSSatish Balay { 524e5c89e4eSSatish Balay *size = 1; 525e5c89e4eSSatish Balay *ierr = 0; 526e5c89e4eSSatish Balay } 527e5c89e4eSSatish Balay 52819caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_rank_(MPI_Comm *comm,int *rank,int *ierr) 529e5c89e4eSSatish Balay { 530e5c89e4eSSatish Balay *rank = 0; 531e5c89e4eSSatish Balay *ierr = MPI_SUCCESS; 532e5c89e4eSSatish Balay } 533e5c89e4eSSatish Balay 53419caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_split_(MPI_Comm *comm,int *color,int *key, MPI_Comm *newcomm, int *ierr) 5351f6cc5b2SSatish Balay { 5361f6cc5b2SSatish Balay *newcomm = *comm; 5371f6cc5b2SSatish Balay *ierr = MPI_SUCCESS; 5381f6cc5b2SSatish Balay } 5391f6cc5b2SSatish Balay 54019caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_abort_(MPI_Comm *comm,int *errorcode,int *ierr) 541e5c89e4eSSatish Balay { 542e5c89e4eSSatish Balay abort(); 543e5c89e4eSSatish Balay *ierr = MPI_SUCCESS; 544e5c89e4eSSatish Balay } 545e5c89e4eSSatish Balay 54619caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_reduce_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *root,int *comm,int *ierr) 5473b644628SSatish Balay { 548f30578ecSBarry Smith *ierr = MPI_Reduce(sendbuf,recvbuf,*count,*datatype,*op,*root,*comm); 5493b644628SSatish Balay } 5503b644628SSatish Balay 55119caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_allreduce_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr) 552e5c89e4eSSatish Balay { 553f30578ecSBarry Smith *ierr = MPI_Allreduce(sendbuf,recvbuf,*count,*datatype,*op,*comm); 554e5c89e4eSSatish Balay } 555e5c89e4eSSatish Balay 55619caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_barrier_(MPI_Comm *comm,int *ierr) 557e5c89e4eSSatish Balay { 558e5c89e4eSSatish Balay *ierr = MPI_SUCCESS; 559e5c89e4eSSatish Balay } 560f7c6e6aaSSatish Balay 56119caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_bcast_(void *buf,int *count,int *datatype,int *root,int *comm,int *ierr) 562e5c89e4eSSatish Balay { 563e5c89e4eSSatish Balay *ierr = MPI_SUCCESS; 564e5c89e4eSSatish Balay } 565f7c6e6aaSSatish Balay 56619caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_gather_(void *sendbuf,int *scount,int *sdatatype, void *recvbuf, int *rcount, int *rdatatype, int *root,int *comm,int *ierr) 567e5c89e4eSSatish Balay { 568f30578ecSBarry Smith *ierr = MPI_Gather(sendbuf,*scount,*sdatatype,recvbuf,rcount,rdatatype,*root,*comm); 569f7c6e6aaSSatish Balay } 570f7c6e6aaSSatish Balay 57119caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_allgather_(void *sendbuf,int *scount,int *sdatatype, void *recvbuf, int *rcount, int *rdatatype,int *comm,int *ierr) 572f7c6e6aaSSatish Balay { 573f30578ecSBarry Smith *ierr = MPI_Allgather(sendbuf,*scount,*sdatatype,recvbuf,rcount,rdatatype,*comm); 574e5c89e4eSSatish Balay } 575e5c89e4eSSatish Balay 57619caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_scan_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr) 5773b644628SSatish Balay { 5781a589b05SJed Brown *ierr = MPIUNI_Memcpy(recvbuf,sendbuf,(*count)*MPI_sizeof(*datatype)); 5793b644628SSatish Balay } 5803b644628SSatish Balay 58119caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_send_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *ierr) 5821086b069SSatish Balay { 58306df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 5841086b069SSatish Balay } 5851086b069SSatish Balay 58619caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_recv_(void *buf,int *count,int *datatype,int *source,int *tag,int *comm,int status,int *ierr) 5871086b069SSatish Balay { 58806df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 5891086b069SSatish Balay } 5901086b069SSatish Balay 59119caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_reduce_scatter_(void *sendbuf,void *recvbuf,int *recvcounts,int *datatype,int *op,int *comm,int *ierr) 592156bc490SSatish Balay { 59306df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 594156bc490SSatish Balay } 595156bc490SSatish Balay 59619caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_irecv_(void *buf,int *count, int *datatype, int *source, int *tag, int *comm, int *request, int *ierr) 597156bc490SSatish Balay { 59806df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 599156bc490SSatish Balay } 600156bc490SSatish Balay 60119caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_isend_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *request, int *ierr) 602156bc490SSatish Balay { 60306df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 604156bc490SSatish Balay } 605156bc490SSatish Balay 60619caf8f3SSatish Balay PETSC_EXTERN void 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) 607156bc490SSatish Balay { 6081a589b05SJed Brown *ierr = MPIUNI_Memcpy(recvbuf,sendbuf,(*sendcount)*MPI_sizeof(*sendtype)); 609156bc490SSatish Balay } 610156bc490SSatish Balay 61119caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_test_(int *request,int *flag,int *status,int *ierr) 612156bc490SSatish Balay { 61306df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 614156bc490SSatish Balay } 615156bc490SSatish Balay 61619caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_waitall_(int *count,int *array_of_requests,int *array_of_statuses,int *ierr) 617156bc490SSatish Balay { 618156bc490SSatish Balay *ierr = MPI_SUCCESS; 619156bc490SSatish Balay } 620156bc490SSatish Balay 62119caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_waitany_(int *count,int *array_of_requests,int * index, int *status,int *ierr) 622156bc490SSatish Balay { 623156bc490SSatish Balay *ierr = MPI_SUCCESS; 624156bc490SSatish Balay } 625156bc490SSatish Balay 62619caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_allgatherv_(void *sendbuf,int *sendcount,int *sendtype,void *recvbuf,int *recvcounts,int *displs,int *recvtype,int *comm,int *ierr) 627156bc490SSatish Balay { 628f30578ecSBarry Smith *ierr = MPI_Allgatherv(sendbuf,*sendcount,*sendtype,recvbuf,recvcounts,displs,*recvtype,*comm); 629156bc490SSatish Balay } 630156bc490SSatish Balay 63119caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_alltoallv_(void *sendbuf,int *sendcounts,int *sdispls,int *sendtype,void *recvbuf,int *recvcounts,int *rdispls,int *recvtype,int *comm,int *ierr) 632156bc490SSatish Balay { 633f30578ecSBarry Smith *ierr = MPI_Alltoallv(sendbuf,sendcounts,sdispls,*sendtype,recvbuf,recvcounts,rdispls,*recvtype,*comm); 634156bc490SSatish Balay } 635156bc490SSatish Balay 63619caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_create_(int *comm,int *group,int *newcomm,int *ierr) 637156bc490SSatish Balay { 638156bc490SSatish Balay *newcomm = *comm; 639156bc490SSatish Balay *ierr = MPI_SUCCESS; 640156bc490SSatish Balay } 641156bc490SSatish Balay 64219caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_address_(void *location,MPI_Aint *address,int *ierr) 643156bc490SSatish Balay { 64499256852SLisandro Dalcin *address = (MPI_Aint) ((char *)location); 645156bc490SSatish Balay *ierr = MPI_SUCCESS; 646156bc490SSatish Balay } 647156bc490SSatish Balay 64819caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_pack_(void *inbuf,int *incount,int *datatype,void *outbuf,int *outsize,int *position,int *comm,int *ierr) 649156bc490SSatish Balay { 65006df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 651156bc490SSatish Balay } 652156bc490SSatish Balay 65319caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_unpack_(void *inbuf,int *insize,int *position,void *outbuf,int *outcount,int *datatype,int *comm,int *ierr) 654156bc490SSatish Balay { 65506df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 656156bc490SSatish Balay } 657156bc490SSatish Balay 65819caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_pack_size_(int *incount,int *datatype,int *comm,int *size,int *ierr) 659156bc490SSatish Balay { 66006df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 661156bc490SSatish Balay } 662156bc490SSatish Balay 66319caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_type_struct_(int *count,int *array_of_blocklengths,int * array_of_displaments,int *array_of_types,int *newtype,int *ierr) 664156bc490SSatish Balay { 66506df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 666156bc490SSatish Balay } 667156bc490SSatish Balay 66819caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_type_commit_(int *datatype,int *ierr) 669156bc490SSatish Balay { 670156bc490SSatish Balay *ierr = MPI_SUCCESS; 671156bc490SSatish Balay } 672156bc490SSatish Balay 67319caf8f3SSatish Balay double petsc_mpi_wtime_(void) 674156bc490SSatish Balay { 675156bc490SSatish Balay return 0.0; 676f8f52c7dSSatish Balay } 677156bc490SSatish Balay 67819caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_cancel_(int *request,int *ierr) 679f8f52c7dSSatish Balay { 680f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 681f8f52c7dSSatish Balay } 682f8f52c7dSSatish Balay 68319caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_dup_(int *comm,int *out,int *ierr) 684f8f52c7dSSatish Balay { 685f8f52c7dSSatish Balay *out = *comm; 686f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 687f8f52c7dSSatish Balay } 688f8f52c7dSSatish Balay 68919caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_free_(int *comm,int *ierr) 690f8f52c7dSSatish Balay { 691f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 692f8f52c7dSSatish Balay } 693f8f52c7dSSatish Balay 69419caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_get_count_(int *status,int *datatype,int *count,int *ierr) 695f8f52c7dSSatish Balay { 69606df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 697f8f52c7dSSatish Balay } 698f8f52c7dSSatish Balay 69919caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_get_processor_name_(char *name,int *result_len,int *ierr,PETSC_FORTRAN_CHARLEN_T len) 700f8f52c7dSSatish Balay { 701f8f52c7dSSatish Balay MPIUNI_Memcpy(name,"localhost",9*sizeof(char)); 702f8f52c7dSSatish Balay *result_len = 9; 703f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 704f8f52c7dSSatish Balay } 705f8f52c7dSSatish Balay 70619caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_initialized_(int *flag,int *ierr) 707f8f52c7dSSatish Balay { 708f8f52c7dSSatish Balay *flag = MPI_was_initialized; 709f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 710f8f52c7dSSatish Balay } 711f8f52c7dSSatish Balay 71219caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_iprobe_(int *source,int *tag,int *comm,int *glag,int *status,int *ierr) 713f8f52c7dSSatish Balay { 714f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 715f8f52c7dSSatish Balay } 716f8f52c7dSSatish Balay 71719caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_probe_(int *source,int *tag,int *comm,int *flag,int *status,int *ierr) 718f8f52c7dSSatish Balay { 719f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 720f8f52c7dSSatish Balay } 721f8f52c7dSSatish Balay 72219caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_request_free_(int *request,int *ierr) 723f8f52c7dSSatish Balay { 724f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 725f8f52c7dSSatish Balay } 726f8f52c7dSSatish Balay 72719caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_ssend_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *ierr) 728f8f52c7dSSatish Balay { 72906df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 730f8f52c7dSSatish Balay } 731f8f52c7dSSatish Balay 73219caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_wait_(int *request,int *status,int *ierr) 733f8f52c7dSSatish Balay { 734f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 735156bc490SSatish Balay } 736156bc490SSatish Balay 73719caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_group_(int *comm,int *group,int *ierr) 738d4816372SSatish Balay { 739d4816372SSatish Balay *ierr = MPI_SUCCESS; 740d4816372SSatish Balay } 741d4816372SSatish Balay 74219caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_exscan_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr) 743d4816372SSatish Balay { 744d4816372SSatish Balay *ierr = MPI_SUCCESS; 745d4816372SSatish Balay } 746d4816372SSatish Balay 747a7b85bbcSSatish Balay #endif /* PETSC_HAVE_FORTRAN */ 748c8217ed5SSatish Balay 749e5c89e4eSSatish Balay #if defined(__cplusplus) 750e5c89e4eSSatish Balay } 751e5c89e4eSSatish Balay #endif 752