1! 2! Copyright (C) by Argonne National Laboratory 3! See COPYRIGHT in top-level directory 4! 5 6subroutine MPI_Type_get_name_f08(datatype, type_name, resultlen, ierror) 7 use, intrinsic :: iso_c_binding, only : c_int, c_char 8 use :: mpi_f08, only : MPI_Datatype 9 use :: mpi_f08, only : MPI_MAX_OBJECT_NAME 10 use :: mpi_c_interface, only : c_Datatype 11 use :: mpi_c_interface, only : MPIR_Type_get_name_c 12 use :: mpi_c_interface, only : MPIR_Fortran_string_c2f 13 14 implicit none 15 16 type(MPI_Datatype), intent(in) :: datatype 17 character(len=MPI_MAX_OBJECT_NAME), intent(out) :: type_name 18 integer, intent(out) :: resultlen 19 integer, optional, intent(out) :: ierror 20 21 integer(c_Datatype) :: datatype_c 22 character(kind=c_char) :: type_name_c(MPI_MAX_OBJECT_NAME+1) 23 integer(c_int) :: resultlen_c 24 integer(c_int) :: ierror_c 25 26 if (c_int == kind(0)) then 27 ierror_c = MPIR_Type_get_name_c(datatype%MPI_VAL, type_name_c, resultlen) 28 else 29 datatype_c = datatype%MPI_VAL 30 ierror_c = MPIR_Type_get_name_c(datatype_c, type_name_c, resultlen_c) 31 resultlen = resultlen_c 32 end if 33 34 call MPIR_Fortran_string_c2f(type_name_c, type_name) 35 36 if (present(ierror)) ierror = ierror_c 37 38end subroutine MPI_Type_get_name_f08 39