23 use,
INTRINSIC :: iso_c_binding, only : c_ptr, c_char, c_null_char, c_loc
29 bind( c, name=
'mpi_handshake_c2f')
30 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
32 INTEGER(KIND=c_int),
INTENT(in),
VALUE :: n
33 TYPE (c_ptr) ,
INTENT(in) :: group_names(n)
34 INTEGER(KIND=c_int),
INTENT(out) :: group_comms(n)
35 INTEGER(KIND=c_int),
INTENT(in),
VALUE :: comm
39 integer,
intent(in) :: comm
40 character(len=MAX_GROUPNAME_LEN),
intent(in) :: group_names(:)
41 integer,
intent(inout) :: group_comms(size(group_names))
43 CHARACTER (kind=c_char, len=MAX_GROUPNAME_LEN),
TARGET :: group_names_cpy(size(group_names))
44 type( c_ptr ) :: group_name_ptr(size(group_names))
46 DO i=1,
SIZE(group_names)
47 group_names_cpy(i) = trim(group_names(i)) // c_null_char
48 group_name_ptr(i) = c_loc(group_names_cpy(i))
subroutine, public mpi_handshake(comm, group_names, group_comms)
Procedure for the communicator splitting ("MPI handshake") that has been harmonized with the respecti...