From 89e1ddb4c5e6297a4557aebfca3429cf3ecc7d8e Mon Sep 17 00:00:00 2001 From: Gaurav Dhingra Date: Mon, 31 Mar 2025 12:24:36 +0530 Subject: [PATCH] remove C MPI wrapper function for MPI_Dims_create --- src/mpi.f90 | 12 +++++++++++- src/mpi_c_bindings.f90 | 11 ++++++----- src/mpi_wrapper.c | 5 ----- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/mpi.f90 b/src/mpi.f90 index eedccb0..91c3d4d 100644 --- a/src/mpi.f90 +++ b/src/mpi.f90 @@ -456,11 +456,21 @@ subroutine MPI_Cart_shift_proc(comm, direction, disp, rank_source, rank_dest, ie end subroutine subroutine MPI_Dims_create_proc(nnodes, ndims, dims, ierror) + use iso_c_binding, only: c_int, c_ptr use mpi_c_bindings, only: c_mpi_dims_create integer, intent(in) :: nnodes, ndims integer, intent(out) :: dims(ndims) integer, optional, intent(out) :: ierror - call c_mpi_dims_create(nnodes, ndims, dims, ierror) + integer(c_int) :: local_ierr + + local_ierr = c_mpi_dims_create(nnodes, ndims, dims) + if (present(ierror)) then + ierror = local_ierr + else + if (local_ierr /= MPI_SUCCESS) then + print *, "MPI_Dims_create failed with error code: ", local_ierr + end if + end if end subroutine subroutine MPI_Cart_sub_proc (comm, remain_dims, newcomm, ierror) diff --git a/src/mpi_c_bindings.f90 b/src/mpi_c_bindings.f90 index f39b868..4b832c5 100644 --- a/src/mpi_c_bindings.f90 +++ b/src/mpi_c_bindings.f90 @@ -209,11 +209,12 @@ subroutine c_mpi_cart_shift(comm, direction, disp, rank_source, rank_dest, ierro integer(c_int), intent(out) :: rank_source, rank_dest, ierror end subroutine - subroutine c_mpi_dims_create(nnodes, ndims, dims, ierror) bind(C, name="mpi_dims_create_wrapper") - use iso_c_binding, only: c_int - integer(c_int), intent(in) :: nnodes, ndims - integer(c_int), intent(inout) :: dims(*), ierror - end subroutine + function c_mpi_dims_create(nnodes, ndims, dims) bind(C, name="MPI_Dims_create") + use iso_c_binding, only: c_int, c_ptr + integer(c_int), value :: nnodes, ndims + integer(c_int), intent(inout) :: dims(*) + integer(c_int) :: c_mpi_dims_create + end function subroutine c_mpi_cart_sub(comm, remain_dims, newcomm, ierror) bind(C, name ="mpi_cart_sub_wrapper") use iso_c_binding, only: c_int diff --git a/src/mpi_wrapper.c b/src/mpi_wrapper.c index 7a540ad..5398c86 100644 --- a/src/mpi_wrapper.c +++ b/src/mpi_wrapper.c @@ -219,11 +219,6 @@ void mpi_cart_shift_wrapper(int * comm_f, int * dir, int * disp, int * rank_sour *ierror = MPI_Cart_shift(comm, *dir, *disp, rank_source, rank_dest); } -void mpi_dims_create_wrapper(int * nnodes, int * ndims, int * dims, int * ierror) -{ - *ierror = MPI_Dims_create(*nnodes, *ndims, dims); -} - void mpi_cart_sub_wrapper(int * comm_f, int * rmains_dims, int * newcomm_f, int * ierror) { MPI_Comm comm = get_c_comm_from_fortran(*comm_f); MPI_Comm newcomm = MPI_COMM_NULL;