XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT32_T;
XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT64_T;
XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT8_T;
-#define MPI_BYTE MPI_UINT8_T
+XBT_PUBLIC_DATA( MPI_Datatype ) MPI_BYTE;
XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT16_T;
XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT32_T;
XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT64_T;
XBT_PUBLIC_DATA(MPI_Datatype) MPI_LONG_DOUBLE_INT;
XBT_PUBLIC_DATA(MPI_Datatype) MPI_2FLOAT;
XBT_PUBLIC_DATA(MPI_Datatype) MPI_2DOUBLE;
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_2LONG;//only for compatibility with Fortran
+
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_REAL4;
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_REAL8;
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_REAL16;
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_COMPLEX8;
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_COMPLEX16;
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_COMPLEX32;
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER1;
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER2;
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER4;
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER8;
+XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER16;
+
//for now we only send int values at max
#define MPI_Count int
#define MPI_COUNT MPI_INT
#define MPI_2INTEGER MPI_2LONG
#define MPI_LOGICAL MPI_LONG
#endif
-#define MPI_INTEGER1 MPI_INT
-#define MPI_INTEGER2 MPI_INT16_T
-#define MPI_INTEGER4 MPI_INT32_T
-#define MPI_INTEGER8 MPI_INT64_T
-#define MPI_REAL MPI_FLOAT
-#define MPI_REAL4 MPI_FLOAT
-#define MPI_REAL8 MPI_DOUBLE
-#define MPI_REAL16 MPI_DOUBLE
+
+#define MPI_Fint int
+
#define MPI_COMPLEX MPI_C_FLOAT_COMPLEX
#define MPI_DOUBLE_COMPLEX MPI_C_DOUBLE_COMPLEX
#define MPI_LOGICAL1 MPI_UINT8_T
#define MPI_CHARACTER MPI_CHAR
#define MPI_DOUBLE_PRECISION MPI_DOUBLE
#define MPI_2DOUBLE_PRECISION MPI_2DOUBLE
-#define MPI_COMPLEX8 MPI_DATATYPE_NULL
-#define MPI_COMPLEX16 MPI_DATATYPE_NULL
-#define MPI_COMPLEX32 MPI_DATATYPE_NULL
+
typedef void MPI_User_function(void *invec, void *inoutvec, int *len,
MPI_Datatype datatype, MPI_Op op));
MPI_CALL(XBT_PUBLIC(int), MPI_Win_free,( MPI_Win* win));
-
MPI_CALL(XBT_PUBLIC(int), MPI_Win_create,( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win *win));
-
+MPI_CALL(XBT_PUBLIC(int), MPI_Win_set_name,(MPI_Win win, char * name));
+MPI_CALL(XBT_PUBLIC(int), MPI_Win_get_name,(MPI_Win win, char * name, int* len));
MPI_CALL(XBT_PUBLIC(int), MPI_Win_fence,( int assert, MPI_Win win));
MPI_CALL(XBT_PUBLIC(int), MPI_Get,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
MPI_CALL(XBT_PUBLIC(int), MPI_Alloc_mem, (MPI_Aint size, MPI_Info info, void *baseptr));
MPI_CALL(XBT_PUBLIC(int), MPI_Free_mem, (void *base));
+MPI_CALL(XBT_PUBLIC(MPI_Datatype), MPI_Type_f2c,(MPI_Fint datatype));
+MPI_CALL(XBT_PUBLIC(MPI_Fint), MPI_Type_c2f,(MPI_Datatype datatype));
+MPI_CALL(XBT_PUBLIC(MPI_Group), MPI_Group_f2c,(MPI_Fint group));
+MPI_CALL(XBT_PUBLIC(MPI_Fint), MPI_Group_c2f,(MPI_Group group));
+MPI_CALL(XBT_PUBLIC(MPI_Request), MPI_Request_f2c,(MPI_Fint request));
+MPI_CALL(XBT_PUBLIC(MPI_Fint), MPI_Request_c2f,(MPI_Request request));
+MPI_CALL(XBT_PUBLIC(MPI_Win), MPI_Win_f2c,(MPI_Fint win));
+MPI_CALL(XBT_PUBLIC(MPI_Fint), MPI_Win_c2f,(MPI_Win win));
+MPI_CALL(XBT_PUBLIC(MPI_Op), MPI_Op_f2c,(MPI_Fint op));
+MPI_CALL(XBT_PUBLIC(MPI_Fint), MPI_Op_c2f,(MPI_Op op));
+
//FIXME: these are not yet implemented
XBT_PUBLIC_DATA(MPI_Errhandler*) MPI_ERRORS_ARE_FATAL;
XBT_PUBLIC_DATA(MPI_Errhandler*) MPI_ERRHANDLER_NULL;
-
+MPI_CALL(XBT_PUBLIC(MPI_Info), MPI_Info_f2c,(MPI_Fint info));
+MPI_CALL(XBT_PUBLIC(MPI_Fint), MPI_Info_c2f,(MPI_Info info));
+MPI_CALL(XBT_PUBLIC(MPI_Errhandler), MPI_Errhandler_f2c,(MPI_Fint errhandler));
+MPI_CALL(XBT_PUBLIC(MPI_Fint), MPI_Errhandler_c2f,(MPI_Errhandler errhandler));
MPI_CALL(XBT_PUBLIC(int), MPI_Pack_size, (int incount, MPI_Datatype datatype, MPI_Comm comm, int* size));
MPI_CALL(XBT_PUBLIC(int), MPI_Cart_coords, (MPI_Comm comm, int rank, int maxdims, int* coords));
MPI_CALL(XBT_PUBLIC(int), MPI_Cart_create, (MPI_Comm comm_old, int ndims, int* dims, int* periods, int reorder, MPI_Comm* comm_cart));