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