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 10e5c89e4eSSatish Balay #define MPI_SUCCESS 0 11e5c89e4eSSatish Balay #define MPI_FAILURE 1 12a297a907SKarl Rupp 1399256852SLisandro Dalcin void *MPIUNI_TMP = NULL; 1499256852SLisandro Dalcin 15e5c89e4eSSatish Balay /* 16100f28aeSBarry Smith With MPI Uni there are exactly four distinct communicators: 17100f28aeSBarry Smith MPI_COMM_SELF, MPI_COMM_WORLD, and a MPI_Comm_dup() of each of these (duplicates of duplicates return the same communictor) 18100f28aeSBarry Smith 19100f28aeSBarry Smith MPI_COMM_SELF and MPI_COMM_WORLD are MPI_Comm_free() in MPI_Finalize() but in general with PETSc, 20100f28aeSBarry Smith the other communicators are freed once the last PETSc object is freed (before MPI_Finalize()). 21100f28aeSBarry Smith 22e5c89e4eSSatish Balay */ 23e5c89e4eSSatish Balay #define MAX_ATTR 128 24fb53af6bSBarry Smith #define MAX_COMM 128 25fb53af6bSBarry Smith 26fb53af6bSBarry Smith static int MaxComm = 2; 27e5c89e4eSSatish Balay 28e5c89e4eSSatish Balay typedef struct { 29e5c89e4eSSatish Balay void *attribute_val; 30e5c89e4eSSatish Balay int active; 31e5c89e4eSSatish Balay } MPI_Attr; 32e5c89e4eSSatish Balay 3346651e72SBarry Smith typedef struct { 3446651e72SBarry Smith void *extra_state; 3546651e72SBarry Smith MPI_Delete_function *del; 3646651e72SBarry Smith } MPI_Attr_keyval; 3746651e72SBarry Smith 3846651e72SBarry Smith static MPI_Attr_keyval attr_keyval[MAX_ATTR]; 39fb53af6bSBarry Smith static MPI_Attr attr[MAX_COMM][MAX_ATTR]; 40f60917d2SBarry Smith static int comm_active[MAX_COMM]; 41e5c89e4eSSatish Balay static int num_attr = 1,mpi_tag_ub = 100000000; 4252ecd5ffSSatish Balay static void* MPIUNIF_mpi_in_place = 0; 43e5c89e4eSSatish Balay 44e5c89e4eSSatish Balay #if defined(__cplusplus) 45e5c89e4eSSatish Balay extern "C" { 46e5c89e4eSSatish Balay #endif 47e5c89e4eSSatish Balay 48e5c89e4eSSatish Balay /* 49e5c89e4eSSatish Balay To avoid problems with prototypes to the system memcpy() it is duplicated here 50e5c89e4eSSatish Balay */ 51a6dfd86eSKarl Rupp int MPIUNI_Memcpy(void *a,const void *b,int n) 52a6dfd86eSKarl Rupp { 53e5c89e4eSSatish Balay int i; 54e5c89e4eSSatish Balay char *aa= (char*)a; 55e5c89e4eSSatish Balay char *bb= (char*)b; 56e5c89e4eSSatish Balay 5799256852SLisandro Dalcin if (a == MPI_IN_PLACE || a == MPIUNIF_mpi_in_place) return MPI_SUCCESS; 5899256852SLisandro Dalcin if (b == MPI_IN_PLACE || b == MPIUNIF_mpi_in_place) return MPI_SUCCESS; 59e5c89e4eSSatish Balay for (i=0; i<n; i++) aa[i] = bb[i]; 6099256852SLisandro Dalcin return MPI_SUCCESS; 61e5c89e4eSSatish Balay } 62e5c89e4eSSatish Balay 6312801b39SBarry Smith static int classcnt = 0; 6412801b39SBarry Smith static int codecnt = 0; 6512801b39SBarry Smith 6612801b39SBarry Smith int MPI_Add_error_class(int *cl) 6712801b39SBarry Smith { 6812801b39SBarry Smith *cl = classcnt++; 6912801b39SBarry Smith return MPI_SUCCESS; 7012801b39SBarry Smith } 7112801b39SBarry Smith 7212801b39SBarry Smith int MPI_Add_error_code(int cl,int *co) 7312801b39SBarry Smith { 7412801b39SBarry Smith if (cl >= classcnt) return MPI_FAILURE; 7512801b39SBarry Smith *co = codecnt++; 7612801b39SBarry Smith return MPI_SUCCESS; 7712801b39SBarry Smith } 7812801b39SBarry Smith 791a589b05SJed Brown int MPI_Type_get_envelope(MPI_Datatype datatype,int *num_integers,int *num_addresses,int *num_datatypes,int *combiner) 801a589b05SJed Brown { 811a589b05SJed Brown int comb = datatype >> 28; 821a589b05SJed Brown switch (comb) { 831a589b05SJed Brown case MPI_COMBINER_NAMED: 841a589b05SJed Brown *num_integers = 0; 851a589b05SJed Brown *num_addresses = 0; 861a589b05SJed Brown *num_datatypes = 0; 871a589b05SJed Brown *combiner = comb; 881a589b05SJed Brown break; 891a589b05SJed Brown case MPI_COMBINER_DUP: 901a589b05SJed Brown *num_integers = 0; 911a589b05SJed Brown *num_addresses = 0; 921a589b05SJed Brown *num_datatypes = 1; 931a589b05SJed Brown *combiner = comb; 941a589b05SJed Brown break; 951a589b05SJed Brown case MPI_COMBINER_CONTIGUOUS: 961a589b05SJed Brown *num_integers = 1; 971a589b05SJed Brown *num_addresses = 0; 981a589b05SJed Brown *num_datatypes = 1; 991a589b05SJed Brown *combiner = comb; 1001a589b05SJed Brown break; 1011a589b05SJed Brown default: 1021a589b05SJed Brown return MPIUni_Abort(MPI_COMM_SELF,1); 1031a589b05SJed Brown } 10499256852SLisandro Dalcin return MPI_SUCCESS; 1051a589b05SJed Brown } 1061a589b05SJed Brown 1071a589b05SJed 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) 1081a589b05SJed Brown { 1091a589b05SJed Brown int comb = datatype >> 28; 1101a589b05SJed Brown switch (comb) { 1111a589b05SJed Brown case MPI_COMBINER_NAMED: 1121a589b05SJed Brown return MPIUni_Abort(MPI_COMM_SELF,1); 1131a589b05SJed Brown break; 1141a589b05SJed Brown case MPI_COMBINER_DUP: 1151a589b05SJed Brown if (max_datatypes < 1) return MPIUni_Abort(MPI_COMM_SELF,1); 1161a589b05SJed Brown array_of_datatypes[0] = datatype & 0x0fffffff; 1171a589b05SJed Brown break; 1181a589b05SJed Brown case MPI_COMBINER_CONTIGUOUS: 1191a589b05SJed Brown if (max_integers < 1 || max_datatypes < 1) return MPIUni_Abort(MPI_COMM_SELF,1); 1201a589b05SJed Brown array_of_integers[0] = (datatype >> 8) & 0xfff; /* count */ 1211a589b05SJed Brown array_of_datatypes[0] = (datatype & 0x0ff000ff) | 0x100; /* basic named type (count=1) from which the contiguous type is derived */ 1221a589b05SJed Brown break; 1231a589b05SJed Brown default: 1241a589b05SJed Brown return MPIUni_Abort(MPI_COMM_SELF,1); 1251a589b05SJed Brown } 12699256852SLisandro Dalcin return MPI_SUCCESS; 1271a589b05SJed Brown } 1281a589b05SJed Brown 129e5c89e4eSSatish Balay /* 130e5c89e4eSSatish Balay Used to set the built-in MPI_TAG_UB attribute 131e5c89e4eSSatish Balay */ 132e5c89e4eSSatish Balay static int Keyval_setup(void) 133e5c89e4eSSatish Balay { 134100f28aeSBarry Smith attr[MPI_COMM_WORLD-1][0].active = 1; 135100f28aeSBarry Smith attr[MPI_COMM_WORLD-1][0].attribute_val = &mpi_tag_ub; 136100f28aeSBarry Smith attr[MPI_COMM_SELF-1][0].active = 1; 137100f28aeSBarry Smith attr[MPI_COMM_SELF-1][0].attribute_val = &mpi_tag_ub; 13899256852SLisandro Dalcin return MPI_SUCCESS; 139e5c89e4eSSatish Balay } 140e5c89e4eSSatish Balay 14112801b39SBarry Smith int MPI_Comm_create_keyval(MPI_Copy_function *copy_fn,MPI_Delete_function *delete_fn,int *keyval,void *extra_state) 142e5c89e4eSSatish Balay { 1439cf9c1dbSJed Brown if (num_attr >= MAX_ATTR) return MPIUni_Abort(MPI_COMM_WORLD,1); 144e5c89e4eSSatish Balay 14546651e72SBarry Smith attr_keyval[num_attr].extra_state = extra_state; 14646651e72SBarry Smith attr_keyval[num_attr].del = delete_fn; 147e5c89e4eSSatish Balay *keyval = num_attr++; 14899256852SLisandro Dalcin return MPI_SUCCESS; 149e5c89e4eSSatish Balay } 150e5c89e4eSSatish Balay 15147435625SJed Brown int MPI_Comm_free_keyval(int *keyval) 152e5c89e4eSSatish Balay { 153a246e310SBarry Smith attr_keyval[*keyval].extra_state = 0; 154a246e310SBarry Smith attr_keyval[*keyval].del = 0; 155a297a907SKarl Rupp 156a246e310SBarry Smith *keyval = 0; 157e5c89e4eSSatish Balay return MPI_SUCCESS; 158e5c89e4eSSatish Balay } 159e5c89e4eSSatish Balay 16047435625SJed Brown int MPI_Comm_set_attr(MPI_Comm comm,int keyval,void *attribute_val) 161e5c89e4eSSatish Balay { 16299256852SLisandro Dalcin if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE; 163100f28aeSBarry Smith attr[comm-1][keyval].active = 1; 164100f28aeSBarry Smith attr[comm-1][keyval].attribute_val = attribute_val; 165e5c89e4eSSatish Balay return MPI_SUCCESS; 166e5c89e4eSSatish Balay } 167e5c89e4eSSatish Balay 16847435625SJed Brown int MPI_Comm_delete_attr(MPI_Comm comm,int keyval) 169e5c89e4eSSatish Balay { 17099256852SLisandro Dalcin if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE; 171100f28aeSBarry Smith if (attr[comm-1][keyval].active && attr_keyval[keyval].del) { 172100f28aeSBarry Smith void *save_attribute_val = attr[comm-1][keyval].attribute_val; 173100f28aeSBarry Smith attr[comm-1][keyval].active = 0; 174100f28aeSBarry Smith attr[comm-1][keyval].attribute_val = 0; 17546651e72SBarry Smith (*(attr_keyval[keyval].del))(comm,keyval,save_attribute_val,attr_keyval[keyval].extra_state); 17640776e1bSpetsc } 177e5c89e4eSSatish Balay return MPI_SUCCESS; 178e5c89e4eSSatish Balay } 179e5c89e4eSSatish Balay 18047435625SJed Brown int MPI_Comm_get_attr(MPI_Comm comm,int keyval,void *attribute_val,int *flag) 181e5c89e4eSSatish Balay { 18299256852SLisandro Dalcin if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE; 183e5c89e4eSSatish Balay if (!keyval) Keyval_setup(); 184100f28aeSBarry Smith *flag = attr[comm-1][keyval].active; 185100f28aeSBarry Smith *(void**)attribute_val = attr[comm-1][keyval].attribute_val; 186e5c89e4eSSatish Balay return MPI_SUCCESS; 187e5c89e4eSSatish Balay } 188e5c89e4eSSatish Balay 189c8217ed5SSatish Balay int MPI_Comm_create(MPI_Comm comm,MPI_Group group,MPI_Comm *newcomm) 190c8217ed5SSatish Balay { 191f60917d2SBarry Smith int j; 19299256852SLisandro Dalcin if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE; 193f60917d2SBarry Smith for (j=3; j<MaxComm; j++) { 194f60917d2SBarry Smith if (!comm_active[j-1]) { 195f60917d2SBarry Smith comm_active[j-1] = 1; 196f60917d2SBarry Smith *newcomm = j; 197f60917d2SBarry Smith return MPI_SUCCESS; 198f60917d2SBarry Smith } 199f60917d2SBarry Smith } 200fb53af6bSBarry Smith if (MaxComm > MAX_COMM) return MPI_FAILURE; 201fb53af6bSBarry Smith *newcomm = MaxComm++; 202f7f9ee71SBarry Smith comm_active[*newcomm-1] = 1; 203c8217ed5SSatish Balay return MPI_SUCCESS; 204c8217ed5SSatish Balay } 205c8217ed5SSatish Balay 206c8217ed5SSatish Balay int MPI_Comm_dup(MPI_Comm comm,MPI_Comm *out) 207e5c89e4eSSatish Balay { 208f60917d2SBarry Smith int j; 20999256852SLisandro Dalcin if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE; 210f60917d2SBarry Smith for (j=3; j<MaxComm; j++) { 211f60917d2SBarry Smith if (!comm_active[j-1]) { 212f60917d2SBarry Smith comm_active[j-1] = 1; 213f60917d2SBarry Smith *out = j; 214f60917d2SBarry Smith return MPI_SUCCESS; 215f60917d2SBarry Smith } 216f60917d2SBarry Smith } 217fb53af6bSBarry Smith if (MaxComm > MAX_COMM) return MPI_FAILURE; 218fb53af6bSBarry Smith *out = MaxComm++; 219f7f9ee71SBarry Smith comm_active[*out-1] = 1; 22099256852SLisandro Dalcin return MPI_SUCCESS; 221e5c89e4eSSatish Balay } 222e5c89e4eSSatish Balay 223c8217ed5SSatish Balay int MPI_Comm_free(MPI_Comm *comm) 224e5c89e4eSSatish Balay { 225e5c89e4eSSatish Balay int i; 226e5c89e4eSSatish Balay 22799256852SLisandro Dalcin if (*comm-1 < 0 || *comm-1 > MaxComm) return MPI_FAILURE; 228e5c89e4eSSatish Balay for (i=0; i<num_attr; i++) { 229a297a907SKarl 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); 230100f28aeSBarry Smith attr[*comm-1][i].active = 0; 231a246e310SBarry Smith attr[*comm-1][i].attribute_val = 0; 232e5c89e4eSSatish Balay } 233f60917d2SBarry Smith if (*comm >= 3) comm_active[*comm-1] = 0; 234100f28aeSBarry Smith *comm = 0; 235e5c89e4eSSatish Balay return MPI_SUCCESS; 236e5c89e4eSSatish Balay } 237e5c89e4eSSatish Balay 238d393f697SSatish Balay int MPI_Comm_size(MPI_Comm comm, int *size) 239d393f697SSatish Balay { 24099256852SLisandro Dalcin if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE; 241d393f697SSatish Balay *size=1; 242d393f697SSatish Balay return MPI_SUCCESS; 243d393f697SSatish Balay } 244d393f697SSatish Balay 245d393f697SSatish Balay int MPI_Comm_rank(MPI_Comm comm, int *rank) 246d393f697SSatish Balay { 24799256852SLisandro Dalcin if (comm-1 < 0 || comm-1 > MaxComm) return MPI_FAILURE; 248d393f697SSatish Balay *rank=0; 249d393f697SSatish Balay return MPI_SUCCESS; 250d393f697SSatish Balay } 251d393f697SSatish Balay 25206df1fb1SBarry Smith int MPIUni_Abort(MPI_Comm comm,int errorcode) 25306df1fb1SBarry Smith { 25406df1fb1SBarry Smith printf("MPI operation not supported by PETSc's sequential MPI wrappers\n"); 25506df1fb1SBarry Smith return MPI_FAILURE; 25606df1fb1SBarry Smith } 25706df1fb1SBarry Smith 258c8217ed5SSatish Balay int MPI_Abort(MPI_Comm comm,int errorcode) 259e5c89e4eSSatish Balay { 260e5c89e4eSSatish Balay abort(); 261e5c89e4eSSatish Balay return MPI_SUCCESS; 262e5c89e4eSSatish Balay } 263e5c89e4eSSatish Balay 26458cd72c3SLisandro Dalcin /* --------------------------------------------------------------------------*/ 26558cd72c3SLisandro Dalcin 266e5c89e4eSSatish Balay static int MPI_was_initialized = 0; 26758cd72c3SLisandro Dalcin static int MPI_was_finalized = 0; 26858cd72c3SLisandro Dalcin 269c8217ed5SSatish Balay int MPI_Init(int *argc, char ***argv) 27058cd72c3SLisandro Dalcin { 27199256852SLisandro Dalcin if (MPI_was_initialized) return MPI_FAILURE; 27299256852SLisandro Dalcin if (MPI_was_finalized) return MPI_FAILURE; 27358cd72c3SLisandro Dalcin MPI_was_initialized = 1; 27499256852SLisandro Dalcin return MPI_SUCCESS; 27558cd72c3SLisandro Dalcin } 27658cd72c3SLisandro Dalcin 277c8217ed5SSatish Balay int MPI_Finalize(void) 27858cd72c3SLisandro Dalcin { 279100f28aeSBarry Smith MPI_Comm comm; 28099256852SLisandro Dalcin if (MPI_was_finalized) return MPI_FAILURE; 28199256852SLisandro Dalcin if (!MPI_was_initialized) return MPI_FAILURE; 282100f28aeSBarry Smith comm = MPI_COMM_WORLD; 283100f28aeSBarry Smith MPI_Comm_free(&comm); 284100f28aeSBarry Smith comm = MPI_COMM_SELF; 285100f28aeSBarry Smith MPI_Comm_free(&comm); 28658cd72c3SLisandro Dalcin MPI_was_finalized = 1; 28799256852SLisandro Dalcin return MPI_SUCCESS; 28858cd72c3SLisandro Dalcin } 289e5c89e4eSSatish Balay 290c8217ed5SSatish Balay int MPI_Initialized(int *flag) 291e5c89e4eSSatish Balay { 292e5c89e4eSSatish Balay *flag = MPI_was_initialized; 29399256852SLisandro Dalcin return MPI_SUCCESS; 294e5c89e4eSSatish Balay } 295e5c89e4eSSatish Balay 296c8217ed5SSatish Balay int MPI_Finalized(int *flag) 297e5c89e4eSSatish Balay { 29858cd72c3SLisandro Dalcin *flag = MPI_was_finalized; 29999256852SLisandro Dalcin return MPI_SUCCESS; 300e5c89e4eSSatish Balay } 301e5c89e4eSSatish Balay 302e5c89e4eSSatish Balay /* ------------------- Fortran versions of several routines ------------------ */ 303e5c89e4eSSatish Balay 304f7c6e6aaSSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 3050134af2dSBarry Smith #define mpiunisetmoduleblock_ MPIUNISETMODULEBLOCK 30652ecd5ffSSatish Balay #define mpiunisetfortranbasepointers_ MPIUNISETFORTRANBASEPOINTERS 307a7b85bbcSSatish Balay #define petsc_mpi_init_ PETSC_MPI_INIT 308a7b85bbcSSatish Balay #define petsc_mpi_finalize_ PETSC_MPI_FINALIZE 309a7b85bbcSSatish Balay #define petsc_mpi_comm_size_ PETSC_MPI_COMM_SIZE 310a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_ PETSC_MPI_COMM_RANK 311a7b85bbcSSatish Balay #define petsc_mpi_abort_ PETSC_MPI_ABORT 312a7b85bbcSSatish Balay #define petsc_mpi_reduce_ PETSC_MPI_REDUCE 313a7b85bbcSSatish Balay #define petsc_mpi_allreduce_ PETSC_MPI_ALLREDUCE 314a7b85bbcSSatish Balay #define petsc_mpi_barrier_ PETSC_MPI_BARRIER 315a7b85bbcSSatish Balay #define petsc_mpi_bcast_ PETSC_MPI_BCAST 316a7b85bbcSSatish Balay #define petsc_mpi_gather_ PETSC_MPI_GATHER 317a7b85bbcSSatish Balay #define petsc_mpi_allgather_ PETSC_MPI_ALLGATHER 318a7b85bbcSSatish Balay #define petsc_mpi_comm_split_ PETSC_MPI_COMM_SPLIT 319a7b85bbcSSatish Balay #define petsc_mpi_scan_ PETSC_MPI_SCAN 320a7b85bbcSSatish Balay #define petsc_mpi_send_ PETSC_MPI_SEND 321a7b85bbcSSatish Balay #define petsc_mpi_recv_ PETSC_MPI_RECV 322a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_ PETSC_MPI_REDUCE_SCATTER 323a7b85bbcSSatish Balay #define petsc_mpi_irecv_ PETSC_MPI_IRECV 324a7b85bbcSSatish Balay #define petsc_mpi_isend_ PETSC_MPI_ISEND 325a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_ PETSC_MPI_SENDRECV 326a7b85bbcSSatish Balay #define petsc_mpi_test_ PETSC_MPI_TEST 327a7b85bbcSSatish Balay #define petsc_mpi_waitall_ PETSC_MPI_WAITALL 328a7b85bbcSSatish Balay #define petsc_mpi_waitany_ PETSC_MPI_WAITANY 329a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_ PETSC_MPI_ALLGATHERV 330a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_ PETSC_MPI_ALLTOALLV 331a7b85bbcSSatish Balay #define petsc_mpi_comm_create_ PETSC_MPI_COMM_CREATE 332a7b85bbcSSatish Balay #define petsc_mpi_address_ PETSC_MPI_ADDRESS 333a7b85bbcSSatish Balay #define petsc_mpi_pack_ PETSC_MPI_PACK 334a7b85bbcSSatish Balay #define petsc_mpi_unpack_ PETSC_MPI_UNPACK 335a7b85bbcSSatish Balay #define petsc_mpi_pack_size_ PETSC_MPI_PACK_SIZE 336a7b85bbcSSatish Balay #define petsc_mpi_type_struct_ PETSC_MPI_TYPE_STRUCT 337a7b85bbcSSatish Balay #define petsc_mpi_type_commit_ PETSC_MPI_TYPE_COMMIT 338a7b85bbcSSatish Balay #define petsc_mpi_wtime_ PETSC_MPI_WTIME 339a7b85bbcSSatish Balay #define petsc_mpi_cancel_ PETSC_MPI_CANCEL 340a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_ PETSC_MPI_COMM_DUP 341a7b85bbcSSatish Balay #define petsc_mpi_comm_free_ PETSC_MPI_COMM_FREE 342a7b85bbcSSatish Balay #define petsc_mpi_get_count_ PETSC_MPI_GET_COUNT 343a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_ PETSC_MPI_GET_PROCESSOR_NAME 344a7b85bbcSSatish Balay #define petsc_mpi_initialized_ PETSC_MPI_INITIALIZED 345a7b85bbcSSatish Balay #define petsc_mpi_iprobe_ PETSC_MPI_IPROBE 346a7b85bbcSSatish Balay #define petsc_mpi_probe_ PETSC_MPI_PROBE 347a7b85bbcSSatish Balay #define petsc_mpi_request_free_ PETSC_MPI_REQUEST_FREE 348a7b85bbcSSatish Balay #define petsc_mpi_ssend_ PETSC_MPI_SSEND 349a7b85bbcSSatish Balay #define petsc_mpi_wait_ PETSC_MPI_WAIT 350a7b85bbcSSatish Balay #define petsc_mpi_comm_group_ PETSC_MPI_COMM_GROUP 351a7b85bbcSSatish Balay #define petsc_mpi_exscan_ PETSC_MPI_EXSCAN 352f7c6e6aaSSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 3530134af2dSBarry Smith #define mpiunisetmoduleblock_ mpiunisetmoduleblock 35452ecd5ffSSatish Balay #define mpiunisetfortranbasepointers_ mpiunisetfortranbasepointers 355a7b85bbcSSatish Balay #define petsc_mpi_init_ petsc_mpi_init 356a7b85bbcSSatish Balay #define petsc_mpi_finalize_ petsc_mpi_finalize 357a7b85bbcSSatish Balay #define petsc_mpi_comm_size_ petsc_mpi_comm_size 358a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_ petsc_mpi_comm_rank 359a7b85bbcSSatish Balay #define petsc_mpi_abort_ petsc_mpi_abort 360a7b85bbcSSatish Balay #define petsc_mpi_reduce_ petsc_mpi_reduce 361a7b85bbcSSatish Balay #define petsc_mpi_allreduce_ petsc_mpi_allreduce 362a7b85bbcSSatish Balay #define petsc_mpi_barrier_ petsc_mpi_barrier 363a7b85bbcSSatish Balay #define petsc_mpi_bcast_ petsc_mpi_bcast 364a7b85bbcSSatish Balay #define petsc_mpi_gather_ petsc_mpi_gather 365a7b85bbcSSatish Balay #define petsc_mpi_allgather_ petsc_mpi_allgather 366a7b85bbcSSatish Balay #define petsc_mpi_comm_split_ petsc_mpi_comm_split 367a7b85bbcSSatish Balay #define petsc_mpi_scan_ petsc_mpi_scan 368a7b85bbcSSatish Balay #define petsc_mpi_send_ petsc_mpi_send 369a7b85bbcSSatish Balay #define petsc_mpi_recv_ petsc_mpi_recv 370a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_ petsc_mpi_reduce_scatter 371a7b85bbcSSatish Balay #define petsc_mpi_irecv_ petsc_mpi_irecv 372a7b85bbcSSatish Balay #define petsc_mpi_isend_ petsc_mpi_isend 373a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_ petsc_mpi_sendrecv 374a7b85bbcSSatish Balay #define petsc_mpi_test_ petsc_mpi_test 375a7b85bbcSSatish Balay #define petsc_mpi_waitall_ petsc_mpi_waitall 376a7b85bbcSSatish Balay #define petsc_mpi_waitany_ petsc_mpi_waitany 377a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_ petsc_mpi_allgatherv 378a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_ petsc_mpi_alltoallv 379a7b85bbcSSatish Balay #define petsc_mpi_comm_create_ petsc_mpi_comm_create 380a7b85bbcSSatish Balay #define petsc_mpi_address_ petsc_mpi_address 381a7b85bbcSSatish Balay #define petsc_mpi_pack_ petsc_mpi_pack 382a7b85bbcSSatish Balay #define petsc_mpi_unpack_ petsc_mpi_unpack 383a7b85bbcSSatish Balay #define petsc_mpi_pack_size_ petsc_mpi_pack_size 384a7b85bbcSSatish Balay #define petsc_mpi_type_struct_ petsc_mpi_type_struct 385a7b85bbcSSatish Balay #define petsc_mpi_type_commit_ petsc_mpi_type_commit 386a7b85bbcSSatish Balay #define petsc_mpi_wtime_ petsc_mpi_wtime 387a7b85bbcSSatish Balay #define petsc_mpi_cancel_ petsc_mpi_cancel 388a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_ petsc_mpi_comm_dup 389a7b85bbcSSatish Balay #define petsc_mpi_comm_free_ petsc_mpi_comm_free 390a7b85bbcSSatish Balay #define petsc_mpi_get_count_ petsc_mpi_get_count 391a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_ petsc_mpi_get_processor_name 392a7b85bbcSSatish Balay #define petsc_mpi_initialized_ petsc_mpi_initialized 393a7b85bbcSSatish Balay #define petsc_mpi_iprobe_ petsc_mpi_iprobe 394a7b85bbcSSatish Balay #define petsc_mpi_probe_ petsc_mpi_probe 395a7b85bbcSSatish Balay #define petsc_mpi_request_free_ petsc_mpi_request_free 396a7b85bbcSSatish Balay #define petsc_mpi_ssend_ petsc_mpi_ssend 397a7b85bbcSSatish Balay #define petsc_mpi_wait_ petsc_mpi_wait 398a7b85bbcSSatish Balay #define petsc_mpi_comm_group_ petsc_mpi_comm_group 399a7b85bbcSSatish Balay #define petsc_mpi_exscan_ petsc_mpi_exscan 400f7c6e6aaSSatish Balay #endif 401e5c89e4eSSatish Balay 402f7c6e6aaSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE_UNDERSCORE) 403a7b85bbcSSatish Balay #define petsc_mpi_init_ petsc_mpi_init__ 404a7b85bbcSSatish Balay #define petsc_mpi_finalize_ petsc_mpi_finalize__ 405a7b85bbcSSatish Balay #define petsc_mpi_comm_size_ petsc_mpi_comm_size__ 406a7b85bbcSSatish Balay #define petsc_mpi_comm_rank_ petsc_mpi_comm_rank__ 407a7b85bbcSSatish Balay #define petsc_mpi_abort_ petsc_mpi_abort__ 408a7b85bbcSSatish Balay #define petsc_mpi_reduce_ petsc_mpi_reduce__ 409a7b85bbcSSatish Balay #define petsc_mpi_allreduce_ petsc_mpi_allreduce__ 410a7b85bbcSSatish Balay #define petsc_mpi_barrier_ petsc_mpi_barrier__ 411a7b85bbcSSatish Balay #define petsc_mpi_bcast_ petsc_mpi_bcast__ 412a7b85bbcSSatish Balay #define petsc_mpi_gather_ petsc_mpi_gather__ 413a7b85bbcSSatish Balay #define petsc_mpi_allgather_ petsc_mpi_allgather__ 414a7b85bbcSSatish Balay #define petsc_mpi_comm_split_ petsc_mpi_comm_split__ 415a7b85bbcSSatish Balay #define petsc_mpi_scan_ petsc_mpi_scan__ 416a7b85bbcSSatish Balay #define petsc_mpi_send_ petsc_mpi_send__ 417a7b85bbcSSatish Balay #define petsc_mpi_recv_ petsc_mpi_recv__ 418a7b85bbcSSatish Balay #define petsc_mpi_reduce_scatter_ petsc_mpi_reduce_scatter__ 419a7b85bbcSSatish Balay #define petsc_mpi_irecv_ petsc_mpi_irecv__ 420a7b85bbcSSatish Balay #define petsc_mpi_isend_ petsc_mpi_isend__ 421a7b85bbcSSatish Balay #define petsc_mpi_sendrecv_ petsc_mpi_sendrecv__ 422a7b85bbcSSatish Balay #define petsc_mpi_test_ petsc_mpi_test__ 423a7b85bbcSSatish Balay #define petsc_mpi_waitall_ petsc_mpi_waitall__ 424a7b85bbcSSatish Balay #define petsc_mpi_waitany_ petsc_mpi_waitany__ 425a7b85bbcSSatish Balay #define petsc_mpi_allgatherv_ petsc_mpi_allgatherv__ 426a7b85bbcSSatish Balay #define petsc_mpi_alltoallv_ petsc_mpi_alltoallv__ 427a7b85bbcSSatish Balay #define petsc_mpi_comm_create_ petsc_mpi_comm_create__ 428a7b85bbcSSatish Balay #define petsc_mpi_address_ petsc_mpi_address__ 429a7b85bbcSSatish Balay #define petsc_mpi_pack_ petsc_mpi_pack__ 430a7b85bbcSSatish Balay #define petsc_mpi_unpack_ petsc_mpi_unpack__ 431a7b85bbcSSatish Balay #define petsc_mpi_pack_size_ petsc_mpi_pack_size__ 432a7b85bbcSSatish Balay #define petsc_mpi_type_struct_ petsc_mpi_type_struct__ 433a7b85bbcSSatish Balay #define petsc_mpi_type_commit_ petsc_mpi_type_commit__ 434a7b85bbcSSatish Balay #define petsc_mpi_wtime_ petsc_mpi_wtime__ 435a7b85bbcSSatish Balay #define petsc_mpi_cancel_ petsc_mpi_cancel__ 436a7b85bbcSSatish Balay #define petsc_mpi_comm_dup_ petsc_mpi_comm_dup__ 437a7b85bbcSSatish Balay #define petsc_mpi_comm_free_ petsc_mpi_comm_free__ 438a7b85bbcSSatish Balay #define petsc_mpi_get_count_ petsc_mpi_get_count__ 439a7b85bbcSSatish Balay #define petsc_mpi_get_processor_name_ petsc_mpi_get_processor_name__ 440a7b85bbcSSatish Balay #define petsc_mpi_initialized_ petsc_mpi_initialized__ 441a7b85bbcSSatish Balay #define petsc_mpi_iprobe_ petsc_mpi_iprobe__ 442a7b85bbcSSatish Balay #define petsc_mpi_probe_ petsc_mpi_probe__ 443a7b85bbcSSatish Balay #define petsc_mpi_request_free_ petsc_mpi_request_free__ 444a7b85bbcSSatish Balay #define petsc_mpi_ssend_ petsc_mpi_ssend__ 445a7b85bbcSSatish Balay #define petsc_mpi_wait_ petsc_mpi_wait__ 446a7b85bbcSSatish Balay #define petsc_mpi_comm_group_ petsc_mpi_comm_group__ 447a7b85bbcSSatish Balay #define petsc_mpi_exscan_ petsc_mpi_exscan__ 448f7c6e6aaSSatish Balay #endif 449e5c89e4eSSatish Balay 450c8217ed5SSatish Balay /* Do not build fortran interface if MPI namespace colision is to be avoided */ 451a7b85bbcSSatish Balay #if defined(PETSC_HAVE_FORTRAN) 452c8217ed5SSatish Balay 453*19caf8f3SSatish Balay PETSC_EXTERN void mpiunisetmoduleblock_(void); 45452ecd5ffSSatish Balay 455*19caf8f3SSatish Balay PETSC_EXTERN void mpiunisetfortranbasepointers_(void *f_mpi_in_place) 45652ecd5ffSSatish Balay { 45752ecd5ffSSatish Balay MPIUNIF_mpi_in_place = f_mpi_in_place; 45852ecd5ffSSatish Balay } 45952ecd5ffSSatish Balay 460*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_init_(int *ierr) 461e5c89e4eSSatish Balay { 4620134af2dSBarry Smith mpiunisetmoduleblock_(); 463c8217ed5SSatish Balay *ierr = MPI_Init((int*)0, (char***)0); 464e5c89e4eSSatish Balay } 465e5c89e4eSSatish Balay 466*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_finalize_(int *ierr) 467e5c89e4eSSatish Balay { 468c8217ed5SSatish Balay *ierr = MPI_Finalize(); 469e5c89e4eSSatish Balay } 470e5c89e4eSSatish Balay 471*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_size_(MPI_Comm *comm,int *size,int *ierr) 472e5c89e4eSSatish Balay { 473e5c89e4eSSatish Balay *size = 1; 474e5c89e4eSSatish Balay *ierr = 0; 475e5c89e4eSSatish Balay } 476e5c89e4eSSatish Balay 477*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_rank_(MPI_Comm *comm,int *rank,int *ierr) 478e5c89e4eSSatish Balay { 479e5c89e4eSSatish Balay *rank = 0; 480e5c89e4eSSatish Balay *ierr = MPI_SUCCESS; 481e5c89e4eSSatish Balay } 482e5c89e4eSSatish Balay 483*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_split_(MPI_Comm *comm,int *color,int *key, MPI_Comm *newcomm, int *ierr) 4841f6cc5b2SSatish Balay { 4851f6cc5b2SSatish Balay *newcomm = *comm; 4861f6cc5b2SSatish Balay *ierr = MPI_SUCCESS; 4871f6cc5b2SSatish Balay } 4881f6cc5b2SSatish Balay 489*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_abort_(MPI_Comm *comm,int *errorcode,int *ierr) 490e5c89e4eSSatish Balay { 491e5c89e4eSSatish Balay abort(); 492e5c89e4eSSatish Balay *ierr = MPI_SUCCESS; 493e5c89e4eSSatish Balay } 494e5c89e4eSSatish Balay 495*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_reduce_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *root,int *comm,int *ierr) 4963b644628SSatish Balay { 497f30578ecSBarry Smith *ierr = MPI_Reduce(sendbuf,recvbuf,*count,*datatype,*op,*root,*comm); 4983b644628SSatish Balay } 4993b644628SSatish Balay 500*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_allreduce_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr) 501e5c89e4eSSatish Balay { 502f30578ecSBarry Smith *ierr = MPI_Allreduce(sendbuf,recvbuf,*count,*datatype,*op,*comm); 503e5c89e4eSSatish Balay } 504e5c89e4eSSatish Balay 505*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_barrier_(MPI_Comm *comm,int *ierr) 506e5c89e4eSSatish Balay { 507e5c89e4eSSatish Balay *ierr = MPI_SUCCESS; 508e5c89e4eSSatish Balay } 509f7c6e6aaSSatish Balay 510*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_bcast_(void *buf,int *count,int *datatype,int *root,int *comm,int *ierr) 511e5c89e4eSSatish Balay { 512e5c89e4eSSatish Balay *ierr = MPI_SUCCESS; 513e5c89e4eSSatish Balay } 514f7c6e6aaSSatish Balay 515*19caf8f3SSatish 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) 516e5c89e4eSSatish Balay { 517f30578ecSBarry Smith *ierr = MPI_Gather(sendbuf,*scount,*sdatatype,recvbuf,rcount,rdatatype,*root,*comm); 518f7c6e6aaSSatish Balay } 519f7c6e6aaSSatish Balay 520*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_allgather_(void *sendbuf,int *scount,int *sdatatype, void *recvbuf, int *rcount, int *rdatatype,int *comm,int *ierr) 521f7c6e6aaSSatish Balay { 522f30578ecSBarry Smith *ierr = MPI_Allgather(sendbuf,*scount,*sdatatype,recvbuf,rcount,rdatatype,*comm); 523e5c89e4eSSatish Balay } 524e5c89e4eSSatish Balay 525*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_scan_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr) 5263b644628SSatish Balay { 5271a589b05SJed Brown *ierr = MPIUNI_Memcpy(recvbuf,sendbuf,(*count)*MPI_sizeof(*datatype)); 5283b644628SSatish Balay } 5293b644628SSatish Balay 530*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_send_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *ierr) 5311086b069SSatish Balay { 53206df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 5331086b069SSatish Balay } 5341086b069SSatish Balay 535*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_recv_(void *buf,int *count,int *datatype,int *source,int *tag,int *comm,int status,int *ierr) 5361086b069SSatish Balay { 53706df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 5381086b069SSatish Balay } 5391086b069SSatish Balay 540*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_reduce_scatter_(void *sendbuf,void *recvbuf,int *recvcounts,int *datatype,int *op,int *comm,int *ierr) 541156bc490SSatish Balay { 54206df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 543156bc490SSatish Balay } 544156bc490SSatish Balay 545*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_irecv_(void *buf,int *count, int *datatype, int *source, int *tag, int *comm, int *request, int *ierr) 546156bc490SSatish Balay { 54706df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 548156bc490SSatish Balay } 549156bc490SSatish Balay 550*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_isend_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *request, int *ierr) 551156bc490SSatish Balay { 55206df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 553156bc490SSatish Balay } 554156bc490SSatish Balay 555*19caf8f3SSatish 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) 556156bc490SSatish Balay { 5571a589b05SJed Brown *ierr = MPIUNI_Memcpy(recvbuf,sendbuf,(*sendcount)*MPI_sizeof(*sendtype)); 558156bc490SSatish Balay } 559156bc490SSatish Balay 560*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_test_(int *request,int *flag,int *status,int *ierr) 561156bc490SSatish Balay { 56206df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 563156bc490SSatish Balay } 564156bc490SSatish Balay 565*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_waitall_(int *count,int *array_of_requests,int *array_of_statuses,int *ierr) 566156bc490SSatish Balay { 567156bc490SSatish Balay *ierr = MPI_SUCCESS; 568156bc490SSatish Balay } 569156bc490SSatish Balay 570*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_waitany_(int *count,int *array_of_requests,int * index, int *status,int *ierr) 571156bc490SSatish Balay { 572156bc490SSatish Balay *ierr = MPI_SUCCESS; 573156bc490SSatish Balay } 574156bc490SSatish Balay 575*19caf8f3SSatish 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) 576156bc490SSatish Balay { 577f30578ecSBarry Smith *ierr = MPI_Allgatherv(sendbuf,*sendcount,*sendtype,recvbuf,recvcounts,displs,*recvtype,*comm); 578156bc490SSatish Balay } 579156bc490SSatish Balay 580*19caf8f3SSatish 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) 581156bc490SSatish Balay { 582f30578ecSBarry Smith *ierr = MPI_Alltoallv(sendbuf,sendcounts,sdispls,*sendtype,recvbuf,recvcounts,rdispls,*recvtype,*comm); 583156bc490SSatish Balay } 584156bc490SSatish Balay 585*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_create_(int *comm,int *group,int *newcomm,int *ierr) 586156bc490SSatish Balay { 587156bc490SSatish Balay *newcomm = *comm; 588156bc490SSatish Balay *ierr = MPI_SUCCESS; 589156bc490SSatish Balay } 590156bc490SSatish Balay 591*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_address_(void *location,MPI_Aint *address,int *ierr) 592156bc490SSatish Balay { 59399256852SLisandro Dalcin *address = (MPI_Aint) ((char *)location); 594156bc490SSatish Balay *ierr = MPI_SUCCESS; 595156bc490SSatish Balay } 596156bc490SSatish Balay 597*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_pack_(void *inbuf,int *incount,int *datatype,void *outbuf,int *outsize,int *position,int *comm,int *ierr) 598156bc490SSatish Balay { 59906df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 600156bc490SSatish Balay } 601156bc490SSatish Balay 602*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_unpack_(void *inbuf,int *insize,int *position,void *outbuf,int *outcount,int *datatype,int *comm,int *ierr) 603156bc490SSatish Balay { 60406df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 605156bc490SSatish Balay } 606156bc490SSatish Balay 607*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_pack_size_(int *incount,int *datatype,int *comm,int *size,int *ierr) 608156bc490SSatish Balay { 60906df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 610156bc490SSatish Balay } 611156bc490SSatish Balay 612*19caf8f3SSatish 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) 613156bc490SSatish Balay { 61406df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 615156bc490SSatish Balay } 616156bc490SSatish Balay 617*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_type_commit_(int *datatype,int *ierr) 618156bc490SSatish Balay { 619156bc490SSatish Balay *ierr = MPI_SUCCESS; 620156bc490SSatish Balay } 621156bc490SSatish Balay 622*19caf8f3SSatish Balay double petsc_mpi_wtime_(void) 623156bc490SSatish Balay { 624156bc490SSatish Balay return 0.0; 625f8f52c7dSSatish Balay } 626156bc490SSatish Balay 627*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_cancel_(int *request,int *ierr) 628f8f52c7dSSatish Balay { 629f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 630f8f52c7dSSatish Balay } 631f8f52c7dSSatish Balay 632*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_dup_(int *comm,int *out,int *ierr) 633f8f52c7dSSatish Balay { 634f8f52c7dSSatish Balay *out = *comm; 635f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 636f8f52c7dSSatish Balay } 637f8f52c7dSSatish Balay 638*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_free_(int *comm,int *ierr) 639f8f52c7dSSatish Balay { 640f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 641f8f52c7dSSatish Balay } 642f8f52c7dSSatish Balay 643*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_get_count_(int *status,int *datatype,int *count,int *ierr) 644f8f52c7dSSatish Balay { 64506df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 646f8f52c7dSSatish Balay } 647f8f52c7dSSatish Balay 648*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_get_processor_name_(char *name,int *result_len,int *ierr,PETSC_FORTRAN_CHARLEN_T len) 649f8f52c7dSSatish Balay { 650f8f52c7dSSatish Balay MPIUNI_Memcpy(name,"localhost",9*sizeof(char)); 651f8f52c7dSSatish Balay *result_len = 9; 652f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 653f8f52c7dSSatish Balay } 654f8f52c7dSSatish Balay 655*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_initialized_(int *flag,int *ierr) 656f8f52c7dSSatish Balay { 657f8f52c7dSSatish Balay *flag = MPI_was_initialized; 658f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 659f8f52c7dSSatish Balay } 660f8f52c7dSSatish Balay 661*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_iprobe_(int *source,int *tag,int *comm,int *glag,int *status,int *ierr) 662f8f52c7dSSatish Balay { 663f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 664f8f52c7dSSatish Balay } 665f8f52c7dSSatish Balay 666*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_probe_(int *source,int *tag,int *comm,int *flag,int *status,int *ierr) 667f8f52c7dSSatish Balay { 668f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 669f8f52c7dSSatish Balay } 670f8f52c7dSSatish Balay 671*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_request_free_(int *request,int *ierr) 672f8f52c7dSSatish Balay { 673f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 674f8f52c7dSSatish Balay } 675f8f52c7dSSatish Balay 676*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_ssend_(void *buf,int *count,int *datatype,int *dest,int *tag,int *comm,int *ierr) 677f8f52c7dSSatish Balay { 67806df1fb1SBarry Smith *ierr = MPIUni_Abort(MPI_COMM_WORLD,0); 679f8f52c7dSSatish Balay } 680f8f52c7dSSatish Balay 681*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_wait_(int *request,int *status,int *ierr) 682f8f52c7dSSatish Balay { 683f8f52c7dSSatish Balay *ierr = MPI_SUCCESS; 684156bc490SSatish Balay } 685156bc490SSatish Balay 686*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_comm_group_(int *comm,int *group,int *ierr) 687d4816372SSatish Balay { 688d4816372SSatish Balay *ierr = MPI_SUCCESS; 689d4816372SSatish Balay } 690d4816372SSatish Balay 691*19caf8f3SSatish Balay PETSC_EXTERN void petsc_mpi_exscan_(void *sendbuf,void *recvbuf,int *count,int *datatype,int *op,int *comm,int *ierr) 692d4816372SSatish Balay { 693d4816372SSatish Balay *ierr = MPI_SUCCESS; 694d4816372SSatish Balay } 695d4816372SSatish Balay 696a7b85bbcSSatish Balay #endif /* PETSC_HAVE_FORTRAN */ 697c8217ed5SSatish Balay 698e5c89e4eSSatish Balay #if defined(__cplusplus) 699e5c89e4eSSatish Balay } 700e5c89e4eSSatish Balay #endif 701