From c293f85afe3afae9c011deca0c31fa34772f454d Mon Sep 17 00:00:00 2001 From: Gaurav Dhingra Date: Mon, 31 Mar 2025 11:39:10 +0530 Subject: [PATCH] remove C MPI wrapper function for MPI_Cart_coords --- src/mpi.f90 | 17 +++++++++++++++-- src/mpi_c_bindings.f90 | 12 +++++++----- src/mpi_wrapper.c | 6 ------ 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/mpi.f90 b/src/mpi.f90 index c66514c..e2c2a3f 100644 --- a/src/mpi.f90 +++ b/src/mpi.f90 @@ -424,12 +424,25 @@ subroutine MPI_Cart_create_proc(comm, ndims, dims, periods, reorder, newcomm, ie end subroutine subroutine MPI_Cart_coords_proc(comm, rank, maxdims, coords, ierror) - use mpi_c_bindings, only: c_mpi_cart_coords + use iso_c_binding, only: c_int, c_ptr + use mpi_c_bindings, only: c_mpi_cart_coords, c_mpi_comm_f2c integer, intent(in) :: comm integer, intent(in) :: rank, maxdims integer, intent(out) :: coords(maxdims) integer, optional, intent(out) :: ierror - call c_mpi_cart_coords(comm, rank, maxdims, coords, ierror) + type(c_ptr) :: c_comm + integer(c_int) :: local_ierr + + c_comm = c_mpi_comm_f2c(comm) + local_ierr = c_mpi_cart_coords(c_comm, rank, maxdims, coords) + + if (present(ierror)) then + ierror = local_ierr + else + if (local_ierr /= MPI_SUCCESS) then + print *, "MPI_Barrier failed with error code: ", local_ierr + end if + end if end subroutine subroutine MPI_Cart_shift_proc(comm, direction, disp, rank_source, rank_dest, ierror) diff --git a/src/mpi_c_bindings.f90 b/src/mpi_c_bindings.f90 index 2330e43..f39b868 100644 --- a/src/mpi_c_bindings.f90 +++ b/src/mpi_c_bindings.f90 @@ -195,11 +195,13 @@ subroutine c_mpi_cart_create(comm, ndims, dims, periods, reorder, newcomm, ierro integer(c_int), intent(out) :: newcomm, ierror end subroutine - subroutine c_mpi_cart_coords(comm, rank, maxdims, coords, ierror) bind(C, name="mpi_cart_coords_wrapper") - use iso_c_binding, only: c_int - integer(c_int), intent(in) :: comm, rank, maxdims - integer(c_int), intent(out) :: coords(*), ierror - end subroutine + function c_mpi_cart_coords(comm, rank, maxdims, coords) bind(C, name="MPI_Cart_coords") + use iso_c_binding, only: c_int, c_ptr + type(c_ptr), value :: comm + integer(c_int), value :: rank, maxdims + integer(c_int), intent(out) :: coords(*) + integer(c_int) :: c_mpi_cart_coords + end function subroutine c_mpi_cart_shift(comm, direction, disp, rank_source, rank_dest, ierror) bind(C, name="mpi_cart_shift_wrapper") use iso_c_binding, only: c_int diff --git a/src/mpi_wrapper.c b/src/mpi_wrapper.c index be0efcd..f65b3e4 100644 --- a/src/mpi_wrapper.c +++ b/src/mpi_wrapper.c @@ -308,12 +308,6 @@ void mpi_cart_create_wrapper(int * comm_f, int * ndims, int * dims, int * period *newcomm_f = MPI_Comm_c2f(newcomm); } -void mpi_cart_coords_wrapper(int * comm_f, int * rank, int * maxdims, int * coords, int * ierror) -{ - MPI_Comm comm = get_c_comm_from_fortran(*comm_f); - *ierror = MPI_Cart_coords(comm, *rank, *maxdims, coords); -} - void mpi_cart_shift_wrapper(int * comm_f, int * dir, int * disp, int * rank_source, int * rank_dest, int * ierror) { MPI_Comm comm = get_c_comm_from_fortran(*comm_f);