diff --git a/.gitignore b/.gitignore index d9de74cae8f..07c17512a1b 100644 --- a/.gitignore +++ b/.gitignore @@ -213,6 +213,7 @@ ompi/mpi/fortran/mpif-h/sizeof_f.f90 ompi/mpi/fortran/mpif-h/profile/p*.c ompi/mpi/fortran/mpif-h/profile/psizeof_f.f90 +ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-constants.h ompi/mpi/fortran/use-mpi-f08/constants.h ompi/mpi/fortran/use-mpi-f08/sizeof_f08.f90 ompi/mpi/fortran/use-mpi-f08/sizeof_f08.h diff --git a/config/ompi_setup_mpi_fortran.m4 b/config/ompi_setup_mpi_fortran.m4 index 04ae4e0a8f9..95c88aeb8b5 100644 --- a/config/ompi_setup_mpi_fortran.m4 +++ b/config/ompi_setup_mpi_fortran.m4 @@ -15,8 +15,8 @@ dnl Copyright (c) 2006-2008 Sun Microsystems, Inc. All rights reserved. dnl Copyright (c) 2006-2007 Los Alamos National Security, LLC. All rights dnl reserved. dnl Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. -dnl Copyright (c) 2014-2017 Research Organization for Information Science -dnl and Technology (RIST). All rights reserved. +dnl Copyright (c) 2014-2019 Research Organization for Information Science +dnl and Technology (RIST). All rights reserved. dnl Copyright (c) 2016 IBM Corporation. All rights reserved. dnl $COPYRIGHT$ dnl @@ -743,8 +743,7 @@ end type test_mpi_handle], [$OMPI_FORTRAN_HAVE_PRIVATE], [For mpi-f08-types.f90 and ompi_info: whether the compiler supports the "private" keyword or not (used in MPI_Status)]) - # For configure-fortran-output.h, mpi-f08-types.F90 (and ompi_info) - AC_SUBST([OMPI_FORTRAN_HAVE_PROTECTED]) + # For ompi_info only AC_DEFINE_UNQUOTED([OMPI_FORTRAN_HAVE_PROTECTED], [$OMPI_FORTRAN_HAVE_PROTECTED], [For mpi-f08-types.f90 and .F90 and ompi_info: whether the compiler supports the "protected" keyword or not]) diff --git a/ompi/include/mpif-values.pl b/ompi/include/mpif-values.pl index 1b955ec50d1..70026216eb4 100755 --- a/ompi/include/mpif-values.pl +++ b/ompi/include/mpif-values.pl @@ -1,8 +1,8 @@ #!/usr/bin/env perl # # Copyright (c) 2011-2014 Cisco Systems, Inc. All rights reserved. -# Copyright (c) 2016-2017 Research Organization for Information Science -# and Technology (RIST). All rights reserved. +# Copyright (c) 2016-2019 Research Organization for Information Science +# and Technology (RIST). All rights reserved. # Copyright (c) 2016 FUJITSU LIMITED. All rights reserved. # $COPYRIGHT$ # @@ -526,4 +526,62 @@ sub write_fortran_file { write_file("$topdir/ompi/mpi/fortran/use-mpi-f08/constants.h", $output); +$output = '! WARNING! THIS IS A GENERATED FILE!! +! ANY EDITS YOU PUT HERE WILL BE LOST! +! Instead, edit topdir/ompi/include/mpif-values.pl +! + +! +! Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana +! University Research and Technology +! Corporation. All rights reserved. +! Copyright (c) 2004-2006 The University of Tennessee and The University +! of Tennessee Research Foundation. All rights +! reserved. +! Copyright (c) 2004-2007 High Performance Computing Center Stuttgart, +! University of Stuttgart. All rights reserved. +! Copyright (c) 2004-2005 The Regents of the University of California. +! All rights reserved. +! Copyright (c) 2007-2009 Cisco Systems, Inc. All rights reserved. +! Copyright (c) 2008-2009 Sun Microsystems, Inc. All rights reserved. +! Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. +! Copyright (c) 2009-2012 Los Alamos National Security, LLC. +! All rights reserved. +! Copyright (c) 2016-2019 Research Organization for Information Science +! and Technology (RIST). All rights reserved. +! $COPYRIGHT$ +! +! Additional copyrights may follow +! +! $HEADER$ +! + +#ifndef USE_MPI_F08_CONSTANTS_H +#define USE_MPI_F08_CONSTANTS_H + +'; + +foreach my $key (sort(keys(%{$constants}))) { + $output .= "#define OMPI_$key $constants->{$key}\n"; +} +$output .= "\n"; +foreach my $key (sort(keys(%{$handles}))) { + $output .= "#define OMPI_$key $handles->{$key}\n"; +} + +foreach my $key (sort(keys(%{$io_constants}))) { + $output .= "#define OMPI_$key $io_constants->{$key}\n"; +} +foreach my $key (sort(keys(%{$lio_constants}))) { + $output .= "#define OMPI_$key $lio_constants->{$key}\n"; +} +$output .= "\n"; +foreach my $key (sort(keys(%{$io_handles}))) { + $output .= "#define OMPI_$key $io_handles->{$key}\n"; +} +$output .= "\n"; +$output .= "#endif\n"; + +write_file("$topdir/ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-constants.h", $output); + exit(0); diff --git a/ompi/mpi/fortran/common_sym_whitelist.txt b/ompi/mpi/fortran/common_sym_whitelist.txt index 1b21fe88059..539df317720 100644 --- a/ompi/mpi/fortran/common_sym_whitelist.txt +++ b/ompi/mpi/fortran/common_sym_whitelist.txt @@ -3,6 +3,7 @@ ompi_f08_mpi_2complex ompi_f08_mpi_2double_complex ompi_f08_mpi_2double_precision +ompi_f08_mpi_2int ompi_f08_mpi_2integer ompi_f08_mpi_2real ompi_f08_mpi_aint @@ -10,25 +11,46 @@ ompi_f08_mpi_band ompi_f08_mpi_bor ompi_f08_mpi_bxor ompi_f08_mpi_byte +ompi_f08_mpi_c_bool +ompi_f08_mpi_c_complex +ompi_f08_mpi_count +ompi_f08_mpi_c_double_complex +ompi_f08_mpi_c_float_complex +ompi_f08_mpi_char ompi_f08_mpi_character +ompi_f08_mpi_c_long_double_complex ompi_f08_mpi_comm_null ompi_f08_mpi_comm_self ompi_f08_mpi_comm_world ompi_f08_mpi_complex -ompi_f08_mpi_complex8 ompi_f08_mpi_complex16 ompi_f08_mpi_complex32 +ompi_f08_mpi_complex8 +ompi_f08_mpi_cxx_bool +ompi_f08_mpi_cxx_complex +ompi_f08_mpi_cxx_double_complex +ompi_f08_mpi_cxx_float_complex +ompi_f08_mpi_cxx_long_double_complex ompi_f08_mpi_datatype_null +ompi_f08_mpi_double ompi_f08_mpi_double_complex +ompi_f08_mpi_double_int ompi_f08_mpi_double_precision ompi_f08_mpi_errhandler_null ompi_f08_mpi_errors_are_fatal ompi_f08_mpi_errors_return ompi_f08_mpi_file_null +ompi_f08_mpi_float +ompi_f08_mpi_float_int ompi_f08_mpi_group_empty ompi_f08_mpi_group_null ompi_f08_mpi_info_env ompi_f08_mpi_info_null +ompi_f08_mpi_int +ompi_f08_mpi_int16 +ompi_f08_mpi_int32 +ompi_f08_mpi_int64 +ompi_f08_mpi_int8 ompi_f08_mpi_integer ompi_f08_mpi_integer1 ompi_f08_mpi_integer16 @@ -42,6 +64,12 @@ ompi_f08_mpi_logical1 ompi_f08_mpi_logical2 ompi_f08_mpi_logical4 ompi_f08_mpi_logical8 +ompi_f08_mpi_long +ompi_f08_mpi_long_double +ompi_f08_mpi_long_double_int +ompi_f08_mpi_long_int +ompi_f08_mpi_long_long +ompi_f08_mpi_long_long_int ompi_f08_mpi_lor ompi_f08_mpi_lxor ompi_f08_mpi_max @@ -50,6 +78,8 @@ ompi_f08_mpi_message_no_proc ompi_f08_mpi_message_null ompi_f08_mpi_min ompi_f08_mpi_minloc +ompi_f08_mpi_no_op +ompi_f08_mpi_offset ompi_f08_mpi_op_null ompi_f08_mpi_packed ompi_f08_mpi_prod @@ -60,6 +90,19 @@ ompi_f08_mpi_real4 ompi_f08_mpi_real8 ompi_f08_mpi_replace ompi_f08_mpi_request_null +ompi_f08_mpi_short +ompi_f08_mpi_short_int +ompi_f08_mpi_signed_char ompi_f08_mpi_sum ompi_f08_mpi_ub +ompi_f08_mpi_uint16 +ompi_f08_mpi_uint32 +ompi_f08_mpi_uint64 +ompi_f08_mpi_uint8 +ompi_f08_mpi_unsigned +ompi_f08_mpi_unsigned_char +ompi_f08_mpi_unsigned_long +ompi_f08_mpi_unsigned_long_long +ompi_f08_mpi_unsigned_short +ompi_f08_mpi_wchar ompi_f08_mpi_win_null diff --git a/ompi/mpi/fortran/configure-fortran-output-bottom.h b/ompi/mpi/fortran/configure-fortran-output-bottom.h index 895f0496d7f..951bcaa4c58 100644 --- a/ompi/mpi/fortran/configure-fortran-output-bottom.h +++ b/ompi/mpi/fortran/configure-fortran-output-bottom.h @@ -3,6 +3,8 @@ ! Copyright (c) 2006-2014 Cisco Systems, Inc. All rights reserved. ! Copyright (c) 2009-2012 Los Alamos National Security, LLC. ! All rights reserved. +! Copyright (c) 2019 Research Organization for Information Science +! and Technology (RIST). All rights reserved. ! ! $COPYRIGHT$ ! @@ -38,11 +40,4 @@ #define OMPI_PRIVATE #endif -! PROTECTED or not -#if OMPI_FORTRAN_HAVE_PROTECTED -#define OMPI_PROTECTED , PROTECTED -#else -#define OMPI_PROTECTED -#endif - #endif diff --git a/ompi/mpi/fortran/configure-fortran-output.h.in b/ompi/mpi/fortran/configure-fortran-output.h.in index 6f1b82588ad..c44e965a07d 100644 --- a/ompi/mpi/fortran/configure-fortran-output.h.in +++ b/ompi/mpi/fortran/configure-fortran-output.h.in @@ -3,8 +3,8 @@ ! Copyright (c) 2006-2014 Cisco Systems, Inc. All rights reserved. ! Copyright (c) 2009-2012 Los Alamos National Security, LLC. ! All rights reserved. -! Copyright (c) 2017-2018 Research Organization for Information Science -! and Technology (RIST). All rights reserved. +! Copyright (c) 2017-2019 Research Organization for Information Science +! and Technology (RIST). All rights reserved. ! ! $COPYRIGHT$ ! @@ -25,9 +25,6 @@ ! Whether we have PRIVATE or not #define OMPI_FORTRAN_HAVE_PRIVATE @OMPI_FORTRAN_HAVE_PRIVATE@ -! Whether we have PROTECTED or not -#define OMPI_FORTRAN_HAVE_PROTECTED @OMPI_FORTRAN_HAVE_PROTECTED@ - ! Whether we have ABSTRACT or not #define OMPI_FORTRAN_HAVE_ABSTRACT @OMPI_FORTRAN_HAVE_ABSTRACT@ diff --git a/ompi/mpi/fortran/use-mpi-f08/constants.c b/ompi/mpi/fortran/use-mpi-f08/constants.c index 377b5de99e5..4626ce24386 100644 --- a/ompi/mpi/fortran/use-mpi-f08/constants.c +++ b/ompi/mpi/fortran/use-mpi-f08/constants.c @@ -1,8 +1,9 @@ /* * Copyright (c) 2010-2015 Cisco Systems, Inc. All rights reserved. - * Copyright (c) 2015-2017 Research Organization for Information Science + * Copyright (c) 2015-2018 Research Organization for Information Science * and Technology (RIST). All rights reserved. * + * Copyright (c) 2018 FUJITSU LIMITED. All rights reserved. * $COPYRIGHT$ * * This file provides symbols for the derived type values needed @@ -49,6 +50,7 @@ OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_bxor OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_maxloc = {OMPI_MPI_MAXLOC}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_minloc = {OMPI_MPI_MINLOC}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_replace = {OMPI_MPI_REPLACE}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_no_op = {OMPI_MPI_NO_OP}; /* * NULL "handles" (indices) @@ -72,26 +74,64 @@ OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_byte OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_packed = {OMPI_MPI_PACKED}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_ub = {OMPI_MPI_UB}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_lb = {OMPI_MPI_LB}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_char = {OMPI_MPI_CHAR}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_signed_char = {OMPI_MPI_SIGNED_CHAR}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_unsigned_char = {OMPI_MPI_UNSIGNED_CHAR}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_wchar = {OMPI_MPI_WCHAR}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_character = {OMPI_MPI_CHARACTER}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_logical = {OMPI_MPI_LOGICAL}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_int = {OMPI_MPI_INT}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_int16 = {OMPI_MPI_INT16_T}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_int32 = {OMPI_MPI_INT32_T}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_int64 = {OMPI_MPI_INT64_T}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_int8 = {OMPI_MPI_INT8_T}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_uint16 = {OMPI_MPI_UINT16_T}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_uint32 = {OMPI_MPI_UINT32_T}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_uint64 = {OMPI_MPI_UINT64_T}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_uint8 = {OMPI_MPI_UINT8_T}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_short = {OMPI_MPI_SHORT}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_unsigned_short = {OMPI_MPI_UNSIGNED_SHORT}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_unsigned = {OMPI_MPI_UNSIGNED}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_long = {OMPI_MPI_LONG}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_unsigned_long = {OMPI_MPI_UNSIGNED_LONG}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_long_long = {OMPI_MPI_LONG_LONG}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_unsigned_long_long = {OMPI_MPI_UNSIGNED_LONG_LONG}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_long_long_int = {OMPI_MPI_LONG_LONG_INT}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_integer = {OMPI_MPI_INTEGER}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_integer1 = {OMPI_MPI_INTEGER1}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_integer2 = {OMPI_MPI_INTEGER2}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_integer4 = {OMPI_MPI_INTEGER4}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_integer8 = {OMPI_MPI_INTEGER8}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_integer16 = {OMPI_MPI_INTEGER16}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_float = {OMPI_MPI_FLOAT}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_double = {OMPI_MPI_DOUBLE}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_long_double = {OMPI_MPI_LONG_DOUBLE}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_real = {OMPI_MPI_REAL}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_real4 = {OMPI_MPI_REAL4}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_real8 = {OMPI_MPI_REAL8}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_real16 = {OMPI_MPI_REAL16}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_double_precision = {OMPI_MPI_DOUBLE_PRECISION}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_c_complex = {OMPI_MPI_C_COMPLEX}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_c_float_complex = {OMPI_MPI_C_FLOAT_COMPLEX}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_c_double_complex = {OMPI_MPI_C_DOUBLE_COMPLEX}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_c_long_double_complex = {OMPI_MPI_C_LONG_DOUBLE_COMPLEX}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_cxx_complex = {OMPI_MPI_CXX_COMPLEX}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_cxx_float_complex = {OMPI_MPI_CXX_FLOAT_COMPLEX}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_cxx_double_complex = {OMPI_MPI_CXX_DOUBLE_COMPLEX}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_cxx_long_double_complex = {OMPI_MPI_CXX_LONG_DOUBLE_COMPLEX}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_complex = {OMPI_MPI_COMPLEX}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_complex8 = {OMPI_MPI_COMPLEX8}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_complex16 = {OMPI_MPI_COMPLEX16}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_complex32 = {OMPI_MPI_COMPLEX32}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_double_complex = {OMPI_MPI_DOUBLE_COMPLEX}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_float_int = {OMPI_MPI_FLOAT_INT}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_double_int = {OMPI_MPI_DOUBLE_INT}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_2real = {OMPI_MPI_2REAL}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_2double_precision = {OMPI_MPI_2DOUBLE_PRECISION}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_2int = {OMPI_MPI_2INT}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_short_int = {OMPI_MPI_SHORT_INT}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_long_int = {OMPI_MPI_LONG_INT}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_long_double_int = {OMPI_MPI_LONG_DOUBLE_INT}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_2integer = {OMPI_MPI_2INTEGER}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_2complex = {OMPI_MPI_2COMPLEX}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_2double_complex = {OMPI_MPI_2DOUBLE_COMPLEX}; @@ -100,3 +140,7 @@ OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_logi OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_logical2 = {OMPI_MPI_LOGICAL2}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_logical4 = {OMPI_MPI_LOGICAL4}; OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_logical8 = {OMPI_MPI_LOGICAL8}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_c_bool = {OMPI_MPI_C_BOOL}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_cxx_bool = {OMPI_MPI_CXX_BOOL}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_count = {OMPI_MPI_COUNT}; +OMPI_DECLSPEC ompi_fortran_08_handle_t OMPI_F08_HANDLE_ALIGNED ompi_f08_mpi_offset = {OMPI_MPI_OFFSET}; diff --git a/ompi/mpi/fortran/use-mpi-f08/mod/Makefile.am b/ompi/mpi/fortran/use-mpi-f08/mod/Makefile.am index 45b7753b2be..9bd3a7a4576 100644 --- a/ompi/mpi/fortran/use-mpi-f08/mod/Makefile.am +++ b/ompi/mpi/fortran/use-mpi-f08/mod/Makefile.am @@ -48,6 +48,7 @@ libforce_usempif08_internal_modules_to_be_built_la_SOURCES = \ mpi-f08-interfaces.F90 \ mpi-f08-interfaces-callbacks.F90 \ mpi-f08-callbacks.F90 \ + mpi-f08-constants.h \ pmpi-f08-interfaces.F90 config_h = \ diff --git a/ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-types.F90 b/ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-types.F90 index 9eabb36eb7c..4d8007c42c9 100644 --- a/ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-types.F90 +++ b/ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-types.F90 @@ -3,8 +3,9 @@ ! Copyright (c) 2009-2015 Cisco Systems, Inc. All rights reserved. ! Copyright (c) 2009-2012 Los Alamos National Security, LLC. ! All rights reserved. -! Copyright (c) 2015-2017 Research Organization for Information Science -! and Technology (RIST). All rights reserved. +! Copyright (c) 2015-2019 Research Organization for Information Science +! and Technology (RIST). All rights reserved. +! Copyright (c) 2018 FUJITSU LIMITED. All rights reserved. ! $COPYRIGHT$ ! ! This file creates mappings between MPI C types (e.g., MPI_Comm) and @@ -12,6 +13,7 @@ ! (type(MPI_Comm_world) and MPI_COMM_WORLD, respectively). #include "ompi/mpi/fortran/configure-fortran-output.h" +#include "ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-constants.h" module mpi_f08_types @@ -77,46 +79,47 @@ module mpi_f08_types ! Pre-defined handles ! - type(MPI_Comm), bind(C, name="ompi_f08_mpi_comm_world") OMPI_PROTECTED :: MPI_COMM_WORLD - type(MPI_Comm), bind(C, name="ompi_f08_mpi_comm_self") OMPI_PROTECTED :: MPI_COMM_SELF + type(MPI_Comm), parameter :: MPI_COMM_WORLD = MPI_Comm(OMPI_MPI_COMM_WORLD) + type(MPI_Comm), parameter :: MPI_COMM_SELF = MPI_Comm(OMPI_MPI_COMM_SELF) - type(MPI_Group), bind(C, name="ompi_f08_mpi_group_empty") OMPI_PROTECTED :: MPI_GROUP_EMPTY + type(MPI_Group), parameter :: MPI_GROUP_EMPTY = MPI_Group(OMPI_MPI_GROUP_EMPTY) - type(MPI_Errhandler), bind(C, name="ompi_f08_mpi_errors_are_fatal") OMPI_PROTECTED :: MPI_ERRORS_ARE_FATAL - type(MPI_Errhandler), bind(C, name="ompi_f08_mpi_errors_return") OMPI_PROTECTED :: MPI_ERRORS_RETURN + type(MPI_Errhandler), parameter :: MPI_ERRORS_ARE_FATAL = MPI_Errhandler(OMPI_MPI_ERRORS_ARE_FATAL) + type(MPI_Errhandler), parameter :: MPI_ERRORS_RETURN = MPI_Errhandler(OMPI_MPI_ERRORS_RETURN) - type(MPI_Message), bind(C, name="ompi_f08_mpi_message_no_proc") OMPI_PROTECTED :: MPI_MESSAGE_NO_PROC + type(MPI_Message), parameter :: MPI_MESSAGE_NO_PROC = MPI_Message(OMPI_MPI_MESSAGE_NO_PROC) - type(MPI_Info), bind(C, name="ompi_f08_mpi_info_env") OMPI_PROTECTED :: MPI_INFO_ENV + type(MPI_Info), parameter :: MPI_INFO_ENV = MPI_Info(OMPI_MPI_INFO_ENV) - type(MPI_Op), bind(C, name="ompi_f08_mpi_max" ) OMPI_PROTECTED :: MPI_MAX - type(MPI_Op), bind(C, name="ompi_f08_mpi_min" ) OMPI_PROTECTED :: MPI_MIN - type(MPI_Op), bind(C, name="ompi_f08_mpi_sum" ) OMPI_PROTECTED :: MPI_SUM - type(MPI_Op), bind(C, name="ompi_f08_mpi_prod" ) OMPI_PROTECTED :: MPI_PROD - type(MPI_Op), bind(C, name="ompi_f08_mpi_land" ) OMPI_PROTECTED :: MPI_LAND - type(MPI_Op), bind(C, name="ompi_f08_mpi_band" ) OMPI_PROTECTED :: MPI_BAND - type(MPI_Op), bind(C, name="ompi_f08_mpi_lor" ) OMPI_PROTECTED :: MPI_LOR - type(MPI_Op), bind(C, name="ompi_f08_mpi_bor" ) OMPI_PROTECTED :: MPI_BOR - type(MPI_Op), bind(C, name="ompi_f08_mpi_lxor" ) OMPI_PROTECTED :: MPI_LXOR - type(MPI_Op), bind(C, name="ompi_f08_mpi_bxor" ) OMPI_PROTECTED :: MPI_BXOR - type(MPI_Op), bind(C, name="ompi_f08_mpi_maxloc" ) OMPI_PROTECTED :: MPI_MAXLOC - type(MPI_Op), bind(C, name="ompi_f08_mpi_minloc" ) OMPI_PROTECTED :: MPI_MINLOC - type(MPI_Op), bind(C, name="ompi_f08_mpi_replace" ) OMPI_PROTECTED :: MPI_REPLACE + type(MPI_Op), parameter :: MPI_MAX = MPI_Op(OMPI_MPI_MAX) + type(MPI_Op), parameter :: MPI_MIN = MPI_Op(OMPI_MPI_MIN) + type(MPI_Op), parameter :: MPI_SUM = MPI_Op(OMPI_MPI_SUM) + type(MPI_Op), parameter :: MPI_PROD = MPI_Op(OMPI_MPI_PROD) + type(MPI_Op), parameter :: MPI_LAND = MPI_Op(OMPI_MPI_LAND) + type(MPI_Op), parameter :: MPI_BAND = MPI_Op(OMPI_MPI_BAND) + type(MPI_Op), parameter :: MPI_LOR = MPI_Op(OMPI_MPI_LOR) + type(MPI_Op), parameter :: MPI_BOR = MPI_Op(OMPI_MPI_BOR) + type(MPI_Op), parameter :: MPI_LXOR = MPI_Op(OMPI_MPI_LXOR) + type(MPI_Op), parameter :: MPI_BXOR = MPI_Op(OMPI_MPI_BXOR) + type(MPI_Op), parameter :: MPI_MAXLOC = MPI_Op(OMPI_MPI_MAXLOC) + type(MPI_Op), parameter :: MPI_MINLOC = MPI_Op(OMPI_MPI_MINLOC) + type(MPI_Op), parameter :: MPI_REPLACE = MPI_Op(OMPI_MPI_REPLACE) + type(MPI_Op), parameter :: MPI_NO_OP = MPI_Op(OMPI_MPI_NO_OP) ! ! NULL "handles" (indices) ! - type(MPI_Comm), bind(C, name="ompi_f08_mpi_comm_null") OMPI_PROTECTED :: MPI_COMM_NULL; - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_datatype_null") OMPI_PROTECTED :: MPI_DATATYPE_NULL; - type(MPI_Errhandler), bind(C, name="ompi_f08_mpi_errhandler_null") OMPI_PROTECTED :: MPI_ERRHANDLER_NULL; - type(MPI_Group), bind(C, name="ompi_f08_mpi_group_null") OMPI_PROTECTED :: MPI_GROUP_NULL; - type(MPI_Info), bind(C, name="ompi_f08_mpi_info_null") OMPI_PROTECTED :: MPI_INFO_NULL; - type(MPI_Message), bind(C, name="ompi_f08_mpi_message_null") OMPI_PROTECTED :: MPI_MESSAGE_NULL; - type(MPI_Op), bind(C, name="ompi_f08_mpi_op_null") OMPI_PROTECTED :: MPI_OP_NULL; - type(MPI_Request), bind(C, name="ompi_f08_mpi_request_null") OMPI_PROTECTED :: MPI_REQUEST_NULL; - type(MPI_Win), bind(C, name="ompi_f08_mpi_win_null") OMPI_PROTECTED :: MPI_WIN_NULL; - type(MPI_File), bind(C, name="ompi_f08_mpi_file_null") OMPI_PROTECTED :: MPI_FILE_NULL; + type(MPI_Comm), parameter :: MPI_COMM_NULL = MPI_Comm(OMPI_MPI_COMM_NULL) + type(MPI_Datatype), parameter :: MPI_DATATYPE_NULL = MPI_Datatype(OMPI_MPI_DATATYPE_NULL) + type(MPI_Errhandler), parameter:: MPI_ERRHANDLER_NULL = MPI_Errhandler(OMPI_MPI_ERRHANDLER_NULL) + type(MPI_Group), parameter :: MPI_GROUP_NULL = MPI_Group(OMPI_MPI_GROUP_NULL) + type(MPI_Info), parameter :: MPI_INFO_NULL = MPI_Info(OMPI_MPI_INFO_NULL) + type(MPI_Message), parameter :: MPI_MESSAGE_NULL = MPI_Message(OMPI_MPI_MESSAGE_NULL) + type(MPI_Op), parameter :: MPI_OP_NULL = MPI_Op(OMPI_MPI_OP_NULL) + type(MPI_Request), parameter :: MPI_REQUEST_NULL = MPI_Request(OMPI_MPI_REQUEST_NULL) + type(MPI_Win), parameter :: MPI_WIN_NULL = MPI_Win(OMPI_MPI_WIN_NULL) + type(MPI_File), parameter :: MPI_FILE_NULL = MPI_File(OMPI_MPI_FILE_NULL) ! ! Pre-defined datatype bindings @@ -125,39 +128,81 @@ module mpi_f08_types ! They are defined in ompi/runtime/ompi_mpi_init.c ! - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_aint") OMPI_PROTECTED :: MPI_AINT - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_byte") OMPI_PROTECTED :: MPI_BYTE - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_packed") OMPI_PROTECTED :: MPI_PACKED - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_ub") OMPI_PROTECTED :: MPI_UB - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_lb") OMPI_PROTECTED :: MPI_LB - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_character") OMPI_PROTECTED :: MPI_CHARACTER - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_logical") OMPI_PROTECTED :: MPI_LOGICAL - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer") OMPI_PROTECTED :: MPI_INTEGER - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer1") OMPI_PROTECTED :: MPI_INTEGER1 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer2") OMPI_PROTECTED :: MPI_INTEGER2 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer4") OMPI_PROTECTED :: MPI_INTEGER4 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer8") OMPI_PROTECTED :: MPI_INTEGER8 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer16") OMPI_PROTECTED :: MPI_INTEGER16 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_real") OMPI_PROTECTED :: MPI_REAL - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_real4") OMPI_PROTECTED :: MPI_REAL4 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_real8") OMPI_PROTECTED :: MPI_REAL8 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_real16") OMPI_PROTECTED :: MPI_REAL16 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_double_precision") OMPI_PROTECTED :: MPI_DOUBLE_PRECISION - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_complex") OMPI_PROTECTED :: MPI_COMPLEX - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_complex8") OMPI_PROTECTED :: MPI_COMPLEX8 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_complex16") OMPI_PROTECTED :: MPI_COMPLEX16 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_complex32") OMPI_PROTECTED :: MPI_COMPLEX32 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_double_complex") OMPI_PROTECTED :: MPI_DOUBLE_COMPLEX - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_2real") OMPI_PROTECTED :: MPI_2REAL - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_2double_precision") OMPI_PROTECTED :: MPI_2DOUBLE_PRECISION - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_2integer") OMPI_PROTECTED :: MPI_2INTEGER - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_2complex") OMPI_PROTECTED :: MPI_2COMPLEX - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_2double_complex") OMPI_PROTECTED :: MPI_2DOUBLE_COMPLEX - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_real2") OMPI_PROTECTED :: MPI_REAL2 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_logical1") OMPI_PROTECTED :: MPI_LOGICAL1 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_logical2") OMPI_PROTECTED :: MPI_LOGICAL2 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_logical4") OMPI_PROTECTED :: MPI_LOGICAL4 - type(MPI_Datatype), bind(C, name="ompi_f08_mpi_logical8") OMPI_PROTECTED :: MPI_LOGICAL8 + type(MPI_Datatype), parameter :: MPI_AINT = MPI_Datatype(OMPI_MPI_AINT) + type(MPI_Datatype), parameter :: MPI_BYTE = MPI_Datatype(OMPI_MPI_BYTE) + type(MPI_Datatype), parameter :: MPI_PACKED = MPI_Datatype(OMPI_MPI_PACKED) + type(MPI_Datatype), parameter :: MPI_UB = MPI_Datatype(OMPI_MPI_UB) + type(MPI_Datatype), parameter :: MPI_LB = MPI_Datatype(OMPI_MPI_LB) + type(MPI_Datatype), parameter :: MPI_CHAR = MPI_Datatype(OMPI_MPI_CHAR) + type(MPI_Datatype), parameter :: MPI_SIGNED_CHAR = MPI_Datatype(OMPI_MPI_SIGNED_CHAR) + type(MPI_Datatype), parameter :: MPI_UNSIGNED_CHAR = MPI_Datatype(OMPI_MPI_UNSIGNED_CHAR) + type(MPI_Datatype), parameter :: MPI_WCHAR = MPI_Datatype(OMPI_MPI_WCHAR) + type(MPI_Datatype), parameter :: MPI_CHARACTER = MPI_Datatype(OMPI_MPI_CHARACTER) + type(MPI_Datatype), parameter :: MPI_LOGICAL = MPI_Datatype(OMPI_MPI_LOGICAL) + type(MPI_Datatype), parameter :: MPI_INT = MPI_Datatype(OMPI_MPI_INT) + type(MPI_Datatype), parameter :: MPI_INT16_T = MPI_Datatype(OMPI_MPI_INT16_T) + type(MPI_Datatype), parameter :: MPI_INT32_T = MPI_Datatype(OMPI_MPI_INT32_T) + type(MPI_Datatype), parameter :: MPI_INT64_T = MPI_Datatype(OMPI_MPI_INT64_T) + type(MPI_Datatype), parameter :: MPI_INT8_T = MPI_Datatype(OMPI_MPI_INT8_T) + type(MPI_Datatype), parameter :: MPI_UINT16_T = MPI_Datatype(OMPI_MPI_UINT16_T) + type(MPI_Datatype), parameter :: MPI_UINT32_T = MPI_Datatype(OMPI_MPI_UINT32_T) + type(MPI_Datatype), parameter :: MPI_UINT64_T = MPI_Datatype(OMPI_MPI_UINT64_T) + type(MPI_Datatype), parameter :: MPI_UINT8_T = MPI_Datatype(OMPI_MPI_UINT8_T) + type(MPI_Datatype), parameter :: MPI_SHORT = MPI_Datatype(OMPI_MPI_SHORT) + type(MPI_Datatype), parameter :: MPI_UNSIGNED_SHORT = MPI_Datatype(OMPI_MPI_UNSIGNED_SHORT) + type(MPI_Datatype), parameter :: MPI_UNSIGNED = MPI_Datatype(OMPI_MPI_UNSIGNED) + type(MPI_Datatype), parameter :: MPI_LONG = MPI_Datatype(OMPI_MPI_LONG) + type(MPI_Datatype), parameter :: MPI_UNSIGNED_LONG = MPI_Datatype(OMPI_MPI_UNSIGNED_LONG) + type(MPI_Datatype), parameter :: MPI_LONG_LONG = MPI_Datatype(OMPI_MPI_LONG_LONG) + type(MPI_Datatype), parameter :: MPI_UNSIGNED_LONG_LONG = MPI_Datatype(OMPI_MPI_UNSIGNED_LONG_LONG) + type(MPI_Datatype), parameter :: MPI_LONG_LONG_INT = MPI_Datatype(OMPI_MPI_LONG_LONG_INT) + type(MPI_Datatype), parameter :: MPI_INTEGER = MPI_Datatype(OMPI_MPI_INTEGER) + type(MPI_Datatype), parameter :: MPI_INTEGER1 = MPI_Datatype(OMPI_MPI_INTEGER1) + type(MPI_Datatype), parameter :: MPI_INTEGER2 = MPI_Datatype(OMPI_MPI_INTEGER2) + type(MPI_Datatype), parameter :: MPI_INTEGER4 = MPI_Datatype(OMPI_MPI_INTEGER4) + type(MPI_Datatype), parameter :: MPI_INTEGER8 = MPI_Datatype(OMPI_MPI_INTEGER8) + type(MPI_Datatype), parameter :: MPI_INTEGER16 = MPI_Datatype(OMPI_MPI_INTEGER16) + type(MPI_Datatype), parameter :: MPI_FLOAT = MPI_Datatype(OMPI_MPI_FLOAT) + type(MPI_Datatype), parameter :: MPI_DOUBLE = MPI_Datatype(OMPI_MPI_DOUBLE) + type(MPI_Datatype), parameter :: MPI_LONG_DOUBLE = MPI_Datatype(OMPI_MPI_LONG_DOUBLE) + type(MPI_Datatype), parameter :: MPI_REAL = MPI_Datatype(OMPI_MPI_REAL) + type(MPI_Datatype), parameter :: MPI_REAL4 = MPI_Datatype(OMPI_MPI_REAL4) + type(MPI_Datatype), parameter :: MPI_REAL8 = MPI_Datatype(OMPI_MPI_REAL8) + type(MPI_Datatype), parameter :: MPI_REAL16 = MPI_Datatype(OMPI_MPI_REAL16) + type(MPI_Datatype), parameter :: MPI_DOUBLE_PRECISION = MPI_Datatype(OMPI_MPI_DOUBLE_PRECISION) + type(MPI_Datatype), parameter :: MPI_C_COMPLEX = MPI_Datatype(OMPI_MPI_C_COMPLEX) + type(MPI_Datatype), parameter :: MPI_C_FLOAT_COMPLEX = MPI_Datatype(OMPI_MPI_C_FLOAT_COMPLEX) + type(MPI_Datatype), parameter :: MPI_C_DOUBLE_COMPLEX = MPI_Datatype(OMPI_MPI_C_DOUBLE_COMPLEX) + type(MPI_Datatype), parameter :: MPI_C_LONG_DOUBLE_COMPLEX = MPI_Datatype(OMPI_MPI_C_LONG_DOUBLE_COMPLEX) + type(MPI_Datatype), parameter :: MPI_CXX_COMPLEX = MPI_Datatype(OMPI_MPI_CXX_COMPLEX) + type(MPI_Datatype), parameter :: MPI_CXX_FLOAT_COMPLEX = MPI_Datatype(OMPI_MPI_CXX_FLOAT_COMPLEX) + type(MPI_Datatype), parameter :: MPI_CXX_DOUBLE_COMPLEX = MPI_Datatype(OMPI_MPI_CXX_DOUBLE_COMPLEX) + type(MPI_Datatype), parameter :: MPI_CXX_LONG_DOUBLE_COMPLEX = MPI_Datatype(OMPI_MPI_CXX_LONG_DOUBLE_COMPLEX) + type(MPI_Datatype), parameter :: MPI_COMPLEX = MPI_Datatype(OMPI_MPI_COMPLEX) + type(MPI_Datatype), parameter :: MPI_COMPLEX8 = MPI_Datatype(OMPI_MPI_COMPLEX8) + type(MPI_Datatype), parameter :: MPI_COMPLEX16 = MPI_Datatype(OMPI_MPI_COMPLEX16) + type(MPI_Datatype), parameter :: MPI_COMPLEX32 = MPI_Datatype(OMPI_MPI_COMPLEX32) + type(MPI_Datatype), parameter :: MPI_DOUBLE_COMPLEX = MPI_Datatype(OMPI_MPI_DOUBLE_COMPLEX) + type(MPI_Datatype), parameter :: MPI_FLOAT_INT = MPI_Datatype(OMPI_MPI_FLOAT_INT) + type(MPI_Datatype), parameter :: MPI_DOUBLE_INT = MPI_Datatype(OMPI_MPI_DOUBLE_INT) + type(MPI_Datatype), parameter :: MPI_2REAL = MPI_Datatype(OMPI_MPI_2REAL) + type(MPI_Datatype), parameter :: MPI_2DOUBLE_PRECISION = MPI_Datatype(OMPI_MPI_2DOUBLE_PRECISION) + type(MPI_Datatype), parameter :: MPI_2INT = MPI_Datatype(OMPI_MPI_2INT) + type(MPI_Datatype), parameter :: MPI_SHORT_INT = MPI_Datatype(OMPI_MPI_SHORT_INT) + type(MPI_Datatype), parameter :: MPI_LONG_INT = MPI_Datatype(OMPI_MPI_LONG_INT) + type(MPI_Datatype), parameter :: MPI_LONG_DOUBLE_INT = MPI_Datatype(OMPI_MPI_LONG_DOUBLE_INT) + type(MPI_Datatype), parameter :: MPI_2INTEGER = MPI_Datatype(OMPI_MPI_2INTEGER) + type(MPI_Datatype), parameter :: MPI_2COMPLEX = MPI_Datatype(OMPI_MPI_2COMPLEX) + type(MPI_Datatype), parameter :: MPI_2DOUBLE_COMPLEX = MPI_Datatype(OMPI_MPI_2DOUBLE_COMPLEX) + type(MPI_Datatype), parameter :: MPI_REAL2 = MPI_Datatype(OMPI_MPI_REAL2) + type(MPI_Datatype), parameter :: MPI_LOGICAL1 = MPI_Datatype(OMPI_MPI_LOGICAL1) + type(MPI_Datatype), parameter :: MPI_LOGICAL2 = MPI_Datatype(OMPI_MPI_LOGICAL2) + type(MPI_Datatype), parameter :: MPI_LOGICAL4 = MPI_Datatype(OMPI_MPI_LOGICAL4) + type(MPI_Datatype), parameter :: MPI_LOGICAL8 = MPI_Datatype(OMPI_MPI_LOGICAL8) + type(MPI_Datatype), parameter :: MPI_C_BOOL = MPI_Datatype(OMPI_MPI_C_BOOL) + type(MPI_Datatype), parameter :: MPI_CXX_BOOL = MPI_Datatype(OMPI_MPI_CXX_BOOL) + type(MPI_Datatype), parameter :: MPI_COUNT = MPI_Datatype(OMPI_MPI_COUNT) + type(MPI_Datatype), parameter :: MPI_OFFSET = MPI_Datatype(OMPI_MPI_OFFSET) !... Special sentinel constants !------------------------------