Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 33 additions & 1 deletion src/fiat/mpl/internal/mpl_groups.F90
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,13 @@ MODULE MPL_GROUPS
USE MPL_MPIF
USE MPL_DATA_MODULE
USE MPL_MESSAGE_MOD
USE MPL_ABORT_MOD

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
Expand Down Expand Up @@ -143,6 +145,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
Loading