1
1

fortran/use-mpi-f08: revamp constant declarations

In order to work around an issue with flang based compilers,
avoid declaring bind(C) constants and use plain Fortran parameter
instead.

For example,
type(MPI_Comm), bind(C, name="ompi_f08_mpi_comm_world") OMPI_PROTECTED :: MPI_COMM_WORLD
is changed to
type(MPI_Comm), parameter :: MPI_COMM_WORLD = MPI_Comm(OMPI_MPI_COMM_WORLD)

Note that in order to preserve ABI compatibility, ompi/mpi/fortran/use-mpi-f08/constants.{c,h}
have been kept even if its symbols are no more referenced by Open MPI.

Refs. open-mpi/ompi#7091

Signed-off-by: Gilles Gouaillardet <gilles@rist.or.jp>

(back-ported from commit open-mpi/ompi@b10a60a5a9)
Этот коммит содержится в:
Gilles Gouaillardet 2019-10-24 11:05:29 +09:00
родитель 56d2865cf6
Коммит 23ed2f44a2
4 изменённых файлов: 171 добавлений и 110 удалений

1
.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

Просмотреть файл

@ -1,7 +1,7 @@
#!/usr/bin/env perl
#
# Copyright (c) 2011-2014 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2016-2017 Research Organization for Information Science
# 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 @@ $output .= "#endif /* USE_MPI_F08_CONSTANTS_H */\n";
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);

Просмотреть файл

@ -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 = \

Просмотреть файл

@ -3,7 +3,7 @@
! 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-2018 Research Organization for Information Science
! Copyright (c) 2015-2019 Research Organization for Information Science
! and Technology (RIST). All rights reserved.
! Copyright (c) 2018 FUJITSU LIMITED. All rights reserved.
! $COPYRIGHT$
@ -13,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
@ -78,47 +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), bind(C, name="ompi_f08_mpi_no_op" ) OMPI_PROTECTED :: MPI_NO_OP
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_COMM_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
@ -127,81 +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_char") OMPI_PROTECTED :: MPI_CHAR
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_signed_char") OMPI_PROTECTED :: MPI_SIGNED_CHAR
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_unsigned_char") OMPI_PROTECTED :: MPI_UNSIGNED_CHAR
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_wchar") OMPI_PROTECTED :: MPI_WCHAR
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_int") OMPI_PROTECTED :: MPI_INT
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_int16") OMPI_PROTECTED :: MPI_INT16_T
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_int32") OMPI_PROTECTED :: MPI_INT32_T
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_int64") OMPI_PROTECTED :: MPI_INT64_T
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_int8") OMPI_PROTECTED :: MPI_INT8_T
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_uint16") OMPI_PROTECTED :: MPI_UINT16_T
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_uint32") OMPI_PROTECTED :: MPI_UINT32_T
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_uint64") OMPI_PROTECTED :: MPI_UINT64_T
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_uint8") OMPI_PROTECTED :: MPI_UINT8_T
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_short") OMPI_PROTECTED :: MPI_SHORT
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_unsigned_short") OMPI_PROTECTED :: MPI_UNSIGNED_SHORT
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_unsigned") OMPI_PROTECTED :: MPI_UNSIGNED
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_long") OMPI_PROTECTED :: MPI_LONG
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_unsigned_long") OMPI_PROTECTED :: MPI_UNSIGNED_LONG
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_long_long") OMPI_PROTECTED :: MPI_LONG_LONG
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_unsigned_long_long") OMPI_PROTECTED :: MPI_UNSIGNED_LONG_LONG
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_long_long_int") OMPI_PROTECTED :: MPI_LONG_LONG_INT
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_float") OMPI_PROTECTED :: MPI_FLOAT
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_double") OMPI_PROTECTED :: MPI_DOUBLE
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_long_double") OMPI_PROTECTED :: MPI_LONG_DOUBLE
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_c_complex") OMPI_PROTECTED :: MPI_C_COMPLEX
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_c_float_complex") OMPI_PROTECTED :: MPI_C_FLOAT_COMPLEX
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_c_double_complex") OMPI_PROTECTED :: MPI_C_DOUBLE_COMPLEX
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_c_long_double_complex") OMPI_PROTECTED :: MPI_C_LONG_DOUBLE_COMPLEX
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_cxx_complex") OMPI_PROTECTED :: MPI_CXX_COMPLEX
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_cxx_float_complex") OMPI_PROTECTED :: MPI_CXX_FLOAT_COMPLEX
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_cxx_double_complex") OMPI_PROTECTED :: MPI_CXX_DOUBLE_COMPLEX
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_cxx_long_double_complex") OMPI_PROTECTED :: MPI_CXX_LONG_DOUBLE_COMPLEX
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_float_int") OMPI_PROTECTED :: MPI_FLOAT_INT
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_double_int") OMPI_PROTECTED :: MPI_DOUBLE_INT
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_2int") OMPI_PROTECTED :: MPI_2INT
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_short_int") OMPI_PROTECTED :: MPI_SHORT_INT
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_long_int") OMPI_PROTECTED :: MPI_LONG_INT
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_long_double_int") OMPI_PROTECTED :: MPI_LONG_DOUBLE_INT
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), bind(C, name="ompi_f08_mpi_c_bool") OMPI_PROTECTED :: MPI_C_BOOL
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_cxx_bool") OMPI_PROTECTED :: MPI_CXX_BOOL
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_count") OMPI_PROTECTED :: MPI_COUNT
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_offset") OMPI_PROTECTED :: MPI_OFFSET
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_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
!------------------------------