From 84ab3c04b80eac4aa5177ec40a145c2e345bdb29 Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Wed, 24 Jul 2019 23:38:03 +0200 Subject: [PATCH] convert between Fortran and C MPI_*_NULL handles --- src/smpi/bindings/smpi_pmpi_comm.cpp | 4 ++++ src/smpi/bindings/smpi_pmpi_group.cpp | 4 ++++ src/smpi/bindings/smpi_pmpi_info.cpp | 4 ++++ src/smpi/bindings/smpi_pmpi_op.cpp | 4 ++++ src/smpi/bindings/smpi_pmpi_request.cpp | 4 ++++ src/smpi/bindings/smpi_pmpi_type.cpp | 4 ++++ src/smpi/bindings/smpi_pmpi_win.cpp | 4 ++++ 7 files changed, 28 insertions(+) diff --git a/src/smpi/bindings/smpi_pmpi_comm.cpp b/src/smpi/bindings/smpi_pmpi_comm.cpp index 7291ed2cae..73e43793d1 100644 --- a/src/smpi/bindings/smpi_pmpi_comm.cpp +++ b/src/smpi/bindings/smpi_pmpi_comm.cpp @@ -217,10 +217,14 @@ int PMPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int, MPI_Comm* comm_o } MPI_Comm PMPI_Comm_f2c(MPI_Fint comm){ + if(comm==-1) + return MPI_COMM_NULL; return static_cast(simgrid::smpi::Comm::f2c(comm)); } MPI_Fint PMPI_Comm_c2f(MPI_Comm comm){ + if(comm==MPI_COMM_NULL) + return -1; return comm->c2f(); } diff --git a/src/smpi/bindings/smpi_pmpi_group.cpp b/src/smpi/bindings/smpi_pmpi_group.cpp index 4155bf6e6f..83b08ed2d7 100644 --- a/src/smpi/bindings/smpi_pmpi_group.cpp +++ b/src/smpi/bindings/smpi_pmpi_group.cpp @@ -182,9 +182,13 @@ int PMPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group * n } MPI_Group PMPI_Group_f2c(MPI_Fint group){ + if(group==-1) + return MPI_GROUP_NULL; return simgrid::smpi::Group::f2c(group); } MPI_Fint PMPI_Group_c2f(MPI_Group group){ + if(group==MPI_GROUP_NULL) + return -1; return group->c2f(); } diff --git a/src/smpi/bindings/smpi_pmpi_info.cpp b/src/smpi/bindings/smpi_pmpi_info.cpp index ca08ebf6e5..82634cfe77 100644 --- a/src/smpi/bindings/smpi_pmpi_info.cpp +++ b/src/smpi/bindings/smpi_pmpi_info.cpp @@ -74,9 +74,13 @@ int PMPI_Info_get_valuelen( MPI_Info info, const char *key, int *valuelen, int * } MPI_Info PMPI_Info_f2c(MPI_Fint info){ + if(info==-1) + return MPI_INFO_NULL; return static_cast(simgrid::smpi::Info::f2c(info)); } MPI_Fint PMPI_Info_c2f(MPI_Info info){ + if(info==MPI_INFO_NULL) + return -1; return info->c2f(); } diff --git a/src/smpi/bindings/smpi_pmpi_op.cpp b/src/smpi/bindings/smpi_pmpi_op.cpp index 505914e412..b52c51804d 100644 --- a/src/smpi/bindings/smpi_pmpi_op.cpp +++ b/src/smpi/bindings/smpi_pmpi_op.cpp @@ -45,9 +45,13 @@ int PMPI_Op_commutative(MPI_Op op, int* commute){ } MPI_Op PMPI_Op_f2c(MPI_Fint op){ + if(op==-1) + return MPI_OP_NULL; return static_cast(simgrid::smpi::Op::f2c(op)); } MPI_Fint PMPI_Op_c2f(MPI_Op op){ + if(op==MPI_OP_NULL) + return -1; return op->c2f(); } diff --git a/src/smpi/bindings/smpi_pmpi_request.cpp b/src/smpi/bindings/smpi_pmpi_request.cpp index 5d36e12925..5090682515 100644 --- a/src/smpi/bindings/smpi_pmpi_request.cpp +++ b/src/smpi/bindings/smpi_pmpi_request.cpp @@ -843,9 +843,13 @@ int PMPI_Request_get_status( MPI_Request request, int *flag, MPI_Status *status) } MPI_Request PMPI_Request_f2c(MPI_Fint request){ + if(request==-1) + return MPI_REQUEST_NULL; return static_cast(simgrid::smpi::Request::f2c(request)); } MPI_Fint PMPI_Request_c2f(MPI_Request request) { + if(request==MPI_REQUEST_NULL) + return -1; return request->c2f(); } diff --git a/src/smpi/bindings/smpi_pmpi_type.cpp b/src/smpi/bindings/smpi_pmpi_type.cpp index 868a2a9622..5e35a9dcaa 100644 --- a/src/smpi/bindings/smpi_pmpi_type.cpp +++ b/src/smpi/bindings/smpi_pmpi_type.cpp @@ -301,10 +301,14 @@ int PMPI_Type_get_name(MPI_Datatype datatype, char * name, int* len) } MPI_Datatype PMPI_Type_f2c(MPI_Fint datatype){ + if(datatype==-1) + return MPI_DATATYPE_NULL; return static_cast(simgrid::smpi::F2C::f2c(datatype)); } MPI_Fint PMPI_Type_c2f(MPI_Datatype datatype){ + if(datatype==MPI_DATATYPE_NULL) + return -1; return datatype->c2f(); } diff --git a/src/smpi/bindings/smpi_pmpi_win.cpp b/src/smpi/bindings/smpi_pmpi_win.cpp index 6bbeef2215..c833206a80 100644 --- a/src/smpi/bindings/smpi_pmpi_win.cpp +++ b/src/smpi/bindings/smpi_pmpi_win.cpp @@ -839,9 +839,13 @@ int PMPI_Win_free_keyval(int* keyval) { } MPI_Win PMPI_Win_f2c(MPI_Fint win){ + if(win==-1) + return MPI_WIN_NULL; return static_cast(simgrid::smpi::Win::f2c(win)); } MPI_Fint PMPI_Win_c2f(MPI_Win win){ + if(win==MPI_WIN_NULL) + return -1; return win->c2f(); } -- 2.20.1