From bdfd1097572dd0f7334515d77cfc8b5984ff873c Mon Sep 17 00:00:00 2001 From: Michel Wortmann Date: Mon, 17 Nov 2025 14:11:13 +0000 Subject: [PATCH 1/2] Prototypes of MPL_CREATE_GROUP_COMMUNICATOR and MPL_CREATE_UNION_COMMUNICATOR subroutines. --- src/fiat/mpl/internal/mpl_groups.F90 | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/fiat/mpl/internal/mpl_groups.F90 b/src/fiat/mpl/internal/mpl_groups.F90 index 2b992311..3abd2aca 100644 --- a/src/fiat/mpl/internal/mpl_groups.F90 +++ b/src/fiat/mpl/internal/mpl_groups.F90 @@ -31,6 +31,7 @@ MODULE MPL_GROUPS USE MPL_MPIF USE MPL_DATA_MODULE USE MPL_MESSAGE_MOD +USE MPL_ABORT_MOD IMPLICIT NONE PRIVATE @@ -143,6 +144,36 @@ SUBROUTINE MPL_CART_COORDS(KPROC, KPROCW, KPROCV) END SUBROUTINE MPL_CART_COORDS +SUBROUTINE MPL_CREATE_GROUP_COMMUNICATOR(NPROC, OFFSET, NEW_GROUP, NEW_COMM) + INTEGER, INTENT(IN) :: NPROC, OFFSET + INTEGER, INTENT(OUT) :: NEW_GROUP, NEW_COMM + INTEGER, ALLOCATABLE :: RANKS(:) + INTEGER :: I, SIZE, IERR, WORLD_GROUP + + CALL MPI_COMM_SIZE(MPI_COMM_WORLD, SIZE, IERR) + + IF (OFFSET+NPROC > SIZE) THEN + CALL MPL_ABORT("MPL_CREATE_GROUP_COMMUNICATOR: OFFSET+NPROC exceeds MPI_COMM_SIZE") + END IF + + ALLOCATE(RANKS(NPROC)) + RANKS = [(I, I=OFFSET, OFFSET+NPROC-1)] + + CALL MPI_COMM_GROUP(MPI_COMM_WORLD, WORLD_GROUP, IERR) + CALL MPI_GROUP_INCL(WORLD_GROUP, NPROC, RANKS, NEW_GROUP, IERR) + CALL MPI_COMM_CREATE(MPI_COMM_WORLD, NEW_GROUP, NEW_COMM, IERR) + +END SUBROUTINE MPL_CREATE_GROUP_COMMUNICATOR + +SUBROUTINE MPL_CREATE_UNION_COMMUNICATOR(GROUP1, GROUP2, UNION_COMM) + INTEGER, INTENT(IN) :: GROUP1, GROUP2 + INTEGER, INTENT(OUT) :: UNION_COMM + INTEGER :: IERR, UNION_GROUP + + CALL MPI_GROUP_UNION(GROUP1, GROUP2, UNION_GROUP, IERR) + CALL MPI_COMM_CREATE(MPI_COMM_WORLD, UNION_GROUP, UNION_COMM, IERR) + +END SUBROUTINE MPL_CREATE_UNION_COMMUNICATOR ! ------------------------------------------------------------------ END MODULE MPL_GROUPS From 1d1a6638ebc89af70c3d42c8abf3e60eaa5f8535 Mon Sep 17 00:00:00 2001 From: Michel Wortmann Date: Thu, 27 Nov 2025 14:35:33 +0000 Subject: [PATCH 2/2] Add create group and union communicator routines to public. --- src/fiat/mpl/internal/mpl_groups.F90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fiat/mpl/internal/mpl_groups.F90 b/src/fiat/mpl/internal/mpl_groups.F90 index 3abd2aca..e7868f78 100644 --- a/src/fiat/mpl/internal/mpl_groups.F90 +++ b/src/fiat/mpl/internal/mpl_groups.F90 @@ -36,7 +36,8 @@ MODULE MPL_GROUPS IMPLICIT NONE PRIVATE PUBLIC MPL_COMM_GRID, MPL_ALL_LEVS_COMM, MPL_ALL_MS_COMM, & - & MPL_GROUPS_CREATE, MPL_CART_RANK, MPL_CART_COORDS + & MPL_GROUPS_CREATE, MPL_CART_RANK, MPL_CART_COORDS, MPL_CREATE_UNION_COMMUNICATOR, & + & MPL_CREATE_GROUP_COMMUNICATOR INTEGER(KIND=JPIM) :: MPL_COMM_GRID, MPL_ALL_LEVS_COMM, MPL_ALL_MS_COMM, & & MPL_GP_GRID